Issue #23448 Fix invoice performance.
[xtuple] / enyo-client / database / source / xt / views / invciteminfo.sql
1 select xt.create_view('xt.invciteminfo', $$
2
3   -- select distinct on allows us to add the aggregated tax total column
4   -- without having to inner join a temporarily grouped tax table or specify
5   -- two dozen group-bys
6   select
7     invcitem.*,
8     case when invcitem_item_id = -1 then true else false end as invcitem_is_misc,
9     invcitem_billed * invcitem_qty_invuomratio
10       * (invcitem_price / invcitem_price_invuomratio) as invcitem_ext_price,
11     sum(taxhist_tax) as invcitem_tax_total
12   from invcitem
13   left join invcitemtax on invcitem_id = taxhist_parent_id
14   group by invcitem_id
15
16 $$, false);
17
18 create or replace rule "_INSERT" as on insert to xt.invciteminfo do instead
19
20 insert into invcitem (
21   invcitem_id,
22   invcitem_invchead_id,
23   invcitem_linenumber,
24   invcitem_item_id,
25   invcitem_warehous_id,
26   invcitem_custpn,
27   invcitem_number,
28   invcitem_descrip,
29   invcitem_ordered,
30   invcitem_billed,
31   invcitem_custprice,
32   invcitem_price,
33   invcitem_notes,
34   invcitem_salescat_id,
35   invcitem_taxtype_id,
36   invcitem_qty_uom_id,
37   invcitem_qty_invuomratio,
38   invcitem_price_uom_id,
39   invcitem_price_invuomratio,
40   invcitem_coitem_id,
41   invcitem_updateinv,
42   invcitem_rev_accnt_id,
43   obj_uuid
44 ) values (
45   new.invcitem_id,
46   new.invcitem_invchead_id,
47   new.invcitem_linenumber,
48   new.invcitem_item_id,
49   new.invcitem_warehous_id,
50   new.invcitem_custpn,
51   new.invcitem_number,
52   new.invcitem_descrip,
53   new.invcitem_ordered,
54   new.invcitem_billed,
55   new.invcitem_custprice,
56   new.invcitem_price,
57   new.invcitem_notes,
58   new.invcitem_salescat_id,
59   new.invcitem_taxtype_id,
60   new.invcitem_qty_uom_id,
61   new.invcitem_qty_invuomratio,
62   new.invcitem_price_uom_id,
63   new.invcitem_price_invuomratio,
64   new.invcitem_coitem_id,
65   new.invcitem_updateinv,
66   new.invcitem_rev_accnt_id,
67   new.obj_uuid
68 );
69
70 create or replace rule "_UPDATE" as on update to xt.invciteminfo do instead
71
72 update invcitem set
73   invcitem_id = new.invcitem_id,
74   invcitem_invchead_id = new.invcitem_invchead_id,
75   invcitem_linenumber = new.invcitem_linenumber,
76   invcitem_item_id = new.invcitem_item_id,
77   invcitem_warehous_id = new.invcitem_warehous_id,
78   invcitem_custpn = new.invcitem_custpn,
79   invcitem_number = new.invcitem_number,
80   invcitem_descrip = new.invcitem_descrip,
81   invcitem_ordered = new.invcitem_ordered,
82   invcitem_billed = new.invcitem_billed,
83   invcitem_custprice = new.invcitem_custprice,
84   invcitem_price = new.invcitem_price,
85   invcitem_notes = new.invcitem_notes,
86   invcitem_salescat_id = new.invcitem_salescat_id,
87   invcitem_taxtype_id = new.invcitem_taxtype_id,
88   invcitem_qty_uom_id = new.invcitem_qty_uom_id,
89   invcitem_qty_invuomratio = new.invcitem_qty_invuomratio,
90   invcitem_price_uom_id = new.invcitem_price_uom_id,
91   invcitem_price_invuomratio = new.invcitem_price_invuomratio,
92   invcitem_coitem_id = new.invcitem_coitem_id,
93   invcitem_updateinv = new.invcitem_updateinv,
94   invcitem_rev_accnt_id = new.invcitem_rev_accnt_id,
95   obj_uuid = new.obj_uuid
96 where invcitem_id = old.invcitem_id;
97
98 create or replace rule "_DELETE" as on delete to xt.invciteminfo do instead
99
100 delete from invcitem where invcitem_id = old.invcitem_id;
101