pgsql/investigations/ar-cash.sql
[Pman.Xtuple] / pgsql / x-fifo-invfifopos.sql
1
2
3 -- used to determine if fifo adjustment is needed on the itemsite.
4
5  
6 create table invfifopos (
7     invfifopos_itemsite_id integer NOT NULL UNIQUE,
8     
9     -- how much did the last run adjust it by.
10     invfifopos_lastadjustment   numeric(18, 6)  NOT NULL,
11     
12     
13     -- what was the last id that was run.
14     invfifopos_last_invdetail_id INT DEFAULT 0,
15     
16     
17     CONSTRAINT  invfifopos_itemsite_id_fk FOREIGN KEY ( invfifopos_itemsite_id) REFERENCES itemsite (itemsite_id) 
18    
19 );
20
21
22 alter table invfifopos alter column invfifopos_lastadjustment type numeric(24,2);
23
24
25 GRANT ALL ON TABLE invfifo TO admin;
26 GRANT ALL ON TABLE invfifo TO xtrole;
27
28
29 CREATE INDEX invfifopos_itemsite_id_indx
30   ON invfifopos
31   USING btree
32   (invfifopos_itemsite_id);
33
34
35 CREATE INDEX invfifopos_last_invdetail_id_indx
36   ON invfifopos
37   USING btree
38   (invfifopos_last_invdetail_id);
39  
40  
41 CREATE INDEX invfifopos_lastadjustment_indx
42   ON invfifopos
43   USING btree
44   (invfifopos_lastadjustment);
45
46  
47 CREATE OR REPLACE FUNCTION invfifopos_update(integer, integer, numeric)
48     RETURNS  boolean
49 AS $BODY$
50 DECLARE    
51     
52     i_itemsite_id  ALIAS FOR $1;
53     i_invdetail_id ALIAS FOR $2;
54     i_lastadjustment ALIAS FOR $3; 
55     v_id INTEGER;
56     
57  BEGIN   
58     
59     SELECT
60             invfifopos_last_invdetail_id
61         INTO
62             v_id
63         FROM
64              invfifopos
65         WHERE
66             invfifopos_itemsite_id = i_itemsite_id;
67     
68     IF FOUND THEN
69         
70         UPDATE 
71                 invfifopos
72             SET
73                 invfifopos_last_invdetail_id = i_invdetail_id,
74                 invfifopos_lastadjustment = i_lastadjustment
75             WHERE
76                 invfifopos_itemsite_id =  i_itemsite_id;
77                 
78                 
79         RETURN true;
80     END IF;
81     
82     INSERT INTO 
83            invfifopos
84         ( invfifopos_itemsite_id , invfifopos_lastadjustment  , invfifopos_last_invdetail_id )
85         VALUES
86             (i_itemsite_id, i_lastadjustment, i_invdetail_id);
87         
88     
89     
90     RETURN true;
91    END;
92 $BODY$
93   LANGUAGE plpgsql VOLATILE
94   COST 100;
95   
96 ALTER FUNCTION  invfifopos_update(integer, integer, numeric)
97   OWNER TO admin;
98