| @@ -721,51 +721,47 @@ fun searchMaterialStockOutTraceabilityReport( | |||
| } else "" | |||
| val sql = """ | |||
| SELECT | |||
| COALESCE(it.code, '') as itemNo, | |||
| COALESCE(it.name, '') as itemName, | |||
| COALESCE(uc.code, '') as unitOfMeasure, | |||
| COALESCE(sil.dnNo, '') as dnNo, | |||
| COALESCE(sil.lotNo, il.lotNo, '') as lotNo, | |||
| COALESCE(DATE_FORMAT(COALESCE(sil.expiryDate, il.expiryDate), '%Y-%m-%d'), '') as expiryDate, | |||
| TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE(sil.acceptedQty, 0), 2))) as stockInQty, | |||
| TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE(sil.acceptedQty, 0), 2))) as iqcSampleQty, | |||
| TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE(qr.failQty, 0), 2))) as iqcDefectQty, | |||
| TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(CASE | |||
| WHEN COALESCE(sil.acceptedQty, 0) > 0 | |||
| THEN ROUND((COALESCE(qr.failQty, 0) / sil.acceptedQty) * 100, 2) | |||
| ELSE 0 | |||
| END, 2))) as iqcDefectPercentage, | |||
| CASE | |||
| WHEN qr.qcPassed = true OR qr.qcPassed IS NULL THEN 'Accept' | |||
| ELSE 'Reject' | |||
| END as iqcResult, | |||
| COALESCE(qr.remarks, '') as iqcRemarks, | |||
| COALESCE(wh.code, '') as storeLocation, | |||
| COALESCE(sp_si.code, sp_po.code, '') as supplierID, | |||
| COALESCE(sp_si.name, sp_po.name, '') as supplierName, | |||
| TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(SUM(COALESCE(sil.acceptedQty, 0)) OVER (PARTITION BY it.id), 2))) as totalStockInQty, | |||
| TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(SUM(COALESCE(sil.acceptedQty, 0)) OVER (PARTITION BY it.id), 2))) as totalIqcSampleQty, | |||
| TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(SUM(COALESCE(qr.failQty, 0)) OVER (PARTITION BY it.id), 2))) as totalIqcDefectQty | |||
| FROM stock_in_line sil | |||
| LEFT JOIN stock_in si ON sil.stockInId = si.id | |||
| LEFT JOIN purchase_order po ON sil.purchaseOrderId = po.id | |||
| LEFT JOIN items it ON sil.itemId = it.id | |||
| LEFT JOIN item_uom iu ON it.id = iu.itemId AND iu.stockUnit = true | |||
| LEFT JOIN uom_conversion uc ON iu.uomId = uc.id | |||
| LEFT JOIN qc_result qr ON sil.id = qr.stockInLineId | |||
| LEFT JOIN inventory_lot il ON sil.inventoryLotId = il.id | |||
| LEFT JOIN inventory_lot_line ill ON il.id = ill.inventoryLotId | |||
| LEFT JOIN warehouse wh ON ill.warehouseId = wh.id | |||
| LEFT JOIN shop sp_si ON si.supplierId = sp_si.id | |||
| LEFT JOIN shop sp_po ON po.supplierId = sp_po.id | |||
| WHERE sil.deleted = false | |||
| $stockCategorySql | |||
| $itemCodeSql | |||
| $lastInDateStartSql | |||
| $lastInDateEndSql | |||
| ORDER BY it.code, sil.lotNo | |||
| """.trimIndent() | |||
| SELECT | |||
| COALESCE(it.code, '') as itemNo, | |||
| COALESCE(it.name, '') as itemName, | |||
| COALESCE(uc.code, '') as unitOfMeasure, | |||
| COALESCE(sil.dnNo, '') as dnNo, | |||
| COALESCE(sil.lotNo, il.lotNo, '') as lotNo, | |||
| COALESCE(DATE_FORMAT(COALESCE(sil.expiryDate, il.expiryDate), '%Y-%m-%d'), '') as expiryDate, | |||
| TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE(sil.acceptedQty, 0), 2))) as stockInQty, | |||
| TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE(sil.acceptedQty, 0), 2))) as iqcSampleQty, | |||
| -- ↓↓↓ 这四个/五个栏位改成不依赖 qc_result ↓↓↓ | |||
| TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(0, 2))) as iqcDefectQty, | |||
| TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(0, 2))) as iqcDefectPercentage, | |||
| 'Accept' as iqcResult, -- 或 '' 看你报表需求 | |||
| '' as iqcRemarks, | |||
| TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(0, 2))) as totalIqcDefectQty, | |||
| COALESCE(wh.code, '') as storeLocation, | |||
| COALESCE(sp_si.code, sp_po.code, '') as supplierID, | |||
| COALESCE(sp_si.name, sp_po.name, '') as supplierName, | |||
| TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(SUM(COALESCE(sil.acceptedQty, 0)) OVER (PARTITION BY it.id), 2))) as totalStockInQty, | |||
| TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(SUM(COALESCE(sil.acceptedQty, 0)) OVER (PARTITION BY it.id), 2))) as totalIqcSampleQty | |||
| -- 注意:这里已经不再有 totalIqcDefectQty 的 window function 了 | |||
| FROM stock_in_line sil | |||
| LEFT JOIN stock_in si ON sil.stockInId = si.id | |||
| LEFT JOIN purchase_order po ON sil.purchaseOrderId = po.id | |||
| LEFT JOIN items it ON sil.itemId = it.id | |||
| LEFT JOIN item_uom iu ON it.id = iu.itemId AND iu.stockUnit = true | |||
| LEFT JOIN uom_conversion uc ON iu.uomId = uc.id | |||
| LEFT JOIN inventory_lot il ON sil.inventoryLotId = il.id | |||
| LEFT JOIN inventory_lot_line ill ON il.id = ill.inventoryLotId | |||
| LEFT JOIN warehouse wh ON ill.warehouseId = wh.id | |||
| LEFT JOIN shop sp_si ON si.supplierId = sp_si.id | |||
| LEFT JOIN shop sp_po ON po.supplierId = sp_po.id | |||
| WHERE sil.deleted = false | |||
| $stockCategorySql | |||
| $itemCodeSql | |||
| $lastInDateStartSql | |||
| $lastInDateEndSql | |||
| ORDER BY it.code, sil.lotNo | |||
| """.trimIndent() | |||
| return jdbcDao.queryForList(sql, args) | |||
| } | |||