add pkey to batch payments and fix a doc typo
[freeside.git] / bin / fs-setup
index 9075ca2..476b84d 100755 (executable)
@@ -1,146 +1,6 @@
 #!/usr/bin/perl -Tw
 #
 #!/usr/bin/perl -Tw
 #
-# $Id: fs-setup,v 1.39 2001-07-30 07:42:39 ivan Exp $
-#
-# ivan@sisd.com 97-nov-8,9
-#
-# agent_type and type_pkgs added.
-# (index need to be declared, & primary keys shoudln't have mysql syntax)
-# ivan@sisd.com 97-nov-13
-#
-# pulled modified version back out of register.cgi ivan@sisd.com 98-feb-21
-#
-# removed extraneous sample data ivan@sisd.com 98-mar-23
-#
-# gained the big hash from dbdef.pm, dbdef.pm usage rewrite ivan@sisd.com
-# 98-apr-19 - 98-may-11 plus
-#
-# finished up ivan@sisd.com 98-jun-1
-#
-# part_svc fields are all forced NULL, not the opposite
-# hmm: also are forced varchar($char_d) as fixed '0' for things like
-# uid is Not Good.  will this break anything else?
-# ivan@sisd.com 98-jun-29
-#
-# ss is 11 chars ivan@sisd.com 98-jul-20
-#
-# setup of arbitrary radius fields ivan@sisd.com 98-aug-9
-#
-# ouch, removed index on company name that wasn't supposed to be there
-# ivan@sisd.com 98-sep-4
-#
-# fix radius attributes ivan@sisd.com 98-sep-27
-#
-# $Log: fs-setup,v $
-# Revision 1.39  2001-07-30 07:42:39  ivan
-# need an DBIx::DBSchema with delcolumn
-#
-# Revision 1.38  2001/07/30 07:36:04  ivan
-# templates!!!
-#
-# Revision 1.37  2001/06/03 14:16:11  ivan
-# allow empty refund reasons
-#
-# Revision 1.36  2001/04/15 12:56:31  ivan
-# s/dbdef/DBIx::DBSchema/
-#
-# Revision 1.35  2001/04/15 09:36:43  ivan
-# http://www.sisd.com/freeside/list-archive/msg01450.html
-#
-# Revision 1.34  2001/04/09 23:05:16  ivan
-# Transactions Part I!!!
-#
-# Revision 1.33  2001/02/03 14:03:50  ivan
-# time-based prepaid cards, session monitor.  woop!
-#
-# Revision 1.32  2000/12/04 00:13:02  ivan
-# fix nas.last type
-#
-# Revision 1.31  2000/12/01 18:34:53  ivan
-# another tyop
-#
-# Revision 1.30  2000/12/01 18:33:32  ivan
-# tyop
-#
-# Revision 1.29  2000/11/07 15:00:37  ivan
-# session monitor
-#
-# Revision 1.28  2000/10/30 10:47:26  ivan
-# nas.last can't be defined NULL if indexed
-#
-# Revision 1.26  2000/07/06 08:57:27  ivan
-# support for radius check attributes (except importing).  poorly documented.
-#
-# Revision 1.25  2000/06/29 12:00:49  ivan
-# support for pre-encrypted md5 passwords.
-#
-# Revision 1.24  2000/03/02 07:44:07  ivan
-# typo forgot closing '
-#
-# Revision 1.23  2000/02/03 05:16:52  ivan
-# beginning of DNS and Apache support
-#
-# Revision 1.22  2000/01/31 05:22:23  ivan
-# prepaid "internet cards"
-#
-# Revision 1.21  2000/01/30 06:03:26  ivan
-# postgres 6.5 finally supports decimal(10,2)
-#
-# Revision 1.20  2000/01/28 22:53:33  ivan
-# track full phone number
-#
-# Revision 1.19  1999/07/29 08:50:35  ivan
-# wrong type for cust_pay_batch.exp
-#
-# Revision 1.18  1999/04/15 22:46:30  ivan
-# TT isn't a state!
-#
-# Revision 1.17  1999/04/14 07:58:39  ivan
-# export getsecrets from FS::UID instead of calling it explicitly
-#
-# Revision 1.16  1999/02/28 19:44:16  ivan
-# constructors s/create/new/ pointed out by "Bao C. Ha" <bao@hacom.net>
-#
-# Revision 1.15  1999/02/27 21:06:21  ivan
-# cust_main.paydate should be varchar(10), not @date_type ; problem reported
-# by Ben Leibig <leibig@colorado.edu>
-#
-# Revision 1.14  1999/02/07 09:59:14  ivan
-# more mod_perl fixes, and bugfixes Peter Wemm sent via email
-#
-# Revision 1.13  1999/02/04 06:09:23  ivan
-# add AU provences
-#
-# Revision 1.12  1999/02/03 10:42:27  ivan
-# *** empty log message ***
-#
-# Revision 1.11  1999/01/17 03:11:52  ivan
-# remove preliminary completehost changes
-#
-# Revision 1.10  1998/12/16 06:05:38  ivan
-# add table cust_main_invoice
-#
-# Revision 1.9  1998/12/15 04:36:29  ivan
-# s/croak/die/; #oops
-#
-# Revision 1.8  1998/12/15 04:33:27  ivan
-# dies if it isn't running as the freeside user
-#
-# Revision 1.7  1998/11/18 09:01:31  ivan
-# i18n! i18n!
-#
-# Revision 1.6  1998/11/15 13:18:02  ivan
-# remove debugging
-#
-# Revision 1.5  1998/11/15 09:43:03  ivan
-# update for new config file syntax, new adminsuidsetup
-#
-# Revision 1.4  1998/10/22 15:51:23  ivan
-# also varchar with no length specified - postgresql fix broke mysql.
-#
-# Revision 1.3  1998/10/22 15:46:28  ivan
-# now smallint is illegal, so remove that too.
-#
+# $Id: fs-setup,v 1.60 2001-10-02 16:00:30 jeff Exp $
 
 #to delay loading dbdef until we're ready
 BEGIN { $FS::Record::setup_hack = 1; }
 
 #to delay loading dbdef until we're ready
 BEGIN { $FS::Record::setup_hack = 1; }
@@ -155,9 +15,13 @@ use DBIx::DBSchema::ColGroup::Index;
 use FS::UID qw(adminsuidsetup datasrc checkeuid getsecrets);
 use FS::Record;
 use FS::cust_main_county;
 use FS::UID qw(adminsuidsetup datasrc checkeuid getsecrets);
 use FS::Record;
 use FS::cust_main_county;
+use FS::raddb;
 
 die "Not running uid freeside!" unless checkeuid();
 
 
 die "Not running uid freeside!" unless checkeuid();
 
+my %attrib2db =
+  map { lc($FS::raddb::attrib{$_}) => $_ } keys %FS::raddb::attrib;
+
 my $user = shift or die &usage;
 getsecrets($user);
 
 my $user = shift or die &usage;
 getsecrets($user);
 
@@ -175,13 +39,15 @@ reply attribute Framed-IP-Address for each user.  You can specify additional
 check and reply attributes.  First enter any additional RADIUS check attributes
 you need to track for each user, separated by whitespace.
 END
 check and reply attributes.  First enter any additional RADIUS check attributes
 you need to track for each user, separated by whitespace.
 END
-my @check_attributes = map { s/\-/_/g; $_; } split(" ",&getvalue);
+my @check_attributes = map { $attrib2db{lc($_)} or die "unknown attribute $_"; }
+                         split(" ",&getvalue);
 
 print "\n\n", <<END, ":";
 Now enter any additional reply attributes you need to track for each user,
 separated by whitespace.
 END
 
 print "\n\n", <<END, ":";
 Now enter any additional reply attributes you need to track for each user,
 separated by whitespace.
 END
-my @attributes = map { s/\-/_/g; $_; } split(" ",&getvalue);
+my @attributes = map { $attrib2db{lc($_)} or die "unknown attribute $_"; }
+                   split(" ",&getvalue);
 
 print "\n\n", <<END, ":";
 Do you wish to enable the tracking of a second, separate shipping/service
 
 print "\n\n", <<END, ":";
 Do you wish to enable the tracking of a second, separate shipping/service
@@ -232,10 +98,11 @@ my($dbdef) = new DBIx::DBSchema ( map {
   );
 } (keys %tables) );
 
   );
 } (keys %tables) );
 
-#remove ship_ from cust_main
-unless ($ship) {
-  my $cust_main = $dbdef->table('cust_main');
+my $cust_main = $dbdef->table('cust_main');
+unless ($ship) { #remove ship_ from cust_main
   $cust_main->delcolumn($_) foreach ( grep /^ship_/, $cust_main->columns );
   $cust_main->delcolumn($_) foreach ( grep /^ship_/, $cust_main->columns );
+} else { #add indices on ship_last and ship_company
+  push @{$cust_main->index->lol_ref}, ( ['ship_last'], ['ship_company'] ) 
 }
 
 #add radius attributes to svc_acct
 }
 
 #add radius attributes to svc_acct
@@ -261,32 +128,32 @@ foreach $attribute (@check_attributes) {
   ));
 }
 
   ));
 }
 
-#make part_svc table (but now as object)
-
-my($part_svc)=$dbdef->table('part_svc');
-
-#because of svc_acct_pop
-#foreach (grep /^svc_/, $dbdef->tables) { 
-#foreach (qw(svc_acct svc_acct_sm svc_charge svc_domain svc_wo)) {
-foreach (qw(svc_acct svc_acct_sm svc_domain svc_www)) {
-  my($table)=$dbdef->table($_);
-  my($col);
-  foreach $col ( $table->columns ) {
-    next if $col =~ /^svcnum$/;
-    $part_svc->addcolumn( new DBIx::DBSchema::Column (
-      $table->name. '__' . $table->column($col)->name,
-      'varchar', #$table->column($col)->type, 
-      'NULL',
-      $char_d, #$table->column($col)->length,
-    ));
-    $part_svc->addcolumn ( new DBIx::DBSchema::Column (
-      $table->name. '__'. $table->column($col)->name . "_flag",
-      'char',
-      'NULL',
-      1,
-    ));
-  }
-}
+##make part_svc table (but now as object)
+#
+#my($part_svc)=$dbdef->table('part_svc');
+#
+##because of svc_acct_pop
+##foreach (grep /^svc_/, $dbdef->tables) { 
+##foreach (qw(svc_acct svc_acct_sm svc_charge svc_domain svc_wo)) {
+#foreach (qw(svc_acct svc_domain svc_forward svc_www)) {
+#  my($table)=$dbdef->table($_);
+#  my($col);
+#  foreach $col ( $table->columns ) {
+#    next if $col =~ /^svcnum$/;
+#    $part_svc->addcolumn( new DBIx::DBSchema::Column (
+#      $table->name. '__' . $table->column($col)->name,
+#      'varchar', #$table->column($col)->type, 
+#      'NULL',
+#      $char_d, #$table->column($col)->length,
+#    ));
+#    $part_svc->addcolumn ( new DBIx::DBSchema::Column (
+#      $table->name. '__'. $table->column($col)->name . "_flag",
+#      'char',
+#      'NULL',
+#      1,
+#    ));
+#  }
+#}
 
 #important
 $dbdef->save($dbdef_file);
 
 #important
 $dbdef->save($dbdef_file);
@@ -456,6 +323,19 @@ sub tables_hash_hack {
       'index' => [ ['custnum'] ],
     },
 
       'index' => [ ['custnum'] ],
     },
 
+    'cust_credit_bill' => {
+      'columns' => [
+        'creditbillnum', 'int', '', '',
+        'crednum',  'int', '', '',
+        'invnum',  'int', '', '',
+        '_date',    @date_type,
+        'amount',   @money_type,
+      ],
+      'primary_key' => 'creditbillnum',
+      'unique' => [ [] ],
+      'index' => [ ['crednum'], ['invnum'] ],
+    },
+
     'cust_main' => {
       'columns' => [
         'custnum',  'int',  '',     '',
     'cust_main' => {
       'columns' => [
         'custnum',  'int',  '',     '',
@@ -498,11 +378,13 @@ sub tables_hash_hack {
         'tax',      'char', 'NULL', 1,
         'otaker',   'varchar', '',     8,
         'refnum',   'int',  '',     '',
         'tax',      'char', 'NULL', 1,
         'otaker',   'varchar', '',     8,
         'refnum',   'int',  '',     '',
+        'referral_custnum', 'int',  'NULL', '',
+        'comments', 'varchar', 'NULL', '',
       ],
       'primary_key' => 'custnum',
       'unique' => [ [] ],
       #'index' => [ ['last'], ['company'] ],
       ],
       'primary_key' => 'custnum',
       'unique' => [ [] ],
       #'index' => [ ['last'], ['company'] ],
-      'index' => [ ['last'], ],
+      'index' => [ ['last'], [ 'company' ], [ 'referral_custnum' ] ],
     },
 
     'cust_main_invoice' => {
     },
 
     'cust_main_invoice' => {
@@ -535,7 +417,8 @@ sub tables_hash_hack {
     'cust_pay' => {
       'columns' => [
         'paynum',   'int',    '',   '',
     'cust_pay' => {
       'columns' => [
         'paynum',   'int',    '',   '',
-        'invnum',   'int',    '',   '',
+        #now cust_bill_pay #'invnum',   'int',    '',   '',
+        'custnum',  'int',    '',   '',
         'paid',     @money_type,
         '_date',    @date_type,
         'payby',    'char',   '',     4, # CARD/BILL/COMP, should be index into
         'paid',     @money_type,
         '_date',    @date_type,
         'payby',    'char',   '',     4, # CARD/BILL/COMP, should be index into
@@ -545,12 +428,26 @@ sub tables_hash_hack {
       ],
       'primary_key' => 'paynum',
       'unique' => [ [] ],
       ],
       'primary_key' => 'paynum',
       'unique' => [ [] ],
-      'index' => [ ['invnum'] ],
+      'index' => [ [] ],
+    },
+
+    'cust_bill_pay' => {
+      'columns' => [
+        'billpaynum', 'int',     '',   '',
+        'invnum',  'int',     '',   '',
+        'paynum',  'int',     '',   '',
+        'amount',  @money_type,
+        '_date',   @date_type
+      ],
+      'primary_key' => 'billpaynum',
+      'unique' => [ [] ],
+      'index' => [ [ 'paynum', 'invnum' ] ],
     },
 
     'cust_pay_batch' => { #what's this used for again?  list of customers
                           #in current CARD batch? (necessarily CARD?)
       'columns' => [
     },
 
     'cust_pay_batch' => { #what's this used for again?  list of customers
                           #in current CARD batch? (necessarily CARD?)
       'columns' => [
+        'paybatchnum',   'int',    '',   '',
         'invnum',   'int',    '',   '',
         'custnum',   'int',    '',   '',
         'last',     'varchar', '',     $char_d,
         'invnum',   'int',    '',   '',
         'custnum',   'int',    '',   '',
         'last',     'varchar', '',     $char_d,
@@ -568,7 +465,7 @@ sub tables_hash_hack {
         'payname',  'varchar', 'NULL', $char_d,
         'amount',   @money_type,
       ],
         'payname',  'varchar', 'NULL', $char_d,
         'amount',   @money_type,
       ],
-      'primary_key' => '',
+      'primary_key' => 'paybatchnum',
       'unique' => [ [] ],
       'index' => [ ['invnum'], ['custnum'] ],
     },
       'unique' => [ [] ],
       'index' => [ ['invnum'], ['custnum'] ],
     },
@@ -593,7 +490,8 @@ sub tables_hash_hack {
     'cust_refund' => {
       'columns' => [
         'refundnum',    'int',    '',   '',
     'cust_refund' => {
       'columns' => [
         'refundnum',    'int',    '',   '',
-        'crednum',      'int',    '',   '',
+        #now cust_credit_refund #'crednum',      'int',    '',   '',
+        'custnum',  'int',    '',   '',
         '_date',        @date_type,
         'refund',       @money_type,
         'otaker',       'varchar',   '',   8,
         '_date',        @date_type,
         'refund',       @money_type,
         'otaker',       'varchar',   '',   8,
@@ -601,12 +499,27 @@ sub tables_hash_hack {
         'payby',        'char',   '',     4, # CARD/BILL/COMP, should be index
                                              # into payment type table.
         'payinfo',      'varchar',   'NULL', 16,  #see cust_main above
         'payby',        'char',   '',     4, # CARD/BILL/COMP, should be index
                                              # into payment type table.
         'payinfo',      'varchar',   'NULL', 16,  #see cust_main above
+        'paybatch',     'varchar',   'NULL', $char_d,
       ],
       'primary_key' => 'refundnum',
       'unique' => [ [] ],
       ],
       'primary_key' => 'refundnum',
       'unique' => [ [] ],
-      'index' => [ ['crednum'] ],
+      'index' => [ [] ],
     },
 
     },
 
+    'cust_credit_refund' => {
+      'columns' => [
+        'creditrefundnum', 'int',     '',   '',
+        'crednum',  'int',     '',   '',
+        'refundnum',  'int',     '',   '',
+        'amount',  @money_type,
+        '_date',   @date_type
+      ],
+      'primary_key' => 'creditrefundnum',
+      'unique' => [ [] ],
+      'index' => [ [ 'crednum', 'refundnum' ] ],
+    },
+
+
     'cust_svc' => {
       'columns' => [
         'svcnum',    'int',    '',   '',
     'cust_svc' => {
       'columns' => [
         'svcnum',    'int',    '',   '',
@@ -674,6 +587,19 @@ sub tables_hash_hack {
       'index' => [ [] ],
     },
 
       'index' => [ [] ],
     },
 
+    'part_svc_column' => {
+      'columns' => [
+        'columnnum',   'int',         '', '',
+        'svcpart',     'int',         '', '',
+        'columnname',  'varchar',     '', 64,
+        'columnvalue', 'varchar', 'NULL', $char_d,
+        'columnflag',  'char',    'NULL', 1, 
+      ],
+      'primary_key' => 'columnnum',
+      'unique' => [ [ 'svcpart', 'columnname' ] ],
+      'index' => [ [ 'svcpart' ] ],
+    },
+
     #(this should be renamed to part_pop)
     'svc_acct_pop' => {
       'columns' => [
     #(this should be renamed to part_pop)
     'svc_acct_pop' => {
       'columns' => [
@@ -686,7 +612,21 @@ sub tables_hash_hack {
       ],
       'primary_key' => 'popnum',
       'unique' => [ [] ],
       ],
       'primary_key' => 'popnum',
       'unique' => [ [] ],
-      'index' => [ [] ],
+      'index' => [ [ 'state' ] ],
+    },
+
+    'part_pop_local' => {
+      'columns' => [
+        'localnum',  'int',     '',     '',
+        'popnum',    'int',     '',     '',
+        'city',      'varchar', 'NULL', $char_d,
+        'state',     'char',    'NULL', 2,
+        'npa',       'char',    '',     3,
+        'nxx',       'char',    '',     3,
+      ],
+      'primary_key' => 'popnum',
+      'unique' => [ [] ],
+      'index' => [ [ 'npa', 'nxx' ] ],
     },
 
     'svc_acct' => {
     },
 
     'svc_acct' => {
@@ -703,23 +643,24 @@ sub tables_hash_hack {
         'quota',     'varchar',   'NULL',   $char_d,
         'slipip',    'varchar',   'NULL',   15, #four TINYINTs, bah.
         'seconds',   'int', 'NULL',   '', #uhhhh
         'quota',     'varchar',   'NULL',   $char_d,
         'slipip',    'varchar',   'NULL',   15, #four TINYINTs, bah.
         'seconds',   'int', 'NULL',   '', #uhhhh
+        'domsvc',    'int', '',   '',
       ],
       'primary_key' => 'svcnum',
       ],
       'primary_key' => 'svcnum',
-      'unique' => [ [] ],
-      'index' => [ ['username'] ],
+      'unique' => [ [ 'username', 'domsvc' ] ],
+      'index' => [ ['username'], ['domsvc'] ],
     },
 
     },
 
-    'svc_acct_sm' => {
-      'columns' => [
-        'svcnum',    'int',    '',   '',
-        'domsvc',    'int',    '',   '',
-        'domuid',    'int', '',   '',
-        'domuser',   'varchar',   '',   $char_d,
-      ],
-      'primary_key' => 'svcnum',
-      'unique' => [ [] ],
-      'index' => [ ['domsvc'], ['domuid'] ], 
-    },
+#    'svc_acct_sm' => {
+#      'columns' => [
+#        'svcnum',    'int',    '',   '',
+#        'domsvc',    'int',    '',   '',
+#        'domuid',    'int', '',   '',
+#        'domuser',   'varchar',   '',   $char_d,
+#      ],
+#      'primary_key' => 'svcnum',
+#      'unique' => [ [] ],
+#      'index' => [ ['domsvc'], ['domuid'] ], 
+#    },
 
     #'svc_charge' => {
     #  'columns' => [
 
     #'svc_charge' => {
     #  'columns' => [
@@ -735,6 +676,7 @@ sub tables_hash_hack {
       'columns' => [
         'svcnum',    'int',    '',   '',
         'domain',    'varchar',    '',   $char_d,
       'columns' => [
         'svcnum',    'int',    '',   '',
         'domain',    'varchar',    '',   $char_d,
+        'catchall',  'int', 'NULL',    '',
       ],
       'primary_key' => 'svcnum',
       'unique' => [ ['domain'] ],
       ],
       'primary_key' => 'svcnum',
       'unique' => [ ['domain'] ],
@@ -755,6 +697,18 @@ sub tables_hash_hack {
       'index'       => [ ['svcnum'] ],
     },
 
       'index'       => [ ['svcnum'] ],
     },
 
+    'svc_forward' => {
+      'columns' => [
+        'svcnum',   'int',    '',  '',
+        'srcsvc',   'int',    '',  '',
+        'dstsvc',   'int',    '',  '',
+        'dst',      'varchar',    'NULL',  $char_d,
+      ],
+      'primary_key' => 'svcnum',
+      'unique'      => [ [] ],
+      'index'       => [ ['srcsvc'], ['dstsvc'] ],
+    },
+
     'svc_www' => {
       'columns' => [
         'svcnum',   'int',    '',  '',
     'svc_www' => {
       'columns' => [
         'svcnum',   'int',    '',  '',
@@ -829,6 +783,28 @@ sub tables_hash_hack {
       'index'       => [ [ 'portnum' ] ],
     },
 
       'index'       => [ [ 'portnum' ] ],
     },
 
+    'queue' => {
+      'columns' => [
+        'jobnum', 'int', '', '',
+        'job', 'varchar', '', '',
+        '_date', 'int', '', '',
+        'status', 'varchar', '', $char_d,
+      ],
+      'primary_key' => 'jobnum',
+      'unique'      => [],
+      'index'       => [],
+    },
+
+    'queue_arg' => {
+      'columns' => [
+        'argnum', 'int', '', '',
+        'jobnum', 'int', '', '',
+        'arg', 'varchar', 'NULL', '',
+      ],
+      'primary_key' => 'argnum',
+      'unique'      => [],
+      'index'       => [ [ 'jobnum' ] ],
+    },
   );
 
   %tables;
   );
 
   %tables;