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