let administrators modify package contents even if they are not marked as such to...
[xtuple] / foundation-database / public / trigger_functions / pkgcmd.sql
1 -- NO create trigger statements here. the updater will create them.
2
3 SELECT dropIfExists('TRIGGER', 'pkgcmdbeforetrigger');
4 CREATE OR REPLACE FUNCTION _pkgcmdbeforetrigger() RETURNS "trigger" AS $$
5 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple. 
6 -- See www.xtuple.com/CPAL for the full text of the software license.
7 DECLARE
8   _cmdid       INTEGER;
9   _debug        BOOL := false;
10
11 BEGIN
12     IF (TG_OP = 'UPDATE') THEN
13       IF (_debug) THEN
14         RAISE NOTICE 'OLD.cmd_name %, NEW.cmd_name %',
15                      OLD.cmd_name, NEW.cmd_name;
16       END IF;
17
18       IF (NEW.cmd_name != OLD.cmd_name) THEN
19         SELECT cmd_id INTO _cmdid FROM cmd WHERE cmd_name=NEW.cmd_name;
20         IF (FOUND) THEN
21           RAISE EXCEPTION 'Cannot change command name % because another command with that name already exists.', NEW.cmd_name;
22         END IF;
23       END IF;
24
25     ELSIF (TG_OP = 'INSERT') THEN
26       IF (_debug) THEN
27         RAISE NOTICE 'inserting NEW.cmd_name %', NEW.cmd_name;
28       END IF;
29       SELECT cmd_id INTO _cmdid FROM cmd WHERE cmd_name=NEW.cmd_name;
30       IF (FOUND) THEN
31         RAISE EXCEPTION 'Cannot create new command % because another command with that name already exists.', NEW.cmd_name;
32       END IF;
33
34     ELSIF (TG_OP = 'DELETE') THEN
35       DELETE FROM cmdarg WHERE cmdarg_cmd_id=OLD.cmd_id;
36
37       RETURN OLD;
38     END IF;
39
40     RETURN NEW;
41   END;
42 $$ LANGUAGE 'plpgsql';
43
44 CREATE OR REPLACE FUNCTION _pkgcmdalterTrigger() RETURNS TRIGGER AS $$
45 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple. 
46 -- See www.xtuple.com/CPAL for the full text of the software license.
47 BEGIN
48   IF (pkgMayBeModified(TG_TABLE_SCHEMA) OR isDba()) THEN
49     IF (TG_OP = 'DELETE') THEN
50       RETURN OLD;
51     ELSE
52       RETURN NEW;
53     END IF;
54   END IF;
55
56   IF (TG_OP = 'INSERT') THEN
57     RAISE EXCEPTION 'You may not create custom commands in packages except using the xTuple Updater utility';
58
59   ELSIF (TG_OP = 'UPDATE') THEN
60     RAISE EXCEPTION 'You may not alter custom commands in packages except using the xTuple Updater utility';
61
62   ELSIF (TG_OP = 'DELETE') THEN
63     RAISE EXCEPTION 'You may not delete custom commands from packages. Try deleting or disabling the package.';
64
65   END IF;
66
67   RETURN NEW;
68 END;
69
70 $$ LANGUAGE 'plpgsql';
71
72 CREATE OR REPLACE FUNCTION _pkgcmdaftertrigger() RETURNS TRIGGER AS $$
73 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple. 
74 -- See www.xtuple.com/CPAL for the full text of the software license.
75 BEGIN
76   IF (TG_OP = 'DELETE') THEN
77     RETURN OLD;
78   END IF;
79
80   RETURN NEW;
81 END;
82 $$ LANGUAGE 'plpgsql';