From a650b72c192e922e594050d04d7e6ea60f419a66 Mon Sep 17 00:00:00 2001 From: Cizz22 Date: Thu, 18 Sep 2025 04:29:42 +0700 Subject: [PATCH] fix query --- src/sparepart/service.py | 58 ++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 35 deletions(-) diff --git a/src/sparepart/service.py b/src/sparepart/service.py index 18f8087..be12328 100644 --- a/src/sparepart/service.py +++ b/src/sparepart/service.py @@ -33,56 +33,44 @@ async def get_all(db_session: DbSession): h.num as pr_number, h.issue_date as pr_issue_date, h.status as pr_status, - pl.qty_ordered as pr_qty_ordered + pl.qty_ordered as pr_qty_ordered, + pl.description FROM public.maximo_sparepart_pr_po h JOIN public.maximo_sparepart_pr_po_line pl ON h.num = pl.num WHERE h.type = 'PR' AND h.issue_date IS NOT NULL AND h.num LIKE 'K%' ORDER BY pl.item_num, TO_DATE(h.issue_date, 'YYYY-MM-DD') DESC - ) +) SELECT DISTINCT ON (pr.item_num) pr.item_num, - (SELECT description FROM public.maximo_sparepart_pr_po_line WHERE item_num = pr.item_num LIMIT 1) as description, - COALESCE((SELECT curbaltotal FROM public.maximo_inventory WHERE itemnum = pr.item_num), 0) as current_balance_total, + pr.description, + COALESCE(i.curbaltotal, 0) as current_balance_total, pr.pr_number, pr.pr_issue_date, pr.pr_qty_ordered, CASE - WHEN EXISTS ( - SELECT 1 FROM public.maximo_sparepart_pr_po - WHERE type = 'PO' AND num = pr.pr_number - ) THEN 'YES' + WHEN po.po_number IS NOT NULL THEN 'YES' ELSE 'NO' END as po_exists, - COALESCE(( - SELECT pl.qty_received - FROM public.maximo_sparepart_pr_po h - JOIN public.maximo_sparepart_pr_po_line pl ON h.num = pl.num - WHERE h.type = 'PO' - AND h.num = pr.pr_number - AND pl.item_num = pr.item_num - LIMIT 1 - ), 0) as po_qty_received, - COALESCE(( - SELECT pl.qty_ordered - FROM public.maximo_sparepart_pr_po h - JOIN public.maximo_sparepart_pr_po_line pl ON h.num = pl.num - WHERE h.type = 'PO' - AND h.num = pr.pr_number - AND pl.item_num = pr.item_num - LIMIT 1 - ), 0) as po_qty_ordered, - COALESCE(( - SELECT h.estimated_arrival_date - FROM public.maximo_sparepart_pr_po h - JOIN public.maximo_sparepart_pr_po_line pl ON h.num = pl.num - WHERE h.type = 'PO' - AND h.num = pr.pr_number - AND pl.item_num = pr.item_num - LIMIT 1 - ), '') as po_estimated_arrival_date + COALESCE(po.qty_received, 0) as po_qty_received, + COALESCE(po.qty_ordered, 0) as po_qty_ordered, + COALESCE(po.estimated_arrival_date, '') as po_estimated_arrival_date FROM latest_prs pr + LEFT JOIN public.maximo_inventory i ON pr.item_num = i.itemnum + LEFT JOIN LATERAL ( + SELECT + h.num as po_number, + pl.qty_received, + pl.qty_ordered, + h.estimated_arrival_date + FROM public.maximo_sparepart_pr_po h + JOIN public.maximo_sparepart_pr_po_line pl ON h.num = pl.num + WHERE h.type = 'PO' + AND h.num = pr.pr_number + AND pl.item_num = pr.item_num + LIMIT 1 + ) po ON true ORDER BY pr.item_num; """)