|
- "use client";
-
- import { NEXT_PUBLIC_API_URL } from "@/config/api";
- import { clientAuthFetch } from "@/app/utils/clientAuthFetch";
- import type { ExpiryItemFilter } from "@/app/api/stockIssue/actions";
-
- /** Result tab currently shown; backend may filter the workbook by this bucket. */
- export type ExpiryExportBucket = "expired" | "today" | "upcoming";
-
- export interface ExportExpiryItemExcelParams extends ExpiryItemFilter {
- bucket?: ExpiryExportBucket;
- }
-
- /**
- * FP-MTMS Version Checklist | Functions Ref. No. 74 | v1.0.2 | 2026-09-07
- * GET /pickExecution/issues/expiryItem/excel
- * Query: itemCode, itemName, lotNo, daysAhead, bucket (expired|today|upcoming; omit for all categories)
- * Response: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
- * Optional Content-Disposition filename.
- */
- export async function exportExpiryItemExcel(
- filters: ExportExpiryItemExcelParams,
- ): Promise<void> {
- const params = new URLSearchParams();
- if (filters.itemCode) params.set("itemCode", filters.itemCode);
- if (filters.itemName) params.set("itemName", filters.itemName);
- if (filters.lotNo) params.set("lotNo", filters.lotNo);
- if (filters.daysAhead != null) params.set("daysAhead", String(filters.daysAhead));
- if (filters.bucket) params.set("bucket", filters.bucket);
-
- const queryString = params.toString();
- const url = `${NEXT_PUBLIC_API_URL}/pickExecution/issues/expiryItem/excel${queryString ? `?${queryString}` : ""}`;
-
- const response = await clientAuthFetch(url, {
- method: "GET",
- headers: {
- Accept: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
- },
- });
-
- if (response.status === 401 || response.status === 403) {
- throw new Error("Unauthorized");
- }
- if (!response.ok) {
- throw new Error(`HTTP error! status: ${response.status}`);
- }
-
- const blob = await response.blob();
- const downloadUrl = window.URL.createObjectURL(blob);
- const link = document.createElement("a");
- link.href = downloadUrl;
-
- const contentDisposition = response.headers.get("Content-Disposition");
- let fileName = "expiry-items.xlsx";
- if (contentDisposition?.includes("filename=")) {
- fileName = contentDisposition
- .split("filename=")[1]
- .split(";")[0]
- .replace(/"/g, "");
- }
-
- link.setAttribute("download", fileName);
- document.body.appendChild(link);
- link.click();
- link.remove();
- window.URL.revokeObjectURL(downloadUrl);
- }
|