sozsoft-platform/configs/seeds/postgres/object/Prc_P_PurchaseOrderSetStatus.sql
2026-10-13 00:43:05 +03:00

36 lines
2.1 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

CREATE OR REPLACE PROCEDURE public."Prc_P_PurchaseOrderSetStatus"(p_id uuid, p_action varchar, p_user_id uuid DEFAULT NULL)
LANGUAGE plpgsql AS $$
DECLARE v_status varchar(16);
BEGIN
SELECT "Status" INTO v_status FROM "Prc_T_PurchaseOrder" WHERE "Id" = p_id;
UPDATE "Prc_T_PurchaseOrder" SET "PendingAction" = NULL WHERE "Id" = p_id;
IF p_action = 'Confirm' THEN
IF v_status <> 'Draft' THEN
RAISE EXCEPTION 'Yalnız taslak sipariş onaylanabilir.' USING ERRCODE = 'P0001', DETAIL = '50181';
END IF;
IF NOT EXISTS (SELECT 1 FROM "Prc_T_PurchaseOrderLine" WHERE "PurchaseOrderId" = p_id AND "IsDeleted" = false) THEN
RAISE EXCEPTION 'Kalemi olmayan sipariş onaylanamaz.' USING ERRCODE = 'P0001', DETAIL = '50182';
END IF;
UPDATE "Prc_T_PurchaseOrder" SET "Status" = 'Purchase', "ConfirmDate" = NOW() AT TIME ZONE 'UTC' WHERE "Id" = p_id;
CALL public."Inv_P_TransferFromPurchaseOrder"(p_id, p_user_id);
ELSIF p_action = 'Send' THEN
IF v_status = 'Cancelled' THEN
RAISE EXCEPTION 'İptal edilmiş sipariş gönderilemez.' USING ERRCODE = 'P0001', DETAIL = '50183';
END IF;
CALL public."Prc_P_PurchaseOrderSend"(p_id, p_user_id);
ELSIF p_action = 'Cancel' THEN
IF EXISTS (SELECT 1 FROM "Inv_T_Transfer" WHERE "PurchaseOrderId" = p_id AND "IsDeleted" = false AND "Status" = 'Done') THEN
RAISE EXCEPTION 'Teslim alınmış (yapılmış alımı olan) sipariş iptal edilemez.' USING ERRCODE = 'P0001', DETAIL = '50318';
END IF;
UPDATE "Prc_T_PurchaseOrder" SET "Status" = 'Cancelled' WHERE "Id" = p_id;
-- Siparişin yapılmamış alımları da iptal olur; sipariş yeniden onaylanırsa yeni alım açılır.
UPDATE "Inv_T_Transfer" SET "Status" = 'Cancelled' WHERE "PurchaseOrderId" = p_id AND "IsDeleted" = false AND "Status" IN ('Draft', 'Waiting', 'Ready');
ELSIF p_action = 'Draft' THEN
IF v_status <> 'Cancelled' THEN
RAISE EXCEPTION 'Yalnız iptal edilmiş sipariş taslağa alınabilir.' USING ERRCODE = 'P0001', DETAIL = '50184';
END IF;
UPDATE "Prc_T_PurchaseOrder" SET "Status" = 'Draft', "ConfirmDate" = NULL WHERE "Id" = p_id;
END IF;
END;
$$;