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; 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 UPDATE "Prc_T_PurchaseOrder" SET "Status" = 'Cancelled' WHERE "Id" = p_id; 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; $$;