f6d63977c109d33547efe726ac094a0a52a8faa9
[xtuple] / foundation-database / public / trigger_functions / pack.sql
1
2 CREATE OR REPLACE FUNCTION _packBeforeTrigger() RETURNS TRIGGER AS $$
3 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple. 
4 -- See www.xtuple.com/CPAL for the full text of the software license.
5 DECLARE
6   _cmnttypeid INTEGER;
7 BEGIN
8   SELECT cmnttype_id INTO _cmnttypeid
9     FROM cmnttype
10     WHERE (cmnttype_name='ChangeLog');
11   IF (FOUND) THEN
12     IF ((TG_OP = 'INSERT') AND (NEW.pack_head_id) IS NOT NULL)THEN
13       PERFORM postComment(_cmnttypeid, 'S', NEW.pack_head_id, 'Added to Packing List Batch');
14     END IF;
15   END IF;
16   IF ((TG_OP = 'INSERT') OR (TG_OP = 'UPDATE')) THEN
17     IF (NEW.pack_shiphead_id IS NOT NULL
18          AND NEW.pack_shiphead_id NOT IN (SELECT shiphead_id
19                                FROM shiphead
20                                WHERE (shiphead_order_id=NEW.pack_head_id)
21                                  AND (shiphead_order_type=NEW.pack_head_type))) THEN
22       RAISE EXCEPTION 'Shipment does not exist for % id %',
23                       NEW.pack_head_type, NEW.pack_head_id;
24       RETURN OLD;
25     END IF;
26
27     IF (NEW.pack_head_type = 'SO'
28         AND NEW.pack_head_id   IN (SELECT cohead_id FROM cohead)) THEN
29       RETURN NEW;
30
31     ELSEIF (NEW.pack_head_type = 'TO') THEN
32       IF (NOT fetchMetricBool('MultiWhs')) THEN
33         RAISE EXCEPTION 'Transfer Orders are not supported by this version of the application';
34       ELSEIF (NEW.pack_head_id IN (SELECT tohead_id FROM tohead)) THEN
35         RETURN NEW;
36       END IF;
37     END IF;
38
39     RAISE EXCEPTION '% with id % does not exist',
40                     NEW.pack_head_type, NEW.pack_head_id;
41     RETURN OLD;
42
43   END IF;
44
45   RETURN NEW;
46 END;
47 $$ LANGUAGE 'plpgsql';
48
49 DROP TRIGGER packBeforeTrigger ON pack;
50 CREATE TRIGGER packBeforeTrigger BEFORE INSERT OR UPDATE ON pack FOR EACH ROW EXECUTE PROCEDURE _packBeforeTrigger();