Merge branch 'master' of git.freeside.biz:/home/git/freeside
authorIvan Kohler <ivan@freeside.biz>
Wed, 1 Feb 2017 17:32:28 +0000 (09:32 -0800)
committerIvan Kohler <ivan@freeside.biz>
Wed, 1 Feb 2017 17:32:28 +0000 (09:32 -0800)
1  2 
FS/FS/cust_main.pm

diff --combined FS/FS/cust_main.pm
@@@ -1325,7 -1325,7 +1325,7 @@@ set as the contact email address for a 
  the customer.
  
  Currently available options are: I<tax_exemption>, I<cust_payby_params>, 
- I<contact_params>, I<invoicing_list>.
+ I<contact_params>, I<invoicing_list>, and I<move_pkgs>.
  
  The I<tax_exemption> 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 +1339,9 @@@ and L<FS::contact> for the fields thes
  I<invoicing_list> is a synonym for the INVOICING_LIST_ARYREF parameter, and
  should be used instead if possible.
  
+ If I<move_pkgs> is an arrayref, it will override the list of packages
+ to be moved to the new address (see L<FS::cust_location/move_pkgs>.)
  =cut
  
  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;
@@@ -5386,11 -5389,10 +5389,11 @@@ sub queueable_upgrade 
      FS::upgrade_journal->set_done('clear_payinfo_history');
    }
  
 -  # encrypt old records
 -  if ( $conf->exists('encryption')
 -         && ! FS::upgrade_journal->is_done('encryption_check')
 -  ) {
 +  # fix Tokenized paycardtype and encrypt old records
 +  if (    ! FS::upgrade_journal->is_done('paycardtype_Tokenized')
 +       || ! FS::upgrade_journal->is_done('encryption_check')
 +     )
 +  {
  
      # allow replacement of closed cust_pay/cust_refund records
      local $FS::payinfo_Mixin::allow_closed_replace = 1;
          if (!$record->custnum && $table eq 'cust_pay_pending') {
            $record->set('custnum_pending',1);
          }
 +        $record->paycardtype('') if $record->paycardtype eq 'Tokenized';
  
          local($ignore_expired_card) = 1;
          local($ignore_banned_card) = 1;
        }
      }
  
 -    FS::upgrade_journal->set_done('encryption_check');
 +    FS::upgrade_journal->set_done('paycardtype_Tokenized');
 +    FS::upgrade_journal->set_done('encryption_check') if $conf->exists('encryption');
    }
  
    # now that everything's encrypted, tokenize...
@@@ -5451,9 -5451,7 +5454,9 @@@ sub _upgrade_next_recnum 
    my $sql = 'SELECT '.$tclass->primary_key.
              ' FROM '.$table.
              ' WHERE '.$tclass->primary_key.' > '.$$lastrecnum.
 -            ' ORDER BY '.$tclass->primary_key.' LIMIT 500';;
 +            "   AND payby IN ( 'CARD', 'DCRD', 'CHEK', 'DCHK' ) ".
 +            "   AND ( length(payinfo) < 80 OR paycardtype = 'Tokenized' ) ".
 +            ' ORDER BY '.$tclass->primary_key.' LIMIT 500';
    my $sth = $dbh->prepare($sql) or die $dbh->errstr;
    $sth->execute() or die $sth->errstr;
    my @recnums;