-- Bakım iş emri kaydı ve her iş akışı adımı sonrası çalışır (formdan, akıştan ve zamanlanmış işin açtığı emirden). -- Departman onaycıları: Onaycılar'da ekipmanın departmanı için Bakım onay yerindeki aktif kullanıcılar. -- Durum: departman onayı alınmamış emir Taslak'ta kalır; onay gelince Taslak Onaylandı olur, sonraki durumları -- kullanıcı seçer; gerçek başlangıç/bitişi formdaki Durum script'i doldurur. Departman onayıyla (ve onaydan sonra eklenen -- malzemelerde) Bakım Sarf Tüketimi teslimatı açılır; hurdaya ayrılan emirde açılmaz. CREATE OR REPLACE PROCEDURE public."Mm_P_WorkOrderAfterSave"(p_id uuid, p_user_id uuid DEFAULT NULL) LANGUAGE plpgsql AS $$ BEGIN IF p_id IS NULL THEN RETURN; END IF; UPDATE "Mm_T_WorkOrder" o SET "DeptApproverUserNames" = ( SELECT string_agg(u."UserName", '|') FROM "Inv_T_Product" p INNER JOIN "Adm_T_Approver" a ON a."DepartmentId" = p."EquipmentDepartmentId" INNER JOIN "AbpUsers" u ON u."UserName" = a."ApprovalUserName" AND u."IsDeleted" = false AND u."IsActive" = true AND u."TenantId" IS NOT DISTINCT FROM a."TenantId" WHERE p."Id" = o."EquipmentId" AND a."IsDeleted" = false AND a."IsActive" = true AND a."ApprovalArea" = 'Maintenance' AND a."TenantId" IS NOT DISTINCT FROM o."TenantId"), "Status" = CASE WHEN COALESCE(o."ApprovalStatus", '') <> 'Onaylandı' THEN 'Draft' WHEN o."Status" = 'Draft' THEN 'Approved' ELSE o."Status" END WHERE o."Id" = p_id; IF EXISTS (SELECT 1 FROM "Mm_T_WorkOrder" WHERE "Id" = p_id AND "ApprovalStatus" = 'Onaylandı' AND "Status" <> 'Scrapped') THEN CALL public."Mm_P_WorkOrderConsume"(p_id, p_user_id); END IF; END; $$;