X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FUpgrade.pm;h=6785a1375d9a40028a9e4207f1988ef8c87b8c2c;hb=a17d255a7678d360c3673a461b091608b181716c;hp=8f66c66b520fb57750d34f552813917f15e4b8aa;hpb=eb9d1063e1203231ee0c6922ea5638370f7b5ece;p=freeside.git diff --git a/FS/FS/Upgrade.pm b/FS/FS/Upgrade.pm index 8f66c66b5..6785a1375 100644 --- a/FS/FS/Upgrade.pm +++ b/FS/FS/Upgrade.pm @@ -4,9 +4,12 @@ use strict; use vars qw( @ISA @EXPORT_OK $DEBUG ); use Exporter; use Tie::IxHash; +use File::Slurp; use FS::UID qw( dbh driver_name ); use FS::Conf; use FS::Record qw(qsearchs qsearch str2time_sql); +use FS::queue; +use FS::upgrade_journal; use FS::svc_domain; $FS::svc_domain::whois_hack = 1; @@ -62,7 +65,38 @@ sub upgrade_config { upgrade_overlimit_groups($conf); map { upgrade_overlimit_groups($conf,$_->agentnum) } qsearch('agent', {}); - + + my $DIST_CONF = '/usr/local/etc/freeside/default_conf/';#DIST_CONF in Makefile + $conf->set($_, scalar(read_file( "$DIST_CONF/$_" )) ) + foreach grep { ! $conf->exists($_) && -s "$DIST_CONF/$_" } + qw( quotation_html quotation_latex quotation_latexnotes ); + + # change 'fslongtable' to 'longtable' + # in invoice and quotation main templates, and also in all secondary + # invoice templates + my @latex_confs = + qsearch('conf', { 'name' => {op=>'LIKE', value=>'%latex%'} }); + + foreach my $c (@latex_confs) { + my $value = $c->value; + if (length($value) and $value =~ /fslongtable/) { + $value =~ s/fslongtable/longtable/g; + $conf->set($c->name, $value, $c->agentnum); + } + } + + # if there's a USPS tools login, assume that's the standardization method + # you want to use + $conf->set('address_standardize_method', 'usps') + if $conf->exists('usps_webtools-userid') + && length($conf->config('usps_webtools-userid')) > 0 + && ! $conf->exists('address_standardize_method'); + + # this option has been renamed/expanded + if ( $conf->exists('cust_main-enable_spouse_birthdate') ) { + $conf->touch('cust_main-enable_spouse'); + $conf->delete('cust_main-enable_spouse_birthdate'); + } } sub upgrade_overlimit_groups { @@ -104,6 +138,9 @@ sub upgrade { local $FS::UID::AutoCommit = 0; local $FS::UID::AutoCommit = 0; + local $FS::cust_pkg::upgrade = 1; #go away after setup+start dates cleaned up for old customers + + foreach my $table ( keys %$data ) { my $class = "FS::$table"; @@ -117,6 +154,26 @@ sub upgrade { $class->_upgrade_data(%opt); + # New interface for async upgrades: a class can declare a + # "queueable_upgrade" method, which will run as part of the normal + # upgrade, but if the -j option is passed, will instead be run from + # the job queue. + if ( $class->can('queueable_upgrade') ) { + my $jobname = $class . '::queueable_upgrade'; + my $num_jobs = FS::queue->count("job = '$jobname' and status != 'failed'"); + if ($num_jobs > 0) { + warn "$class upgrade already scheduled.\n"; + } else { + if ( $opt{'queue'} ) { + warn "Scheduling $class upgrade.\n"; + my $job = FS::queue->new({ job => $jobname }); + $job->insert($class, %opt); + } else { + $class->queueable_upgrade(%opt); + } + } #$num_jobs == 0 + } + if ( $oldAutoCommit ) { warn " committing\n"; dbh->commit or die dbh->errstr; @@ -147,6 +204,9 @@ sub upgrade { local($FS::cust_main::ignore_banned_card) = 1; local($FS::cust_main::skip_fuzzyfiles) = 1; + local($FS::cust_payby::ignore_expired_card) = 1; + local($FS::cust_payby::ignore_banned_card) = 1; + # decrypt inadvertantly-encrypted payinfo where payby != CARD,DCRD,CHEK,DCHK # kind of a weird spot for this, but it's better than duplicating # all this code in each class... @@ -266,8 +326,23 @@ sub upgrade_data { #insert default tower_sector if not present 'tower' => [], + #repair improperly deleted services + 'cust_svc' => [], + #routernum/blocknum 'svc_broadband' => [], + + #set up payment gateways if needed + 'pay_batch' => [], + + #flag monthly tax exemptions + 'cust_tax_exempt_pkg' => [], + + #kick off tax location history upgrade + 'cust_bill_pkg' => [], + + #fix taxable line item links + 'cust_bill_pkg_tax_location' => [], ; \%hash;