sozsoft-platform/configs/seeds/postgres/object/Prc_P_MaterialRequestAfterSave.sql

67 lines
3 KiB
MySQL
Raw Normal View History

2026-10-09 17:02:27 +00:00
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;
$$;