Improved all pending pos query

This commit is contained in:
ivarsbariss
2026-03-13 11:40:47 +01:00
parent 57f3e27710
commit 403c7ff86f
4 changed files with 4 additions and 304 deletions

File diff suppressed because one or more lines are too long

View File

@@ -1,153 +1 @@
select * from mpe.get_prototype_po_dashboard_data(array['34487','35355','37111','25502','27985']::text[])
UNION ALL
SELECT
datay.*,
ARRAY_TO_STRING(dataz.wo_item_number, ',') AS wo_item,
ARRAY_TO_STRING(dataz.work_orders, ',') AS wo_demanding,
dataz.total_demand AS wo_total_demand,
uom_name AS uom
FROM (
SELECT
item_number AS matl,
classcode_code AS matl_classcode,
item_descrip1 AS matl_desc,
item_descrip2 AS matl_spec,
itemsite_qtyonhand AS qoh,
SUM(CASE poh.pohead_status WHEN 'O' THEN 1 ELSE 0 END) AS po_released,
SUM(CASE poh.pohead_status WHEN 'U' THEN 1 ELSE 0 END) AS po_opened,
SUM(CASE poh.pohead_status WHEN 'C' THEN 1 ELSE 0 END) AS po_closed,
datax.poitem_duedate AS poitem_due
FROM item
JOIN itemsite
ON item.item_id = itemsite.itemsite_item_id
AND itemsite_warehous_id = 35
JOIN classcode
ON item.item_classcode_id = classcode.classcode_id
JOIN LATERAL (
SELECT DISTINCT
itemsite_id AS pohc_itemsite_id,
pohead_number,
pohead_status
FROM poitem
JOIN pohead
ON pohead.pohead_id = poitem.poitem_pohead_id
WHERE poitem_itemsite_id = itemsite.itemsite_id
) AS poh
ON poh.pohc_itemsite_id = itemsite.itemsite_id
LEFT JOIN LATERAL (
SELECT DISTINCT
itemsite_id,
poitem_duedate
FROM poitem
JOIN pohead
ON poitem.poitem_pohead_id = pohead.pohead_id
AND pohead.pohead_status = 'O'
WHERE poitem_itemsite_id = itemsite.itemsite_id
ORDER BY poitem_duedate
LIMIT 1
) AS datax
ON datax.itemsite_id = itemsite.itemsite_id
WHERE item_id IN (
SELECT DISTINCT wmtlit.item_id
FROM item
JOIN mpe.itemext
ON item.item_id = itemext.itemext_item_id
JOIN bomhead
ON bomhead_item_id = item.item_id
JOIN rev
ON bomhead_rev_id = rev_id
AND rev_status = 'P'
JOIN itemsite
ON item.item_id = itemsite.itemsite_item_id
AND itemsite_warehous_id = 35
JOIN wo
ON wo_status IN ('E','R','I')
AND wo_itemsite_id = itemsite.itemsite_id
AND wo_bom_rev_id = bomhead_rev_id
JOIN womatl
ON wo_id = womatl_wo_id
JOIN itemsite AS wmtlits
ON womatl_itemsite_id = wmtlits.itemsite_id
JOIN item AS wmtlit
ON wmtlits.itemsite_item_id = wmtlit.item_id
AND wmtlit.item_type = 'P'
WHERE array['35313']::text[] && itemext.itemext_root_bom
UNION
SELECT itemsite.itemsite_item_id
FROM poitem
JOIN itemsite
ON poitem.poitem_itemsite_id = itemsite.itemsite_id
WHERE poitem.poitem_expcat_id = 29
)
GROUP BY
item_number,
classcode_code,
item_descrip1,
item_descrip2,
itemsite_qtyonhand,
datax.poitem_duedate
) AS datay
LEFT JOIN (
SELECT DISTINCT ON (wmtlit.item_id)
ARRAY[(item.item_number || 'R' || rev.rev_number)]::text[] AS wo_item_number,
ARRAY[formatwonumber(womatl_wo_id)] AS work_orders,
wmtlit.item_number,
ROUND(
SUM(womatl_qtyreq - womatl_qtyiss)
* itemuomtouomratio(
wmtlit.item_id,
womatl_uom_id,
wmtlit.item_inv_uom_id
),
2
) AS total_demand
FROM item
JOIN mpe.itemext
ON item.item_id = itemext.itemext_item_id
JOIN bomhead
ON bomhead_item_id = item.item_id
JOIN rev
ON bomhead_rev_id = rev_id
AND rev_status = 'P'
JOIN itemsite
ON item.item_id = itemsite.itemsite_item_id
AND itemsite_warehous_id = 35
JOIN wo
ON wo_status IN ('E','R','I')
AND wo_itemsite_id = itemsite.itemsite_id
AND wo_bom_rev_id = bomhead_rev_id
JOIN womatl
ON wo_id = womatl_wo_id
JOIN itemsite AS wmtlits
ON womatl_itemsite_id = wmtlits.itemsite_id
JOIN item AS wmtlit
ON wmtlits.itemsite_item_id = wmtlit.item_id
AND wmtlit.item_type = 'P'
WHERE array['35313']::text[] && itemext.itemext_root_bom
GROUP BY
item.item_number,
rev.rev_number,
womatl_wo_id,
wmtlit.item_id,
wmtlit.item_number,
womatl_uom_id,
wmtlit.item_inv_uom_id
) AS dataz
ON datay.matl = dataz.item_number
JOIN item AS wmtlitem
ON datay.matl = wmtlitem.item_number
JOIN uom
ON wmtlitem.item_inv_uom_id = uom.uom_id
WHERE
(dataz.total_demand IS NULL)
OR (datay.qoh < 2.0 * dataz.total_demand)
ORDER BY datay.matl
select * from mpe.get_prototype_po_dashboard_data(array['34487','35355','37111','25502','27985','35313']::text[])

File diff suppressed because one or more lines are too long

View File

@@ -1,149 +1 @@
SELECT
datay.*,
ARRAY_TO_STRING(dataz.wo_item_number, ',') AS wo_item,
ARRAY_TO_STRING(dataz.work_orders, ',') AS wo_demanding,
dataz.total_demand AS wo_total_demand,
uom_name AS uom
FROM (
SELECT
item_number AS matl,
classcode_code AS matl_classcode,
item_descrip1 AS matl_desc,
item_descrip2 AS matl_spec,
itemsite_qtyonhand AS qoh,
SUM(CASE poh.pohead_status WHEN 'O' THEN 1 ELSE 0 END) AS po_released,
SUM(CASE poh.pohead_status WHEN 'U' THEN 1 ELSE 0 END) AS po_opened,
SUM(CASE poh.pohead_status WHEN 'C' THEN 1 ELSE 0 END) AS po_closed,
datax.poitem_duedate AS poitem_due
FROM item
JOIN itemsite
ON item.item_id = itemsite.itemsite_item_id
AND itemsite_warehous_id = 35
JOIN classcode
ON item.item_classcode_id = classcode.classcode_id
JOIN LATERAL (
SELECT DISTINCT
itemsite_id AS pohc_itemsite_id,
pohead_number,
pohead_status
FROM poitem
JOIN pohead
ON pohead.pohead_id = poitem.poitem_pohead_id
WHERE poitem_itemsite_id = itemsite.itemsite_id
) AS poh
ON poh.pohc_itemsite_id = itemsite.itemsite_id
LEFT JOIN LATERAL (
SELECT DISTINCT
itemsite_id,
poitem_duedate
FROM poitem
JOIN pohead
ON poitem.poitem_pohead_id = pohead.pohead_id
AND pohead.pohead_status = 'O'
WHERE poitem_itemsite_id = itemsite.itemsite_id
ORDER BY poitem_duedate
LIMIT 1
) AS datax
ON datax.itemsite_id = itemsite.itemsite_id
WHERE item_id IN (
SELECT DISTINCT wmtlit.item_id
FROM item
JOIN mpe.itemext
ON item.item_id = itemext.itemext_item_id
JOIN bomhead
ON bomhead_item_id = item.item_id
JOIN rev
ON bomhead_rev_id = rev_id
AND rev_status = 'P'
JOIN itemsite
ON item.item_id = itemsite.itemsite_item_id
AND itemsite_warehous_id = 35
JOIN wo
ON wo_status IN ('E','R','I')
AND wo_itemsite_id = itemsite.itemsite_id
AND wo_bom_rev_id = bomhead_rev_id
JOIN womatl
ON wo_id = womatl_wo_id
JOIN itemsite AS wmtlits
ON womatl_itemsite_id = wmtlits.itemsite_id
JOIN item AS wmtlit
ON wmtlits.itemsite_item_id = wmtlit.item_id
AND wmtlit.item_type = 'P'
WHERE array['35313']::text[] && itemext.itemext_root_bom
UNION
SELECT itemsite.itemsite_item_id
FROM poitem
JOIN itemsite
ON poitem.poitem_itemsite_id = itemsite.itemsite_id
WHERE poitem.poitem_expcat_id = 29
)
GROUP BY
item_number,
classcode_code,
item_descrip1,
item_descrip2,
itemsite_qtyonhand,
datax.poitem_duedate
) AS datay
LEFT JOIN (
SELECT DISTINCT ON (wmtlit.item_id)
ARRAY[(item.item_number || 'R' || rev.rev_number)]::text[] AS wo_item_number,
ARRAY[formatwonumber(womatl_wo_id)] AS work_orders,
wmtlit.item_number,
ROUND(
SUM(womatl_qtyreq - womatl_qtyiss)
* itemuomtouomratio(
wmtlit.item_id,
womatl_uom_id,
wmtlit.item_inv_uom_id
),
2
) AS total_demand
FROM item
JOIN mpe.itemext
ON item.item_id = itemext.itemext_item_id
JOIN bomhead
ON bomhead_item_id = item.item_id
JOIN rev
ON bomhead_rev_id = rev_id
AND rev_status = 'P'
JOIN itemsite
ON item.item_id = itemsite.itemsite_item_id
AND itemsite_warehous_id = 35
JOIN wo
ON wo_status IN ('E','R','I')
AND wo_itemsite_id = itemsite.itemsite_id
AND wo_bom_rev_id = bomhead_rev_id
JOIN womatl
ON wo_id = womatl_wo_id
JOIN itemsite AS wmtlits
ON womatl_itemsite_id = wmtlits.itemsite_id
JOIN item AS wmtlit
ON wmtlits.itemsite_item_id = wmtlit.item_id
AND wmtlit.item_type = 'P'
WHERE array['35313']::text[] && itemext.itemext_root_bom
GROUP BY
item.item_number,
rev.rev_number,
womatl_wo_id,
wmtlit.item_id,
wmtlit.item_number,
womatl_uom_id,
wmtlit.item_inv_uom_id
) AS dataz
ON datay.matl = dataz.item_number
JOIN item AS wmtlitem
ON datay.matl = wmtlitem.item_number
JOIN uom
ON wmtlitem.item_inv_uom_id = uom.uom_id
WHERE
(dataz.total_demand IS NULL)
OR (datay.qoh < 2.0 * dataz.total_demand)
ORDER BY datay.matl
select * from mpe.get_prototype_po_dashboard_data(array['35313']::text[])