|
|
@@ -706,6 +706,7 @@ fun searchMaterialStockOutTraceabilityReport( |
|
|
} else "" |
|
|
} else "" |
|
|
|
|
|
|
|
|
val sql = """ |
|
|
val sql = """ |
|
|
|
|
|
|
|
|
SELECT |
|
|
SELECT |
|
|
COALESCE(it.code, '') as itemNo, |
|
|
COALESCE(it.code, '') as itemNo, |
|
|
COALESCE(it.name, '') as itemName, |
|
|
COALESCE(it.name, '') as itemName, |
|
|
@@ -714,13 +715,25 @@ fun searchMaterialStockOutTraceabilityReport( |
|
|
COALESCE(sil.lotNo, il.lotNo, '') as lotNo, |
|
|
COALESCE(sil.lotNo, il.lotNo, '') as lotNo, |
|
|
COALESCE(DATE_FORMAT(COALESCE(sil.expiryDate, il.expiryDate), '%Y-%m-%d'), '') as expiryDate, |
|
|
COALESCE(DATE_FORMAT(COALESCE(sil.expiryDate, il.expiryDate), '%Y-%m-%d'), '') as expiryDate, |
|
|
CASE WHEN COALESCE(qr_agg.qcFailed, 0) = 1 THEN '0' |
|
|
CASE WHEN COALESCE(qr_agg.qcFailed, 0) = 1 THEN '0' |
|
|
ELSE TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE(sil.acceptedQty, 0), 2))) |
|
|
|
|
|
END as stockInQty, |
|
|
|
|
|
TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE(sil.acceptedQty, 0), 2))) as iqcSampleQty, |
|
|
|
|
|
|
|
|
ELSE TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE( |
|
|
|
|
|
CASE WHEN sil.purchaseOrderId IS NOT NULL AND iu_purchase.id IS NOT NULL AND iu.id IS NOT NULL |
|
|
|
|
|
THEN sil.acceptedQty * (iu_purchase.ratioN / NULLIF(iu_purchase.ratioD, 0)) / (iu.ratioN / NULLIF(iu.ratioD, 0)) |
|
|
|
|
|
ELSE sil.acceptedQty END, 0), 2))) |
|
|
|
|
|
END as stockInQty, |
|
|
|
|
|
TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE( |
|
|
|
|
|
CASE WHEN sil.purchaseOrderId IS NOT NULL AND iu_purchase.id IS NOT NULL AND iu.id IS NOT NULL |
|
|
|
|
|
THEN sil.acceptedQty * (iu_purchase.ratioN / NULLIF(iu_purchase.ratioD, 0)) / (iu.ratioN / NULLIF(iu.ratioD, 0)) |
|
|
|
|
|
ELSE sil.acceptedQty END, 0), 2))) as iqcSampleQty, |
|
|
TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE(qr_agg.failQtySum, 0), 2))) as iqcDefectQty, |
|
|
TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(COALESCE(qr_agg.failQtySum, 0), 2))) as iqcDefectQty, |
|
|
TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT( |
|
|
TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT( |
|
|
CASE WHEN COALESCE(sil.acceptedQty, 0) > 0 |
|
|
|
|
|
THEN COALESCE(qr_agg.failQtySum, 0) / sil.acceptedQty * 100 |
|
|
|
|
|
|
|
|
CASE WHEN COALESCE( |
|
|
|
|
|
CASE WHEN sil.purchaseOrderId IS NOT NULL AND iu_purchase.id IS NOT NULL AND iu.id IS NOT NULL |
|
|
|
|
|
THEN sil.acceptedQty * (iu_purchase.ratioN / NULLIF(iu_purchase.ratioD, 0)) / (iu.ratioN / NULLIF(iu.ratioD, 0)) |
|
|
|
|
|
ELSE sil.acceptedQty END, 0) > 0 |
|
|
|
|
|
THEN COALESCE(qr_agg.failQtySum, 0) / |
|
|
|
|
|
(CASE WHEN sil.purchaseOrderId IS NOT NULL AND iu_purchase.id IS NOT NULL AND iu.id IS NOT NULL |
|
|
|
|
|
THEN sil.acceptedQty * (iu_purchase.ratioN / NULLIF(iu_purchase.ratioD, 0)) / (iu.ratioN / NULLIF(iu.ratioD, 0)) |
|
|
|
|
|
ELSE sil.acceptedQty END) * 100 |
|
|
ELSE 0 |
|
|
ELSE 0 |
|
|
END, 2))) as iqcDefectPercentage, |
|
|
END, 2))) as iqcDefectPercentage, |
|
|
CASE WHEN COALESCE(qr_agg.qcFailed, 0) = 1 THEN '不合格' ELSE '已接受' END as iqcResult, |
|
|
CASE WHEN COALESCE(qr_agg.qcFailed, 0) = 1 THEN '不合格' ELSE '已接受' END as iqcResult, |
|
|
@@ -729,14 +742,24 @@ fun searchMaterialStockOutTraceabilityReport( |
|
|
COALESCE(wh.code, '') as storeLocation, |
|
|
COALESCE(wh.code, '') as storeLocation, |
|
|
COALESCE(sp_si.code, sp_po.code, '') as supplierID, |
|
|
COALESCE(sp_si.code, sp_po.code, '') as supplierID, |
|
|
COALESCE(sp_si.name, sp_po.name, '') as supplierName, |
|
|
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( |
|
|
|
|
|
CASE WHEN sil.purchaseOrderId IS NOT NULL AND iu_purchase.id IS NOT NULL AND iu.id IS NOT NULL |
|
|
|
|
|
THEN sil.acceptedQty * (iu_purchase.ratioN / NULLIF(iu_purchase.ratioD, 0)) / (iu.ratioN / NULLIF(iu.ratioD, 0)) |
|
|
|
|
|
ELSE sil.acceptedQty END, 0)) OVER (PARTITION BY it.id), 2))) as totalStockInQty, |
|
|
|
|
|
TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM FORMAT(SUM(COALESCE( |
|
|
|
|
|
CASE WHEN sil.purchaseOrderId IS NOT NULL AND iu_purchase.id IS NOT NULL AND iu.id IS NOT NULL |
|
|
|
|
|
THEN sil.acceptedQty * (iu_purchase.ratioN / NULLIF(iu_purchase.ratioD, 0)) / (iu.ratioN / NULLIF(iu.ratioD, 0)) |
|
|
|
|
|
ELSE sil.acceptedQty END, 0)) OVER (PARTITION BY it.id), 2))) as totalIqcSampleQty |
|
|
FROM stock_in_line sil |
|
|
FROM stock_in_line sil |
|
|
LEFT JOIN stock_in si ON sil.stockInId = si.id |
|
|
LEFT JOIN stock_in si ON sil.stockInId = si.id |
|
|
LEFT JOIN purchase_order po ON sil.purchaseOrderId = po.id |
|
|
LEFT JOIN purchase_order po ON sil.purchaseOrderId = po.id |
|
|
LEFT JOIN items it ON sil.itemId = it.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 item_uom iu ON it.id = iu.itemId AND iu.stockUnit = true |
|
|
LEFT JOIN uom_conversion uc ON iu.uomId = uc.id |
|
|
LEFT JOIN uom_conversion uc ON iu.uomId = uc.id |
|
|
|
|
|
LEFT JOIN item_uom iu_purchase |
|
|
|
|
|
ON it.id = iu_purchase.itemId |
|
|
|
|
|
AND iu_purchase.purchaseUnit = 1 |
|
|
|
|
|
AND iu_purchase.deleted = 0 |
|
|
LEFT JOIN inventory_lot il ON sil.inventoryLotId = il.id |
|
|
LEFT JOIN inventory_lot il ON sil.inventoryLotId = il.id |
|
|
LEFT JOIN inventory_lot_line ill ON il.id = ill.inventoryLotId |
|
|
LEFT JOIN inventory_lot_line ill ON il.id = ill.inventoryLotId |
|
|
LEFT JOIN warehouse wh ON ill.warehouseId = wh.id |
|
|
LEFT JOIN warehouse wh ON ill.warehouseId = wh.id |
|
|
|