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; $$;