silence warnings under 5.14
[freeside.git] / FS / FS / cust_pkg_reason.pm
index 4037513..7c68e62 100644 (file)
@@ -1,10 +1,11 @@
 package FS::cust_pkg_reason;
 
 use strict;
-use vars qw( @ISA );
+use vars qw( $ignore_empty_action );
+use base qw( FS::otaker_Mixin FS::Record );
 use FS::Record qw( qsearch qsearchs );
 
-@ISA = qw(FS::Record);
+$ignore_empty_action = 0;
 
 =head1 NAME
 
@@ -34,16 +35,17 @@ currently supported:
 
 =over 4
 
-=item num - primary key
+=item num
 
-=item pkgnum - 
+primary key
 
-=item reasonnum - 
+=item pkgnum
 
-=item otaker - 
+=item reasonnum
 
-=item date - 
+=item usernum
 
+=item date
 
 =back
 
@@ -94,12 +96,15 @@ and replace methods.
 sub check {
   my $self = shift;
 
+  my @actions = ( 'A', 'C', 'E', 'S' );
+  push @actions, '' if $ignore_empty_action;
+
   my $error = 
     $self->ut_numbern('num')
     || $self->ut_number('pkgnum')
     || $self->ut_number('reasonnum')
-    || $self->ut_enum('action', [ 'A', 'C', 'E', 'S' ])
-    || $self->ut_text('otaker')
+    || $self->ut_enum('action', \@actions)
+    || $self->ut_alphan('otaker')
     || $self->ut_numbern('date')
   ;
   return $error if $error;
@@ -140,8 +145,8 @@ use FS::h_cust_pkg_reason;
 sub _upgrade_data { # class method
   my ($class, %opts) = @_;
 
-  my $test_cust_pkg_reason = new FS::cust_pkg_reason;
-  return '' unless $test_cust_pkg_reason->dbdef_table->column('action');
+  my $action_replace =
+    " AND ( history_action = 'replace_old' OR history_action = 'replace_new' )";
 
   my $count = 0;
   my @unmigrated = qsearch('cust_pkg_reason', { 'action' => '' } ); 
@@ -151,27 +156,24 @@ sub _upgrade_data { # class method
     
     next unless scalar(@history_cust_pkg_reason) == 1;
 
-    my %action_value = ( op    => 'LIKE',
-                         value => 'replace_%',
-                       );
     my $hashref = { pkgnum => $_->pkgnum,
                     history_date   => $history_cust_pkg_reason[0]->history_date,
-                    history_action => { %action_value },
                   };
 
-    my @history = qsearch({ table    => 'h_cust_pkg',
-                            hashref  => $hashref,
-                            order_by => 'ORDER BY history_action',
+    my @history = qsearch({ table     => 'h_cust_pkg',
+                            hashref   => $hashref,
+                            extra_sql => $action_replace,
+                            order_by  => 'ORDER BY history_action',
                          });
 
     my $fuzz = 0;
     while (scalar(@history) < 2 && $fuzz < 3) {
       $hashref->{history_date}++;
-      $hashref->{history_action} = { %action_value }; # qsearch distorts this!
       $fuzz++;
-      push @history, qsearch({ table    => 'h_cust_pkg',
-                               hashref  => $hashref,
-                               order_by => 'ORDER BY history_action',
+      push @history, qsearch({ table     => 'h_cust_pkg',
+                               hashref   => $hashref,
+                               extra_sql => $action_replace,
+                               order_by  => 'ORDER BY history_action',
                             });
     }
 
@@ -209,7 +211,7 @@ sub _upgrade_data { # class method
   #remove nullability if scalar(@migrated) - $count == 0 && ->column('action');
   
   #seek expirations/adjourns without reason
-  foreach my $field qw( expire adjourn cancel susp ) {
+  foreach my $field (qw( expire adjourn cancel susp )) {
     my $addl_from =
       "LEFT JOIN h_cust_pkg ON ".
       "(cust_pkg_reason.pkgnum = h_cust_pkg.pkgnum AND".
@@ -226,26 +228,23 @@ sub _upgrade_data { # class method
                             }); 
     foreach ( @unmigrated ) {
 
-      my %action_value = ( op    => 'LIKE',
-                           value => 'replace_%',
-                         );
       my $hashref = { pkgnum => $_->pkgnum,
                       history_date   => $_->date,
-                      history_action => { %action_value },
                     };
 
-      my @history = qsearch({ table    => 'h_cust_pkg',
-                              hashref  => $hashref,
-                              order_by => 'ORDER BY history_action',
+      my @history = qsearch({ table     => 'h_cust_pkg',
+                              hashref   => $hashref,
+                              extra_sql => $action_replace,
+                              order_by  => 'ORDER BY history_action',
                            });
 
       my $fuzz = 0;
       while (scalar(@history) < 2 && $fuzz < 3) {
         $hashref->{history_date}++;
-        $hashref->{history_action} = { %action_value }; # qsearch distorts this!
         $fuzz++;
         push @history, qsearch({ table    => 'h_cust_pkg',
                                  hashref  => $hashref,
+                                 extra_sql => $action_replace,
                                  order_by => 'ORDER BY history_action',
                               });
       }
@@ -272,7 +271,7 @@ sub _upgrade_data { # class method
   }
 
   #seek cancels/suspends without reason, but with expire/adjourn reason
-  foreach my $field qw( cancel susp ) {
+  foreach my $field (qw( cancel susp )) {
 
     my %precursor_map = ( 'cancel' => 'expire', 'susp' => 'adjourn' );
     my $precursor = $precursor_map{$field};
@@ -310,8 +309,10 @@ sub _upgrade_data { # class method
     }
   }
 
-  '';
+  #still can't fill in an action?  don't abort the upgrade
+  local($ignore_empty_action) = 1;
 
+  $class->_upgrade_otaker(%opts);
 }
 
 =back