sozsoft-platform/configs/seeds/postgres/object/Prc_P_MaterialRequestAfterSave.sql
2026-10-09 20:02:27 +03:00

66 lines
3 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

CREATE OR REPLACE PROCEDURE public."Prc_P_MaterialRequestAfterSave"(
"p_Id" uuid,
"p_UserId" uuid DEFAULT NULL
)
LANGUAGE plpgsql
AS $$
BEGIN
IF "p_Id" IS NULL THEN RETURN; END IF;
UPDATE "Prc_T_MaterialRequestItem" l SET "PlannedQuantity" = l."Quantity"
WHERE l."MaterialRequestId" = "p_Id" AND l."IsDeleted" = false AND l."PlannedQuantity" IS NULL;
UPDATE "Prc_T_MaterialRequest" r SET
"DeptApproverUserNames" = (
SELECT string_agg(u."UserName", '|')
FROM "Adm_T_Approver" a
INNER JOIN "AbpUsers" u ON u."Id" = a."ApproverUserId" AND u."IsDeleted" = false
WHERE a."IsDeleted" = false AND a."IsActive" = true AND a."ApprovalArea" = 'Purchase'
AND a."DepartmentId" = r."DepartmentId"
AND a."TenantId" IS NOT DISTINCT FROM r."TenantId"),
"PurchaseApproverUserNames" = (
SELECT string_agg(u."UserName", '|')
FROM "Adm_T_Approver" a
INNER JOIN "AbpUsers" u ON u."Id" = a."ApproverUserId" AND u."IsDeleted" = false
WHERE a."IsDeleted" = false AND a."IsActive" = true AND a."ApprovalArea" = 'PurchaseDesk'
AND a."TenantId" IS NOT DISTINCT FROM r."TenantId")
WHERE r."Id" = "p_Id";
UPDATE "Prc_T_MaterialRequest" r SET
"PurchaseApprovedBy" = COALESCE("p_UserId", r."LastModifierId"),
"PurchaseApprovalDate" = COALESCE(r."ApprovalDate", now()),
"PurchaseApprovalNote" = r."ApprovalNote"
WHERE r."Id" = "p_Id" AND r."PurchaseApprovedBy" IS NULL AND r."DeptApprovedBy" IS NOT NULL
AND r."ApprovalStatus" IN ('Onaylandı', 'Reddedildi');
UPDATE "Prc_T_MaterialRequest" r SET
"DeptApprovedBy" = COALESCE("p_UserId", r."LastModifierId"),
"DeptApprovalDate" = COALESCE(r."ApprovalDate", now()),
"DeptApprovalNote" = r."ApprovalNote"
WHERE r."Id" = "p_Id" AND r."DeptApprovedBy" IS NULL
AND r."ApprovalStatus" IN ('Satınalma Onayı', 'Onaylandı', 'Reddedildi');
UPDATE "Prc_T_MaterialRequest" r SET "Status" =
CASE
WHEN r."ApprovalStatus" = 'Departman Onayı' THEN 'DeptApproval'
WHEN r."ApprovalStatus" = 'Satınalma Onayı' THEN 'PurchaseApproval'
WHEN r."ApprovalStatus" = 'Reddedildi' THEN 'Rejected'
WHEN r."ApprovalStatus" = 'Onaylandı' THEN
CASE
WHEN s."Total" > 0 AND s."Closed" = s."Total" THEN 'Done'
WHEN s."Closed" > 0 THEN 'PartiallyDone'
WHEN s."Planned" > 0 THEN 'InProgress'
ELSE 'Approved'
END
ELSE 'Draft'
END
FROM (
SELECT COUNT(*) AS "Total",
COALESCE(SUM(CASE WHEN l."LineStatus" IN ('Done', 'Cancelled') THEN 1 ELSE 0 END), 0) AS "Closed",
COALESCE(SUM(CASE WHEN l."LineStatus" IN ('Planned', 'Done') THEN 1 ELSE 0 END), 0) AS "Planned"
FROM "Prc_T_MaterialRequestItem" l
WHERE l."MaterialRequestId" = "p_Id" AND l."IsDeleted" = false
) s
WHERE r."Id" = "p_Id";
END;
$$;