summaryrefslogtreecommitdiff
path: root/FS/FS/cust_credit_bill_pkg.pm
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2013-06-07 18:30:01 -0700
committerMark Wells <mark@freeside.biz>2013-06-07 18:30:01 -0700
commitd785bd7751b24ca30cf4679413db9dff5d15a80c (patch)
tree75cea3273f93b75d1ad5b266d6ea3c749b3d74db /FS/FS/cust_credit_bill_pkg.pm
parent20ff2d2943aef4fc5d854cc31ab422f360622bed (diff)
unapply credits from tax-exempt line items, tentative fix, #23381
Diffstat (limited to 'FS/FS/cust_credit_bill_pkg.pm')
-rw-r--r--FS/FS/cust_credit_bill_pkg.pm64
1 files changed, 10 insertions, 54 deletions
diff --git a/FS/FS/cust_credit_bill_pkg.pm b/FS/FS/cust_credit_bill_pkg.pm
index 3cb44a0..657a889 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;