let's get build_app running on a masterref database
[xtuple] / foundation-database / public / trigger_functions / wo.sql
1 CREATE OR REPLACE FUNCTION _woTrigger() RETURNS TRIGGER AS $$
2 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple.
3 -- See www.xtuple.com/CPAL for the full text of the software license.
4 DECLARE
5
6 BEGIN
7
8   IF (TG_OP = 'INSERT') THEN
9     PERFORM postEvent('WoCreated', 'W', NEW.wo_id,
10                       itemsite_warehous_id,
11                       (NEW.wo_number || '-' || NEW.wo_subnumber),
12                       NULL, NULL, NULL, NULL)
13     FROM itemsite
14     WHERE (itemsite_id=NEW.wo_itemsite_id)
15       AND (NEW.wo_duedate <= (CURRENT_DATE + itemsite_eventfence));
16
17     PERFORM postComment('ChangeLog', 'W', NEW.wo_id, 'Created');
18
19     IF (fetchMetricText('WONumberGeneration') IN ('A','O')) THEN
20       --- clear the number from the issue cache
21       PERFORM clearNumberIssue('WoNumber', NEW.wo_number);
22     END IF;
23
24     RETURN NEW;
25
26   ELSE
27       IF (TG_OP = 'DELETE') THEN
28       PERFORM postEvent('WoCancelled', 'W', OLD.wo_id,
29                         itemsite_warehous_id,
30                         (OLD.wo_number || '-' || OLD.wo_subnumber),
31                         NULL, NULL, NULL, NULL)
32       FROM itemsite
33       WHERE (itemsite_id=OLD.wo_itemsite_id)
34         AND (OLD.wo_duedate <= (CURRENT_DATE + itemsite_eventfence));
35
36       DELETE FROM docass WHERE docass_source_id = OLD.wo_id AND docass_source_type = 'W';
37       DELETE FROM docass WHERE docass_target_id = OLD.wo_id AND docass_target_type = 'W';
38
39       DELETE FROM comment
40       WHERE ( (comment_source='W')
41        AND (comment_source_id=OLD.wo_id) );
42
43       DELETE FROM charass
44        WHERE ((charass_target_type='W')
45          AND  (charass_target_id=OLD.wo_id));
46
47        RETURN OLD;
48
49     ELSE
50       IF (TG_OP = 'UPDATE') THEN
51
52         IF (NEW.wo_qtyord <> OLD.wo_qtyord) THEN
53           PERFORM postEvent('WoQtyChanged', 'W', NEW.wo_id,
54                             itemsite_warehous_id,
55                             (NEW.wo_number || '-' || NEW.wo_subnumber),
56                             NEW.wo_qtyord, OLD.wo_qtyord, NULL, NULL)
57           FROM itemsite
58           WHERE (itemsite_id=NEW.wo_itemsite_id)
59             AND ( (NEW.wo_duedate <= (CURRENT_DATE + itemsite_eventfence))
60              OR   (OLD.wo_duedate <= (CURRENT_DATE + itemsite_eventfence)) );
61
62           PERFORM postComment( 'ChangeLog', 'W', NEW.wo_id,
63                                ( 'Qty. Ordered Changed from ' || formatQty(OLD.wo_qtyord) ||
64                                  ' to ' || formatQty(NEW.wo_qtyord ) ) );
65         END IF;
66
67         IF (NEW.wo_duedate <> OLD.wo_duedate) THEN
68           PERFORM postEvent('WoDueDateChanged', 'W', NEW.wo_id,
69                             itemsite_warehous_id,
70                             (NEW.wo_number || '-' || NEW.wo_subnumber),
71                             NULL, NULL, NEW.wo_duedate, OLD.wo_duedate)
72           FROM itemsite
73           WHERE (itemsite_id=NEW.wo_itemsite_id)
74             AND ( (NEW.wo_duedate <= (CURRENT_DATE + itemsite_eventfence))
75              OR   (OLD.wo_duedate <= (CURRENT_DATE + itemsite_eventfence)) );
76
77           PERFORM postComment( 'ChangeLog', 'W', NEW.wo_id,
78                                ( 'Due Date Changed from ' || formatDate(OLD.wo_duedate) ||
79                                  ' to ' || formatDate(NEW.wo_duedate ) ) );
80         END IF;
81
82         IF (NEW.wo_status <> OLD.wo_status) THEN
83           PERFORM postComment( 'ChangeLog', 'W', NEW.wo_id,
84                                ('Status Changed from ' || OLD.wo_status || ' to ' || NEW.wo_status) );
85         END IF;
86
87       END IF;
88     END IF;
89   END IF;
90
91   IF (TG_OP = 'UPDATE') THEN
92     IF (NEW.wo_prj_id <> OLD.wo_prj_id) THEN
93       UPDATE wo SET wo_prj_id=NEW.wo_prj_id
94       WHERE (wo_ordtype='W')
95         AND (wo_ordid=NEW.wo_id);
96     END IF;
97   END IF;
98
99   RETURN NEW;
100
101 END;
102 $$ LANGUAGE 'plpgsql';
103
104 DROP TRIGGER IF EXISTS woTrigger ON wo;
105 CREATE TRIGGER woTrigger BEFORE INSERT OR UPDATE OR DELETE ON wo FOR EACH ROW EXECUTE PROCEDURE _woTrigger();