Просмотр исходного кода

stocktakevariance report add total stocktakeqty

master
Tommy\2Fi-Staff 1 день назад
Родитель
Сommit
b28c682da9
3 измененных файлов: 28 добавлений и 7 удалений
  1. +4
    -2
      src/main/java/com/ffii/fpsms/modules/report/service/StockTakeVarianceReportService.kt
  2. +13
    -4
      src/main/java/com/ffii/fpsms/modules/report/web/StockTakeVarianceReportController.kt
  3. +11
    -1
      src/main/resources/jasper/StockTakeVarianceReport.jrxml

+ 4
- 2
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(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(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(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 FROM data
ORDER BY 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(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(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(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 FROM data
ORDER BY ORDER BY


+ 13
- 4
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++) val r = sheet.createRow(rowIndex++)
// keep keys for filtering/grouping, visually hidden // keep keys for filtering/grouping, visually hidden
r.createCell(0).apply { r.createCell(0).apply {
@@ -448,6 +448,12 @@ class StockTakeVarianceReportController(
setCellValue(totalQty) setCellValue(totalQty)
cellStyle = summaryQtyThickBottomStyle cellStyle = summaryQtyThickBottomStyle
} }

// also set "盤點總數" at the "盤點數"欄(col 7)
r.getCell(7).apply {
setCellValue(totalStockTakeQty)
cellStyle = summaryQtyThickBottomStyle
}
} }


fun addBlankSeparatorRow() { fun addBlankSeparatorRow() {
@@ -462,12 +468,13 @@ class StockTakeVarianceReportController(
cellStyle = textStyle cellStyle = textStyle
} }
} }
addItemSummaryRow(0.0, "", "")
addItemSummaryRow(0.0, 0.0, "", "")
} else { } else {
var currentItemNo: String? = null var currentItemNo: String? = null
var currentItemName = "" var currentItemName = ""
var currentUom = "" var currentUom = ""
var currentItemTotalQty = 0.0 var currentItemTotalQty = 0.0
var currentItemTotalStockTakeQty = 0.0


dbData.forEach { rowMap -> dbData.forEach { rowMap ->
val itemNo = rowMap["itemNo"]?.toString().orEmpty() val itemNo = rowMap["itemNo"]?.toString().orEmpty()
@@ -475,9 +482,10 @@ class StockTakeVarianceReportController(
val uom = rowMap["unitOfMeasure"]?.toString().orEmpty() val uom = rowMap["unitOfMeasure"]?.toString().orEmpty()


if (currentItemNo != null && itemNo != currentItemNo) { if (currentItemNo != null && itemNo != currentItemNo) {
addItemSummaryRow(currentItemTotalQty, currentItemNo!!, currentItemName)
addItemSummaryRow(currentItemTotalQty, currentItemTotalStockTakeQty, currentItemNo!!, currentItemName)
addBlankSeparatorRow() addBlankSeparatorRow()
currentItemTotalQty = 0.0 currentItemTotalQty = 0.0
currentItemTotalStockTakeQty = 0.0
} }


val r = sheet.createRow(rowIndex++) val r = sheet.createRow(rowIndex++)
@@ -497,9 +505,10 @@ class StockTakeVarianceReportController(
currentItemName = itemName currentItemName = itemName
currentUom = uom currentUom = uom
currentItemTotalQty += parseSignedNumber(rowMap["currentBookBalance"]) ?: 0.0 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 val lastRowIndex = rowIndex - 1


+ 11
- 1
src/main/resources/jasper/StockTakeVarianceReport.jrxml Просмотреть файл

@@ -64,6 +64,7 @@
<field name="stockTakeQty" class="java.lang.String"/> <field name="stockTakeQty" class="java.lang.String"/>
<field name="variance" class="java.lang.String"/> <field name="variance" class="java.lang.String"/>
<field name="variancePercentage" class="java.lang.String"/> <field name="variancePercentage" class="java.lang.String"/>
<field name="totalStockTakeQty" class="java.lang.String"/>
<group name="Group1" keepTogether="true" preventOrphanFooter="true"> <group name="Group1" keepTogether="true" preventOrphanFooter="true">
<groupExpression><![CDATA[$F{itemNo}]]></groupExpression> <groupExpression><![CDATA[$F{itemNo}]]></groupExpression>
<groupHeader> <groupHeader>
@@ -109,11 +110,20 @@
</reportElement> </reportElement>
</line> </line>
<line> <line>
<reportElement x="273" y="0" width="135" height="1" uuid="57591898-c7d7-43ef-a078-9ca155d03a8c">
<reportElement x="273" y="0" width="207" height="1" uuid="57591898-c7d7-43ef-a078-9ca155d03a8c">
<property name="com.jaspersoft.studio.unit.height" value="px"/> <property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/> <property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement> </reportElement>
</line> </line>
<textField textAdjust="StretchHeight">
<reportElement x="408" y="0" width="72" height="18" uuid="0c547695-30bb-491c-aaa3-26f6d2a577a3">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<textElement textAlignment="Right" verticalAlignment="Middle">
<font fontName="微軟正黑體"/>
</textElement>
<textFieldExpression><![CDATA[$F{totalStockTakeQty}]]></textFieldExpression>
</textField>
</band> </band>
<band height="1"> <band height="1">
<printWhenExpression><![CDATA[$V{Group1_COUNT} == 1]]></printWhenExpression> <printWhenExpression><![CDATA[$V{Group1_COUNT} == 1]]></printWhenExpression>


Загрузка…
Отмена
Сохранить