57 lines
1.4 KiB
PL/PgSQL
57 lines
1.4 KiB
PL/PgSQL
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (SELECT 1 FROM pg_language WHERE lanname = 'plpgsql') THEN
|
|
CREATE LANGUAGE plpgsql;
|
|
END IF;
|
|
END $$;
|
|
|
|
CREATE OR REPLACE FUNCTION trg_block_delivered_sales_orders_head()
|
|
RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
IF OLD.status = 'delivered' THEN
|
|
RAISE EXCEPTION '已交付的销售订单禁止修改或删除';
|
|
END IF;
|
|
|
|
IF TG_OP = 'DELETE' THEN
|
|
RETURN OLD;
|
|
END IF;
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|
|
|
|
DROP TRIGGER IF EXISTS block_delivered_sales_orders_head ON sales_orders;
|
|
CREATE TRIGGER block_delivered_sales_orders_head
|
|
BEFORE UPDATE OR DELETE ON sales_orders
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION trg_block_delivered_sales_orders_head();
|
|
|
|
CREATE OR REPLACE FUNCTION trg_block_delivered_sales_orders_items()
|
|
RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
DECLARE
|
|
v_status text;
|
|
BEGIN
|
|
SELECT status INTO v_status
|
|
FROM sales_orders
|
|
WHERE id = COALESCE(NEW.order_id, OLD.order_id);
|
|
|
|
IF v_status = 'delivered' THEN
|
|
RAISE EXCEPTION '已交付的销售订单明细禁止变更';
|
|
END IF;
|
|
|
|
IF TG_OP = 'DELETE' THEN
|
|
RETURN OLD;
|
|
END IF;
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|
|
|
|
DROP TRIGGER IF EXISTS block_delivered_sales_orders_items ON sales_order_items;
|
|
CREATE TRIGGER block_delivered_sales_orders_items
|
|
BEFORE INSERT OR UPDATE OR DELETE ON sales_order_items
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION trg_block_delivered_sales_orders_items();
|