|
|
|
|
@ -154,48 +154,91 @@ ORDER BY avg_cost DESC;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def get_oh_cost_summary(collector_db: CollectorDbSession, last_oh_date:datetime, upcoming_oh_date:datetime):
|
|
|
|
|
# query = text("""
|
|
|
|
|
# WITH part_costs AS (
|
|
|
|
|
# SELECT
|
|
|
|
|
# wm.wonum,
|
|
|
|
|
# SUM(wm.itemqty * COALESCE(wm.inv_avgcost, po.unit_cost, 0)) AS parts_total_cost
|
|
|
|
|
# FROM public.wo_maxim_material wm
|
|
|
|
|
# LEFT JOIN (
|
|
|
|
|
# SELECT item_num, AVG(unit_cost) AS unit_cost
|
|
|
|
|
# FROM public.maximo_sparepart_pr_po_line
|
|
|
|
|
# GROUP BY item_num
|
|
|
|
|
# ) po ON wm.itemnum = po.item_num
|
|
|
|
|
# WHERE wm.itemnum IS NOT NULL
|
|
|
|
|
# GROUP BY wm.wonum
|
|
|
|
|
# ),
|
|
|
|
|
# wo_costs AS (
|
|
|
|
|
# SELECT
|
|
|
|
|
# w.wonum,
|
|
|
|
|
# w.asset_location,
|
|
|
|
|
# -- Use mat_cost_max if parts_total_cost = 0
|
|
|
|
|
# CASE
|
|
|
|
|
# WHEN COALESCE(pc.parts_total_cost, 0) = 0 THEN COALESCE(w.mat_cost_max , 0)
|
|
|
|
|
# ELSE COALESCE(pc.parts_total_cost, 0)
|
|
|
|
|
# END AS total_wo_cost
|
|
|
|
|
# FROM wo_staging_maximo_2 w
|
|
|
|
|
# LEFT JOIN part_costs pc
|
|
|
|
|
# ON w.wonum = pc.wonum
|
|
|
|
|
# WHERE
|
|
|
|
|
# w.worktype = 'OH'
|
|
|
|
|
# AND w.reportdate IS NOT NULL
|
|
|
|
|
# AND w.actstart IS NOT NULL
|
|
|
|
|
# AND w.actfinish IS NOT NULL
|
|
|
|
|
# AND w.asset_unit IN ('3', '00')
|
|
|
|
|
# AND w.wonum NOT LIKE 'T%'
|
|
|
|
|
# )
|
|
|
|
|
# SELECT
|
|
|
|
|
# asset_location,
|
|
|
|
|
# AVG(total_wo_cost) AS avg_cost
|
|
|
|
|
# FROM wo_costs
|
|
|
|
|
# GROUP BY asset_location
|
|
|
|
|
# ORDER BY COUNT(wonum) DESC;
|
|
|
|
|
# """)
|
|
|
|
|
|
|
|
|
|
query = text("""
|
|
|
|
|
WITH part_costs AS (
|
|
|
|
|
SELECT
|
|
|
|
|
wm.wonum,
|
|
|
|
|
SUM(wm.itemqty * COALESCE(wm.inv_avgcost, po.unit_cost, 0)) AS parts_total_cost
|
|
|
|
|
FROM public.wo_maxim_material wm
|
|
|
|
|
LEFT JOIN (
|
|
|
|
|
SELECT item_num, AVG(unit_cost) AS unit_cost
|
|
|
|
|
FROM public.maximo_sparepart_pr_po_line
|
|
|
|
|
GROUP BY item_num
|
|
|
|
|
) po ON wm.itemnum = po.item_num
|
|
|
|
|
WHERE wm.itemnum IS NOT NULL
|
|
|
|
|
GROUP BY wm.wonum
|
|
|
|
|
),
|
|
|
|
|
wo_costs AS (
|
|
|
|
|
WITH part_costs AS (
|
|
|
|
|
SELECT
|
|
|
|
|
wm.wonum,
|
|
|
|
|
SUM(wm.itemqty * COALESCE(inv.avgcost, po.unit_cost, 0)) AS parts_total_cost
|
|
|
|
|
FROM public.maximo_workorder_materials wm
|
|
|
|
|
JOIN public.maximo_inventory AS inv on inv.itemnum = wm.itemnum
|
|
|
|
|
LEFT JOIN (
|
|
|
|
|
SELECT item_num, AVG(unit_cost) AS unit_cost
|
|
|
|
|
FROM public.maximo_sparepart_pr_po_line
|
|
|
|
|
GROUP BY item_num
|
|
|
|
|
) po ON wm.itemnum = po.item_num
|
|
|
|
|
WHERE wm.itemnum IS NOT NULL
|
|
|
|
|
GROUP BY wm.wonum
|
|
|
|
|
),
|
|
|
|
|
wo_costs AS (
|
|
|
|
|
SELECT
|
|
|
|
|
w.wonum,
|
|
|
|
|
w.asset_location,
|
|
|
|
|
-- Use mat_cost_max if parts_total_cost = 0
|
|
|
|
|
CASE
|
|
|
|
|
WHEN COALESCE(pc.parts_total_cost, 0) = 0 THEN COALESCE(w.mat_cost_max , 0)
|
|
|
|
|
ELSE COALESCE(pc.parts_total_cost, 0)
|
|
|
|
|
END AS total_wo_cost
|
|
|
|
|
FROM wo_staging_maximo_2 w
|
|
|
|
|
LEFT JOIN part_costs pc
|
|
|
|
|
ON w.wonum = pc.wonum
|
|
|
|
|
WHERE
|
|
|
|
|
w.worktype = 'OH'
|
|
|
|
|
AND w.reportdate IS NOT NULL
|
|
|
|
|
AND w.actstart IS NOT NULL
|
|
|
|
|
AND w.actfinish IS NOT NULL
|
|
|
|
|
AND w.asset_unit IN ('3', '00')
|
|
|
|
|
AND w.wonum NOT LIKE 'T%'
|
|
|
|
|
)
|
|
|
|
|
SELECT
|
|
|
|
|
w.wonum,
|
|
|
|
|
w.asset_location,
|
|
|
|
|
-- Use mat_cost_max if parts_total_cost = 0
|
|
|
|
|
CASE
|
|
|
|
|
WHEN COALESCE(pc.parts_total_cost, 0) = 0 THEN COALESCE(w.mat_cost_max , 0)
|
|
|
|
|
ELSE COALESCE(pc.parts_total_cost, 0)
|
|
|
|
|
END AS total_wo_cost
|
|
|
|
|
FROM wo_staging_maximo_2 w
|
|
|
|
|
LEFT JOIN part_costs pc
|
|
|
|
|
ON w.wonum = pc.wonum
|
|
|
|
|
WHERE
|
|
|
|
|
w.worktype = 'OH'
|
|
|
|
|
AND w.reportdate IS NOT NULL
|
|
|
|
|
AND w.actstart IS NOT NULL
|
|
|
|
|
AND w.actfinish IS NOT NULL
|
|
|
|
|
AND w.asset_unit IN ('3', '00')
|
|
|
|
|
AND w.wonum NOT LIKE 'T%'
|
|
|
|
|
)
|
|
|
|
|
SELECT
|
|
|
|
|
asset_location,
|
|
|
|
|
AVG(total_wo_cost) AS avg_cost
|
|
|
|
|
FROM wo_costs
|
|
|
|
|
GROUP BY asset_location
|
|
|
|
|
ORDER BY COUNT(wonum) DESC;
|
|
|
|
|
""")
|
|
|
|
|
|
|
|
|
|
asset_location,
|
|
|
|
|
AVG(total_wo_cost) AS avg_cost
|
|
|
|
|
FROM wo_costs
|
|
|
|
|
GROUP BY asset_location
|
|
|
|
|
ORDER BY COUNT(wonum) DESC;
|
|
|
|
|
""")
|
|
|
|
|
|
|
|
|
|
result = await collector_db.execute(query)
|
|
|
|
|
data = []
|
|
|
|
|
|
|
|
|
|
|