33 lines
1.8 KiB
PL/PgSQL
33 lines
1.8 KiB
PL/PgSQL
-- 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;
|
||
$$;
|