24 lines
1.4 KiB
PL/PgSQL
24 lines
1.4 KiB
PL/PgSQL
-- 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;
|
||
$$;
|