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

37 lines
2.1 KiB
MySQL
Raw Permalink Normal View History

2026-10-11 14:01:11 +00:00
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;
2026-10-11 19:57:23 +00:00
IF p_action = 'Confirm' THEN
IF v_status <> 'Draft' THEN
RAISE EXCEPTION 'Yalnız taslak sipariş onaylanabilir.' USING ERRCODE = 'P0001', DETAIL = '50181';
END IF;
2026-10-11 14:01:11 +00:00
IF NOT EXISTS (SELECT 1 FROM "Prc_T_PurchaseOrderLine" WHERE "PurchaseOrderId" = p_id AND "IsDeleted" = false) THEN
2026-10-11 19:57:23 +00:00
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;
2026-10-19 14:35:08 +00:00
CALL public."Stk_P_TransferFromPurchaseOrder"(p_id, p_user_id);
2026-10-11 19:57:23 +00:00
ELSIF p_action = 'Send' THEN
IF v_status = 'Cancelled' THEN
RAISE EXCEPTION 'İptal edilmiş sipariş gönderilemez.' USING ERRCODE = 'P0001', DETAIL = '50183';
2026-10-11 14:01:11 +00:00
END IF;
2026-10-11 19:57:23 +00:00
CALL public."Prc_P_PurchaseOrderSend"(p_id, p_user_id);
2026-10-11 14:01:11 +00:00
ELSIF p_action = 'Cancel' THEN
2026-10-19 14:35:08 +00:00
IF EXISTS (SELECT 1 FROM "Stk_T_Transfer" WHERE "PurchaseOrderId" = p_id AND "IsDeleted" = false AND "Status" = 'Done') THEN
2026-10-12 21:43:05 +00:00
RAISE EXCEPTION 'Teslim alınmış (yapılmış alımı olan) sipariş iptal edilemez.' USING ERRCODE = 'P0001', DETAIL = '50318';
END IF;
2026-10-11 14:01:11 +00:00
UPDATE "Prc_T_PurchaseOrder" SET "Status" = 'Cancelled' WHERE "Id" = p_id;
2026-10-12 21:43:05 +00:00
-- Siparişin yapılmamış alımları da iptal olur; sipariş yeniden onaylanırsa yeni alım açılır.
2026-10-19 14:35:08 +00:00
UPDATE "Stk_T_Transfer" SET "Status" = 'Cancelled' WHERE "PurchaseOrderId" = p_id AND "IsDeleted" = false AND "Status" IN ('Draft', 'Waiting', 'Ready');
2026-10-11 14:01:11 +00:00
ELSIF p_action = 'Draft' THEN
2026-10-11 19:57:23 +00:00
IF v_status <> 'Cancelled' THEN
RAISE EXCEPTION 'Yalnız iptal edilmiş sipariş taslağa alınabilir.' USING ERRCODE = 'P0001', DETAIL = '50184';
END IF;
2026-10-11 14:01:11 +00:00
UPDATE "Prc_T_PurchaseOrder" SET "Status" = 'Draft', "ConfirmDate" = NULL WHERE "Id" = p_id;
END IF;
END;
$$;