add cust_pay_refund table to refund payments
[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 CREATE TABLE cust_bill_pkg_detail (
14   detailnum serial,
15   pkgnum int NOT NULL,
16   invnum int NOT NULL,
17   detail varchar(80),
18   PRIMARY KEY (detailnum)
19 );
20 CREATE INDEX cust_bill_pkg_detail1 ON cust_bill_pkg_detail ( pkgnum, invnum );
21
22 CREATE TABLE part_virtual_field (
23   vfieldpart int NOT NULL,
24   dbtable varchar(32) NOT NULL,
25   name varchar(32) NOT NULL,
26   check_block text,
27   list_source text,
28   length integer,
29   label varchar(80),
30   PRIMARY KEY (vfieldpart)
31 );
32
33 CREATE TABLE virtual_field (
34   recnum integer NOT NULL,
35   vfieldpart integer NOT NULL,
36   value varchar(128) NOT NULL,
37   PRIMARY KEY (vfieldpart, recnum)
38 );
39
40 CREATE TABLE router (
41   routernum serial,
42   routername varchar(80),
43   svcnum int,
44   PRIMARY KEY (routernum)
45 );
46
47 CREATE TABLE part_svc_router (
48   svcpart int NOT NULL,
49   routernum int NOT NULL
50 );
51
52 CREATE TABLE addr_block (
53   blocknum serial,
54   routernum int NOT NULL,
55   ip_gateway varchar(15) NOT NULL,
56   ip_netmask int NOT NULL,
57   PRIMARY KEY (blocknum)
58 );
59 CREATE UNIQUE INDEX addr_block1 ON addr_block ( blocknum, routernum );
60
61 CREATE TABLE svc_broadband (
62   svcnum int NOT NULL,
63   blocknum int NOT NULL,
64   speed_up int NOT NULL,
65   speed_down int NOT NULL,
66   ip_addr varchar(15),
67   PRIMARY KEY (svcnum)
68 );
69
70 CREATE TABLE acct_snarf (
71   snarfnum serial,
72   svcnum int NOT NULL,
73   machine varchar(255) NULL,
74   protocol varchar(80) NULL,
75   username varchar(80) NULL,
76   _password varchar(80) NULL,
77   PRIMARY KEY (snarfnum)
78 );
79 CREATE INDEX acct_snarf1 ON acct_snarf ( svcnum );
80
81 CREATE TABLE svc_external (
82   svcnum int NOT NULL,
83   id int NOT NULL,
84   title varchar(80),
85   PRIMARY KEY (svcnum)
86 );
87
88 CREATE TABLE part_pkg_temp (
89     pkgpart serial NOT NULL,
90     pkg varchar(80) NOT NULL,
91     "comment" varchar(80) NOT NULL,
92     setup text NULL,
93     freq varchar(80) NOT NULL,
94     recur text NULL,
95     setuptax char(1) NULL,
96     recurtax char(1) NULL,
97     plan varchar(80) NULL,
98     plandata text NULL,
99     disabled char(1) NULL,
100     taxclass varchar(80) NULL,
101     PRIMARY KEY (pkgpart)
102 );
103 INSERT INTO part_pkg_temp SELECT * from part_pkg;
104 DROP TABLE part_pkg;
105 ALTER TABLE part_pkg_temp RENAME TO part_pkg;
106 CREATE INDEX part_pkg1 ON part_pkg(disabled);
107
108 On modern Pg:
109 ALTER TABLE part_pkg DROP CONSTRAINT part_pkg_temp_pkey;
110 ALTER TABLE part_pkg ADD PRIMARY KEY (pkgpart);
111 select setval('public.part_pkg_temp_pkgpart_seq', ( select max(pkgpart) from part_pkg) );
112
113 Or on Pg versions that don't support DROP CONSTRAINT and ADD PRIMARY KEY (tested on 7.1 and 7.2 so far):
114 DROP INDEX part_pkg_temp_pkey;
115 CREATE UNIQUE INDEX part_pkg_pkey ON part_pkg (pkgpart);
116 probably this one?: select setval('part_pkg_temp_pkgpart_seq', ( select max(pkgpart) from part_pkg) );
117 probably not this one?: select setval('part_pkg_pkgpart_seq', ( select max(pkgpart) from part_pkg) );
118
119 CREATE TABLE h_part_pkg_temp (
120     historynum serial NOT NULL,
121     history_date int,
122     history_user varchar(80) NOT NULL,
123     history_action varchar(80) NOT NULL,
124     pkgpart int NOT NULL,
125     pkg varchar(80) NOT NULL,
126     "comment" varchar(80) NOT NULL,
127     setup text NULL,
128     freq varchar(80) NOT NULL,
129     recur text NULL,
130     setuptax char(1) NULL,
131     recurtax char(1) NULL,
132     plan varchar(80) NULL,
133     plandata text NULL,
134     disabled char(1) NULL,
135     taxclass varchar(80) NULL,
136     PRIMARY KEY (historynum)
137 );
138 INSERT INTO h_part_pkg_temp SELECT * from h_part_pkg;
139 DROP TABLE h_part_pkg;
140 ALTER TABLE h_part_pkg_temp RENAME TO h_part_pkg;
141 CREATE INDEX h_part_pkg1 ON h_part_pkg(disabled);
142
143 On modern Pg:
144 ALTER TABLE h_part_pkg DROP CONSTRAINT h_part_pkg_temp_pkey;
145 ALTER TABLE h_part_pkg ADD PRIMARY KEY (historynum);
146 select setval('public.h_part_pkg_temp_historynum_seq', ( select max(historynum) from h_part_pkg) );
147
148 Or on Pg versions that don't support DROP CONSTRAINT and ADD PRIMARY KEY (tested on 7.1 and 7.2 so far):
149 DROP INDEX h_part_pkg_temp_pkey;
150 CREATE UNIQUE INDEX h_part_pkg_pkey ON h_part_pkg (historynum);
151 probably this one?: select setval('h_part_pkg_temp_historynum_seq', ( select max(historynum) from h_part_pkg) );
152 probably not this one?: select setval('h_part_pkg_historynum_seq', ( select max(historynum) from h_part_pkg) );
153
154 CREATE TABLE cust_pay_refund (
155     payrefundnum serial NOT NULL,
156     paynum int NOT NULL,
157     refundnum int NOT NULL,
158     _date int NOT NULL,
159     amount decimal(10,2) NOT NULL,
160     PRIMARY KEY (payrefundnum)
161 );
162 CREATE INDEX cust_pay_refund1 ON cust_pay_refund(paynum);
163 CREATE INDEX cust_pay_refund2 ON cust_pay_refund(refundnum);
164
165 DROP INDEX cust_bill_pkg1;
166
167 ALTER TABLE cust_bill_pkg ADD itemdesc varchar(80) NULL;
168 ALTER TABLE h_cust_bill_pkg ADD itemdesc varchar(80) NULL;
169 ALTER TABLE cust_main_county ADD taxname varchar(80) NULL;
170 ALTER TABLE h_cust_main_county ADD taxname varchar(80) NULL;
171 ALTER TABLE cust_main_county ADD setuptax char(1) NULL;
172 ALTER TABLE h_cust_main_county ADD setuptax char(1) NULL;
173 ALTER TABLE cust_main_county ADD recurtax char(1) NULL;
174 ALTER TABLE h_cust_main_county ADD recurtax char(1) NULL;
175 ALTER TABLE cust_pkg ADD last_bill int NULL;
176 ALTER TABLE h_cust_pkg ADD last_bill int NULL;
177 ALTER TABLE agent ADD disabled char(1) NULL;
178 ALTER TABLE h_agent ADD disabled char(1) NULL;
179 ALTER TABLE agent ADD username varchar(80) NULL;
180 ALTER TABLE h_agent ADD username varchar(80) NULL;
181 ALTER TABLE agent ADD _password varchar(80) NULL;
182 ALTER TABLE h_agent ADD _password varchar(80) NULL;
183 ALTER TABLE cust_main ADD paycvv varchar(4) NULL;
184 ALTER TABLE h_cust_main ADD paycvv varchar(4) NULL;
185 ALTER TABLE part_referral ADD disabled char(1) NULL;
186 ALTER TABLE h_part_referral ADD disabled char(1) NULL;
187 CREATE INDEX part_referral1 ON part_referral ( disabled );
188 ALTER TABLE pkg_svc ADD primary_svc char(1) NULL;
189 ALTER TABLE h_pkg_svc ADD primary_svc char(1) NULL;
190 ALTER TABLE svc_forward ADD src varchar(255) NULL;
191 ALTER TABLE h_svc_forward ADD src varchar(255) NULL;
192
193 On recent Pg versions:
194
195 ALTER TABLE svc_forward ALTER COLUMN srcsvc DROP NOT NULL;
196 ALTER TABLE h_svc_forward ALTER COLUMN srcsvc DROP NOT NULL;
197 ALTER TABLE svc_forward ALTER COLUMN dstsvc DROP NOT NULL;
198 ALTER TABLE h_svc_forward ALTER COLUMN dstsvc DROP NOT NULL;
199
200 Or on Pg versions that don't support DROP NOT NULL (tested on 7.1 and 7.2 so far):
201 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' ) );
202
203 If you created your database with a version before 1.4.2, dump database, edit:
204 - cust_main and h_cust_main: increase otaker from 8 to 32
205 - cust_main and h_cust_main: change ss from char(11) to varchar(11) ( "character(11)" to "character varying(11)" )
206 - cust_credit and h_cust_credit: increase otaker from 8 to 32
207 - cust_pkg and h_cust_pkg: increase otaker from 8 to 32
208 - cust_refund and h_cust_refund: increase otaker from 8 to 32
209 - domain_record and h_domain_record: increase reczone from 80 to 255
210 - domain_record and h_domain_record: change rectype from char to varchar ( "character(5)" to "character varying(5)" )
211 - domain_record and h_domain_record: increase recdata from 80 to 255
212 then reload
213
214 optionally:
215
216   CREATE INDEX cust_main6 ON cust_main ( daytime );
217   CREATE INDEX cust_main7 ON cust_main ( night );
218   CREATE INDEX cust_main8 ON cust_main ( fax );
219   CREATE INDEX cust_main9 ON cust_main ( ship_daytime );
220   CREATE INDEX cust_main10 ON cust_main ( ship_night );
221   CREATE INDEX cust_main11 ON cust_main ( ship_fax );
222   CREATE INDEX agent2 ON agent ( disabled );
223   CREATE INDEX part_bill_event2 ON part_bill_event ( disabled );
224   CREATE INDEX cust_pay4 ON cust_pay (_date);
225
226   serial columns
227
228 mandatory again:
229
230 dbdef-create username
231 create-history-tables username cust_bill_pkg_detail router part_svc_router addr_block svc_broadband acct_snarf svc_external
232 dbdef-create username
233
234 apache - fix <Files> sections to include .html also
235
236 </pre>