From b28c682da95322d3b7f36f7827202b5c9fc2bcea Mon Sep 17 00:00:00 2001 From: "Tommy\\2Fi-Staff" Date: Tue, 14 Apr 2026 14:53:12 +0800 Subject: [PATCH] stocktakevariance report add total stocktakeqty --- .../service/StockTakeVarianceReportService.kt | 6 ++++-- .../web/StockTakeVarianceReportController.kt | 17 +++++++++++++---- .../jasper/StockTakeVarianceReport.jrxml | 12 +++++++++++- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/modules/report/service/StockTakeVarianceReportService.kt b/src/main/java/com/ffii/fpsms/modules/report/service/StockTakeVarianceReportService.kt index 8b5e8c6..b3b7085 100644 --- a/src/main/java/com/ffii/fpsms/modules/report/service/StockTakeVarianceReportService.kt +++ b/src/main/java/com/ffii/fpsms/modules/report/service/StockTakeVarianceReportService.kt @@ -283,7 +283,8 @@ SELECT CASE WHEN SUM(COALESCE(openingQty, 0)) OVER (PARTITION BY itemNo) < 0 THEN CONCAT('(', FORMAT(-SUM(COALESCE(openingQty, 0)) OVER (PARTITION BY itemNo), 0), ')') ELSE FORMAT(SUM(COALESCE(openingQty, 0)) OVER (PARTITION BY itemNo), 0) END AS totalOpeningBalance, CASE WHEN SUM(COALESCE(inQty, 0)) OVER (PARTITION BY itemNo) < 0 THEN CONCAT('(', FORMAT(-SUM(COALESCE(inQty, 0)) OVER (PARTITION BY itemNo), 0), ')') ELSE FORMAT(SUM(COALESCE(inQty, 0)) OVER (PARTITION BY itemNo), 0) END AS totalCumStockIn, CASE WHEN SUM(COALESCE(outQty, 0)) OVER (PARTITION BY itemNo) < 0 THEN CONCAT('(', FORMAT(-SUM(COALESCE(outQty, 0)) OVER (PARTITION BY itemNo), 0), ')') ELSE FORMAT(SUM(COALESCE(outQty, 0)) OVER (PARTITION BY itemNo), 0) END AS totalCumStockOut, - CASE WHEN SUM(COALESCE(currentQty, 0)) OVER (PARTITION BY itemNo) < 0 THEN CONCAT('(', FORMAT(-SUM(COALESCE(currentQty, 0)) OVER (PARTITION BY itemNo), 0), ')') ELSE FORMAT(SUM(COALESCE(currentQty, 0)) OVER (PARTITION BY itemNo), 0) END AS totalCurrentBalance + CASE WHEN SUM(COALESCE(currentQty, 0)) OVER (PARTITION BY itemNo) < 0 THEN CONCAT('(', FORMAT(-SUM(COALESCE(currentQty, 0)) OVER (PARTITION BY itemNo), 0), ')') ELSE FORMAT(SUM(COALESCE(currentQty, 0)) OVER (PARTITION BY itemNo), 0) END AS totalCurrentBalance, + CASE WHEN SUM(COALESCE(stkApproverQty, 0)) OVER (PARTITION BY itemNo) < 0 THEN CONCAT('(', FORMAT(-SUM(COALESCE(stkApproverQty, 0)) OVER (PARTITION BY itemNo), 0), ')') ELSE FORMAT(SUM(COALESCE(stkApproverQty, 0)) OVER (PARTITION BY itemNo), 0) END AS totalStockTakeQty FROM data ORDER BY @@ -515,7 +516,8 @@ SELECT CASE WHEN SUM(COALESCE(openingQty, 0)) OVER (PARTITION BY itemNo) < 0 THEN CONCAT('(', FORMAT(-SUM(COALESCE(openingQty, 0)) OVER (PARTITION BY itemNo), 0), ')') ELSE FORMAT(SUM(COALESCE(openingQty, 0)) OVER (PARTITION BY itemNo), 0) END AS totalOpeningBalance, CASE WHEN SUM(COALESCE(inQty, 0)) OVER (PARTITION BY itemNo) < 0 THEN CONCAT('(', FORMAT(-SUM(COALESCE(inQty, 0)) OVER (PARTITION BY itemNo), 0), ')') ELSE FORMAT(SUM(COALESCE(inQty, 0)) OVER (PARTITION BY itemNo), 0) END AS totalCumStockIn, CASE WHEN SUM(COALESCE(outQty, 0)) OVER (PARTITION BY itemNo) < 0 THEN CONCAT('(', FORMAT(-SUM(COALESCE(outQty, 0)) OVER (PARTITION BY itemNo), 0), ')') ELSE FORMAT(SUM(COALESCE(outQty, 0)) OVER (PARTITION BY itemNo), 0) END AS totalCumStockOut, - CASE WHEN SUM(COALESCE(stkBookQty, 0)) OVER (PARTITION BY itemNo) < 0 THEN CONCAT('(', FORMAT(-SUM(COALESCE(stkBookQty, 0)) OVER (PARTITION BY itemNo), 0), ')') ELSE FORMAT(SUM(COALESCE(stkBookQty, 0)) OVER (PARTITION BY itemNo), 0) END AS totalCurrentBalance + CASE WHEN SUM(COALESCE(stkBookQty, 0)) OVER (PARTITION BY itemNo) < 0 THEN CONCAT('(', FORMAT(-SUM(COALESCE(stkBookQty, 0)) OVER (PARTITION BY itemNo), 0), ')') ELSE FORMAT(SUM(COALESCE(stkBookQty, 0)) OVER (PARTITION BY itemNo), 0) END AS totalCurrentBalance, + CASE WHEN SUM(COALESCE(stkApproverQty, 0)) OVER (PARTITION BY itemNo) < 0 THEN CONCAT('(', FORMAT(-SUM(COALESCE(stkApproverQty, 0)) OVER (PARTITION BY itemNo), 0), ')') ELSE FORMAT(SUM(COALESCE(stkApproverQty, 0)) OVER (PARTITION BY itemNo), 0) END AS totalStockTakeQty FROM data ORDER BY diff --git a/src/main/java/com/ffii/fpsms/modules/report/web/StockTakeVarianceReportController.kt b/src/main/java/com/ffii/fpsms/modules/report/web/StockTakeVarianceReportController.kt index a5c4a08..dac4db1 100644 --- a/src/main/java/com/ffii/fpsms/modules/report/web/StockTakeVarianceReportController.kt +++ b/src/main/java/com/ffii/fpsms/modules/report/web/StockTakeVarianceReportController.kt @@ -413,7 +413,7 @@ class StockTakeVarianceReportController( } } - fun addItemSummaryRow(totalQty: Double, _itemNo: String, _itemName: String) { + fun addItemSummaryRow(totalQty: Double, totalStockTakeQty: Double, _itemNo: String, _itemName: String) { val r = sheet.createRow(rowIndex++) // keep keys for filtering/grouping, visually hidden r.createCell(0).apply { @@ -448,6 +448,12 @@ class StockTakeVarianceReportController( setCellValue(totalQty) cellStyle = summaryQtyThickBottomStyle } + + // also set "盤點總數" at the "盤點數"欄(col 7) + r.getCell(7).apply { + setCellValue(totalStockTakeQty) + cellStyle = summaryQtyThickBottomStyle + } } fun addBlankSeparatorRow() { @@ -462,12 +468,13 @@ class StockTakeVarianceReportController( cellStyle = textStyle } } - addItemSummaryRow(0.0, "", "") + addItemSummaryRow(0.0, 0.0, "", "") } else { var currentItemNo: String? = null var currentItemName = "" var currentUom = "" var currentItemTotalQty = 0.0 + var currentItemTotalStockTakeQty = 0.0 dbData.forEach { rowMap -> val itemNo = rowMap["itemNo"]?.toString().orEmpty() @@ -475,9 +482,10 @@ class StockTakeVarianceReportController( val uom = rowMap["unitOfMeasure"]?.toString().orEmpty() if (currentItemNo != null && itemNo != currentItemNo) { - addItemSummaryRow(currentItemTotalQty, currentItemNo!!, currentItemName) + addItemSummaryRow(currentItemTotalQty, currentItemTotalStockTakeQty, currentItemNo!!, currentItemName) addBlankSeparatorRow() currentItemTotalQty = 0.0 + currentItemTotalStockTakeQty = 0.0 } val r = sheet.createRow(rowIndex++) @@ -497,9 +505,10 @@ class StockTakeVarianceReportController( currentItemName = itemName currentUom = uom currentItemTotalQty += parseSignedNumber(rowMap["currentBookBalance"]) ?: 0.0 + currentItemTotalStockTakeQty += parseSignedNumber(rowMap["stockTakeQty"]) ?: 0.0 } - addItemSummaryRow(currentItemTotalQty, currentItemNo ?: "", currentItemName) + addItemSummaryRow(currentItemTotalQty, currentItemTotalStockTakeQty, currentItemNo ?: "", currentItemName) } val lastRowIndex = rowIndex - 1 diff --git a/src/main/resources/jasper/StockTakeVarianceReport.jrxml b/src/main/resources/jasper/StockTakeVarianceReport.jrxml index 73a97a8..26fb9a0 100644 --- a/src/main/resources/jasper/StockTakeVarianceReport.jrxml +++ b/src/main/resources/jasper/StockTakeVarianceReport.jrxml @@ -64,6 +64,7 @@ + @@ -109,11 +110,20 @@ - + + + + + + + + + +