Auftrags-Controller: überflüssiges "die"-Statement entfernt
[kivitendo-erp.git] / sql / Pg-upgrade2 / delete_close_follow_ups_when_order_is_deleted_closed.sql
1 -- @tag: delete_close_follow_ups_when_order_is_deleted_closed
2 -- @description: Wiedervorlagen löschen/schließen, wenn dazugehörige Belege gelöscht/geschlossen werden
3 -- @depends: delete_close_follow_ups_when_order_is_deleted_closed_fkey_deletion
4
5 ALTER TABLE follow_up_links ADD CONSTRAINT follow_up_links_follow_up_id_fkey FOREIGN KEY (follow_up_id) REFERENCES follow_ups (id) ON DELETE CASCADE;
6
7 CREATE OR REPLACE FUNCTION follow_up_delete_notes_trigger()
8 RETURNS TRIGGER AS $$
9   BEGIN
10     DELETE FROM notes
11     WHERE (trans_id     = OLD.id)
12       AND (trans_module = 'fu');
13     RETURN OLD;
14   END;
15 $$ LANGUAGE plpgsql;
16
17 CREATE OR REPLACE FUNCTION follow_up_delete_when_oe_is_deleted_trigger()
18 RETURNS TRIGGER AS $$
19   BEGIN
20     DELETE FROM follow_ups
21     WHERE id IN (
22       SELECT follow_up_id
23       FROM follow_up_links
24       WHERE (trans_id   = OLD.id)
25         AND (trans_type IN ('sales_quotation',   'sales_order',    'sales_delivery_order',    'sales_invoice',
26                             'request_quotation', 'purchase_order', 'purchase_delivery_order', 'purchase_invoice'))
27     );
28
29     RETURN OLD;
30   END;
31 $$ LANGUAGE plpgsql;
32
33 CREATE OR REPLACE FUNCTION follow_up_delete_when_customer_vendor_is_deleted_trigger()
34 RETURNS TRIGGER AS $$
35   BEGIN
36     DELETE FROM follow_ups
37     WHERE id IN (
38       SELECT follow_up_id
39       FROM follow_up_links
40       WHERE (trans_id   = OLD.id)
41         AND (trans_type IN ('customer', 'vendor'))
42     );
43
44     DELETE FROM notes
45     WHERE (trans_id     = OLD.id)
46       AND (trans_module = 'ct');
47
48     RETURN OLD;
49   END;
50 $$ LANGUAGE plpgsql;
51
52 -- ============================================================
53
54 DROP TRIGGER IF EXISTS follow_up_delete_notes ON follow_ups;
55
56 CREATE TRIGGER follow_up_delete_notes
57 AFTER DELETE ON follow_ups
58 FOR EACH ROW  EXECUTE PROCEDURE follow_up_delete_notes_trigger();
59
60 DROP TRIGGER IF EXISTS oe_before_delete_clear_follow_ups ON oe;
61
62 CREATE TRIGGER oe_before_delete_clear_follow_ups
63 BEFORE DELETE ON oe
64 FOR EACH ROW  EXECUTE PROCEDURE follow_up_delete_when_oe_is_deleted_trigger();
65
66 DROP TRIGGER IF EXISTS customer_before_delete_clear_follow_ups ON customer;
67 DROP TRIGGER IF EXISTS vendor_before_delete_clear_follow_ups   ON vendor;
68
69 CREATE TRIGGER customer_before_delete_clear_follow_ups
70 AFTER DELETE ON customer
71 FOR EACH ROW  EXECUTE PROCEDURE follow_up_delete_when_customer_vendor_is_deleted_trigger();
72
73 CREATE TRIGGER vendor_before_delete_clear_follow_ups
74 AFTER DELETE ON vendor
75 FOR EACH ROW  EXECUTE PROCEDURE follow_up_delete_when_customer_vendor_is_deleted_trigger();
76
77 -- ============================================================
78
79 CREATE OR REPLACE FUNCTION follow_up_close_when_oe_closed_trigger()
80 RETURNS TRIGGER AS $$
81   BEGIN
82     IF COALESCE(NEW.closed, FALSE) AND NOT COALESCE(OLD.closed, FALSE) THEN
83       UPDATE follow_ups
84       SET done = TRUE
85       WHERE id IN (
86         SELECT follow_up_id
87         FROM follow_up_links
88         WHERE (trans_id   = NEW.id)
89           AND (trans_type IN ('sales_quotation',   'sales_order',    'sales_delivery_order',
90                               'request_quotation', 'purchase_order', 'purchase_delivery_order'))
91       );
92     END IF;
93
94     RETURN NEW;
95   END;
96 $$ LANGUAGE plpgsql;
97
98 DROP TRIGGER IF EXISTS oe_on_update_close_follow_up ON oe;
99
100 CREATE TRIGGER  oe_on_update_close_follow_up
101 AFTER UPDATE ON oe
102 FOR EACH ROW  EXECUTE PROCEDURE follow_up_close_when_oe_closed_trigger();
103
104 DROP TRIGGER IF EXISTS delivery_orders_on_update_close_follow_up ON delivery_orders;
105
106 CREATE TRIGGER  delivery_orders_on_update_close_follow_up
107 AFTER UPDATE ON delivery_orders
108 FOR EACH ROW  EXECUTE PROCEDURE follow_up_close_when_oe_closed_trigger();