}
my $summary_page = $opt{summary_page} || ''; #unused
my $multisection = defined($category) || defined($locationnum);
- my $discount_show_always = 0;
+ # this variable is the value of the config setting, not whether it applies
+ # to this particular line item.
+ my $discount_show_always = $conf->exists('discount-show-always');
my $maxlength = $conf->config('cust_bill-latex_lineitem_maxlength') || 40;
if (exists($_->{unit_amount})) {
$_->{unit_amount} = sprintf( "%.2f", $_->{unit_amount} );
}
- push @b, { %$_ }
- if $_->{amount} != 0
- || $discount_show_always
- || ( ! $_->{_is_setup} && $_->{recur_show_zero} )
- || ( $_->{_is_setup} && $_->{setup_show_zero} )
+ push @b, { %$_ };
+ # we already decided to create this display line; don't reconsider it
+ # now.
+ # if $_->{amount} != 0
+ # || $discount_show_always
+ # || ( ! $_->{_is_setup} && $_->{recur_show_zero} )
+ # || ( $_->{_is_setup} && $_->{setup_show_zero} )
;
$_ = undef;
}
if ( (!$type || $type eq 'S')
&& ( $cust_bill_pkg->setup != 0
|| $cust_bill_pkg->setup_show_zero
+ || ($discount_show_always and $cust_bill_pkg->unitsetup > 0)
)
)
{
warn "$me _items_cust_bill_pkg adding setup\n"
if $DEBUG > 1;
+ # append the word 'Setup' to the setup line if there's going to be
+ # a recur line for the same package (i.e. not a one-time charge)
my $description = $desc;
$description .= ' Setup'
if $cust_bill_pkg->recur != 0
- || $discount_show_always
+ || ($discount_show_always and $cust_bill_pkg->unitrecur > 0)
|| $cust_bill_pkg->recur_show_zero;
$description .= $cust_bill_pkg->time_period_pretty( $part_pkg,
}
+ # should we show a recur line?
+ # if type eq 'S', then NO, because we've been told not to.
+ # otherwise, show the recur line if:
+ # - there's a recurring charge
+ # - or recur_show_zero is on
+ # - or there's a positive unitrecur (so it's been discounted to zero)
+ # and discount-show-always is on
if ( ( !$type || $type eq 'R' || $type eq 'U' )
&& (
$cust_bill_pkg->recur != 0
- || $cust_bill_pkg->setup == 0
- || $discount_show_always
+ || !defined($s)
+ || ($discount_show_always and $cust_bill_pkg->unitrecur > 0)
|| $cust_bill_pkg->recur_show_zero
)
)
} # foreach $display
- $discount_show_always = ($cust_bill_pkg->cust_bill_pkg_discount
- && $conf->exists('discount-show-always'));
-
}
foreach ( $s, $r, ($opt{skip_usage} ? () : $u ), $d ) {
$_->{unit_amount} = sprintf( "%.2f", $_->{unit_amount} );
}
- push @b, { %$_ }
- if $_->{amount} != 0
- || $discount_show_always
- || ( ! $_->{_is_setup} && $_->{recur_show_zero} )
- || ( $_->{_is_setup} && $_->{setup_show_zero} )
+ push @b, { %$_ };
+ #if $_->{amount} != 0
+ # || $discount_show_always
+ # || ( ! $_->{_is_setup} && $_->{recur_show_zero} )
+ # || ( $_->{_is_setup} && $_->{setup_show_zero} )
}
}
sub _omit_zero_value_bundles {
my @in = @_;
- my @cust_bill_pkg = ();
- my @cust_bill_pkg_bundle = ();
- my $sum = 0;
- my $discount_show_always = 0;
+ my @out = ();
+ my @bundle = ();
+ my $discount_show_always = $conf->exists('discount-show-always');
+ my $show_this = 0;
+
+ # this is a pack-and-deliver pattern. every time there's a cust_bill_pkg
+ # _without_ pkgpart_override, that's the start of the new bundle. if there's
+ # an existing bundle, and it contains a nonzero amount (or a zero amount
+ # that's displayable anyway), push all line items in the bundle.
foreach my $cust_bill_pkg ( @in ) {
- $discount_show_always = ($cust_bill_pkg->get('discounts')
- && scalar(@{$cust_bill_pkg->get('discounts')})
- && $conf->exists('discount-show-always'));
-
- warn " pkgnum ". $cust_bill_pkg->pkgnum. " sum $sum, ".
- "setup_show_zero ". $cust_bill_pkg->setup_show_zero.
- "recur_show_zero ". $cust_bill_pkg->recur_show_zero. "\n"
- if $DEBUG > 0;
-
- if (scalar(@cust_bill_pkg_bundle) && !$cust_bill_pkg->pkgpart_override) {
- push @cust_bill_pkg, @cust_bill_pkg_bundle
- if $sum > 0
- || ($sum == 0 && ( $discount_show_always
- || grep {$_->recur_show_zero || $_->setup_show_zero}
- @cust_bill_pkg_bundle
- )
- );
- @cust_bill_pkg_bundle = ();
- $sum = 0;
+ if (scalar(@bundle) and !$cust_bill_pkg->pkgpart_override) {
+ # ship out this bundle and reset it
+ if ( $show_this ) {
+ push @out, @bundle;
+ }
+ @bundle = ();
+ $show_this = 0;
}
- $sum += $cust_bill_pkg->setup + $cust_bill_pkg->recur;
- push @cust_bill_pkg_bundle, $cust_bill_pkg;
+ # add this item to the current bundle
+ push @bundle, $cust_bill_pkg;
+ # determine if it makes the bundle displayable
+ if ( $cust_bill_pkg->setup > 0
+ or $cust_bill_pkg->recur > 0
+ or $cust_bill_pkg->setup_show_zero
+ or $cust_bill_pkg->recur_show_zero
+ or ($discount_show_always
+ and scalar(@{ $cust_bill_pkg->get('discounts')})
+ )
+ ) {
+ $show_this++;
+ }
}
- push @cust_bill_pkg, @cust_bill_pkg_bundle
- if $sum > 0
- || ($sum == 0 && ( $discount_show_always
- || grep {$_->recur_show_zero || $_->setup_show_zero}
- @cust_bill_pkg_bundle
- )
- );
+ # last bundle
+ if ( $show_this) {
+ push @out, @bundle;
+ }
warn " _omit_zero_value_bundles: ". scalar(@in).
- '->'. scalar(@cust_bill_pkg). "\n" #. Dumper(@cust_bill_pkg). "\n"
+ '->'. scalar(@out). "\n" #. Dumper(@out). "\n"
if $DEBUG > 2;
- (@cust_bill_pkg);
-
+ @out;
}
sub _make_lines {