52 lines
2.5 KiB
PL/PgSQL
52 lines
2.5 KiB
PL/PgSQL
-- 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."Mnt_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 "Mnt_T_WorkOrderMaterial" m
|
||
INNER JOIN "Mnt_T_WorkOrder" o ON o."Id" = m."WorkOrderId"
|
||
LEFT JOIN "Stk_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 "Stk_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 "Stk_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 "Mnt_T_WorkOrderMaterial" m SET "ProductId" = s."ProductId", "LotNo" = NULLIF(s."LotNo", ''), "UomId" = s."UomId"
|
||
FROM "Stk_T_Stock" s
|
||
WHERE s."Id" = m."StockId" AND m."Id" = p_id;
|
||
END IF;
|
||
|
||
IF v_approved THEN
|
||
CALL public."Mnt_P_WorkOrderConsume"(v_order, p_user_id);
|
||
END IF;
|
||
END;
|
||
$$;
|