X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_bill_pkg_void.pm;h=604c615de18dab202b367d8bcfb18205f0065610;hb=12becc874109c0e063be8f7bfd1b0c68571e54c4;hp=b7c6feed549341b3608ccf8648ce5d870e6441b7;hpb=bec3b6c2bf97d66b992866d7ee7295f1f05452e6;p=freeside.git diff --git a/FS/FS/cust_bill_pkg_void.pm b/FS/FS/cust_bill_pkg_void.pm index b7c6feed5..604c615de 100644 --- a/FS/FS/cust_bill_pkg_void.pm +++ b/FS/FS/cust_bill_pkg_void.pm @@ -4,10 +4,15 @@ use base qw( FS::TemplateItem_Mixin FS::Record ); use strict; 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_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; =head1 NAME @@ -167,6 +172,7 @@ sub unvoid { cust_bill_pkg_tax_location cust_bill_pkg_tax_rate_location cust_tax_exempt_pkg + cust_bill_pkg_fee )) { foreach my $voided ( @@ -236,6 +242,7 @@ sub check { || $self->ut_moneyn('unitsetup') || $self->ut_moneyn('unitrecur') || $self->ut_enum('hidden', [ '', 'Y' ]) + || $self->ut_numbern('feepart') ; return $error if $error; @@ -255,6 +262,50 @@ sub cust_bill { 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) = @_; + + 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