summaryrefslogtreecommitdiff
path: root/httemplate/docs/upgrade8.html
blob: cf60a8582b69bc18af7a5ae05de5513104518d8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
<head>
  <title>Upgrading to 1.4.0</title>
</head>
<body>
<h1>Upgrading to 1.4.0 from 1.3.1</h1>
<ul>
  <li>If migrating from less than 1.3.1, see these <a href="upgrade7.html">instructions</a> first.
  <li><font size="+2" color="#ff0000">Backup your database and current Freeside installation.</font> (with&nbsp;<a href="http://www.ca.postgresql.org/devel-corner/docs/postgres/backup.html">PostgreSQL</a>) (with&nbsp;<a href="http://www.mysql.com/documentation/mysql/bychapter/manual_MySQL_Database_Administration.html#Backup">MySQL</a>)
  <li><a href="http://perl.apache.org/">mod_perl</a> is now required.
  <li>Install <a href="http://search.cpan.org/search?dist=Time-Duration">Time-Duration</a>, <a href="http://search.cpan.org/search?dist=Tie-IxHash">Tie-IxHash</a> and <a href="http://search.cpan.org/search?dist=HTML-Widgets-SelectLayers">HTML-Widgets-SelectLayers</a> (minimum version 0.02).
  <li>Install <a href="http://www.apache-asp.org/">Apache::ASP</a> or <a href="http://www.masonhq.com/">HTML::Mason</a> (use version 1.0x - Freeside is not yet compatible with version 1.1x).
  <li>Install <a href="http://rsync.samba.org/">rsync</a>
</ul>
<table>
  <tr>
    <th>Apache::ASP</th><th>Mason</th>
  </tr>
  <tr>
    <td><ul>
      <li>Run <tt>make aspdocs</tt>
      <li>Copy <tt>aspdocs/</tt> to your web server's document space.
      <li>Create a <a href="http://www.apache-asp.org/config.html#Global">Global</a> directory, such as <tt>/usr/local/etc/freeside/asp-global/</tt>
      <li>Copy <tt>htetc/global.asa</tt> to the Global directory.
      <li>Configure Apache for the Global directory and to execute .cgi files using Apache::ASP.  For example:
<font size="-1"><pre>
&lt;Directory /usr/local/apache/htdocs/freeside-asp&gt;
&lt;Files ~ (\.cgi)&gt;
AddHandler perl-script .cgi
PerlHandler Apache::ASP
&lt;/Files&gt;
&lt;Perl&gt;
$MLDBM::RemoveTaint = 1;
&lt;/Perl&gt;
PerlSetVar Global /usr/local/etc/freeside/asp-global/
&lt;/Directory&gt;
</pre></font>
    </ul></td>
    <td><ul>
      <li>(use version 1.0x - Freeside is not yet compatible with version 1.1x)
      <li>Run <tt>make masondocs</tt>
      <li>Copy <tt>masondocs/</tt> to your web server's document space.
      <li>Copy <tt>htetc/handler.pl</tt> to your web server's configuration directory.
      <li>Edit <tt>handler.pl</tt> and set an appropriate <tt>data_dir</tt>, such as <tt>/usr/local/etc/freeside/mason-data</tt>
      <li>Configure Apache to use the <tt>handler.pl</tt> file and to execute .cgi files using HTML::Mason.  For example:
<font size="-1"><pre>
&lt;Directory /usr/local/apache/htdocs/freeside-mason&gt;
&lt;Files ~ (\.cgi)&gt;
AddHandler perl-script .cgi
PerlHandler HTML::Mason
&lt;/Files&gt;
&lt;Perl&gt;
require "/usr/local/apache/conf/handler.pl";
&lt;/Perl&gt;
&lt;/Directory&gt;
</pre></font>
    </ul></td>
  </tr>
</table>
<ul>
  <li>Build and install the Perl modules:
    <pre>
$ su
# make install-perl-modules</pre>
   <li>Apply the following changes to your database:
<pre>
CREATE TABLE svc_forward (
  svcnum int NOT NULL,
  srcsvc int NOT NULL,
  dstsvc int NOT NULL,
  dst varchar(80),
  PRIMARY KEY (svcnum)
);
ALTER TABLE part_svc ADD svc_forward__srcsvc varchar(80) NULL;
ALTER TABLE part_svc ADD svc_forward__srcsvc_flag char(1) NULL;
ALTER TABLE part_svc ADD svc_forward__dstsvc varchar(80) NULL;
ALTER TABLE part_svc ADD svc_forward__dstsvc_flag char(1) NULL;
ALTER TABLE part_svc ADD svc_forward__dst varchar(80) NULL;
ALTER TABLE part_svc ADD svc_forward__dst_flag char(1) NULL;

CREATE TABLE cust_credit_bill (
  creditbillnum int primary key,
  crednum int not null,
  invnum int not null,
  _date int not null,
  amount decimal(10,2) not null
);

CREATE TABLE cust_bill_pay (
  billpaynum int primary key,
  invnum int not null,
  paynum int not null,
  _date int not null,
  amount decimal(10,2) not null
);

CREATE TABLE cust_credit_refund (
  creditrefundnum int primary key,
  crednum int not null,
  refundnum int not null,
  _date int not null,
  amount decimal(10,2) not null
);

CREATE TABLE part_svc_column (
  columnnum int primary key,
  svcpart int not null,
  columnname varchar(64) not null,
  columnvalue varchar(80) null,
  columnflag char(1) null
);

CREATE TABLE queue (
  jobnum int primary key,
  job text not null,
  _date int not null,
  status varchar(80) not null,
  statustext text null,
  svcnum int null
);
CREATE INDEX queue1 ON queue ( svcnum );
CREATE INDEX queue2 ON queue ( status );

CREATE TABLE queue_arg (
  argnum int primary key,
  jobnum int not null,
  arg text null
);
CREATE INDEX queue_arg1 ON queue_arg ( jobnum );

CREATE TABLE queue_depend (
  dependnum int primary key,
  jobnum int not null,
  depend_jobnum int not null
);
CREATE INDEX queue_depend1 ON queue_depend ( jobnum );
CREATE INDEX queue_depend2 ON queue_depend ( depend_jobnum );

CREATE TABLE part_pop_local (
  localnum int primary key,
  popnum int not null,
  city varchar(80) null,
  state char(2) null,
  npa char(3) not null,
  nxx char(3) not null
);
CREATE UNIQUE INDEX part_pop_local1 ON part_pop_local ( npa, nxx );

CREATE TABLE cust_bill_event (
  eventnum int primary key,
  invnum int not null,
  eventpart int not null,
  _date int not null
);
CREATE UNIQUE INDEX cust_bill_event1 ON cust_bill_event ( eventpart, invnum );
CREATE INDEX cust_bill_event2 ON cust_bill_event ( invnum );

CREATE TABLE part_bill_event (
  eventpart int primary key,
  payby char(4) not null,
  event varchar(80) not null,
  eventcode text null,
  seconds int null,
  weight int not null,
  plan varchar(80) null,
  plandata text null,
  disabled char(1) null
);
CREATE INDEX part_bill_event1 ON part_bill_event ( payby );

CREATE TABLE export_svc (
  exportsvcnum int primary key,
  exportnum int not null,
  svcpart int not null
);
CREATE UNIQUE INDEX export_svc1 ON export_svc ( exportnum, svcpart );
CREATE INDEX export_svc2 ON export_svc ( exportnum );
CREATE INDEX export_svc3 ON export_svc ( svcpart );

CREATE TABLE part_export (
  exportnum int primary key,
  machine varchar(80) not null,
  exporttype varchar(80) not null,
  nodomain char(1) NULL
);
CREATE INDEX part_export1 ON part_export ( machine );
CREATE INDEX part_export2 ON part_export ( exporttype );

CREATE TABLE part_export_option (
  optionnum int primary key,
  exportnum int not null,
  optionname varchar(80) not null,
  optionvalue text NULL
);
CREATE INDEX part_export_option1 ON part_export_option ( exportnum );
CREATE INDEX part_export_option2 ON part_export_option ( optionname );

CREATE TABLE radius_usergroup (
  usergroupnum int primary key,
  svcnum int not null,
  groupname varchar(80) not null
);
CREATE INDEX radius_usergroup1 ON radius_usergroup ( svcnum );
CREATE INDEX radius_usergroup2 ON radius_usergroup ( groupname );

CREATE TABLE msgcat (
  msgnum int primary key,
  msgcode varchar(80) not null,
  locale varchar(16) not null,
  msg text not null
);
CREATE INDEX msgcat1 ON msgcat ( msgcode, locale );

CREATE TABLE cust_tax_exempt (
  exemptnum int primary key,
  custnum int not null,
  taxnum int not null,
  year int not null,
  month int not null,
  amount decimal(10,2)
);
CREATE UNIQUE INDEX cust_tax_exempt1 ON cust_tax_exempt ( taxnum, year, month );

ALTER TABLE svc_acct ADD domsvc integer NULL;
ALTER TABLE part_svc ADD svc_acct__domsvc varchar(80) NULL;
ALTER TABLE part_svc ADD svc_acct__domsvc_flag char(1) NULL;
ALTER TABLE svc_domain ADD catchall integer NULL;
ALTER TABLE cust_main ADD referral_custnum integer NULL;
ALTER TABLE cust_main ADD comments text NULL;
ALTER TABLE cust_pay ADD custnum integer;
ALTER TABLE cust_pay_batch ADD paybatchnum integer;
ALTER TABLE cust_refund ADD custnum integer;
ALTER TABLE cust_pkg ADD manual_flag char(1) NULL;
ALTER TABLE part_pkg ADD plan varchar(80) NULL;
ALTER TABLE part_pkg ADD plandata text NULL;
ALTER TABLE part_pkg ADD setuptax char(1) NULL;
ALTER TABLE part_pkg ADD recurtax char(1) NULL;
ALTER TABLE part_pkg ADD disabled char(1) NULL;
ALTER TABLE part_svc ADD disabled char(1) NULL;
ALTER TABLE cust_bill ADD closed char(1) NULL;
ALTER TABLE cust_pay ADD closed char(1) NULL;
ALTER TABLE cust_credit ADD closed char(1) NULL;
ALTER TABLE cust_refund ADD closed char(1) NULL;
ALTER TABLE cust_bill_event ADD status varchar(80);
ALTER TABLE cust_bill_event ADD statustext text NULL;
ALTER TABLE svc_acct ADD sec_phrase varchar(80) NULL;
ALTER TABLE part_svc ADD svc_acct__sec_phrase varchar(80) NULL;
ALTER TABLE part_svc ADD svc_acct__sec_phrase_flag char(1) NULL;
ALTER TABLE part_pkg ADD taxclass varchar(80) NULL;
ALTER TABLE cust_main_county ADD taxclass varchar(80) NULL;
ALTER TABLE cust_main_county ADD exempt_amount decimal(10,2);
CREATE INDEX cust_main3 ON cust_main ( referral_custnum );
CREATE INDEX cust_credit_bill1 ON cust_credit_bill ( crednum );
CREATE INDEX cust_credit_bill2 ON cust_credit_bill ( invnum );
CREATE INDEX cust_bill_pay1 ON cust_bill_pay ( invnum );
CREATE INDEX cust_bill_pay2 ON cust_bill_pay ( paynum );
CREATE INDEX cust_credit_refund1 ON cust_credit_refund ( crednum );
CREATE INDEX cust_credit_refund2 ON cust_credit_refund ( refundnum );
CREATE UNIQUE INDEX cust_pay_batch_pkey ON cust_pay_batch ( paybatchnum );
CREATE UNIQUE INDEX part_svc_column1 ON part_svc_column ( svcpart, columnname );
CREATE INDEX cust_pay2 ON cust_pay ( paynum );
CREATE INDEX cust_pay3 ON cust_pay ( custnum );
CREATE INDEX cust_pay4 ON cust_pay ( paybatch );
</pre>

  <li>If you are using PostgreSQL, apply the following changes to your database:
<pre>
CREATE UNIQUE INDEX agent_pkey ON agent ( agentnum );
CREATE UNIQUE INDEX agent_type_pkey ON agent_type ( typenum );
CREATE UNIQUE INDEX cust_bill_pkey ON cust_bill ( invnum );
CREATE UNIQUE INDEX cust_credit_pkey ON cust_credit ( crednum );
CREATE UNIQUE INDEX cust_main_pkey ON cust_main ( custnum );
CREATE UNIQUE INDEX cust_main_county_pkey ON cust_main_county ( taxnum );
CREATE UNIQUE INDEX cust_main_invoice_pkey ON cust_main_invoice ( destnum );
CREATE UNIQUE INDEX cust_pay_pkey ON cust_pay ( paynum );
CREATE UNIQUE INDEX cust_pkg_pkey ON cust_pkg ( pkgnum );
CREATE UNIQUE INDEX cust_refund_pkey ON cust_refund ( refundnum );
CREATE UNIQUE INDEX cust_svc_pkey ON cust_svc ( svcnum );
CREATE UNIQUE INDEX domain_record_pkey ON domain_record ( recnum );
CREATE UNIQUE INDEX nas_pkey ON nas ( nasnum );
CREATE UNIQUE INDEX part_pkg_pkey ON part_pkg ( pkgpart );
CREATE UNIQUE INDEX part_referral_pkey ON part_referral ( refnum );
CREATE UNIQUE INDEX part_svc_pkey ON part_svc ( svcpart );
CREATE UNIQUE INDEX port_pkey ON port ( portnum );
CREATE UNIQUE INDEX prepay_credit_pkey ON prepay_credit ( prepaynum );
CREATE UNIQUE INDEX session_pkey ON session ( sessionnum );
CREATE UNIQUE INDEX svc_acct_pkey ON svc_acct ( svcnum );
CREATE UNIQUE INDEX svc_acct_pop_pkey ON svc_acct_pop ( popnum );
CREATE UNIQUE INDEX svc_acct_sm_pkey ON svc_acct_sm ( svcnum );
CREATE UNIQUE INDEX svc_domain_pkey ON svc_domain ( svcnum );
CREATE UNIQUE INDEX svc_www_pkey ON svc_www ( svcnum );
</pre>
  <li>If you wish to enable service/shipping addresses, apply the following
      changes to your database:
<pre>
ALTER TABLE cust_main ADD COLUMN ship_last varchar(80) NULL;
ALTER TABLE cust_main ADD COLUMN ship_first varchar(80) NULL;
ALTER TABLE cust_main ADD COLUMN ship_company varchar(80) NULL;
ALTER TABLE cust_main ADD COLUMN ship_address1 varchar(80) NULL;
ALTER TABLE cust_main ADD COLUMN ship_address2 varchar(80) NULL;
ALTER TABLE cust_main ADD COLUMN ship_city varchar(80) NULL;
ALTER TABLE cust_main ADD COLUMN ship_county varchar(80) NULL;
ALTER TABLE cust_main ADD COLUMN ship_state varchar(80) NULL;
ALTER TABLE cust_main ADD COLUMN ship_zip varchar(10) NULL;
ALTER TABLE cust_main ADD COLUMN ship_country char(2) NULL;
ALTER TABLE cust_main ADD COLUMN ship_daytime varchar(20) NULL;
ALTER TABLE cust_main ADD COLUMN ship_night varchar(20) NULL;
ALTER TABLE cust_main ADD COLUMN ship_fax varchar(12) NULL;
CREATE INDEX cust_main4 ON cust_main ( ship_last );
CREATE INDEX cust_main5 ON cust_main ( ship_company );
</pre>
  <li>If you are using the signup server, reinstall it according to the <a href="signup.html">instructions</a>.  The 1.3.x signup server is not compatible with 1.4.x.
  <li>Run <tt>bin/dbdef-create <i>username</i></tt>
  <li>If you have svc_acct_sm records or service definitions:
    <ul>
      <li>Create a service definition with table svc_forward
      <li>Run <tt>bin/fs-migrate-svc_acct_sm <i>username</i></tt>
    </ul>
  <li>Or if you just have svc_acct records:
    <ul>
      <li>Order and provision a package for your default domain and note down the <b>Service #</b> or <i>svcnum</i>.
      <li><tt>UPDATE svc_acct SET domsvc = </tt><i>svcnum</i>
      <li>Update your service definitions to have default (or fixed) <b>domsvc</b>.
    </ul>
  <li>Run <tt>bin/fs-migrate-payref<i>username</i></tt>
  <li>Run <tt>bin/fs-migrate-part_svc<i>username</i></tt>
  <li><b>After running bin/fs-migrate-payref</b>, apply the following changes to your database:
  <table border><tr><th>PostgreSQL</th><th>MySQL, others</th></tr>
<tr><td>
<font size=-1><pre>
CREATE TABLE cust_pay_temp (
  paynum int primary key,
  custnum int not null,
  paid decimal(10,2) not null,
  _date int null,
  payby char(4) not null,
  payinfo varchar(16) null,
  paybatch varchar(80) null,
  closed char(1) null
);
INSERT INTO cust_pay_temp SELECT paynum, custnum, paid, _date, payby, payinfo, paybatch, closed FROM cust_pay;
DROP TABLE cust_pay;
ALTER TABLE cust_pay_temp RENAME TO cust_pay;
CREATE UNIQUE INDEX cust_pay1 ON cust_pay (paynum);
CREATE TABLE cust_refund_temp (
  refundnum int primary key,
  custnum int not null,
  _date int null,
  refund decimal(10,2) not null,
  otaker varchar(8) not null,
  reason varchar(80) not null,
  payby char(4) not null,
  payinfo varchar(16) null,
  paybatch varchar(80) null,
  closed char(1) null
);
INSERT INTO cust_refund_temp SELECT refundnum, custnum, _date, refund, otaker, reason, payby, payinfo, '', closed from cust_refund;
DROP TABLE cust_refund;
ALTER TABLE cust_refund_temp RENAME TO cust_refund;
CREATE UNIQUE INDEX cust_refund1 ON cust_refund (refundnum);
</pre></font>
</td><td>
<font size=-1><pre>
ALTER TABLE cust_pay DROP COLUMN invnum;
ALTER TABLE cust_refund DROP COLUMN crednum;
</pre></font>
</td></tr></table>
  <li><b>IMPORTANT: After applying the second set of database changes</b>, run <tt>bin/dbdef-create <i>username</i></tt> again.
  <li><b>IMPORTANT</b>: run <tt>bin/create-history-tables <i>username</i></tt>
  <li><b>IMPORTANT: After running bin/create-history-tables</b>, run <tt>bin/dbdef-create <i>username</i></tt> again.
  <li>As the freeside UNIX user, run <tt>bin/populate-msgcat <i>username</i></tt
> to populate the message catalog
<!--  <li>set the <a href="../config/config.cgi#username_policy">user_policy configuration value</a> as appropriate for your site. -->
  <li>set the <a href="../config/config.cgi#locale">locale configuration value</a> to en_US.
  <li>the mxmachines, nsmachines, arecords and cnamerecords configuration values have been deprecated.  Set the <a href="../config/config.cgi#defaultrecords">defaultrecords configuration value</a> instead.
  <li>Create the `/usr/local/etc/freeside/cache.<i>datasrc</i>' directory
      (owned by the freeside user).
  <li>freeside-queued was installed with the Perl modules.  Start it now and ensure that is run upon system startup.
  <li>Set appropriate <a href="../browse/part_bill_event.cgi">invoice events</a> for your site.  At the very least, you'll want to set some invoice events "<i>After 0 days</i>": a <i>BILL</i> invoice event to print invoices, a <i>CARD</i> invoice event to batch or run cards real-time, and a <i>COMP</i> invoice event to "pay" complimentary customers.  If you were using the <i>-i</i> option to <a href="man/bin/freeside-bill.html">freeside-bill</a> it should be removed.
  <li>Use <a href="man/bin/freeside-daily.html">freeside-daily</a> instead of <a href="man/bin/freeside-bill.html">freeside-bill</a>.
  <li>If you would like Freeside to notify your customers when their credit
  cards and other billing arrangements are about to expire, arrange for
  <b>freeside-expiration-alerter</b> to be run daily by cron or similar
  facility.  The message it sends can be configured from the
  <u>Configuration</u> choice of the main menu as <u>alerter_template</u>.
  <li>Export has been rewritten.  If you were using the icradiusmachines,
  icradius_mysqldest, icradius_mysqlsource, or icradius_secrets files, add
  an appropriate "sqlradius" export to all relevant Service Definitions
  instead.  Use <a href="http://www.mysql.com/documentation/mysql/bychapter/manual_MySQL_Database_Administration.html#Replication">MySQL replication</a> or
  point the "sqlradius" export directly at your external ICRADIUS or FreeRADIUS
  database (or through an SSL-necrypting proxy...)
</ul>
</body>