2a60ca44fb9e28d697d95df5b059165c67bc7aa9
[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.23
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) and Frontier::RPC
14 (Frontier::RPC2)
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   svcpart int NOT NULL,
56   routernum int NOT NULL
57 );
58
59 CREATE TABLE addr_block (
60   blocknum serial,
61   routernum int NOT NULL,
62   ip_gateway varchar(15) NOT NULL,
63   ip_netmask int NOT NULL,
64   PRIMARY KEY (blocknum)
65 );
66 CREATE UNIQUE INDEX addr_block1 ON addr_block ( blocknum, routernum );
67
68 CREATE TABLE svc_broadband (
69   svcnum int NOT NULL,
70   blocknum int NOT NULL,
71   speed_up int NOT NULL,
72   speed_down int NOT NULL,
73   ip_addr varchar(15),
74   PRIMARY KEY (svcnum)
75 );
76
77 CREATE TABLE acct_snarf (
78   snarfnum serial,
79   svcnum int NOT NULL,
80   machine varchar(255) NULL,
81   protocol varchar(80) NULL,
82   username varchar(80) NULL,
83   _password varchar(80) NULL,
84   PRIMARY KEY (snarfnum)
85 );
86 CREATE INDEX acct_snarf1 ON acct_snarf ( svcnum );
87
88 CREATE TABLE svc_external (
89   svcnum int NOT NULL,
90   id int,
91   title varchar(80),
92   PRIMARY KEY (svcnum)
93 );
94
95 CREATE TABLE part_pkg_temp (
96     pkgpart serial NOT NULL,
97     pkg varchar(80) NOT NULL,
98     "comment" varchar(80) NOT NULL,
99     setup text NULL,
100     freq varchar(80) NOT NULL,
101     recur text NULL,
102     setuptax char(1) NULL,
103     recurtax char(1) NULL,
104     plan varchar(80) NULL,
105     plandata text NULL,
106     disabled char(1) NULL,
107     taxclass varchar(80) NULL,
108     PRIMARY KEY (pkgpart)
109 );
110 INSERT INTO part_pkg_temp SELECT * from part_pkg;
111 DROP TABLE part_pkg;
112 ALTER TABLE part_pkg_temp RENAME TO part_pkg;
113 CREATE INDEX part_pkg1 ON part_pkg(disabled);
114
115 On modern Pg:
116 ALTER TABLE part_pkg DROP CONSTRAINT part_pkg_temp_pkey;
117 ALTER TABLE part_pkg ADD PRIMARY KEY (pkgpart);
118 select setval('public.part_pkg_temp_pkgpart_seq', ( select max(pkgpart) from part_pkg) );
119
120 Or on Pg versions that don't support DROP CONSTRAINT and ADD PRIMARY KEY (tested on 7.1 and 7.2 so far):
121 DROP INDEX part_pkg_temp_pkey;
122 CREATE UNIQUE INDEX part_pkg_pkey ON part_pkg (pkgpart);
123 probably this one?: select setval('part_pkg_temp_pkgpart_seq', ( select max(pkgpart) from part_pkg) );
124 probably not this one?: select setval('part_pkg_pkgpart_seq', ( select max(pkgpart) from part_pkg) );
125
126 CREATE TABLE h_part_pkg_temp (
127     historynum serial NOT NULL,
128     history_date int,
129     history_user varchar(80) NOT NULL,
130     history_action varchar(80) NOT NULL,
131     pkgpart int NOT NULL,
132     pkg varchar(80) NOT NULL,
133     "comment" varchar(80) NOT NULL,
134     setup text NULL,
135     freq varchar(80) NOT NULL,
136     recur text NULL,
137     setuptax char(1) NULL,
138     recurtax char(1) NULL,
139     plan varchar(80) NULL,
140     plandata text NULL,
141     disabled char(1) NULL,
142     taxclass varchar(80) NULL,
143     PRIMARY KEY (historynum)
144 );
145 INSERT INTO h_part_pkg_temp SELECT * from h_part_pkg;
146 DROP TABLE h_part_pkg;
147 ALTER TABLE h_part_pkg_temp RENAME TO h_part_pkg;
148 CREATE INDEX h_part_pkg1 ON h_part_pkg(disabled);
149
150 On modern Pg:
151 ALTER TABLE h_part_pkg DROP CONSTRAINT h_part_pkg_temp_pkey;
152 ALTER TABLE h_part_pkg ADD PRIMARY KEY (historynum);
153 select setval('public.h_part_pkg_temp_historynum_seq', ( select max(historynum) from h_part_pkg) );
154
155 Or on Pg versions that don't support DROP CONSTRAINT and ADD PRIMARY KEY (tested on 7.1 and 7.2 so far):
156 DROP INDEX h_part_pkg_temp_pkey;
157 CREATE UNIQUE INDEX h_part_pkg_pkey ON h_part_pkg (historynum);
158 probably this one?: select setval('h_part_pkg_temp_historynum_seq', ( select max(historynum) from h_part_pkg) );
159 probably not this one?: select setval('h_part_pkg_historynum_seq', ( select max(historynum) from h_part_pkg) );
160
161 CREATE TABLE cust_pay_refund (
162     payrefundnum serial NOT NULL,
163     paynum int NOT NULL,
164     refundnum int NOT NULL,
165     _date int NOT NULL,
166     amount decimal(10,2) NOT NULL,
167     PRIMARY KEY (payrefundnum)
168 );
169 CREATE INDEX cust_pay_refund1 ON cust_pay_refund(paynum);
170 CREATE INDEX cust_pay_refund2 ON cust_pay_refund(refundnum);
171
172 CREATE TABLE cust_pay_void (
173   paynum int NOT NULL,
174   custnum int NOT NULL,
175   paid decimal(10,2) NOT NULL,
176   _date int,
177   payby char(4) NOT NULL,
178   payinfo varchar(80),
179   paybatch varchar(80),
180   closed char(1),
181   void_date int,
182   reason varchar(80),
183   otaker varchar(32) NOT NULL,
184   PRIMARY KEY (paynum)
185 );
186 CREATE INDEX cust_pay_void1 ON cust_pay_void(custnum);
187
188 CREATE TABLE part_pkg_option (
189   optionnum int primary key,
190   pkgpart int not null,
191   optionname varchar(80) not null,
192   optionvalue text NULL
193 );
194 CREATE INDEX part_pkg_option1 ON part_export_option ( pkgpart );
195 CREATE INDEX part_pkg_option2 ON part_export_option ( optionname );
196
197 CREATE TABLE rate (
198     ratenum serial NOT NULL,
199     reatename varchar(80) NOT NULL,
200     PRIMARY KEY (ratenum)
201 );
202
203 CREATE TABLE rate_detail (
204     ratenum int NOT NULL,
205     orig_regionnum int NULL,
206     dest_regionnum int NOT NULL,
207     min_included int NOT NULL,
208     min_charge decimal(10,2) NOT NULL,
209     sec_granularity int NOT NULL
210 );
211 CREATE UNIQUE INDEX rate_detail1 ON rate_detail ( ratenum, orig_regionnum, dest_regionnum );
212
213 CREATE TABLE rate_region (
214     regionnum serial NOT NULL,
215     regionname varchar(80) NOT NULL,
216     PRIMARY KEY (regionnum)
217 );
218
219 CREATE TABLE rate_prefix (
220     prefixnum serial NOT NULL,
221     regionnum int NOT NULL, 
222     countrycode varchar(3) NOT NULL,
223     npa varchar(6) NULL,
224     nxx varchar(3) NULL,
225     PRIMARY KEY (prefixnum)
226 );
227 CREATE INDEX rate_prefix1 ON rate_prefix ( countrycode );
228 CREATE INDEX rate_prefix2 ON rate_prefix ( regionnum );
229
230 CREATE TABLE reg_code (
231     codenum serial NOT NULL,
232     code varchar(80) NOT NULL,
233     agentnum int NOT NULL,
234     PRIMARY KEY (codenum)
235 );
236 CREATE UNIQUE INDEX reg_code1 ON reg_code ( agentnum, code );
237 CREATE INDEX reg_code2 ON reg_code ( agentnum );
238
239 CREATE TABLE reg_code_pkg (
240     codenum int NOT NULL,
241     pkgpart int NOT NULL
242 );
243 CREATE UNIQUE INDEX reg_code_pkg1 ON reg_code_pkg ( codenum, pkgpart );
244 CREATE INDEX reg_code_pkg2 ON reg_code_pkg ( codenum );
245
246 CREATE TABLE clientapi_session (
247     sessionnum serial NOT NULL,
248     sessionid varchar(80) NOT NULL,
249     namespace varchar(80) NOT NULL,
250     PRIMARY KEY (sessionnum)
251 );
252 CREATE UNIQUE INDEX clientapi_session1 ON clientapi_session ( sessionid, namespace );
253
254 CREATE TABLE clientapi_session_field (
255     fieldnum serial NOT NULL,
256     sessionnum int NOT NULL,
257     fieldname varchar(80) NOT NULL,
258     fieldvalue text NULL,
259     PRIMARY KEY (fieldnum)
260 );
261 CREATE UNIQUE INDEX clientapi_session_field1 ON clientapi_session_field ( sessionnum, fieldname );
262
263 DROP INDEX cust_bill_pkg1;
264
265 ALTER TABLE cust_bill_pkg ADD itemdesc varchar(80) NULL;
266 ALTER TABLE h_cust_bill_pkg ADD itemdesc varchar(80) NULL;
267 ALTER TABLE cust_main_county ADD taxname varchar(80) NULL;
268 ALTER TABLE h_cust_main_county ADD taxname varchar(80) NULL;
269 ALTER TABLE cust_main_county ADD setuptax char(1) NULL;
270 ALTER TABLE h_cust_main_county ADD setuptax char(1) NULL;
271 ALTER TABLE cust_main_county ADD recurtax char(1) NULL;
272 ALTER TABLE h_cust_main_county ADD recurtax char(1) NULL;
273 ALTER TABLE cust_pkg ADD last_bill int NULL;
274 ALTER TABLE h_cust_pkg ADD last_bill int NULL;
275 ALTER TABLE agent ADD disabled char(1) NULL;
276 ALTER TABLE h_agent ADD disabled char(1) NULL;
277 ALTER TABLE agent ADD username varchar(80) NULL;
278 ALTER TABLE h_agent ADD username varchar(80) NULL;
279 ALTER TABLE agent ADD _password varchar(80) NULL;
280 ALTER TABLE h_agent ADD _password varchar(80) NULL;
281 ALTER TABLE cust_main ADD paycvv varchar(4) NULL;
282 ALTER TABLE h_cust_main ADD paycvv varchar(4) NULL;
283 ALTER TABLE part_referral ADD disabled char(1) NULL;
284 ALTER TABLE h_part_referral ADD disabled char(1) NULL;
285 CREATE INDEX part_referral1 ON part_referral ( disabled );
286 ALTER TABLE pkg_svc ADD primary_svc char(1) NULL;
287 ALTER TABLE h_pkg_svc ADD primary_svc char(1) NULL;
288 ALTER TABLE svc_forward ADD src varchar(255) NULL;
289 ALTER TABLE h_svc_forward ADD src varchar(255) NULL;
290 ALTER TABLE part_pkg ADD promo_code varchar(80) NULL;
291 ALTER TABLE h_part_pkg ADD promo_code varchar(80) NULL;
292 CREATE INDEX part_pkg2 ON part_pkg ( promo_code );
293 CREATE INDEX h_part_pkg2 ON h_part_pkg ( promo_code );
294
295 On recent Pg versions:
296
297 ALTER TABLE svc_forward ALTER COLUMN srcsvc DROP NOT NULL;
298 ALTER TABLE h_svc_forward ALTER COLUMN srcsvc DROP NOT NULL;
299 ALTER TABLE svc_forward ALTER COLUMN dstsvc DROP NOT NULL;
300 ALTER TABLE h_svc_forward ALTER COLUMN dstsvc DROP NOT NULL;
301 ALTER TABLE cust_main ALTER COLUMN zip DROP NOT NULL;
302 ALTER TABLE h_cust_main ALTER COLUMN zip DROP NOT NULL;
303
304 Or on Pg versions that don't support DROP NOT NULL (tested on 7.1 and 7.2 so far):
305 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' ) );
306 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' ) );
307
308 If you created your database with a version before 1.4.2, dump database, edit:
309 - cust_main and h_cust_main: increase otaker from 8 to 32
310 - cust_main and h_cust_main: change ss from char(11) to varchar(11) ( "character(11)" to "character varying(11)" )
311 - cust_credit and h_cust_credit: increase otaker from 8 to 32
312 - cust_pkg and h_cust_pkg: increase otaker from 8 to 32
313 - cust_refund and h_cust_refund: increase otaker from 8 to 32
314 - domain_record and h_domain_record: increase reczone from 80 to 255
315 - domain_record and h_domain_record: change rectype from char to varchar ( "character(5)" to "character varying(5)" )
316 - domain_record and h_domain_record: increase recdata from 80 to 255
317 then reload
318
319 optionally:
320
321   CREATE INDEX cust_main6 ON cust_main ( daytime );
322   CREATE INDEX cust_main7 ON cust_main ( night );
323   CREATE INDEX cust_main8 ON cust_main ( fax );
324   CREATE INDEX cust_main9 ON cust_main ( ship_daytime );
325   CREATE INDEX cust_main10 ON cust_main ( ship_night );
326   CREATE INDEX cust_main11 ON cust_main ( ship_fax );
327   CREATE INDEX agent2 ON agent ( disabled );
328   CREATE INDEX part_bill_event2 ON part_bill_event ( disabled );
329   CREATE INDEX cust_pay4 ON cust_pay (_date);
330
331   serial columns
332
333 mandatory again:
334
335 dbdef-create username
336 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
337 dbdef-create username
338
339 apache - fix <Files> sections to include .html also
340
341 </pre>