add cust_credit_bill relating multiple invoices to credits
[freeside.git] / bin / fs-setup
index 314a7c2..8fbc67e 100755 (executable)
@@ -1,149 +1,6 @@
 #!/usr/bin/perl -Tw
 #
-# $Id: fs-setup,v 1.40 2001-08-11 05:53:42 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.40  2001-08-11 05:53:42  ivan
-# add comments field
-#
-# 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.46 2001-09-01 21:52:20 jeff Exp $
 
 #to delay loading dbdef until we're ready
 BEGIN { $FS::Record::setup_hack = 1; }
@@ -235,10 +92,11 @@ my($dbdef) = new DBIx::DBSchema ( map {
   );
 } (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 );
+} 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
@@ -271,7 +129,7 @@ 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)) {
+foreach (qw(svc_acct svc_domain svc_forward svc_www)) {
   my($table)=$dbdef->table($_);
   my($col);
   foreach $col ( $table->columns ) {
@@ -459,6 +317,18 @@ sub tables_hash_hack {
       'index' => [ ['custnum'] ],
     },
 
+    'cust_credit_bill' => {
+      'columns' => [
+        'crednum',  'int', '', '',
+        'invnum',  'int', '', '',
+        '_date',    @date_type,
+        'amount',   @money_type,
+      ],
+      'primary_key' => 'crednum',
+      'unique' => [ [] ],
+      'index' => [ ['invnum'] ],
+    },
+
     'cust_main' => {
       'columns' => [
         'custnum',  'int',  '',     '',
@@ -501,12 +371,13 @@ sub tables_hash_hack {
         'tax',      'char', 'NULL', 1,
         'otaker',   'varchar', '',     8,
         'refnum',   'int',  '',     '',
+        'referral_custnum', 'int',  'NULL', '',
         'comments', 'varchar', 'NULL', '',
       ],
       'primary_key' => 'custnum',
       'unique' => [ [] ],
       #'index' => [ ['last'], ['company'] ],
-      'index' => [ ['last'], ],
+      'index' => [ ['last'], [ 'company' ], [ 'referral_custnum' ] ],
     },
 
     'cust_main_invoice' => {
@@ -539,7 +410,7 @@ sub tables_hash_hack {
     'cust_pay' => {
       'columns' => [
         'paynum',   'int',    '',   '',
-        'invnum',   'int',    '',   '',
+        #now cust_bill_pay #'invnum',   'int',    '',   '',
         'paid',     @money_type,
         '_date',    @date_type,
         'payby',    'char',   '',     4, # CARD/BILL/COMP, should be index into
@@ -552,6 +423,19 @@ sub tables_hash_hack {
       'index' => [ ['invnum'] ],
     },
 
+    'cust_bill_pay' => {
+      'column' => [
+        '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' => [
@@ -597,7 +481,7 @@ sub tables_hash_hack {
     'cust_refund' => {
       'columns' => [
         'refundnum',    'int',    '',   '',
-        'crednum',      'int',    '',   '',
+        #now cust_credit_refund #'crednum',      'int',    '',   '',
         '_date',        @date_type,
         'refund',       @money_type,
         'otaker',       'varchar',   '',   8,
@@ -605,12 +489,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
+        'paybatch',     'varchar',   'NULL', $char_d,
       ],
       'primary_key' => 'refundnum',
       'unique' => [ [] ],
       'index' => [ ['crednum'] ],
     },
 
+    'cust_credit_refund' => {
+      'column' => [
+        'creditrefundnum', 'int',     '',   '',
+        'crednum',  'int',     '',   '',
+        'refundnum',  'int',     '',   '',
+        'amount',  @money_type,
+        '_date',   @date_type
+      ],
+      'primary_key' => 'creditrefundnum'
+      'unique' => [ [] ],
+      'index' => [ [ 'crednum', 'refundnum' ] ],
+    },
+
+
     'cust_svc' => {
       'columns' => [
         'svcnum',    'int',    '',   '',
@@ -707,23 +606,24 @@ sub tables_hash_hack {
         'quota',     'varchar',   'NULL',   $char_d,
         'slipip',    'varchar',   'NULL',   15, #four TINYINTs, bah.
         'seconds',   'int', 'NULL',   '', #uhhhh
+        'domsvc',    'int', '',   '',
       ],
       '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' => [
@@ -739,6 +639,7 @@ sub tables_hash_hack {
       'columns' => [
         'svcnum',    'int',    '',   '',
         'domain',    'varchar',    '',   $char_d,
+        'catchall',  'int', 'NULL',    '',
       ],
       'primary_key' => 'svcnum',
       'unique' => [ ['domain'] ],
@@ -759,6 +660,18 @@ sub tables_hash_hack {
       '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',    '',  '',