X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_bill_pkg.pm;h=6f9c74a641bc6b80aced8fe54237b655bd3f2384;hp=f6b40f6b2bc23cf1c23dd780f9da9664cbd45438;hb=754f419aa67a58a58fa890e14b1239f3e42d23c6;hpb=b003202d1bd1ddc6717a4429c1f8863ebc27844c diff --git a/FS/FS/cust_bill_pkg.pm b/FS/FS/cust_bill_pkg.pm index f6b40f6b2..6f9c74a64 100644 --- a/FS/FS/cust_bill_pkg.pm +++ b/FS/FS/cust_bill_pkg.pm @@ -6,7 +6,7 @@ use vars qw( @ISA $DEBUG $me ); use Carp; use List::Util qw( sum min ); use Text::CSV_XS; -use FS::Record qw( qsearch qsearchs dbh ); +use FS::Record qw( qsearch qsearchs dbh fields ); use FS::cust_pkg; use FS::cust_bill_pkg_detail; use FS::cust_bill_pkg_display; @@ -429,8 +429,10 @@ sub void_cust_bill_pkg_detail { $self->billpkgnum ); - $self->scalar_sql("INSERT INTO cust_bill_pkg_detail_void - SELECT * $from_cust_bill_pkg_detail", + my $fields = join(', ', fields('cust_bill_pkg_detail_void') ); + + $self->scalar_sql("INSERT INTO cust_bill_pkg_detail_void ($fields) + SELECT $fields $from_cust_bill_pkg_detail", $self->billpkgnum ); @@ -491,7 +493,16 @@ sub delete { } } - my $error = $self->SUPER::delete(@_); + #fix the invoice amount + + my $cust_bill = $self->cust_bill; + $cust_bill->charged( $cust_bill->charged - $self->setup - $self->recur ); + + #not adding a cc surcharge, but this override lets us modify charged + $cust_bill->{'Hash'}{'cc_surcharge_replace_hack'} = 1; + + my $error = $cust_bill->replace + || $self->SUPER::delete(@_); if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; @@ -1881,7 +1892,29 @@ sub _pkg_tax_list { # Duplicates can be identified by billpkgtaxlocationnum column. my $self = shift; - return unless $self->pkgnum; + + my $search_selector; + if ( $self->pkgnum ) { + + # For taxes applied to normal billing items + $search_selector = + ' cust_bill_pkg_tax_location.pkgnum = ' + . dbh->quote( $self->pkgnum ); + + } elsif ( $self->feepart ) { + + # For taxes applied to fees, when the fee is not attached to a package + # i.e. late fees, billing events fees + $search_selector = + ' cust_bill_pkg_tax_location.taxable_billpkgnum = ' + . dbh->quote( $self->billpkgnum ); + + } else { + warn "_pkg_tax_list() unhandled case breaking taxes into sections"; + warn "_pkg_tax_list() $_: ".$self->$_ + for qw(pkgnum billpkgnum feepart); + return; + } map +{ billpkgtaxlocationnum => $_->billpkgtaxlocationnum, @@ -1907,7 +1940,7 @@ sub _pkg_tax_list { ' WHERE '. ' cust_bill_pkg.invnum = ' . dbh->quote( $self->invnum ) . ' AND '. - ' cust_bill_pkg_tax_location.pkgnum = ' . dbh->quote( $self->pkgnum ), + $search_selector }); }