53 lines
2.5 KiB
MySQL
53 lines
2.5 KiB
MySQL
|
|
-- 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;
|
|||
|
|
$$;
|