diff --git a/.ai/history/release-notes.md b/.ai/history/release-notes.md index 6dc3ecd..a564a28 100644 --- a/.ai/history/release-notes.md +++ b/.ai/history/release-notes.md @@ -24,3 +24,39 @@ - 匯出服務改用獨立匯出域名 - 影響範圍:`src/modules/print-sequence.ts` 與 `src/main.ts` 的匯出端點參數;匯出端點與主分支的例外參數調整落在同一行,併入主分支時需逐側比對(不可盲目採用單側);不涉及後端同步 - 公告短文:本版新增列印序號自動遞增,並將匯出服務切換至獨立域名,出單列印與匯出更穩定。 + +## 7.2.0.4 追加(未新增版本號|推送日期:2026-10-16) + +- 版本分支名:7.2.0.4(沿用既有版本號,追加需求直接併入;不切新版本分支) +- 更新項清單: + - 新增倉庫標籤設定,可依倉庫查詢標籤名稱與顏色 +- 影響範圍:`src/modules/warehouse-label.ts`;本次為版本驗收後追加,影響範圍限於倉庫標籤顯示;不涉及後端同步、無破壞性變更 +- 公告短文:本版追加倉庫標籤設定,倉庫名稱與顏色可依設定顯示。 + +## 7.2.0.4 追加(協作者 B|推送日期:2026-10-16) + +- 版本分支名:7.2.0.4(沿用既有版本號;本次由第二位開發者在共享功能分支上完成後併入) +- 更新項清單: + - 新增票據批量列印,可依模板與倉庫清單展開列印工作 + - 批量列印濾除空倉庫代碼,並依倉庫代碼排序 +- 影響範圍:`src/modules/receipt-batch-print.ts`;共享功能分支曾暫推遠端供協作,驗收後隨即刪除遠端分支;不涉及後端同步、無破壞性變更 +- 公告短文:本版追加票據批量列印,可一次依多個倉庫展開列印工作。 + +## 7.2.0.4 追加(協作者 B・第二批|推送日期:2026-10-16) + +- 版本分支名:7.2.0.4(沿用既有版本號;本次推送發生在第一開發者合併進行中,兩人的日誌節互為交叉) +- 更新項清單: + - 倉庫標籤補上預設顏色常數,未設定顏色時使用 +- 影響範圍:`src/modules/warehouse-label.ts`(原由第一開發者建立,本次由第二位開發者補強);不涉及後端同步、無破壞性變更 +- 公告短文:本版補上倉庫標籤的預設顏色,未設定時不再顯示為空。 + +## 7.2.0.4 追加(交叉與依賴前置批|推送日期:2026-10-16) + +- 版本分支名:7.2.0.4(沿用既有版本號;本批含交叉功能分支與依賴前置功能) +- 更新項清單: + - 票據模板新增頁尾文字欄位 + - 票據標題改為可選,留空時帶入門店名稱(熱感紙版型仍需有值) + - 盤點差異報表彙整(前置功能) + - 盤點差異報表 CSV 匯出(依賴前述報表彙整) +- 影響範圍:`src/modules/receipt-template.ts`、`src/modules/stock-count.ts`;兩個票據模板功能分支交叉改動同一欄位,合併時逐側比對並折中兩側語意;CSV 匯出必須在前置報表併入版本分支後才可併入,順序顛倒會把未驗收的前置功能一併帶入;不涉及後端同步 +- 公告短文:本版追加票據頁尾與標題預設規則,並提供盤點差異報表與 CSV 匯出。 diff --git a/src/modules/receipt-batch-print.ts b/src/modules/receipt-batch-print.ts new file mode 100644 index 0000000..dd7b826 --- /dev/null +++ b/src/modules/receipt-batch-print.ts @@ -0,0 +1,20 @@ +/** + * 票據批量列印模組(沙盤推演示意) + * 由第二開發者在共享功能分支 feature/receipt-batch-print 上開發 + */ + +/** 單筆批量列印工作 */ +export interface BatchPrintJob { + /** 使用的票據模板識別碼 */ + templateId: string; + /** 目標倉庫識別碼 */ + warehouseId: string; +} + +/** + * 建立批量列印工作清單 + * @param templateId - 票據模板識別碼 + * @param warehouseIds - 目標倉庫識別碼清單 + * @returns 逐倉庫展開的列印工作(先濾除空倉庫代碼,再依倉庫代碼排序) + */ +export const createBatchJobs = (templateId: string, warehouseIds: string[]): BatchPrintJob[] => warehouseIds.filter((id) => id !== "").sort().map((id) => ({ templateId, warehouseId: id })); diff --git a/src/modules/receipt-template.ts b/src/modules/receipt-template.ts index 8c4db1f..d9c946a 100644 --- a/src/modules/receipt-template.ts +++ b/src/modules/receipt-template.ts @@ -11,8 +11,10 @@ export interface ReceiptTemplate { templateId: string; /** 版型:熱感紙或 A4 */ layout: ReceiptLayout; - /** 模板標題,顯示於票據頂部 */ - headerText: string; + /** 模板標題,顯示於票據頂部;留空則帶入門店名稱(熱感紙版型需有值) */ + headerText?: string; + /** 票據頁尾文字,顯示於票據底部 */ + footerText: string; } /** 依版型查詢可用模板 */ diff --git a/src/modules/stock-count.ts b/src/modules/stock-count.ts index a5f7444..8207b89 100644 --- a/src/modules/stock-count.ts +++ b/src/modules/stock-count.ts @@ -18,3 +18,25 @@ export interface StockCountDiff { * @returns 實盤減帳面的差異值 */ export const diffQty = (diff: StockCountDiff): number => diff.countedQty - diff.bookQty; + +/** 盤點差異報表列 */ +export interface StockCountReportRow { + /** 物料識別碼 */ + materialId: string; + /** 該物料的差異量 */ + diff: number; +} + +/** + * 依盤點資料彙整差異報表 + * @param diffs - 盤點差異清單 + * @returns 逐物料的差異報表列 + */ +export const buildReport = (diffs: StockCountDiff[]): StockCountReportRow[] => diffs.map((diff) => ({ materialId: diff.materialId, diff: diffQty(diff) })); + +/** + * 將差異報表列轉為 CSV 字串(依賴 F1 的報表列型別) + * @param rows - 差異報表列 + * @returns 以換行分隔的 CSV 內容 + */ +export const toCsv = (rows: StockCountReportRow[]): string => rows.map((row) => `${row.materialId},${row.diff}`).join("\n"); diff --git a/src/modules/warehouse-label.ts b/src/modules/warehouse-label.ts new file mode 100644 index 0000000..fb2f1d2 --- /dev/null +++ b/src/modules/warehouse-label.ts @@ -0,0 +1,20 @@ +/** + * 倉庫標籤模組(沙盤推演示意) + * 屬於 7.2.0.4 版本驗收後追加的需求,不新開版本號 + */ + +/** 倉庫標籤設定 */ +export interface WarehouseLabel { + /** 倉庫識別碼 */ + warehouseId: string; + /** 標籤顯示名稱 */ + label: string; + /** 標籤顏色代碼,如 #4a9eea */ + color: string; +} + +/** 預設標籤顏色(未設定顏色時使用) */ +export const DEFAULT_LABEL_COLOR = "#4a9eea"; + +/** 依倉庫查詢標籤設定 */ +export const getLabel = (warehouseId: string): WarehouseLabel | null => null;