+sub _items_fee {
+ my $self = shift;
+ my %options = @_;
+ my @cust_bill_pkg = grep { $_->feepart } $self->cust_bill_pkg;
+ my @items;
+ foreach my $cust_bill_pkg (@cust_bill_pkg) {
+ # cache this, so we don't look it up again in every section
+ my $part_fee = $cust_bill_pkg->get('part_fee')
+ || $cust_bill_pkg->part_fee;
+ $cust_bill_pkg->set('part_fee', $part_fee);
+ if (!$part_fee) {
+ #die "fee definition not found for line item #".$cust_bill_pkg->billpkgnum."\n"; # might make more sense
+ warn "fee definition not found for line item #".$cust_bill_pkg->billpkgnum."\n";
+ next;
+ }
+ if ( exists($options{section}) and exists($options{section}{category}) )
+ {
+ my $categoryname = $options{section}{category};
+ # then filter for items that have that section
+ if ( $part_fee->categoryname ne $categoryname ) {
+ warn "skipping fee '".$part_fee->itemdesc."'--not in section $categoryname\n" if $DEBUG;
+ next;
+ }
+ } # otherwise include them all in the main section
+ # XXX what to do when sectioning by location?
+ push @items,
+ { feepart => $cust_bill_pkg->feepart,
+ amount => sprintf('%.2f', $cust_bill_pkg->setup + $cust_bill_pkg->recur),
+ description => $part_fee->itemdesc_locale($self->cust_main->locale),
+ # sdate/edate?
+ # ext_description referencing the base_invnum?
+ };
+ }
+ @items;
+}
+