b81268e46c5088dde201edd1076cb8257666d816
[freeside.git] / httemplate / docs / upgrade10.html
1 <pre>
2 this is incomplete
3
4 install DBD::Pg 1.32 (or, if you're using a Perl version before 5.6, you could try installing DBD::Pg 1.22 with <a href="http://420.am/~ivan/DBD-Pg-1.22-fixvercmp.patch">this patch</a> and commenting out the "use DBD::Pg 1.32" at the top of DBIx/DBSchema/DBD/Pg.pm)
5 install DBIx::DBSchema 0.24
6 install Net::SSH 0.08
7 - If using Apache::ASP, add PerlSetVar RequestBinaryRead Off and PerlSetVar IncludesDir /your/freeside/document/root/ to your Apache configuration and make sure you are using Apache::ASP minimum version 2.55.
8 - In httpd.conf, change &lt;Files ~ \.cgi&gt; to  &lt;Files ~ (\.cgi|\.html)&gt;
9 - In httpd.conf, change <b>AddHandler perl-script .cgi</b> or <b>SetHandler perl-script</b> to <b>AddHandler perl-script .cgi .html</b>
10
11 install NetAddr::IP, Chart::Base, Locale::SubCountry, 
12 JavaScript::RPC (JavaScript::RPC::Server::CGI), Text::CSV_XS, 
13 Spreadsheet::WriteExcel, IO-stringy (IO::Scalar), Frontier::RPC
14 (Frontier::RPC2) and MIME::Entity (MIME-tools)
15 <!-- and Crypt::YAPassGen-->
16
17 INSERT INTO msgcat ( msgnum, msgcode, locale, msg ) VALUES ( 20, 'svc_external-id', 'en_US', 'External ID' );
18 INSERT INTO msgcat ( msgnum, msgcode, locale, msg ) VALUES ( 21, 'svc_external-title', 'en_US', 'Title' );
19
20 CREATE TABLE cust_bill_pkg_detail (
21   detailnum serial,
22   pkgnum int NOT NULL,
23   invnum int NOT NULL,
24   detail varchar(80),
25   PRIMARY KEY (detailnum)
26 );
27 CREATE INDEX cust_bill_pkg_detail1 ON cust_bill_pkg_detail ( pkgnum, invnum );
28
29 CREATE TABLE part_virtual_field (
30   vfieldpart int NOT NULL,
31   dbtable varchar(32) NOT NULL,
32   name varchar(32) NOT NULL,
33   check_block text,
34   list_source text,
35   length integer,
36   label varchar(80),
37   PRIMARY KEY (vfieldpart)
38 );
39
40 CREATE TABLE virtual_field (
41   recnum integer NOT NULL,
42   vfieldpart integer NOT NULL,
43   value varchar(128) NOT NULL,
44   PRIMARY KEY (vfieldpart, recnum)
45 );
46
47 CREATE TABLE router (
48   routernum serial,
49   routername varchar(80),
50   svcnum int,
51   PRIMARY KEY (routernum)
52 );
53
54 CREATE TABLE part_svc_router (
55   svcrouternum serial,
56   svcpart int NOT NULL,
57   routernum int NOT NULL,
58   PRIMARY KEY (svcrouternum),
59 );
60
61 CREATE TABLE addr_block (
62   blocknum serial,
63   routernum int NOT NULL,
64   ip_gateway varchar(15) NOT NULL,
65   ip_netmask int NOT NULL,
66   PRIMARY KEY (blocknum)
67 );
68 CREATE UNIQUE INDEX addr_block1 ON addr_block ( blocknum, routernum );
69
70 CREATE TABLE svc_broadband (
71   svcnum int NOT NULL,
72   blocknum int NOT NULL,
73   speed_up int NOT NULL,
74   speed_down int NOT NULL,
75   ip_addr varchar(15),
76   PRIMARY KEY (svcnum)
77 );
78
79 CREATE TABLE acct_snarf (
80   snarfnum serial,
81   svcnum int NOT NULL,
82   machine varchar(255) NULL,
83   protocol varchar(80) NULL,
84   username varchar(80) NULL,
85   _password varchar(80) NULL,
86   PRIMARY KEY (snarfnum)
87 );
88 CREATE INDEX acct_snarf1 ON acct_snarf ( svcnum );
89
90 CREATE TABLE svc_external (
91   svcnum int NOT NULL,
92   id int,
93   title varchar(80),
94   PRIMARY KEY (svcnum)
95 );
96
97 CREATE TABLE part_pkg_temp (
98     pkgpart serial NOT NULL,
99     pkg varchar(80) NOT NULL,
100     "comment" varchar(80) NOT NULL,
101     setup text NULL,
102     freq varchar(80) NOT NULL,
103     recur text NULL,
104     setuptax char(1) NULL,
105     recurtax char(1) NULL,
106     plan varchar(80) NULL,
107     plandata text NULL,
108     disabled char(1) NULL,
109     taxclass varchar(80) NULL,
110     PRIMARY KEY (pkgpart)
111 );
112 INSERT INTO part_pkg_temp SELECT * from part_pkg;
113 DROP TABLE part_pkg;
114 ALTER TABLE part_pkg_temp RENAME TO part_pkg;
115 CREATE INDEX part_pkg1 ON part_pkg(disabled);
116
117 On modern Pg:
118 ALTER TABLE part_pkg DROP CONSTRAINT part_pkg_temp_pkey;
119 ALTER TABLE part_pkg ADD PRIMARY KEY (pkgpart);
120 select setval('public.part_pkg_temp_pkgpart_seq', ( select max(pkgpart) from part_pkg) );
121
122 Or on Pg versions that don't support DROP CONSTRAINT and ADD PRIMARY KEY (tested on 7.1 and 7.2 so far):
123 DROP INDEX part_pkg_temp_pkey;
124 CREATE UNIQUE INDEX part_pkg_pkey ON part_pkg (pkgpart);
125 probably this one?: select setval('part_pkg_temp_pkgpart_seq', ( select max(pkgpart) from part_pkg) );
126 probably not this one?: select setval('part_pkg_pkgpart_seq', ( select max(pkgpart) from part_pkg) );
127
128 CREATE TABLE h_part_pkg_temp (
129     historynum serial NOT NULL,
130     history_date int,
131     history_user varchar(80) NOT NULL,
132     history_action varchar(80) NOT NULL,
133     pkgpart int NOT NULL,
134     pkg varchar(80) NOT NULL,
135     "comment" varchar(80) NOT NULL,
136     setup text NULL,
137     freq varchar(80) NOT NULL,
138     recur text NULL,
139     setuptax char(1) NULL,
140     recurtax char(1) NULL,
141     plan varchar(80) NULL,
142     plandata text NULL,
143     disabled char(1) NULL,
144     taxclass varchar(80) NULL,
145     PRIMARY KEY (historynum)
146 );
147 INSERT INTO h_part_pkg_temp SELECT * from h_part_pkg;
148 DROP TABLE h_part_pkg;
149 ALTER TABLE h_part_pkg_temp RENAME TO h_part_pkg;
150 CREATE INDEX h_part_pkg1 ON h_part_pkg(disabled);
151
152 On modern Pg:
153 ALTER TABLE h_part_pkg DROP CONSTRAINT h_part_pkg_temp_pkey;
154 ALTER TABLE h_part_pkg ADD PRIMARY KEY (historynum);
155 select setval('public.h_part_pkg_temp_historynum_seq', ( select max(historynum) from h_part_pkg) );
156
157 Or on Pg versions that don't support DROP CONSTRAINT and ADD PRIMARY KEY (tested on 7.1 and 7.2 so far):
158 DROP INDEX h_part_pkg_temp_pkey;
159 CREATE UNIQUE INDEX h_part_pkg_pkey ON h_part_pkg (historynum);
160 probably this one?: select setval('h_part_pkg_temp_historynum_seq', ( select max(historynum) from h_part_pkg) );
161 probably not this one?: select setval('h_part_pkg_historynum_seq', ( select max(historynum) from h_part_pkg) );
162
163 CREATE TABLE cust_pay_refund (
164     payrefundnum serial NOT NULL,
165     paynum int NOT NULL,
166     refundnum int NOT NULL,
167     _date int NOT NULL,
168     amount decimal(10,2) NOT NULL,
169     PRIMARY KEY (payrefundnum)
170 );
171 CREATE INDEX cust_pay_refund1 ON cust_pay_refund(paynum);
172 CREATE INDEX cust_pay_refund2 ON cust_pay_refund(refundnum);
173
174 CREATE TABLE cust_pay_void (
175   paynum int NOT NULL,
176   custnum int NOT NULL,
177   paid decimal(10,2) NOT NULL,
178   _date int,
179   payby char(4) NOT NULL,
180   payinfo varchar(80),
181   paybatch varchar(80),
182   closed char(1),
183   void_date int,
184   reason varchar(80),
185   otaker varchar(32) NOT NULL,
186   PRIMARY KEY (paynum)
187 );
188 CREATE INDEX cust_pay_void1 ON cust_pay_void(custnum);
189
190 CREATE TABLE part_pkg_option (
191   optionnum serial,
192   pkgpart int not null,
193   optionname varchar(80) not null,
194   optionvalue text NULL
195   PRIMARY KEY (optionnum),
196 );
197 CREATE INDEX part_pkg_option1 ON part_pkg_option ( pkgpart );
198 CREATE INDEX part_pkg_option2 ON part_pkg_option ( optionname );
199
200 CREATE TABLE rate (
201     ratenum serial NOT NULL,
202     ratename varchar(80) NOT NULL,
203     PRIMARY KEY (ratenum)
204 );
205
206 CREATE TABLE rate_detail (
207     ratedetailnum serial NOT NULL,
208     ratenum int NOT NULL,
209     orig_regionnum int NULL,
210     dest_regionnum int NOT NULL,
211     min_included int NOT NULL,
212     min_charge decimal(10,2) NOT NULL,
213     sec_granularity int NOT NULL,
214     PRIMARY KEY (ratedetailnum)
215 );
216 CREATE UNIQUE INDEX rate_detail1 ON rate_detail ( ratenum, orig_regionnum, dest_regionnum );
217
218 CREATE TABLE rate_region (
219     regionnum serial NOT NULL,
220     regionname varchar(80) NOT NULL,
221     PRIMARY KEY (regionnum)
222 );
223
224 CREATE TABLE rate_prefix (
225     prefixnum serial NOT NULL,
226     regionnum int NOT NULL, 
227     countrycode varchar(3) NOT NULL,
228     npa varchar(6) NULL,
229     nxx varchar(3) NULL,
230     PRIMARY KEY (prefixnum)
231 );
232 CREATE INDEX rate_prefix1 ON rate_prefix ( countrycode );
233 CREATE INDEX rate_prefix2 ON rate_prefix ( regionnum );
234
235 CREATE TABLE reg_code (
236     codenum serial NOT NULL,
237     code varchar(80) NOT NULL,
238     agentnum int NOT NULL,
239     PRIMARY KEY (codenum)
240 );
241 CREATE UNIQUE INDEX reg_code1 ON reg_code ( agentnum, code );
242 CREATE INDEX reg_code2 ON reg_code ( agentnum );
243
244 CREATE TABLE reg_code_pkg (
245     codepkgnum serial,
246     codenum int NOT NULL,
247     pkgpart int NOT NULL
248     PRIMARY KEY (codepkgnum)
249 );
250 CREATE UNIQUE INDEX reg_code_pkg1 ON reg_code_pkg ( codenum, pkgpart );
251 CREATE INDEX reg_code_pkg2 ON reg_code_pkg ( codenum );
252
253 CREATE TABLE clientapi_session (
254     sessionnum serial NOT NULL,
255     sessionid varchar(80) NOT NULL,
256     namespace varchar(80) NOT NULL,
257     PRIMARY KEY (sessionnum)
258 );
259 CREATE UNIQUE INDEX clientapi_session1 ON clientapi_session ( sessionid, namespace );
260
261 CREATE TABLE clientapi_session_field (
262     fieldnum serial NOT NULL,
263     sessionnum int NOT NULL,
264     fieldname varchar(80) NOT NULL,
265     fieldvalue text NULL,
266     PRIMARY KEY (fieldnum)
267 );
268 CREATE UNIQUE INDEX clientapi_session_field1 ON clientapi_session_field ( sessionnum, fieldname );
269
270 DROP INDEX cust_bill_pkg1;
271
272 ALTER TABLE cust_bill_pkg ADD itemdesc varchar(80) NULL;
273 ALTER TABLE h_cust_bill_pkg ADD itemdesc varchar(80) NULL;
274 ALTER TABLE cust_main_county ADD taxname varchar(80) NULL;
275 ALTER TABLE h_cust_main_county ADD taxname varchar(80) NULL;
276 ALTER TABLE cust_main_county ADD setuptax char(1) NULL;
277 ALTER TABLE h_cust_main_county ADD setuptax char(1) NULL;
278 ALTER TABLE cust_main_county ADD recurtax char(1) NULL;
279 ALTER TABLE h_cust_main_county ADD recurtax char(1) NULL;
280 ALTER TABLE cust_pkg ADD last_bill int NULL;
281 ALTER TABLE h_cust_pkg ADD last_bill int NULL;
282 ALTER TABLE agent ADD disabled char(1) NULL;
283 ALTER TABLE h_agent ADD disabled char(1) NULL;
284 ALTER TABLE agent ADD username varchar(80) NULL;
285 ALTER TABLE h_agent ADD username varchar(80) NULL;
286 ALTER TABLE agent ADD _password varchar(80) NULL;
287 ALTER TABLE h_agent ADD _password varchar(80) NULL;
288 ALTER TABLE cust_main ADD paycvv varchar(512) NULL;
289 ALTER TABLE h_cust_main ADD paycvv varchar(512) NULL;
290 ALTER TABLE cust_main ALTER COLUMN payinfo varchar(512) NULL;
291 ALTER TABLE h_cust_main ALTER COLUMN payinfo varchar(512) NULL;
292 ALTER TABLE cust_main ADD paymask varchar(80) NULL;
293 ALTER TABLE h_cust_main ADD paymask varchar(80) NULL;
294 ALTER TABLE part_referral ADD disabled char(1) NULL;
295 ALTER TABLE h_part_referral ADD disabled char(1) NULL;
296 CREATE INDEX part_referral1 ON part_referral ( disabled );
297 ALTER TABLE pkg_svc ADD primary_svc char(1) NULL;
298 ALTER TABLE h_pkg_svc ADD primary_svc char(1) NULL;
299 ALTER TABLE svc_forward ADD src varchar(255) NULL;
300 ALTER TABLE h_svc_forward ADD src varchar(255) NULL;
301 ALTER TABLE part_pkg ADD promo_code varchar(80) NULL;
302 ALTER TABLE h_part_pkg ADD promo_code varchar(80) NULL;
303 CREATE INDEX part_pkg2 ON part_pkg ( promo_code );
304 CREATE INDEX h_part_pkg2 ON h_part_pkg ( promo_code );
305 ALTER TABLE prepay_credit ADD agentnum integer NULL;
306 ALTER TABLE h_prepay_credit ADD agentnum integer NULL;
307
308 ALTER TABLE type_pkgs ADD typepkgnum int;
309 ALTER TABLE type_pkgs ALTER COLUMN typepkgnum SET DEFAULT nextval('public.type_pkgs_typepkgnum_seq'::text);
310 CREATE SEQUENCE type_pkgs_typepkgnum_seq;
311 ALTER TABLE type_pkgs ALTER typepkgnum SET NOT NULL;
312 ALTER TABLE type_pkgs ADD PRIMARY KEY (typepkgnum);
313
314 ALTER TABLE cust_bill_pkg ADD billpkgnum int;
315 ALTER TABLE cust_bill_pkg ALTER COLUMN billpkgnum SET DEFAULT nextval('public.cust_bill_pkg_billpkgnum_seq'::text);
316 CREATE SEQUENCE cust_bill_pkg_billpkgnum_seq;
317 ALTER TABLE cust_bill_pkg ALTER billpkgnum SET NOT NULL;
318 ALTER TABLE cust_bill_pkg ADD PRIMARY KEY (billpkgnum);
319
320 ALTER TABLE pkg_svc ADD pkgsvcnum int;
321 ALTER TABLE pkg_svc ALTER COLUMN pkgsvcnum SET DEFAULT nextval('public.pkg_svc_pkgsvcnum_seq'::text);
322 CREATE SEQUENCE pkg_svc_pkgsvcnum_seq;
323 ALTER TABLE pkg_svc ALTER pkgsvcnum SET NOT NULL;
324 ALTER TABLE pkg_svc ADD PRIMARY KEY (pkgsvcnum);
325
326 On recent Pg versions:
327
328 ALTER TABLE svc_forward ALTER COLUMN srcsvc DROP NOT NULL;
329 ALTER TABLE h_svc_forward ALTER COLUMN srcsvc DROP NOT NULL;
330 ALTER TABLE svc_forward ALTER COLUMN dstsvc DROP NOT NULL;
331 ALTER TABLE h_svc_forward ALTER COLUMN dstsvc DROP NOT NULL;
332 ALTER TABLE cust_main ALTER COLUMN zip DROP NOT NULL;
333 ALTER TABLE h_cust_main ALTER COLUMN zip DROP NOT NULL;
334
335 Or on Pg versions that don't support DROP NOT NULL (tested on 7.1 and 7.2 so far):
336 UPDATE pg_attribute SET attnotnull = FALSE WHERE ( attname = 'srcsvc' OR attname = 'dstsvc' ) AND ( attrelid = ( SELECT oid FROM pg_class WHERE relname = 'svc_forward' ) OR attrelid = ( SELECT oid FROM pg_class WHERE relname = 'h_svc_forward' ) );
337 UPDATE pg_attribute SET attnotnull = FALSE WHERE ( attname = 'zip' ) AND ( attrelid = ( SELECT oid FROM pg_class WHERE relname = 'cust_main' ) OR attrelid = ( SELECT oid FROM pg_class WHERE relname = 'h_cust_main' ) );
338
339 If you created your database with a version before 1.4.2, dump database, edit:
340 - cust_main and h_cust_main: increase otaker from 8 to 32
341 - cust_main and h_cust_main: change ss from char(11) to varchar(11) ( "character(11)" to "character varying(11)" )
342 - cust_credit and h_cust_credit: increase otaker from 8 to 32
343 - cust_pkg and h_cust_pkg: increase otaker from 8 to 32
344 - cust_refund and h_cust_refund: increase otaker from 8 to 32
345 - domain_record and h_domain_record: increase reczone from 80 to 255
346 - domain_record and h_domain_record: change rectype from char to varchar ( "character(5)" to "character varying(5)" )
347 - domain_record and h_domain_record: increase recdata from 80 to 255
348 then reload
349
350 optionally:
351
352   CREATE INDEX cust_main6 ON cust_main ( daytime );
353   CREATE INDEX cust_main7 ON cust_main ( night );
354   CREATE INDEX cust_main8 ON cust_main ( fax );
355   CREATE INDEX cust_main9 ON cust_main ( ship_daytime );
356   CREATE INDEX cust_main10 ON cust_main ( ship_night );
357   CREATE INDEX cust_main11 ON cust_main ( ship_fax );
358   CREATE INDEX agent2 ON agent ( disabled );
359   CREATE INDEX part_bill_event2 ON part_bill_event ( disabled );
360   CREATE INDEX cust_pay4 ON cust_pay (_date);
361
362   serial columns
363
364 mandatory again:
365
366 dbdef-create username
367 create-history-tables username cust_bill_pkg_detail router part_svc_router addr_block svc_broadband acct_snarf svc_external cust_pay_refund cust_pay_void part_pkg_option rate rate_detail rate_region rate_prefix reg_code reg_code_pkg
368 dbdef-create username
369
370 apache - fix <Files> sections to include .html also
371
372 </pre>