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