30 lines
1.6 KiB
PL/PgSQL
30 lines
1.6 KiB
PL/PgSQL
-- 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;
|
||
$$;
|