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

53 lines
2.5 KiB
MySQL
Raw Normal View History

2026-10-18 21:22:40 +00:00
-- Malzeme satırı ekipmanın departmanına bağlı bir iç konumdaki stok satırından (ürün + lot/seri) seçilir. Lookup bunu
-- süzer, kayıt burada doğrulanır: ürün, lot ve birim stok satırından yazılır (formdaki kopya değil stok esastır), miktar
-- eldeki miktarı aşamaz. İş emri departman onayını almışsa satır hemen Bakım Sarf Tüketimi teslimatına eklenir.
CREATE OR REPLACE PROCEDURE public."Mm_P_WorkOrderMaterialAfterSave"(p_id uuid, p_user_id uuid DEFAULT NULL)
LANGUAGE plpgsql
AS $$
DECLARE
v_order uuid;
v_loc uuid;
v_stock uuid;
v_qty numeric(18, 4);
v_dept uuid;
v_approved boolean;
v_stock_loc uuid;
v_on_hand numeric(18, 4);
BEGIN
IF p_id IS NULL THEN RETURN; END IF;
SELECT m."WorkOrderId", m."LocationId", m."StockId", m."Quantity", p."EquipmentDepartmentId",
COALESCE(o."ApprovalStatus", '') = 'Onaylandı'
INTO v_order, v_loc, v_stock, v_qty, v_dept, v_approved
FROM "Mm_T_WorkOrderMaterial" m
INNER JOIN "Mm_T_WorkOrder" o ON o."Id" = m."WorkOrderId"
LEFT JOIN "Inv_T_Product" p ON p."Id" = o."EquipmentId"
WHERE m."Id" = p_id AND m."IsDeleted" = false AND m."ConsumptionTransferId" IS NULL;
IF v_order IS NULL THEN RETURN; END IF;
IF v_loc IS NOT NULL AND NOT EXISTS (SELECT 1 FROM "Inv_T_Location"
WHERE "Id" = v_loc AND "LocationType" = 'Internal' AND "DepartmentId" = v_dept) THEN
RAISE EXCEPTION 'Depo/konum ekipmanın departmanına ait bir iç konum olmalıdır.' USING ERRCODE = 'P0001', DETAIL = '50409';
END IF;
IF v_stock IS NOT NULL THEN
SELECT "LocationId", "Quantity" INTO v_stock_loc, v_on_hand FROM "Inv_T_Stock" WHERE "Id" = v_stock AND "IsDeleted" = false;
IF v_stock_loc IS NULL OR v_stock_loc IS DISTINCT FROM v_loc THEN
RAISE EXCEPTION 'Seçilen ürün - lot/seri satırı seçilen depo/konumda değil.' USING ERRCODE = 'P0001', DETAIL = '50410';
END IF;
IF v_qty > v_on_hand THEN
RAISE EXCEPTION 'Miktar seçilen lot/serinin eldeki miktarını aşamaz.' USING ERRCODE = 'P0001', DETAIL = '50411';
END IF;
UPDATE "Mm_T_WorkOrderMaterial" m SET "ProductId" = s."ProductId", "LotNo" = NULLIF(s."LotNo", ''), "UomId" = s."UomId"
FROM "Inv_T_Stock" s
WHERE s."Id" = m."StockId" AND m."Id" = p_id;
END IF;
IF v_approved THEN
CALL public."Mm_P_WorkOrderConsume"(v_order, p_user_id);
END IF;
END;
$$;