allow cust_pay.otaker upgrade to proceed even if there are some old crufty records...
[freeside.git] / FS / FS / cust_pay.pm
index 67f34c3..de14610 100644 (file)
@@ -432,8 +432,6 @@ sub check {
 #           " already exists";
 #  }
 
-  $self->otaker(getotaker);
-
   $self->SUPER::check;
 }
 
@@ -675,8 +673,11 @@ sub _upgrade_data {  #class method
 
   #not the most efficient, but hey, it only has to run once
 
-  my $count_sql =
-    "SELECT COUNT(*) FROM cust_pay WHERE otaker IS NULL OR otaker = ''";
+  my $where = "WHERE ( otaker IS NULL OR otaker = '' OR otaker = 'ivan' ) ".
+              "  AND 0 < ( SELECT COUNT(*) FROM cust_main                 ".
+              "              WHERE cust_main.custnum = cust_pay.custnum ) ";
+
+  my $count_sql = "SELECT COUNT(*) FROM cust_pay $where";
 
   my $sth = dbh->prepare($count_sql) or die dbh->errstr;
   $sth->execute or die $sth->errstr;
@@ -691,17 +692,32 @@ sub _upgrade_data {  #class method
     my $cust_pay = qsearchs( {
       'table'     => 'cust_pay',
       'hashref'   => {},
-      'extra_sql' => "WHERE otaker IS NULL OR otaker = ''",
+      'extra_sql' => $where,
       'order_by'  => 'ORDER BY paynum LIMIT 1',
     } );
 
     return unless $cust_pay;
 
     my $h_cust_pay = $cust_pay->h_search('insert');
-    $cust_pay->otaker($h_cust_pay->history_user);
+    if ( $h_cust_pay ) {
+      $cust_pay->otaker($h_cust_pay->history_user);
+    } else {
+      $cust_pay->otaker('legacy');
+    }
+
+    delete $FS::payby::hash{'COMP'}->{cust_pay}; #quelle kludge
     my $error = $cust_pay->replace;
+
+    #infinite...
+    #if ( $error ) {
+    #  warn " *** WARNING: Error updaating order taker for payment paynum".
+    #       $cust_pay->paynun. ": $error\n";
+    #  next;
+    #}
     die $error if $error;
 
+    $FS::payby::hash{'COMP'}->{cust_pay} = ''; #restore it
+
     $count++;
     if ( $DEBUG > 1 && $lastprog + 30 < time ) {
       warn "$me $count/$total (". sprintf('%.2f',100*$count/$total). '%)'. "\n";