From: Mark Wells Date: Mon, 9 Jun 2014 21:23:59 +0000 (-0700) Subject: correctly associate bundled line item amounts with base items, #29518 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=a455b3d4dd10624e223705477f55ef09ed81a85f correctly associate bundled line item amounts with base items, #29518 --- diff --git a/FS/FS/Template_Mixin.pm b/FS/FS/Template_Mixin.pm index bfa03bcdb..afa17fca1 100644 --- a/FS/FS/Template_Mixin.pm +++ b/FS/FS/Template_Mixin.pm @@ -2295,7 +2295,26 @@ separate quantities, for some reason). sub _items_nontax { my $self = shift; - grep { $_->pkgnum } $self->cust_bill_pkg; + # The order of these is important. Bundled line items will be merged into + # the most recent non-hidden item, so it needs to be the one with: + # - the same pkgnum + # - the same start date + # - no pkgpart_override + # + # So: sort by pkgnum, + # then by sdate + # then sort the base line item before any overrides + # then sort hidden before non-hidden add-ons + # then sort by override pkgpart (for consistency) + sort { $a->pkgnum <=> $b->pkgnum or + $a->sdate <=> $b->sdate or + ($a->pkgpart_override ? 0 : -1) or + ($b->pkgpart_override ? 0 : 1) or + $b->hidden cmp $a->hidden or + $a->pkgpart_override <=> $b->pkgpart_override + } + # and of course exclude taxes and fees + grep { $_->pkgnum > 0 } $self->cust_bill_pkg; } sub _items_fee {