summaryrefslogtreecommitdiff
path: root/FS/FS/cust_bill_pkg_void.pm
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2016-10-18 23:06:03 -0700
committerMark Wells <mark@freeside.biz>2016-10-18 23:14:32 -0700
commite71dd08fc2e0aa3ee8cdbeb4e1f39f04898f773b (patch)
tree37062b8c8108d24a96de5e403312333f5b04daed /FS/FS/cust_bill_pkg_void.pm
parent068b074adcb3cd0c4d0b39d407c7bb2272a9cade (diff)
during upgrade, fix broken tax links on old voided invoices, #72777
Diffstat (limited to 'FS/FS/cust_bill_pkg_void.pm')
-rw-r--r--FS/FS/cust_bill_pkg_void.pm29
1 files changed, 28 insertions, 1 deletions
diff --git a/FS/FS/cust_bill_pkg_void.pm b/FS/FS/cust_bill_pkg_void.pm
index 991dd37..9bfd41f 100644
--- a/FS/FS/cust_bill_pkg_void.pm
+++ b/FS/FS/cust_bill_pkg_void.pm
@@ -13,6 +13,7 @@ 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;
@@ -283,7 +284,6 @@ sub cust_bill_pkg_fee {
qsearch( 'cust_bill_pkg_fee_void', { 'billpkgnum' => $self->billpkgnum } );
}
-
# _upgrade_data
#
# Used by FS::Upgrade to migrate to a new database.
@@ -293,6 +293,33 @@ sub _upgrade_data { # class method
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
+ 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 },
+ 'order_by' => ' ORDER BY history_date DESC LIMIT 1'
+ });
+ if (!$unvoid) {
+ # should never happen
+ die "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