X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=bin%2Ffs-setup;h=da6c167e9cfe32ace8940aeb5e5254423367f459;hb=9718b44594231631a1e045f17b6521881790b297;hp=a3e067bec9a084c12cac588db7cc77fbcf5bc60c;hpb=4d513ff5a17bd3b697502b54c9516577a0a8d3e4;p=freeside.git diff --git a/bin/fs-setup b/bin/fs-setup index a3e067bec..da6c167e9 100755 --- a/bin/fs-setup +++ b/bin/fs-setup @@ -1,159 +1,13 @@ #!/usr/bin/perl -Tw # -# $Id: fs-setup,v 1.41 2001-08-12 19:41:25 jeff 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.41 2001-08-12 19:41:25 jeff -# merging vpopmail support branch -# -# 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" -# -# 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 -# -# 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.67 2001-11-06 17:48:17 ivan Exp $ #to delay loading dbdef until we're ready BEGIN { $FS::Record::setup_hack = 1; } use strict; use DBI; -use DBIx::DBSchema 0.18; +use DBIx::DBSchema 0.19; use DBIx::DBSchema::Table; use DBIx::DBSchema::Column; use DBIx::DBSchema::ColGroup::Unique; @@ -161,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::raddb; 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); @@ -172,22 +30,28 @@ my($dbdef_file) = "/usr/local/etc/freeside/dbdef.". datasrc; ### -print "\nEnter the maximum username length: "; -my($username_len)=&getvalue; +#print "\nEnter the maximum username length: "; +#my($username_len)=&getvalue; +my $username_len = 32; #usernamemax config file print "\n\n", <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 @@ -267,32 +132,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_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, - )); - } -} +##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); @@ -455,13 +320,26 @@ sub tables_hash_hack { '_date', @date_type, 'amount', @money_type, 'otaker', 'varchar', '', 8, - 'reason', 'varchar', 'NULL', 255, + 'reason', 'text', 'NULL', '', ], 'primary_key' => 'crednum', 'unique' => [ [] ], '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', '', '', @@ -497,19 +375,20 @@ sub tables_hash_hack { 'ship_night', 'varchar', 'NULL', 20, 'ship_fax', 'varchar', 'NULL', 12, 'payby', 'char', '', 4, - 'payinfo', 'varchar', 'NULL', 16, + 'payinfo', 'varchar', 'NULL', $char_d, #'paydate', @date_type, 'paydate', 'varchar', 'NULL', 10, 'payname', 'varchar', 'NULL', $char_d, 'tax', 'char', 'NULL', 1, 'otaker', 'varchar', '', 8, 'refnum', 'int', '', '', - 'comments', 'varchar', 'NULL', '', + 'referral_custnum', 'int', 'NULL', '', + 'comments', 'text', 'NULL', '', ], 'primary_key' => 'custnum', 'unique' => [ [] ], #'index' => [ ['last'], ['company'] ], - 'index' => [ ['last'], ], + 'index' => [ ['last'], [ 'company' ], [ 'referral_custnum' ] ], }, 'cust_main_invoice' => { @@ -542,7 +421,8 @@ sub tables_hash_hack { '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 @@ -552,12 +432,26 @@ sub tables_hash_hack { ], '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' => [ + 'paybatchnum', 'int', '', '', 'invnum', 'int', '', '', 'custnum', 'int', '', '', 'last', 'varchar', '', $char_d, @@ -568,14 +462,14 @@ sub tables_hash_hack { 'state', 'varchar', '', $char_d, 'zip', 'varchar', '', 10, 'country', 'char', '', 2, - 'trancode', 'int', '', '', +# 'trancode', 'int', '', '', 'cardnum', 'varchar', '', 16, #'exp', @date_type, 'exp', 'varchar', '', 11, 'payname', 'varchar', 'NULL', $char_d, 'amount', @money_type, ], - 'primary_key' => '', + 'primary_key' => 'paybatchnum', 'unique' => [ [] ], 'index' => [ ['invnum'], ['custnum'] ], }, @@ -591,6 +485,7 @@ sub tables_hash_hack { 'susp', @date_type, 'cancel', @date_type, 'expire', @date_type, + 'manual_flag', 'char', 'NULL', 1, ], 'primary_key' => 'pkgnum', 'unique' => [ [] ], @@ -600,7 +495,8 @@ sub tables_hash_hack { 'cust_refund' => { 'columns' => [ 'refundnum', 'int', '', '', - 'crednum', 'int', '', '', + #now cust_credit_refund #'crednum', 'int', '', '', + 'custnum', 'int', '', '', '_date', @date_type, 'refund', @money_type, 'otaker', 'varchar', '', 8, @@ -608,12 +504,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'] ], + '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', '', '', @@ -633,6 +544,10 @@ sub tables_hash_hack { 'setup', @perl_type, 'freq', 'int', '', '', #billing frequency (months) 'recur', @perl_type, + 'setuptax', 'char', 'NULL', 1, + 'recurtax', 'char', 'NULL', 1, + 'plan', 'varchar', 'NULL', $char_d, + 'plandata', 'text', 'NULL', '', ], 'primary_key' => 'pkgpart', 'unique' => [ [] ], @@ -681,6 +596,19 @@ sub tables_hash_hack { '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' => [ @@ -693,7 +621,21 @@ sub tables_hash_hack { ], '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' => { @@ -713,21 +655,21 @@ sub tables_hash_hack { 'domsvc', 'int', '', '', ], 'primary_key' => 'svcnum', - 'unique' => [ [] ], + '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' => [ @@ -743,7 +685,7 @@ sub tables_hash_hack { 'columns' => [ 'svcnum', 'int', '', '', 'domain', 'varchar', '', $char_d, - 'catchall', 'int', '', '', + 'catchall', 'int', 'NULL', '', ], 'primary_key' => 'svcnum', 'unique' => [ ['domain'] ], @@ -850,6 +792,28 @@ sub tables_hash_hack { 'index' => [ [ 'portnum' ] ], }, + 'queue' => { + 'columns' => [ + 'jobnum', 'int', '', '', + 'job', 'text', '', '', + '_date', 'int', '', '', + 'status', 'varchar', '', $char_d, + ], + 'primary_key' => 'jobnum', + 'unique' => [], + 'index' => [], + }, + + 'queue_arg' => { + 'columns' => [ + 'argnum', 'int', '', '', + 'jobnum', 'int', '', '', + 'arg', 'text', 'NULL', '', + ], + 'primary_key' => 'argnum', + 'unique' => [], + 'index' => [ [ 'jobnum' ] ], + }, ); %tables;