summaryrefslogtreecommitdiff
path: root/sql-ledger/sql/Pg-upgrade-2.3.0-2.3.1.sql
blob: 866774ad9072f6c732a1ffb335d21d420542a16a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
-- function check_department
create function check_department() returns opaque as '

declare
  dpt_id int;

begin
 
  if new.department_id = 0 then
    delete from dpt_trans where trans_id = new.id;
    return NULL;
  end if;

  select into dpt_id trans_id from dpt_trans where trans_id = new.id;
  
  if dpt_id > 0 then
    update dpt_trans set department_id = new.department_id where trans_id = dpt_id;
  else
    insert into dpt_trans (trans_id, department_id) values (new.id, new.department_id);
  end if;
return NULL;

end;
' language 'plpgsql';
-- end function

-- department transaction table
create table dpt_trans (trans_id int, department_id int);

-- function del_department
create function del_department() returns opaque as '
begin
  delete from dpt_trans where trans_id = old.id;
  return NULL;
end;
' language 'plpgsql';
-- end function

-- triggers
--
create trigger check_department after insert or update on ar for each row execute procedure check_department();
-- end trigger
create trigger check_department after insert or update on ap for each row execute procedure check_department();
-- end trigger
create trigger check_department after insert or update on gl for each row execute procedure check_department();
-- end trigger
create trigger check_department after insert or update on oe for each row execute procedure check_department();
-- end trigger
--
--
create trigger del_department after delete on ar for each row execute procedure del_department();
-- end trigger
create trigger del_department after delete on ap for each row execute procedure del_department();
-- end trigger
create trigger del_department after delete on gl for each row execute procedure del_department();
-- end trigger
create trigger del_department after delete on oe for each row execute procedure del_department();
-- end trigger
--

-- business table
create table business (id int default nextval('id'), description text, discount float4);
--
-- SIC
create table sic (code text, sictype char(1), description text);
--
alter table vendor add column gifi_accno text;
alter table vendor add column business_id int;
alter table vendor add column taxnumber text;
alter table vendor add column sic_code text;
--
alter table customer add column business_id int;
alter table customer add column taxnumber text;
alter table customer add column sic_code text;
--
create function del_customer() returns opaque as '
begin
  delete from shipto where trans_id = old.id;
  delete from customertax where customer_id = old.id;
  return NULL;
end;
' language 'plpgsql';
-- end function
--
create function del_vendor() returns opaque as '
begin
  delete from shipto where trans_id = old.id;
  delete from vendortax where vendor_id = old.id;
  return NULL;
end;
' language 'plpgsql';
-- end function
--
create trigger del_customer after delete on customer for each row execute procedure del_customer();
-- end trigger
create trigger del_vendor after delete on vendor for each row execute procedure del_vendor();
-- end trigger
--
alter table acc_trans add column memo text;
--
alter table employee add column sales bool;
alter table employee alter column sales set default 't';
--
alter table vendor add discount float4;
alter table vendor add creditlimit float;
--
-- function del_exchangerate
create function del_exchangerate() returns opaque as '

declare
  t_transdate date;
  t_curr char(3);
  t_id int;
  d_curr text;

begin

  select into d_curr substr(curr,1,3) from defaults;
  
  if TG_RELNAME = ''ar'' then
    select into t_curr, t_transdate curr, transdate from ar where id = old.id;
  end if;
  if TG_RELNAME = ''ap'' then
    select into t_curr, t_transdate curr, transdate from ap where id = old.id;
  end if;
  if TG_RELNAME = ''oe'' then
    select into t_curr, t_transdate curr, transdate from oe where id = old.id;
  end if;

  if d_curr != t_curr then

    select into t_id a.id from acc_trans ac
    join ar a on (a.id = ac.trans_id)
    where a.curr = t_curr
    and ac.transdate = t_transdate

    except select a.id from ar a where a.id = old.id
    
    union
    
    select a.id from acc_trans ac
    join ap a on (a.id = ac.trans_id)
    where a.curr = t_curr
    and ac.transdate = t_transdate
    
    except select a.id from ap a where a.id = old.id
    
    union
    
    select o.id from oe o
    where o.curr = t_curr
    and o.transdate = t_transdate
    
    except select o.id from oe o where o.id = old.id;

    if not found then
      delete from exchangerate where curr = t_curr and transdate = t_transdate;
    end if;
  end if;
return old;

end;
' language 'plpgsql';
-- end function
--
-- triggers
--
create trigger del_exchangerate before delete on ar for each row execute procedure del_exchangerate();
-- end trigger
--
create trigger del_exchangerate before delete on ap for each row execute procedure del_exchangerate();
-- end trigger
--
create trigger del_exchangerate before delete on oe for each row execute procedure del_exchangerate();
-- end trigger
--
--
alter table orderitems add ship float4;
alter table orderitems add serialnumber text;
--
--
create sequence orderitemsid maxvalue 100000 cycle;
alter table orderitems add id int;
alter table orderitems alter id set default nextval('orderitemsid');
--
create table warehouse (id int default nextval('id'), description text);
--
create table inventory (warehouse_id int, parts_id int, oe_id int, orderitems_id int, qty float4, shippingdate date);
--
-- update orderitems, fill in id
create table temp (id int default nextval('orderitemsid'), tempid oid);
insert into temp (tempid) select oid from orderitems;
update orderitems set id = temp.id from temp where orderitems.oid = temp.tempid;
drop table temp;
--
create index orderitems_id_key on orderitems (id);
--
alter table ar add shipvia text;
alter table ap add shipvia text;
alter table oe add shipvia text;
--
--
alter table inventory add employee_id int;
--
--
create function check_inventory() returns opaque as '

declare
  itemid int;
  row_data inventory%rowtype;

begin

  if not old.quotation then
    for row_data in select * from inventory where oe_id = old.id loop
      select into itemid id from orderitems where trans_id = old.id and id = row_data.orderitems_id;

      if itemid is null then
	delete from inventory where oe_id = old.id and orderitems_id = row_data.orderitems_id;
      end if;
    end loop;
  end if;
  return old;
end;
' language 'plpgsql';
-- end function
--
create trigger check_inventory after update on oe for each row execute procedure check_inventory();
-- end trigger
--
--
create table yearend (
  trans_id int,
  transdate date
);
--
-- function del_yearend
create function del_yearend() returns opaque as '
begin
  delete from yearend where trans_id = old.id;
  return NULL;
end;
' language 'plpgsql';
-- end function

-- triggers
--
create trigger del_yearend after delete on gl for each row execute procedure del_yearend();
-- end trigger
--
--
create table temp (
  id int default nextval('id'),
  name varchar(64),
  addr1 varchar(64),
  addr2 varchar(64),
  addr3 varchar(64),
  addr4 varchar(64),
  contact varchar(64),
  phone varchar(20),
  fax varchar(20),
  email text,
  notes text,
  discount float4,
  taxincluded bool,
  creditlimit float default 0,
  terms int2 default 0,
  customernumber varchar(64),
  cc text,
  bcc text,
  business_id int,
  taxnumber varchar(64),
  sic_code varchar(6),
  iban varchar(34),
  bic varchar(11)
);
insert into temp (id, name, addr1, addr2, addr3, addr4, contact, phone, fax, email, notes, discount, taxincluded, creditlimit, terms, customernumber, cc, bcc, business_id, taxnumber, sic_code) select id, name, addr1, addr2, addr3, addr4, contact, phone, fax, email, notes, discount, taxincluded, creditlimit, terms, customernumber, cc, bcc, business_id, taxnumber, sic_code from customer;
--
drop table customer;
--
alter table temp rename to customer;
--
create index customer_id_key on customer (id);
create index customer_customernumber_key on customer (customernumber);
create index customer_name_key on customer (name);
create index customer_contact_key on customer (contact);
--
create trigger del_customer after delete on customer for each row execute procedure del_customer();
-- end trigger
--
create table temp (
  id int default nextval('id'),
  name varchar(64),
  addr1 varchar(64),
  addr2 varchar(64),
  addr3 varchar(64),
  addr4 varchar(64),
  contact varchar(64),
  phone varchar(20),
  fax varchar(20),
  email text,
  notes text,
  terms int2 default 0,
  taxincluded bool,
  vendornumber varchar(64),
  cc text,
  bcc text,
  gifi_accno varchar(30),
  business_id int,
  taxnumber varchar(64),
  sic_code varchar(6),
  discount float4,
  creditlimit float default 0,
  iban varchar(34),
  bic varchar(11)
);
insert into temp (id, name, addr1, addr2, addr3, addr4, contact, phone, fax, email, notes, discount, taxincluded, creditlimit, terms, vendornumber, cc, bcc, business_id, taxnumber, sic_code) select id, name, addr1, addr2, addr3, addr4, contact, phone, fax, email, notes, discount, taxincluded, creditlimit, terms, vendornumber, cc, bcc, business_id, taxnumber, sic_code from vendor;
--
drop table vendor;
--
alter table temp rename to vendor;
--
create index vendor_id_key on vendor (id);
create index vendor_name_key on vendor (name);
create index vendor_vendornumber_key on vendor (vendornumber);
create index vendor_contact_key on vendor (contact);
--
create trigger del_vendor after delete on vendor for each row execute procedure del_vendor();
-- end trigger
--
create table temp (
  code varchar(6),
  sictype char(1),
  description text
);
insert into temp (code, sictype, description) select code, sictype, description from sic;
drop table sic;
alter table temp rename to sic;
--
create table temp (
  trans_id int,
  shiptoname varchar(64),
  shiptoaddr1 varchar(64),
  shiptoaddr2 varchar(64),
  shiptoaddr3 varchar(64),
  shiptoaddr4 varchar(64),
  shiptocontact varchar(64),
  shiptophone varchar(20),
  shiptofax varchar(20),
  shiptoemail text
);
insert into temp (trans_id, shiptoname, shiptoaddr1, shiptoaddr2, shiptoaddr3, shiptoaddr4, shiptocontact, shiptophone, shiptofax, shiptoemail) select trans_id, shiptoname, shiptoaddr1, shiptoaddr2, shiptoaddr3, shiptoaddr4, shiptocontact, shiptophone, shiptofax, shiptoemail from shipto;
drop table shipto;
alter table temp rename to shipto;
create index shipto_trans_id_key on shipto (trans_id);
--
--
create table temp (
  id int default nextval('id'),
  login text,
  name varchar(64),
  addr1 varchar(64),
  addr2 varchar(64),
  addr3 varchar(64),
  addr4 varchar(64),
  workphone varchar(20),
  homephone varchar(20),
  startdate date default current_date,
  enddate date,
  notes text,
  role varchar(20),
  sales bool,
  email text,
  sin varchar(20),
  iban varchar(34),
  bic varchar(11)
);
insert into temp (id,login,name,addr1,addr2,addr3,addr4,workphone,homephone,startdate,enddate,notes,role,sales) select id,login,name,addr1,addr2,addr3,addr4,workphone,homephone,startdate,enddate,notes,role,sales from employee;
--
drop table employee;
alter table temp rename to employee;
--
create index employee_id_key on employee (id);
create unique index employee_login_key on employee (login);
create index employee_name_key on employee (name);
--
update defaults set version = '2.3.1';