run time-consuming cust_pay upgrade from the job queue, #29017
authorMark Wells <mark@freeside.biz>
Thu, 8 May 2014 06:35:28 +0000 (23:35 -0700)
committerMark Wells <mark@freeside.biz>
Thu, 8 May 2014 06:35:28 +0000 (23:35 -0700)
FS/FS/cust_pay.pm

index ca681e6..e3670db 100644 (file)
@@ -899,7 +899,7 @@ sub unapplied_sql {
 use FS::h_cust_pay;
 
 sub _upgrade_data {  #class method
-  my ($class, %opts) = @_;
+  my ($class, %opt) = @_;
 
   warn "$me upgrading $class\n" if $DEBUG;
 
@@ -1013,9 +1013,33 @@ sub _upgrade_data {  #class method
   ###
 
   delete $FS::payby::hash{'COMP'}->{cust_pay}; #quelle kludge
-  $class->_upgrade_otaker(%opts);
+  $class->_upgrade_otaker(%opt);
   $FS::payby::hash{'COMP'}->{cust_pay} = ''; #restore it
 
+  # if we do this anywhere else, it should become an FS::Upgrade method
+  my $num_to_upgrade = $class->count('paybatch is not null');
+  my $num_jobs = FS::queue->count('job = \'FS::cust_pay::process_upgrade_paybatch\' and status != \'failed\'');
+  if ( $num_to_upgrade > 0 ) {
+    warn "Need to migrate paybatch field in $num_to_upgrade payments.\n";
+    if ( $opt{queue} ) {
+      if ( $num_jobs > 0 ) {
+        warn "Upgrade already queued.\n";
+      } else {
+        warn "Scheduling upgrade.\n";
+        my $job = FS::queue->new({ job => 'FS::cust_pay::process_upgrade_paybatch' });
+        $job->insert;
+      }
+    } else {
+      process_upgrade_paybatch();
+    }
+  }
+}
+
+sub process_upgrade_paybatch {
+  my $dbh = dbh;
+  local $FS::payinfo_Mixin::ignore_masked_payinfo = 1;
+  local $FS::UID::AutoCommit = 1;
+
   ###
   # migrate batchnums from the misused 'paybatch' field to 'batchnum'
   ###