X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_bill_pkg.pm;h=4448da62e35d13139f31ed6c173865e956da4790;hb=6c6163bb36ac4e425a7f109566d62c9bdf206bc7;hp=13f027b0732212038b560aceb5ef2abb79bc19fa;hpb=ca64920f7bd3c6599c164b5fcb126a6a1c0f7c42;p=freeside.git diff --git a/FS/FS/cust_bill_pkg.pm b/FS/FS/cust_bill_pkg.pm index 13f027b07..4448da62e 100644 --- a/FS/FS/cust_bill_pkg.pm +++ b/FS/FS/cust_bill_pkg.pm @@ -26,6 +26,7 @@ use FS::cust_bill_pkg_discount_void; use FS::cust_bill_pkg_tax_location_void; use FS::cust_bill_pkg_tax_rate_location_void; use FS::cust_tax_exempt_pkg_void; +use FS::cust_bill_pkg_fee_void; use FS::part_fee; use FS::Cursor; @@ -299,13 +300,12 @@ sub insert { } # foreach my $link } - my $cust_event_fee = $self->get('cust_event_fee'); - if ( $cust_event_fee ) { - $cust_event_fee->set('billpkgnum' => $self->billpkgnum); - $error = $cust_event_fee->replace; + if ( my $fee_origin = $self->get('fee_origin') ) { + $fee_origin->set('billpkgnum' => $self->billpkgnum); + $error = $fee_origin->replace; if ( $error ) { $dbh->rollback if $oldAutoCommit; - return "error updating cust_event_fee: $error"; + return "error updating fee origin record: $error"; } } @@ -363,6 +363,7 @@ sub void { cust_bill_pkg_tax_location cust_bill_pkg_tax_rate_location cust_tax_exempt_pkg + cust_bill_pkg_fee )) { foreach my $linked ( qsearch($table, { billpkgnum=>$self->billpkgnum }) ) { @@ -422,6 +423,7 @@ sub delete { cust_tax_exempt_pkg cust_bill_pay_pkg cust_credit_bill_pkg + cust_bill_pkg_fee )) { foreach my $linked ( qsearch($table, { billpkgnum=>$self->billpkgnum }) ) { @@ -835,6 +837,8 @@ sub _item_discount { description => $self->mt('Discount'), amount => 0, ext_description => \@ext, + pkgpart => $self->pkgpart, + feepart => $self->feepart, # maybe should show quantity/unit discount? }; foreach my $pkg_discount (@pkg_discounts) { @@ -954,6 +958,7 @@ sub disintegrate { my $usage_total; foreach my $classnum ($self->usage_classes) { + next if $classnum eq ''; # null-class usage is included in 'recur' my $amount = $self->usage($classnum); next if $amount == 0; # though if so we shouldn't be here my $usage_item = FS::cust_bill_pkg->new({ @@ -1013,7 +1018,13 @@ sub usage { my $sql = 'SELECT SUM(COALESCE(amount,0)) FROM cust_bill_pkg_detail '. ' WHERE billpkgnum = '. $self->billpkgnum; - $sql .= " AND classnum = $classnum" if defined($classnum); + if (defined $classnum) { + if ($classnum =~ /^(\d+)$/) { + $sql .= " AND classnum = $1"; + } elsif (defined($classnum) and $classnum eq '') { + $sql .= " AND classnum IS NULL"; + } + } my $sth = dbh->prepare($sql) or die dbh->errstr; $sth->execute or die $sth->errstr; @@ -1128,7 +1139,7 @@ sub tax_locationnum { my $self = shift; if ( $self->pkgnum ) { # normal sales return $self->cust_pkg->tax_locationnum; - } elsif ( $self->feepart ) { # fees + } elsif ( $self->feepart and $self->invnum ) { # fees return $self->cust_bill->cust_main->ship_locationnum; } else { # taxes return ''; @@ -1139,42 +1150,13 @@ sub tax_location { my $self = shift; if ( $self->pkgnum ) { # normal sales return $self->cust_pkg->tax_location; - } elsif ( $self->feepart ) { # fees + } elsif ( $self->feepart and $self->invnum ) { # fees return $self->cust_bill->cust_main->ship_location; } else { # taxes return; } } -=item part_X - -Returns the L or L object that defines this -charge. If called on a tax line, returns nothing. - -=cut - -sub part_X { - my $self = shift; - if ( $self->pkgpart_override ) { - return FS::part_pkg->by_key($self->pkgpart_override); - } elsif ( $self->pkgnum ) { - return $self->cust_pkg->part_pkg; - } elsif ( $self->feepart ) { - return $self->part_fee; - } else { - return; - } -} - -# stubs - -sub part_fee { - my $self = shift; - $self->feepart - ? FS::part_fee->by_key($self->feepart) - : undef; -} - =back =head1 CLASS METHODS