package FS::cust_bill_pkg_discount;
+use base qw( FS::cust_main_Mixin FS::Record );
use strict;
-use base qw( FS::cust_main_Mixin FS::Record );
-use FS::Record qw( qsearch qsearchs );
-use FS::cust_bill_pkg;
-use FS::cust_pkg_discount;
=head1 NAME
Returns the associated line item (see L<FS::cust_bill_pkg>).
-=cut
-
-sub cust_bill_pkg {
- my $self = shift;
- qsearchs( 'cust_bill_pkg', { 'billpkgnum' => $self->billpkgnum } ) ;
-}
-
=item cust_pkg_discount
Returns the associated customer discount (see L<FS::cust_pkg_discount>).
+=item description
+
+Returns a string describing the discount (for use on an invoice).
+
=cut
-sub cust_pkg_discount {
+sub description {
my $self = shift;
- qsearchs( 'cust_pkg_discount', { 'pkgdiscountnum' => $self->pkgdiscountnum });
+ my $discount = $self->cust_pkg_discount->discount;
+ my $desc = $discount->description_short;
+ $desc .= $self->mt(' each') if $self->cust_bill_pkg->quantity > 1;
+
+ if ($discount->months) {
+ # calculate months remaining on this cust_pkg_discount after this invoice
+ my $date = $self->cust_bill_pkg->cust_bill->_date;
+ my $used = FS::Record->scalar_sql(
+ 'SELECT SUM(months) FROM cust_bill_pkg_discount
+ JOIN cust_bill_pkg USING (billpkgnum)
+ JOIN cust_bill USING (invnum)
+ WHERE pkgdiscountnum = ? AND _date <= ?',
+ $self->pkgdiscountnum,
+ $date
+ );
+ $used ||= 0;
+ my $remaining = sprintf('%.2f', $discount->months - $used);
+ $desc .= $self->mt(' for [quant,_1,month] ([quant,_2,month] remaining)',
+ $self->months,
+ $remaining
+ );
+ }
+ return $desc;
}
-
=back
=head1 BUGS