X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_credit_bill_pkg.pm;h=7b723f98405baceacf00303e73c14f936bc8eadb;hb=5b7ba710939e35f0ed1031e7e0abfbb21ab1bfa0;hp=3cb44a092e7426afea3fdf2ca82d3e6a70aeec31;hpb=f3e0ac2b009c4edd5692cb587ff709dac2223ebe;p=freeside.git diff --git a/FS/FS/cust_credit_bill_pkg.pm b/FS/FS/cust_credit_bill_pkg.pm index 3cb44a092..7b723f984 100644 --- a/FS/FS/cust_credit_bill_pkg.pm +++ b/FS/FS/cust_credit_bill_pkg.pm @@ -171,11 +171,16 @@ sub insert { 'amount' => sprintf('%.2f', 0-$amount), }; - my $error = $cust_tax_exempt_pkg->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error inserting cust_tax_exempt_pkg: $error"; + if ( $cust_tax_exempt_pkg->cust_main_county ) { + + my $error = $cust_tax_exempt_pkg->insert; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "error inserting cust_tax_exempt_pkg: $error"; + } + } + } #foreach $exemption } @@ -223,65 +228,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;