X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_main.pm;h=6eee50575c6b2e5d5d5df31b6abe307d4c5c018d;hp=493b1c694993390a920290199441417638014df0;hb=d8dcec0a073b96794328195d4327e28b56996705;hpb=dbb1f2c9894385044ed85b64d9016b2eeb06d649 diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index 493b1c694..6eee50575 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -1325,7 +1325,7 @@ set as the contact email address for a default contact with the same name as the customer. Currently available options are: I, I, -I, I. +I, I, and I. The I option can be set to an arrayref of tax names or a hashref of tax names and exemption numbers. FS::cust_main_exemption records will be @@ -1339,6 +1339,9 @@ and L for the fields these can contain. I is a synonym for the INVOICING_LIST_ARYREF parameter, and should be used instead if possible. +If I is an arrayref, it will override the list of packages +to be moved to the new address (see L.) + =cut sub replace { @@ -1533,7 +1536,7 @@ sub replace { $self->set('ship_location', ''); #flush cache if ( $old->ship_locationnum and # should only be null during upgrade... $old->ship_locationnum != $self->ship_locationnum ) { - $error = $old->ship_location->move_to($self->ship_location); + $error = $old->ship_location->move_to($self->ship_location, move_pkgs => $options{'move_pkgs'}); if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; @@ -5372,11 +5375,14 @@ sub queueable_upgrade { eval "use FS::upgrade_journal"; die $@ if $@; - # prior to 2013 (commit f16665c9) payinfo was stored in history if not encrypted, - # clear that out before encrypting/tokenizing anything else + # prior to 2013 (commit f16665c9) payinfo was stored in history if not + # encrypted, clear that out before encrypting/tokenizing anything else if (!FS::upgrade_journal->is_done('clear_payinfo_history')) { - foreach my $table ('cust_payby','cust_pay_pending','cust_pay','cust_pay_void','cust_refund') { - my $sql = 'UPDATE h_'.$table.' SET payinfo = NULL WHERE payinfo IS NOT NULL'; + foreach my $table (qw( + cust_payby cust_pay_pending cust_pay cust_pay_void cust_refund + )) { + my $sql = + 'UPDATE h_'.$table.' SET payinfo = NULL WHERE payinfo IS NOT NULL'; my $sth = dbh->prepare($sql) or die dbh->errstr; $sth->execute or die $sth->errstr; } @@ -5384,7 +5390,9 @@ sub queueable_upgrade { } # encrypt old records - if ($conf->exists('encryption') && !FS::upgrade_journal->is_done('encryption_check')) { + if ( $conf->exists('encryption') + && ! FS::upgrade_journal->is_done('encryption_check') + ) { # allow replacement of closed cust_pay/cust_refund records local $FS::payinfo_Mixin::allow_closed_replace = 1; @@ -5396,19 +5404,32 @@ sub queueable_upgrade { local $FS::UID::AutoCommit = 1; # encrypt what's there - foreach my $table ('cust_payby','cust_pay_pending','cust_pay','cust_pay_void','cust_refund') { + foreach my $table (qw( + cust_payby cust_pay_pending cust_pay cust_pay_void cust_refund + )) { my $tclass = 'FS::'.$table; my $lastrecnum = 0; my @recnums = (); - while (my $recnum = _upgrade_next_recnum(dbh,$table,\$lastrecnum,\@recnums)) { + while ( + my $recnum = _upgrade_next_recnum(dbh,$table,\$lastrecnum,\@recnums) + ) { my $record = $tclass->by_key($recnum); next unless $record; # small chance it's been deleted, that's ok next unless grep { $record->payby eq $_ } @FS::Record::encrypt_payby; # window for possible conflict is practically nonexistant, # but just in case... $record = $record->select_for_update; + if (!$record->custnum && $table eq 'cust_pay_pending') { + $record->set('custnum_pending',1); + } + + local($ignore_expired_card) = 1; + local($ignore_banned_card) = 1; + local($skip_fuzzyfiles) = 1; + local($import) = 1;#prevent automatic geocoding (need its own variable?) + my $error = $record->replace; - die $error if $error; + die "Error replacing $table ".$record->get($record->primary_key).": $error" if $error; } }