summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2018-04-11 13:26:07 -0700
committerIvan Kohler <ivan@freeside.biz>2018-04-11 13:26:07 -0700
commit1d966768ea430d102aac2dfbedc7cc6b503b7e1a (patch)
tree2553754a185c5073c7b6cf0b96a2c2f2fc6086dd
parentc0f84de8067f9cd98bdd3cfd593427c90123b494 (diff)
optimize invoice display with sections, RT#80177
-rw-r--r--FS/FS/Template_Mixin.pm12
-rw-r--r--FS/FS/cust_bill.pm8
2 files changed, 17 insertions, 3 deletions
diff --git a/FS/FS/Template_Mixin.pm b/FS/FS/Template_Mixin.pm
index 551d53fc4..6c1e30e4a 100644
--- a/FS/FS/Template_Mixin.pm
+++ b/FS/FS/Template_Mixin.pm
@@ -2676,7 +2676,13 @@ sub _items_sections {
foreach my $display ($cust_bill_pkg->cust_bill_pkg_display) {
next if ( $display->summary && $opt{summary} );
- my $section = $display->section;
+ #my $section = $display->section;
+ #false laziness with the method, but for efficiency inside this loop
+ my $section = $display->get('section');
+ if ( !$section && !$cust_bill_pkg->hidden ) {
+ $section = $cust_bill_pkg->get('categoryname'); #cust_bill->cust_bill_pkg added it (XXX quotations / quotation_section)
+ }
+
my $type = $display->type;
# Set $section = undef if we're sectioning by location and this
# line item _has_ a location (i.e. isn't a fee).
@@ -3101,6 +3107,8 @@ sub _items_fee {
my @cust_bill_pkg = grep { $_->feepart } $self->cust_bill_pkg;
my $escape_function = $options{escape_function};
+ my $locale = $self->cust_main->locale;
+
my @items;
foreach my $cust_bill_pkg (@cust_bill_pkg) {
# cache this, so we don't look it up again in every section
@@ -3141,7 +3149,7 @@ sub _items_fee {
$self->mt('from invoice #[_1] on [_2]', $_, $base_invnums{$_})
);
}
- my $desc = $part_fee->itemdesc_locale($self->cust_main->locale);
+ my $desc = $part_fee->itemdesc_locale($locale);
# but not escape the base description line
my @pkg_tax = $cust_bill_pkg->_pkg_tax_list
diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm
index 942715b20..38b1d5c6d 100644
--- a/FS/FS/cust_bill.pm
+++ b/FS/FS/cust_bill.pm
@@ -521,7 +521,13 @@ Returns the line items (see L<FS::cust_bill_pkg>) for this invoice.
sub cust_bill_pkg {
my $self = shift;
qsearch(
- { 'table' => 'cust_bill_pkg',
+ {
+ 'select' => 'cust_bill_pkg.*, pkg_category.categoryname',
+ 'table' => 'cust_bill_pkg',
+ 'addl_from' => ' LEFT JOIN cust_pkg USING ( pkgnum ) '.
+ ' LEFT JOIN part_pkg USING ( pkgpart ) '.
+ ' LEFT JOIN pkg_class USING ( classnum ) '.
+ ' LEFT JOIN pkg_category USING ( categorynum ) ',
'hashref' => { 'invnum' => $self->invnum },
'order_by' => 'ORDER BY billpkgnum', #important? otherwise we could use
# the AUTLOADED FK search. or should