X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_credit_bill_pkg.pm;h=1f741b289216f1b6532516d903a9e0a75354bec9;hp=7427d09ab4ca98de6f247873544dee8ccc3a2229;hb=e9e0cf0989259b94d9758eceff448666a2e5a5cc;hpb=47ab335f71ebed3cc69f8a6604979798f917b91b diff --git a/FS/FS/cust_credit_bill_pkg.pm b/FS/FS/cust_credit_bill_pkg.pm index 7427d09ab..1f741b289 100644 --- a/FS/FS/cust_credit_bill_pkg.pm +++ b/FS/FS/cust_credit_bill_pkg.pm @@ -1,17 +1,12 @@ package FS::cust_credit_bill_pkg; +use base qw( FS::cust_main_Mixin FS::Record ); use strict; -use vars qw( @ISA ); use FS::Record qw( qsearch qsearchs dbh ); -use FS::cust_main_Mixin; -use FS::cust_credit_bill; -use FS::cust_bill_pkg; use FS::cust_bill_pkg_tax_location; use FS::cust_bill_pkg_tax_rate_location; use FS::cust_tax_exempt_pkg; -@ISA = qw( FS::cust_main_Mixin FS::Record ); - =head1 NAME FS::cust_credit_bill_pkg - Object methods for cust_credit_bill_pkg records @@ -171,11 +166,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 +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; @@ -336,25 +292,15 @@ sub check { $self->SUPER::check; } -sub cust_credit_bill { - my $self = shift; - qsearchs('cust_credit_bill', { 'creditbillnum' => $self->creditbillnum } ); -} - -sub cust_bill_pkg { - my $self = shift; - qsearchs('cust_bill_pkg', { 'billpkgnum' => $self->billpkgnum } ); -} - sub cust_bill_pkg_tax_Xlocation { my $self = shift; - if ($self->billpkg_tax_locationnum) { + if ($self->billpkgtaxlocationnum) { return qsearchs( 'cust_bill_pkg_tax_location', { 'billpkgtaxlocationnum' => $self->billpkgtaxlocationnum }, ); - } elsif ($self->billpkg_tax_rate_locationnum) { + } elsif ($self->billpkgtaxratelocationnum) { return qsearchs( 'cust_bill_pkg_tax_rate_location', { 'billpkgtaxratelocationnum' => $self->billpkgtaxratelocationnum },