export type FieldType = 'date' | 'text' | 'select' | 'number' | 'checkbox'; import { NEXT_PUBLIC_API_URL } from "@/config/api"; export interface ReportField { label: string; name: string; type: FieldType; placeholder?: string; required: boolean; options?: { label: string; value: string }[]; // For select types multiple?: boolean; // For select types - allow multiple selection dynamicOptions?: boolean; // For select types - load options dynamically dynamicOptionsEndpoint?: string; // API endpoint to fetch dynamic options dynamicOptionsParam?: string; // Parameter name to pass when fetching options allowInput?: boolean; // Allow user to input custom values (for select types) /** When checkbox is checked, disable these field names (by `name`) */ disablesFieldsWhenChecked?: string[]; } export type ReportResponseType = 'pdf' | 'excel'; export interface ReportDefinition { id: string; title: string; apiEndpoint: string; /** When 'excel', report page fetches JSON and builds .xlsx for download. Default 'pdf'. */ responseType?: ReportResponseType; fields: ReportField[]; } export const REPORTS: ReportDefinition[] = [ //{ // id: "rep-001", // title: "報告 1", // apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-report1`, // fields: [ // { label: "From Date", name: "fromDate", type: "date", required: true }, // Mandatory // { label: "To Date", name: "toDate", type: "date", required: true }, // Mandatory // { label: "Item Code", name: "itemCode", type: "text", required: false, placeholder: "e.g. FG"}, // { label: "Item Type", name: "itemType", type: "select", required: false, // options: [ // { label: "FG", value: "FG" }, // { label: "Material", value: "Mat" } // ] }, // ] //}, //{ // id: "rep-002", // title: "報告 2", // apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-report2`, // fields: [ // { label: "Target Date", name: "targetDate", type: "date", required: false }, // { label: "Item Code", name: "itemCode", type: "text", required: false }, // { label: "Shift", name: "shift", type: "select", options: [ // { label: "Day", value: "D" }, // { label: "Night", value: "N" } // ], required: false} // ] //}, //{ // id: "rep-003", // title: "報告 3", // apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-report3`, // fields: [ // { label: "From Date", name: "fromDate", type: "date", required: true }, // Mandatory // { label: "To Date", name: "toDate", type: "date", required: true }, // Mandatory // { label: "Item Code", name: "itemCode", type: "text", required: false, placeholder: "e.g. FG"}, // { label: "Item Type", name: "itemType", type: "select", required: false, // options: [ // { label: "FG", value: "FG" }, // { label: "Material", value: "Mat" } // ] }, // ] //}, { id: "rep-004", title: "入倉追蹤報告", apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-stock-in-traceability`, fields: [ { label: "入倉日期:由 Last In Date Start", name: "lastInDateStart", type: "date", required: false }, { label: "入倉日期:至 Last In Date End", name: "lastInDateEnd", type: "date", required: false }, { label: "貨品編號 Item Code", name: "itemCode", type: "text", required: false}, ] }, { id: "rep-008", title: "成品出倉報告", apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-fg-delivery-report`, fields: [ { label: "出貨日期:由 Last Out Date Start", name: "lastOutDateStart", type: "date", required: false }, { label: "出貨日期:至 Last Out Date End", name: "lastOutDateEnd", type: "date", required: false }, { label: "年份 Year", name: "year", type: "text", required: false, placeholder: "e.g. 2026" }, { label: "貨品編號 Item Code", name: "itemCode", type: "text", required: false}, ] }, /* { id: "rep-012", title: "庫存盤點報告", apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-stock-take-variance`, fields: [ { label: "盤點日期:由 Stock Take Date Start", name: "stockTakeDateStart", type: "date", required: false }, { label: "盤點日期:至 Stock Take Date End", name: "stockTakeDateEnd", type: "date", required: false }, { label: "貨品編號 Item Code", name: "itemCode", type: "text", required: false}, ] }, */ { id: "rep-012", title: "庫存盤點報告", apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-stock-take-variance-v2`, fields: [ { label: "盤點輪次(可多選)", name: "stockTakeRoundId", type: "select", required: true, multiple: true, dynamicOptions: true, dynamicOptionsEndpoint: `${NEXT_PUBLIC_API_URL}/report/stock-take-rounds`, options: [] }, { label: "貨品編號", name: "itemCode", type: "text", required: false}, { label: "倉庫樓層", name: "store_id", type: "select", required: false, options: [ { label: "全部", value: "All" }, { label: "1F", value: "1F" }, { label: "2F", value: "2F" }, { label: "3F", value: "3F" }, { label: "4F", value: "4F" } ], }, { label: "狀態", name: "status", type: "select", required: false, options: [ { label: "全部", value: "All" }, { label: "待盤點", value: "pending" }, { label: "已審核", value: "completed" } ], }, { label: "類型", name: "type", type: "select", required: false, multiple: true, options: [ { label: "全部", value: "All" }, { label: "PP", value: "PP" }, { label: "PF", value: "PF" }, { label: "TOA", value: "TOA" }, { label: "工廠生產", value: "工廠生產" }, { label: "倉存調整", value: "倉存調整" }, { label: "期初存貨", value: "期初存貨" }, { label: "採購入倉", value: "採購入倉" }, { label: "其他入倉", value: "其他入倉" }, ], }, ] }, { id: "rep-011", title: "庫存明細報告", apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-stock-ledger`, fields: [ { label: "庫存日期:由 Last In Date Start", name: "lastInDateStart", type: "date", required: false }, { label: "庫存日期:至 Last In Date End", name: "lastInDateEnd", type: "date", required: false }, { label: "貨品編號 Item Code", name: "itemCode", type: "text", required: false}, ] }, /* { id: "rep-007", title: "庫存結餘報告", apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-stock-balance`, fields: [ { label: "盤點輪次 Stock Take Round", name: "stockTakeRoundId", type: "select", required: true, dynamicOptions: true, dynamicOptionsEndpoint: `${NEXT_PUBLIC_API_URL}/report/stock-take-rounds`, options: [] }, { label: "貨品編號 Item Code", name: "itemCode", type: "text", required: false}, ] }, */ { id: "rep-007", title: "庫存結餘報告", apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-stock-balance`, fields: [ { label: "庫存日期: Stock Date", name: "stockDate", type: "date", required: true }, { label: "貨品編號 Item Code", name: "itemCode", type: "text", required: false}, ] }, { id: "rep-014", title: "PO入倉記錄報告", apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/grn-report`, responseType: "excel", fields: [ { label: "收貨日期:由 Receipt Date Start", name: "receiptDateStart", type: "date", required: false }, { label: "收貨日期:至 Receipt Date End", name: "receiptDateEnd", type: "date", required: false }, { label: "貨品編號 Item Code", name: "itemCode", type: "text", required: false }, ], }, { id: "rep-009", title: "成品出倉追蹤報告", apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-fg-stock-out-traceability`, fields: [ { label: "出貨日期:由 Last Out Date Start", name: "lastOutDateStart", type: "date", required: false }, { label: "出貨日期:至 Last Out Date End", name: "lastOutDateEnd", type: "date", required: false }, { label: "貨品編號 Item Code", name: "itemCode", type: "text", required: false}, { label: "提料人 Handler", name: "handler", type: "select", required: false, multiple: true, dynamicOptions: true, dynamicOptionsEndpoint: `${NEXT_PUBLIC_API_URL}/report/fg-stock-out-traceability-handlers`, options: [] }, ] }, { id: "rep-010", title: "庫存品質檢測報告", apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-item-qc-fail`, fields: [ { label: "QC 不合格日期:由 Last In Date Start", name: "lastInDateStart", type: "date", required: false }, { label: "QC 不合格日期:至 Last In Date End", name: "lastInDateEnd", type: "date", required: false }, { label: "貨品編號 Item Code", name: "itemCode", type: "text", required: false}, ] }, { id: "rep-013", title: "貨品出倉追蹤報告", apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-material-stock-out-traceability`, fields: [ { label: "出倉日期:由 Last Out Date Start", name: "lastOutDateStart", type: "date", required: false }, { label: "出倉日期:至 Last Out Date End", name: "lastOutDateEnd", type: "date", required: false }, { label: "貨品編號 Item Code", name: "itemCode", type: "text", required: false}, { label: "提料人 Handler", name: "handler", type: "select", required: false, multiple: true, dynamicOptions: true, dynamicOptionsEndpoint: `${NEXT_PUBLIC_API_URL}/report/material-stock-out-traceability-handlers`, options: [] }, ] }, { id: "rep-006", title: "庫存材料消耗趨勢報告", apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-stock-item-consumption-trend`, fields: [ { label: "材料消耗日期:由 Last Out Date Start", name: "lastOutDateStart", type: "date", required: false }, { label: "材料消耗日期:至 Last Out Date End", name: "lastOutDateEnd", type: "date", required: false }, { label: "年份 Year", name: "year", type: "text", required: false, placeholder: "e.g. 2026" }, { label: "類別 Category", name: "stockCategory", type: "select", required: false, multiple: true, options: [ { label: "All", value: "All" }, { label: "MAT", value: "MAT" }, { label: "WIP", value: "WIP" }, { label: "NM", value: "NM" }, { label: "FG", value: "FG" }, { label: "CMB", value: "CMB" } ] }, { label: "貨品編號 Item Code", name: "itemCode", type: "select", required: false, multiple: true, allowInput: true, dynamicOptions: true, dynamicOptionsEndpoint: `${NEXT_PUBLIC_API_URL}/report/stock-item-code-prefixes`, dynamicOptionsParam: "stockCategory", options: [] }, ] }, { id: "rep-005", title: "成品/半成品生產分析報告", apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/print-semi-fg-production-analysis`, fields: [ { label: "完成生產日期:由 Last Out Date Start", name: "lastOutDateStart", type: "date", required: false, placeholder: "dd/mm/yyyy" }, { label: "完成生產日期:至 Last Out Date End", name: "lastOutDateEnd", type: "date", required: false, placeholder: "dd/mm/yyyy" }, { label: "年份 Year", name: "year", type: "text", required: false, placeholder: "e.g. 2026" }, { label: "類別 Category", name: "stockCategory", type: "select", required: false, multiple: true, options: [ { label: "All", value: "All" }, { label: "WIP", value: "WIP" }, { label: "FG", value: "FG" }, ] }, { label: "貨品編號 Item Code", name: "itemCode", type: "select", required: false, multiple: true, allowInput: true, dynamicOptions: true, dynamicOptionsEndpoint: `${NEXT_PUBLIC_API_URL}/report/semi-fg-item-codes`, dynamicOptionsParam: "stockCategory", options: [] }, ] }, { id: "rep-015", title: "M18 BOM Shop 同步記錄", apiEndpoint: `${NEXT_PUBLIC_API_URL}/report/bom-shop-sync-history`, responseType: "excel", fields: [ { label: "同步日期:由 Sync Date Start", name: "syncDateStart", type: "date", required: false }, { label: "同步日期:至 Sync Date End", name: "syncDateEnd", type: "date", required: false }, { label: "成品貨號 Finished Item Code", name: "finishedItemCode", type: "text", required: false }, { label: "同步狀態 Sync Status", name: "syncStatus", type: "select", required: false, options: [ { label: "全部 All", value: "all" }, { label: "成功 Success", value: "success" }, { label: "失敗 Failed", value: "failed" }, ], }, ], }, ]