|
|
|
@@ -116,27 +116,27 @@ WITH latest_str AS ( |
|
|
|
) |
|
|
|
) |
|
|
|
), |
|
|
|
in_out AS ( |
|
|
|
in_agg AS ( |
|
|
|
SELECT |
|
|
|
ill.id AS inventoryLotLineId, |
|
|
|
|
|
|
|
/* 期初:fromDate 之前的入 - 出 */ |
|
|
|
SUM(CASE WHEN DATE(sil.receiptDate) < :fromDate THEN COALESCE(sil.acceptedQty, 0) ELSE 0 END) AS inBefore, |
|
|
|
SUM(CASE WHEN DATE(sol.endTime) < :fromDate THEN COALESCE(sol.qty, 0) ELSE 0 END) AS outBefore, |
|
|
|
|
|
|
|
/* 區間內累計 */ |
|
|
|
SUM(CASE WHEN DATE(sil.receiptDate) BETWEEN :fromDate AND :toDate THEN COALESCE(sil.acceptedQty, 0) ELSE 0 END) AS inDuring, |
|
|
|
SUM(CASE WHEN DATE(sol.endTime) BETWEEN :fromDate AND :toDate THEN COALESCE(sol.qty, 0) ELSE 0 END) AS outDuring, |
|
|
|
|
|
|
|
/* 最後入/出倉日期(不限定區間,通常看整體最後一次) */ |
|
|
|
MAX(CASE WHEN sil.receiptDate IS NOT NULL THEN DATE(sil.receiptDate) END) AS lastInDate, |
|
|
|
MAX(CASE WHEN sol.endTime IS NOT NULL THEN DATE(sol.endTime) END) AS lastOutDate |
|
|
|
|
|
|
|
MAX(CASE WHEN sil.receiptDate IS NOT NULL THEN DATE(sil.receiptDate) END) AS lastInDate |
|
|
|
FROM inventory_lot_line ill |
|
|
|
LEFT JOIN stock_in_line sil |
|
|
|
ON sil.inventoryLotLineId = ill.id |
|
|
|
AND sil.deleted = 0 |
|
|
|
AND sil.status = 'completed' |
|
|
|
WHERE ill.deleted = 0 |
|
|
|
GROUP BY ill.id |
|
|
|
), |
|
|
|
out_agg AS ( |
|
|
|
SELECT |
|
|
|
ill.id AS inventoryLotLineId, |
|
|
|
SUM(CASE WHEN DATE(sol.endTime) < :fromDate THEN COALESCE(sol.qty, 0) ELSE 0 END) AS outBefore, |
|
|
|
SUM(CASE WHEN DATE(sol.endTime) BETWEEN :fromDate AND :toDate THEN COALESCE(sol.qty, 0) ELSE 0 END) AS outDuring, |
|
|
|
MAX(CASE WHEN sol.endTime IS NOT NULL THEN DATE(sol.endTime) END) AS lastOutDate |
|
|
|
FROM inventory_lot_line ill |
|
|
|
LEFT JOIN stock_out_line sol |
|
|
|
ON sol.inventoryLotLineId = ill.id |
|
|
|
AND sol.deleted = 0 |
|
|
|
@@ -144,6 +144,18 @@ in_out AS ( |
|
|
|
WHERE ill.deleted = 0 |
|
|
|
GROUP BY ill.id |
|
|
|
), |
|
|
|
in_out AS ( |
|
|
|
SELECT |
|
|
|
i.inventoryLotLineId, |
|
|
|
COALESCE(i.inBefore, 0) AS inBefore, |
|
|
|
COALESCE(o.outBefore, 0) AS outBefore, |
|
|
|
COALESCE(i.inDuring, 0) AS inDuring, |
|
|
|
COALESCE(o.outDuring, 0) AS outDuring, |
|
|
|
i.lastInDate, |
|
|
|
o.lastOutDate |
|
|
|
FROM in_agg i |
|
|
|
LEFT JOIN out_agg o ON o.inventoryLotLineId = i.inventoryLotLineId |
|
|
|
), |
|
|
|
data AS ( |
|
|
|
SELECT |
|
|
|
it.type AS stockSubCategory, |
|
|
|
|