diff options
author | Mark Wells <mark@freeside.biz> | 2016-10-18 23:06:03 -0700 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2016-10-18 23:14:32 -0700 |
commit | e71dd08fc2e0aa3ee8cdbeb4e1f39f04898f773b (patch) | |
tree | 37062b8c8108d24a96de5e403312333f5b04daed /FS/FS/cust_bill_pkg_void.pm | |
parent | 068b074adcb3cd0c4d0b39d407c7bb2272a9cade (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.pm | 29 |
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 |