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