66 lines
3 KiB
PL/PgSQL
66 lines
3 KiB
PL/PgSQL
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;
|
||
$$;
|