sozsoft-platform/configs/seeds/postgres/object/Prc_P_PurchaseOrderRecalc.sql
2026-10-11 17:01:11 +03:00

20 lines
1.3 KiB
PL/PgSQL

CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseOrderRecalc"(p_id uuid)
LANGUAGE plpgsql AS $$
BEGIN
UPDATE "Prc_T_PurchaseOrderLine" SET "Amount" = ROUND("Quantity" * "UnitPrice", 2)
WHERE "PurchaseOrderId" = p_id AND "IsDeleted" = false;
UPDATE "Prc_T_PurchaseOrder" o SET
"UntaxedAmount" = COALESCE((SELECT SUM(l."Amount") FROM "Prc_T_PurchaseOrderLine" l WHERE l."PurchaseOrderId" = p_id AND l."IsDeleted" = false), 0),
"TaxAmount" = COALESCE((SELECT SUM(ROUND(l."Amount" * l."TaxRate" / 100, 2)) FROM "Prc_T_PurchaseOrderLine" l WHERE l."PurchaseOrderId" = p_id AND l."IsDeleted" = false), 0),
"SourceDocument" = (SELECT string_agg(s."RequestNo", ', ' ORDER BY s."RequestNo")
FROM (SELECT DISTINCT r."RequestNo"
FROM "Prc_T_PurchaseOrderLine" l
INNER JOIN "Prc_T_MaterialRequestItem" i ON i."Id" = l."MaterialRequestItemId"
INNER JOIN "Prc_T_MaterialRequest" r ON r."Id" = i."MaterialRequestId"
WHERE l."PurchaseOrderId" = p_id AND l."IsDeleted" = false) s)
WHERE o."Id" = p_id;
UPDATE "Prc_T_PurchaseOrder" SET "TotalAmount" = "UntaxedAmount" + "TaxAmount" WHERE "Id" = p_id;
END;
$$;