system only reason update routine
authorjeff <jeff>
Wed, 3 Sep 2008 18:59:55 +0000 (18:59 +0000)
committerjeff <jeff>
Wed, 3 Sep 2008 18:59:55 +0000 (18:59 +0000)
FS/FS/Upgrade.pm
FS/FS/cust_pkg_reason.pm

index fd62f64..facd6d2 100644 (file)
@@ -82,8 +82,9 @@ sub upgrade_data {
   tie my %hash, 'Tie::IxHash', 
 
     #reason type and reasons
-    'reason_type' => [],
-    'reason'      => [],
+    'reason_type'     => [],
+    'reason'          => [],
+    'cust_pkg_reason' => [],
 
     #need part_pkg before cust_credit...
     'part_pkg' => [],
index 92cd4a1..6bd17b6 100644 (file)
@@ -130,6 +130,86 @@ sub reasontext {
   $reason ? $reason->reason : '';
 }
 
+# _upgrade_data
+#
+# Used by FS::Upgrade to migrate to a new database.
+
+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 $count = 0;
+  my @unmigrated = qsearch('cust_pkg_reason', { 'action' => '' } ); 
+  foreach ( @unmigrated ) {
+    # we could create h_cust_pkg_reason and h_cust_pkg_reason packages
+    @FS::h_cust_pkg::ISA = qw( FS::h_Common FS::cust_pkg );
+    sub FS::h_cust_pkg::table { 'h_cust_pkg' };
+    @FS::h_cust_pkg_reason::ISA = qw( FS::h_Common FS::cust_pkg_reason );
+    sub FS::h_cust_pkg_reason::table { 'h_cust_pkg_reason' };
+
+    my @history_cust_pkg_reason = qsearch( 'h_cust_pkg_reason', { $_->hash } );
+    
+    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',
+                         });
+
+    if (@history < 2) {
+      $hashref->{history_date}++;  # more fuzz?
+      $hashref->{history_action} = { %action_value }; # qsearch distorts this!
+      push @history, qsearch({ table    => 'h_cust_pkg',
+                               hashref  => $hashref,
+                               order_by => 'ORDER BY history_action',
+                            });
+    }
+
+    next unless scalar(@history) == 2;
+
+    my @new = grep { $_->history_action eq 'replace_new' } @history;
+    my @old = grep { $_->history_action eq 'replace_old' } @history;
+    
+    next if (scalar(@new) == 2 || scalar(@old) == 2);
+
+    if ( !$old[0]->get('cancel') && $new[0]->get('cancel') ) {
+      $_->action('C');
+    }elsif( !$old[0]->susp && $new[0]->susp ){
+      $_->action('S');
+    }elsif( $new[0]->expire &&
+            (!$old[0]->expire || !$old[0]->expire != $new[0]->expire )
+          ){
+      $_->action('E');
+    }elsif( $new[0]->adjourn &&
+            (!$old[0]->adjourn || $old[0]->adjourn != $new[0]->adjourn )
+          ){
+      $_->action('A');
+    }
+
+    my $error = $_->replace
+      if $_->modified;
+
+    die $error if $error;
+
+    $count++;
+  }
+
+  #remove nullability if scalar(@migrated) - $count == 0 && ->column('action');
+  
+  '';
+
+}
+
 =back
 
 =head1 BUGS