3cbf0093a64db95e40b29a2e56628f79e6998489
[xtuple] / foundation-database / public / trigger_functions / curr_symbol.sql
1 CREATE OR REPLACE FUNCTION currOneBase() 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   baseCount INTEGER := 0;
6 BEGIN
7   IF NEW.curr_base = TRUE THEN
8     SELECT count(*)
9       INTO baseCount
10       FROM curr_symbol
11       WHERE curr_base = TRUE
12         AND curr_id != NEW.curr_id;
13     IF baseCount > 0 THEN
14       RAISE EXCEPTION
15           ''Cannot make % - % the base currency because one is already defined.'',
16           NEW.curr_symbol, NEW.curr_abbr;
17     ELSE
18       SELECT count(*)
19         INTO baseCount
20         FROM curr_rate
21         WHERE curr_id = NEW.curr_id;
22       IF baseCount = 0 THEN
23         -- put a row in the curr_rate table to avoid special-case
24         -- code for converting base currency to base currency
25         INSERT INTO curr_rate
26           (curr_id, curr_rate, curr_effective, curr_expires) VALUES
27           (NEW.curr_id, 1, startOfTime(), endOfTime());
28       END IF;
29     END IF;
30   END IF;
31   RETURN NEW;
32 END;
33 ' LANGUAGE 'plpgsql';
34
35 DROP TRIGGER currOneBase ON curr_symbol;
36 CREATE TRIGGER currOneBase AFTER INSERT OR UPDATE ON curr_symbol
37     FOR EACH ROW EXECUTE PROCEDURE currOneBase();