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

34 lines
1.8 KiB
MySQL
Raw Normal View History

2026-10-18 21:22:40 +00:00
-- 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;
$$;