X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_credit_bill_pkg.pm;h=080a83aaab94681c5e89fae783a2e220e181b87e;hp=3cb44a092e7426afea3fdf2ca82d3e6a70aeec31;hb=389b6f1116c3309c2ee57a6c295ed1a793503095;hpb=54a357b171aa44f9399b4c146acd2afd3b686075 diff --git a/FS/FS/cust_credit_bill_pkg.pm b/FS/FS/cust_credit_bill_pkg.pm index 3cb44a092..080a83aaa 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 @@ -117,7 +112,7 @@ sub insert { if ($taxable_per_month >= 0) { #panic if its subzero? my $groupby = join(',', - qw(taxnum year month exempt_monthly exempt_cust + qw(taxnum taxtype year month exempt_monthly exempt_cust exempt_cust_taxname exempt_setup exempt_recur)); my $sum = 'SUM(amount)'; my @exemptions = qsearch( @@ -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,16 +292,6 @@ 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->billpkgtaxlocationnum) {