DB-Trigger, um sicher zu stellen, dass ein Lagerplatz auch zum Lager gehört.
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Mon, 30 Jun 2014 09:14:45 +0000 (11:14 +0200)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Mon, 30 Jun 2014 09:33:25 +0000 (11:33 +0200)
Betrifft #2485.

sql/Pg-upgrade2/check_bin_belongs_to_wh_trigger.sql [new file with mode: 0644]

diff --git a/sql/Pg-upgrade2/check_bin_belongs_to_wh_trigger.sql b/sql/Pg-upgrade2/check_bin_belongs_to_wh_trigger.sql
new file mode 100644 (file)
index 0000000..5b5e3d9
--- /dev/null
@@ -0,0 +1,28 @@
+-- @tag: check_bin_belongs_to_wh_trigger
+-- @description: Trigger, um sicher zu stellen, dass ein angegebener Lagerplatz auch zum Lager gehört.
+-- @depends: delivery_orders warehouse
+-- @encoding: utf-8
+
+CREATE FUNCTION check_bin_belongs_to_wh() RETURNS "trigger"
+  AS 'BEGIN
+        IF NEW.bin_id IS NULL AND NEW.warehouse_id IS NULL THEN
+          RETURN NEW;
+        END IF;
+        IF NEW.bin_id IN (SELECT id FROM bin WHERE warehouse_id = NEW.warehouse_id) THEN
+          RETURN NEW;
+        ELSE
+          RAISE EXCEPTION ''bin (id=%) does not belong to warehouse (id=%).'', NEW.bin_id, NEW.warehouse_id;
+          RETURN NULL;
+        END IF;
+      END;'
+  LANGUAGE plpgsql;
+
+
+CREATE TRIGGER check_bin_wh_delivery_order_items_stock BEFORE INSERT OR UPDATE ON delivery_order_items_stock
+  FOR EACH ROW EXECUTE PROCEDURE check_bin_belongs_to_wh();
+
+CREATE TRIGGER check_bin_wh_inventory BEFORE INSERT OR UPDATE ON inventory
+  FOR EACH ROW EXECUTE PROCEDURE check_bin_belongs_to_wh();
+
+CREATE TRIGGER check_bin_wh_parts BEFORE INSERT OR UPDATE ON parts
+  FOR EACH ROW EXECUTE PROCEDURE check_bin_belongs_to_wh();