From 0fb4ab2c74868ace9e7ac46a5ddb67c7c99597c5 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Mon, 9 Jun 2014 14:23:03 -0700 Subject: [PATCH] correctly associate bundled line item amounts with base items, #29518 --- FS/FS/Template_Mixin.pm | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) 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 { -- 2.11.0