fix TeleAPI import (what kind of crack was Christopher smoking that he couldn't fix...
[freeside.git] / FS / FS / cust_bill_pkg_void.pm
index b7c6fee..883869b 100644 (file)
@@ -1,13 +1,22 @@
 package FS::cust_bill_pkg_void;
 package FS::cust_bill_pkg_void;
-use base qw( FS::TemplateItem_Mixin FS::Record );
+use base qw( FS::TemplateItem_Mixin FS::reason_Mixin FS::Record );
 
 use strict;
 
 use strict;
+use vars qw( $me $DEBUG );
 use FS::Record qw( qsearch qsearchs dbh fields );
 use FS::cust_bill_void;
 use FS::Record qw( qsearch qsearchs dbh fields );
 use FS::cust_bill_void;
-use FS::cust_bill_pkg_detail_void;
-use FS::cust_bill_pkg_display_void;
-use FS::cust_bill_pkg_discount_void;
+use FS::cust_bill_pkg_detail;
+use FS::cust_bill_pkg_display;
+use FS::cust_bill_pkg_discount;
 use FS::cust_bill_pkg;
 use FS::cust_bill_pkg;
+use FS::cust_bill_pkg_fee;
+use FS::cust_bill_pkg_tax_location;
+use FS::cust_bill_pkg_tax_rate_location;
+use FS::cust_tax_exempt_pkg;
+use FS::Cursor;
+
+$me = '[ FS::cust_bill_pkg_void ]';
+$DEBUG = 0;
 
 =head1 NAME
 
 
 =head1 NAME
 
@@ -100,6 +109,13 @@ unitrecur
 
 hidden
 
 
 hidden
 
+=item reason 
+
+freeform string (deprecated)
+
+=item reasonnum 
+
+reason for voiding the payment (see L<FS::reason>)
 
 =back
 
 
 =back
 
@@ -130,6 +146,10 @@ sub discount_table          { 'cust_bill_pkg_discount_void'; }
 Adds this record to the database.  If there is an error, returns the error,
 otherwise returns false.
 
 Adds this record to the database.  If there is an error, returns the error,
 otherwise returns false.
 
+=item reason
+
+Returns the text of the associated void reason (see L<FS::reason>) for this.
+
 =item unvoid 
 
 "Un-void"s this line item: Deletes the voided line item from the database and
 =item unvoid 
 
 "Un-void"s this line item: Deletes the voided line item from the database and
@@ -167,6 +187,7 @@ sub unvoid {
     cust_bill_pkg_tax_location
     cust_bill_pkg_tax_rate_location
     cust_tax_exempt_pkg
     cust_bill_pkg_tax_location
     cust_bill_pkg_tax_rate_location
     cust_tax_exempt_pkg
+    cust_bill_pkg_fee
   )) {
 
     foreach my $voided (
   )) {
 
     foreach my $voided (
@@ -236,6 +257,9 @@ sub check {
     || $self->ut_moneyn('unitsetup')
     || $self->ut_moneyn('unitrecur')
     || $self->ut_enum('hidden', [ '', 'Y' ])
     || $self->ut_moneyn('unitsetup')
     || $self->ut_moneyn('unitrecur')
     || $self->ut_enum('hidden', [ '', 'Y' ])
+    || $self->ut_numbern('feepart')
+    || $self->ut_textn('reason')
+    || $self->ut_foreign_keyn('reasonnum', 'reason', 'reasonnum')
   ;
   return $error if $error;
 
   ;
   return $error if $error;
 
@@ -255,6 +279,53 @@ sub cust_bill {
   qsearchs( 'cust_bill_void', { 'invnum' => $self->invnum } );
 }
 
   qsearchs( 'cust_bill_void', { 'invnum' => $self->invnum } );
 }
 
+sub cust_bill_pkg_fee {
+  my $self = shift;
+  qsearch( 'cust_bill_pkg_fee_void', { 'billpkgnum' => $self->billpkgnum } );
+}
+
+# _upgrade_data
+#
+# Used by FS::Upgrade to migrate to a new database.
+sub _upgrade_data {  # class method
+  my ($class, %opts) = @_;
+
+  warn "$me upgrading $class\n" if $DEBUG;
+
+  $class->_upgrade_reasonnum(%opts);
+  my $error;
+  # fix voids with tax from before July 2013, when the taxable_billpkgnum
+  # field was added to the void table
+  local $FS::Record::nowarn_classload = 1;
+  my $search = FS::Cursor->new({
+    'table'   => 'cust_bill_pkg_tax_location_void',
+    'hashref' => { 'taxable_billpkgnum' => '' }
+  });
+  while (my $void = $search->fetch) {
+    # the history for the unvoided record should have the correct
+    # taxable_billpkgnum
+    my $num = $void->billpkgtaxlocationnum;
+    my $unvoid = qsearchs({
+      'table'   => 'h_cust_bill_pkg_tax_location',
+      'hashref' => { 'billpkgtaxlocationnum' => $num },
+      'extra_sql' => ' AND taxable_billpkgnum IS NOT NULL',
+      'order_by' => ' ORDER BY history_date DESC LIMIT 1'
+    });
+    if (!$unvoid) {
+      # should never happen
+      # but should this be fatal? or wait until someone actually tries to
+      # use the record?
+      warn "billpkgtaxlocationnum $num: could not find pre-void history record to restore taxable_billpkgnum.";
+    }
+    if ($unvoid) {
+      $void->set('taxable_billpkgnum', $unvoid->taxable_billpkgnum);
+      $error = $void->replace;
+      die "billpkgtaxlocationnum $num: $error\n" if $error;
+    }
+  }
+
+}
+
 =back
 
 =head1 BUGS
 =back
 
 =head1 BUGS