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

25 lines
1.4 KiB
MySQL
Raw Normal View History

2026-10-14 09:07:11 +00:00
-- Plan Takibi'nin Geri Al'ı (App.Prc.MaterialRequestPlanTrack › UpdateCommand): stoktan karşılamayı geri alır. Stoktan karşılama belge
-- açmadığı için geri dönüşü kalemin kendisidir: stoktan karşılanan miktar teslim edilenden düşülür ve sıfırlanır, kalanı yeniden açılan
-- kapalı kalem Bekliyor'a döner ve Planlama'da yeniden planlanır (Prc_P_MaterialRequestItemSync ile aynı kural).
CREATE OR REPLACE PROCEDURE public."Prc_P_MaterialRequestStockUndo"(
p_id uuid,
p_tenant_id uuid,
p_last_modifier_id uuid
)
LANGUAGE plpgsql AS $$
BEGIN
UPDATE "Prc_T_MaterialRequestItem"
SET "DeliveredQuantity" = GREATEST("DeliveredQuantity" - "FromStockQuantity", 0),
"FromStockQuantity" = 0, "LastModificationTime" = NOW() AT TIME ZONE 'UTC', "LastModifierId" = p_last_modifier_id
WHERE "Id" = p_id AND "IsDeleted" = false AND "FromStockQuantity" > 0 AND "LineStatus" IN ('Waiting', 'Done')
AND "TenantId" IS NOT DISTINCT FROM p_tenant_id;
IF NOT FOUND THEN
RAISE EXCEPTION 'Geri alınacak stoktan karşılama yok ya da kalem kapatılmış.' USING ERRCODE = 'P0001', DETAIL = '50202';
END IF;
UPDATE "Prc_T_MaterialRequestItem" i SET "LineStatus" = 'Waiting'
FROM public."Prc_V_MaterialRequestItemPlan" p
WHERE p."Id" = i."Id" AND i."Id" = p_id AND i."LineStatus" = 'Done' AND p."RemainingQuantity" > 0 AND i."DeliveredQuantity" < i."Quantity";
END;
$$;