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

31 lines
1.6 KiB
MySQL
Raw Normal View History

2026-10-14 09:07:11 +00:00
-- Planla diyaloğunun Onayla'sı (App.Prc.MaterialRequestPlan › UpdateCommand): talep kaleminin taslak planındaki her satırı
-- Prc_P_MaterialRequestPlan ile belgeye çevirir (iç transferler, stoktan karşılama, sonra teklif talepleri — stok payı kalemi transferlerden
-- sonra kapatabilsin) ve taslağı siler. Tek transaction'dır:
-- bir satır reddedilirse (stok, kalan, operasyon türü) hiçbir belge açılmaz ve taslak yerinde kalır.
CREATE OR REPLACE PROCEDURE public."Prc_P_MaterialRequestPlanConfirm"(
p_id uuid,
p_tenant_id uuid,
p_last_modifier_id uuid
)
LANGUAGE plpgsql AS $$
DECLARE r record;
BEGIN
PERFORM 1 FROM "Prc_T_MaterialRequestPlanLine" WHERE "MaterialRequestItemId" = p_id AND "IsDeleted" = false FOR UPDATE;
IF NOT FOUND THEN
RAISE EXCEPTION 'Onaylanacak taslak plan yok: önce Öner butonunu kullanın ya da İç Transfer veya Satınalma sekmesinde Plan Miktarı girin.'
USING ERRCODE = 'P0001', DETAIL = '50201';
END IF;
FOR r IN SELECT "PlanMethod", "Quantity", "SupplierId", "SourceLocationId"
FROM "Prc_T_MaterialRequestPlanLine"
WHERE "MaterialRequestItemId" = p_id AND "IsDeleted" = false
ORDER BY CASE "PlanMethod" WHEN 'Transfer' THEN 0 WHEN 'Stock' THEN 1 ELSE 2 END, "CreationTime"
LOOP
CALL public."Prc_P_MaterialRequestPlan"(p_id, r."PlanMethod", r."Quantity", r."SupplierId", r."SourceLocationId", p_tenant_id,
p_last_modifier_id);
END LOOP;
DELETE FROM "Prc_T_MaterialRequestPlanLine" WHERE "MaterialRequestItemId" = p_id;
END;
$$;