Tommy\2Fi-Staff 22 godzin temu
rodzic
commit
474c4d95bd
1 zmienionych plików z 63 dodań i 53 usunięć
  1. +63
    -53
      src/main/java/com/ffii/fpsms/modules/report/service/ReportService.kt

+ 63
- 53
src/main/java/com/ffii/fpsms/modules/report/service/ReportService.kt Wyświetl plik

@@ -1501,7 +1501,12 @@ return result
AND DATE(sl.date) <= p.d0
),
item_scope AS (
SELECT it.id AS itemId, it.code AS itemNo, it.name AS itemName, it.type AS itemType
SELECT
it.id AS itemId,
it.code AS itemNo,
it.name AS itemName,
it.type AS itemType,
COALESCE(CAST(NULLIF(it.AverageUnitPrice, '') AS DECIMAL(14, 4)), 0) AS avgUnitPriceRaw
FROM items it
INNER JOIN ledger_item_ids li ON li.itemId = it.id
WHERE it.deleted = 0
@@ -1568,51 +1573,55 @@ return result
AND DATE(sl.date) <= p.d0
GROUP BY sl.itemId
),
is_bom_item AS (
ledger_moves AS (
SELECT
it.id AS itemId,
CASE WHEN EXISTS (
SELECT 1 FROM bom b
WHERE b.deleted = 0 AND b.itemId = it.id
) THEN 1 ELSE 0 END AS isBom
FROM items it
WHERE it.deleted = 0
),
bom_price AS (
SELECT
dol.itemId,
SUM(COALESCE(dol.qty, 0) * COALESCE(dol.up, (dol.price / NULLIF(dol.qty, 0)), dol.price, 0)) AS amtSum,
SUM(COALESCE(dol.qty, 0)) AS qtySum
FROM delivery_order_line dol
WHERE dol.deleted = 0
AND dol.itemId IS NOT NULL
AND COALESCE(dol.qty, 0) > 0
GROUP BY dol.itemId
),
non_bom_price AS (
SELECT
pol.itemId,
SUM(COALESCE(pol.qty, 0) * COALESCE(pol.up, (pol.price / NULLIF(pol.qty, 0)), pol.price, 0)) AS amtSum,
SUM(COALESCE(pol.qty, 0)) AS qtySum
FROM purchase_order_line pol
WHERE pol.deleted = 0
AND pol.itemId IS NOT NULL
AND COALESCE(pol.qty, 0) > 0
GROUP BY pol.itemId
),
avg_price_per_item AS (
SELECT
s.itemId,
CASE
WHEN COALESCE(b.isBom, 0) = 1 THEN
CASE WHEN COALESCE(bp.qtySum, 0) > 0 THEN (bp.amtSum / bp.qtySum) ELSE 0 END
ELSE
CASE WHEN COALESCE(np.qtySum, 0) > 0 THEN (np.amtSum / np.qtySum) ELSE 0 END
END AS avgUnitPriceRaw
FROM item_scope s
LEFT JOIN is_bom_item b ON b.itemId = s.itemId
LEFT JOIN bom_price bp ON bp.itemId = s.itemId
LEFT JOIN non_bom_price np ON np.itemId = s.itemId
sl.itemId,
SUM(
CASE
WHEN UPPER(TRIM(COALESCE(sl.type, ''))) IN ('NOR', 'ADJ')
AND COALESCE(sl.inQty, 0) > 0
THEN COALESCE(sl.inQty, 0)
ELSE 0
END
) AS cumStockIn,
SUM(
CASE
WHEN UPPER(TRIM(COALESCE(sl.type, ''))) IN ('NOR', 'ADJ')
AND COALESCE(sl.outQty, 0) > 0
THEN COALESCE(sl.outQty, 0)
ELSE 0
END
) AS cumStockOut,
SUM(
CASE
WHEN UPPER(TRIM(COALESCE(sl.type, ''))) = 'MISS'
AND COALESCE(sl.outQty, 0) > 0
THEN COALESCE(sl.outQty, 0)
ELSE 0
END
) AS misInputAndLost,
SUM(
CASE
WHEN UPPER(TRIM(COALESCE(sl.type, ''))) = 'BAD'
AND COALESCE(sl.outQty, 0) > 0
THEN COALESCE(sl.outQty, 0)
ELSE 0
END
) AS defectiveGoods,
SUM(
CASE
WHEN UPPER(TRIM(COALESCE(sl.type, ''))) = 'TKE'
THEN COALESCE(sl.inQty, 0) - COALESCE(sl.outQty, 0)
ELSE 0
END
) AS variance
FROM stock_ledger sl
INNER JOIN params p ON 1=1
WHERE sl.deleted = 0
AND sl.itemId IS NOT NULL
AND DATE(sl.date) > p.d1
AND DATE(sl.date) <= p.d0
GROUP BY sl.itemId
)
SELECT
'' AS stockSubCategory,
@@ -1632,22 +1641,22 @@ return result
COALESCE(op.openingBalance, 0) AS openingBalanceRaw,
COALESCE(cp.currentBalance, 0) AS currentBalanceRaw,
CASE WHEN COALESCE(op.openingBalance, 0) < 0 THEN CONCAT('(', FORMAT(-op.openingBalance, 0), ')') ELSE FORMAT(COALESCE(op.openingBalance, 0), 0) END AS totalOpeningBalance,
'0' AS totalCumStockIn,
'0' AS totalCumStockOut,
CASE WHEN COALESCE(lm.cumStockIn, 0) < 0 THEN CONCAT('(', FORMAT(-lm.cumStockIn, 0), ')') ELSE FORMAT(COALESCE(lm.cumStockIn, 0), 0) END AS totalCumStockIn,
CASE WHEN COALESCE(lm.cumStockOut, 0) < 0 THEN CONCAT('(', FORMAT(-lm.cumStockOut, 0), ')') ELSE FORMAT(COALESCE(lm.cumStockOut, 0), 0) END AS totalCumStockOut,
CASE WHEN COALESCE(cp.currentBalance, 0) < 0 THEN CONCAT('(', FORMAT(-cp.currentBalance, 0), ')') ELSE FORMAT(COALESCE(cp.currentBalance, 0), 0) END AS totalCurrentBalance,
'' AS misInputAndLost,
'' AS defectiveGoods,
'' AS variance,
'0' AS totalMisInputAndLost,
'0' AS totalVariance,
'0' AS totalDefectiveGoods,
FORMAT(ROUND(COALESCE(ap.avgUnitPriceRaw, 0), 2), 2) AS avgUnitPrice,
FORMAT(ROUND(COALESCE(ap.avgUnitPriceRaw, 0) * COALESCE(cp.currentBalance, 0), 2), 2) AS totalStockBalance
CASE WHEN COALESCE(lm.misInputAndLost, 0) < 0 THEN CONCAT('(', FORMAT(-lm.misInputAndLost, 0), ')') ELSE FORMAT(COALESCE(lm.misInputAndLost, 0), 0) END AS totalMisInputAndLost,
CASE WHEN COALESCE(lm.variance, 0) < 0 THEN CONCAT('(', FORMAT(-lm.variance, 0), ')') ELSE FORMAT(COALESCE(lm.variance, 0), 0) END AS totalVariance,
CASE WHEN COALESCE(lm.defectiveGoods, 0) < 0 THEN CONCAT('(', FORMAT(-lm.defectiveGoods, 0), ')') ELSE FORMAT(COALESCE(lm.defectiveGoods, 0), 0) END AS totalDefectiveGoods,
FORMAT(ROUND(COALESCE(s.avgUnitPriceRaw, 0), 2), 2) AS avgUnitPrice,
FORMAT(ROUND(COALESCE(s.avgUnitPriceRaw, 0) * COALESCE(cp.currentBalance, 0), 2), 2) AS totalStockBalance
FROM item_scope s
LEFT JOIN opening_per_item op ON op.itemId = s.itemId
LEFT JOIN current_per_item cp ON cp.itemId = s.itemId
LEFT JOIN last_in_out lio ON lio.itemId = s.itemId
LEFT JOIN avg_price_per_item ap ON ap.itemId = s.itemId
LEFT JOIN ledger_moves lm ON lm.itemId = s.itemId
LEFT JOIN item_uom iu ON iu.itemId = s.itemId AND iu.stockUnit = 1 AND iu.deleted = 0
LEFT JOIN uom_conversion uc ON iu.uomId = uc.id
LEFT JOIN store_location ON store_location.itemId = s.itemId
@@ -1712,4 +1721,5 @@ return result
val jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource)
return JasperExportManager.exportReportToPdf(jasperPrint)
}
}

Ładowanie…
Anuluj
Zapisz