-- 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; $$;