From d785bd7751b24ca30cf4679413db9dff5d15a80c Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Fri, 7 Jun 2013 18:30:01 -0700 Subject: [PATCH] unapply credits from tax-exempt line items, tentative fix, #23381 --- FS/FS/cust_credit_bill_pkg.pm | 64 +++++++------------------------------------ 1 file changed, 10 insertions(+), 54 deletions(-) diff --git a/FS/FS/cust_credit_bill_pkg.pm b/FS/FS/cust_credit_bill_pkg.pm index 3cb44a092..657a88904 100644 --- a/FS/FS/cust_credit_bill_pkg.pm +++ b/FS/FS/cust_credit_bill_pkg.pm @@ -223,65 +223,21 @@ sub delete { local $FS::UID::AutoCommit = 0; my $dbh = dbh; - my $original_cust_bill_pkg = $self->cust_bill_pkg; - my $cust_bill = $original_cust_bill_pkg->cust_bill; - - my %hash = $original_cust_bill_pkg->hash; - delete $hash{$_} for qw( billpkgnum setup recur ); - $hash{$self->setuprecur} = $self->amount; - my $cust_bill_pkg = new FS::cust_bill_pkg { %hash }; - - use Data::Dumper; - my @exemptions = qsearch( 'cust_tax_exempt_pkg', - { creditbillpkgnum => $self->creditbillpkgnum } - ); - my %seen = (); - my @generated_exemptions = (); - my @unseen_exemptions = (); - foreach my $exemption ( @exemptions ) { - my $error = $exemption->delete; + my @negative_exemptions = qsearch('cust_tax_exempt_pkg', { + 'creditbillpkgnum' => $self->creditbillpkgnum + }); + + # de-anti-exempt those negative exemptions + my $error; + foreach (@negative_exemptions) { + $error = $_->delete; if ( $error ) { $dbh->rollback if $oldAutoCommit; - return "error deleting cust_tax_exempt_pkg: $error"; + return $error; } - - next if $seen{$exemption->taxnum}; - $seen{$exemption->taxnum} = 1; - push @unseen_exemptions, $exemption; } - foreach my $exemption ( @unseen_exemptions ) { - my $tax_object = $exemption->cust_main_county; - unless ($tax_object) { - $dbh->rollback if $oldAutoCommit; - return "can't find exempted tax"; - } - - my $hashref_or_error = - $tax_object->taxline( [ $cust_bill_pkg ], - 'custnum' => $cust_bill->custnum, - 'invoice_time' => $cust_bill->_date, - ); - unless (ref($hashref_or_error)) { - $dbh->rollback if $oldAutoCommit; - return "error calculating taxes: $hashref_or_error"; - } - - push @generated_exemptions, @{ $cust_bill_pkg->cust_tax_exempt_pkg }; - } - - foreach my $taxnum ( keys %seen ) { - my $sum = 0; - $sum += $_->amount for grep {$_->taxnum == $taxnum} @exemptions; - $sum -= $_->amount for grep {$_->taxnum == $taxnum} @generated_exemptions; - $sum = sprintf("%.2f", $sum); - unless ($sum eq '0.00' || $sum eq '-0.00') { - $dbh->rollback if $oldAutoCommit; - return "Can't unapply credit without charging tax of $sum"; - } - } - - my $error = $self->SUPER::delete(@_); + $error = $self->SUPER::delete(@_); if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; -- 2.11.0