X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_bill.pm;h=f536c972c9ff934908d7d063d85c03b31e78837a;hb=e3dffa23a03cd9f88946ceb78bc75ada29bc013a;hp=0bc084d8b2481ae95c9698d4c28c1e7c251e0081;hpb=4879d6626e33e0df7d1655cc4ee4ddaff4279218;p=freeside.git diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index 0bc084d8b..f536c972c 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -1635,7 +1635,7 @@ sub print_generic { $templatefile .= "_$template" if length($template); my @invoice_template = map "$_\n", $conf->config($templatefile) - or die "cannot load config file $templatefile"; + or die "cannot load config data $templatefile"; my $old_latex = ''; if ( $format eq 'latex' && grep { /^%%Detail/ } @invoice_template ) { @@ -1653,7 +1653,7 @@ sub print_generic { ); $text_template->compile() - or die 'While compiling ' . $templatefile . ': ' . $Text::Template::ERROR; + or die "Can't compile $templatefile: $Text::Template::ERROR\n"; # additional substitution could possibly cause breakage in existing templates @@ -1863,33 +1863,38 @@ sub print_generic { #do variable substitution in notes, footer, smallfooter foreach my $include (qw( notes footer smallfooter )) { - my @inc_src = $conf->config_orbase("invoice_latex$include", $template ); - my $convert_map = $convert_maps{$format}{$include}; + my $inc_file = $conf->key_orbase("invoice_${format}$include", $template); + my @inc_src; + + if ( $conf->exists($inc_file) && length( $conf->config($inc_file) ) ) { + + @inc_src = $conf->config($inc_file); - if ( - defined( $conf->config_orbase("invoice_${format}$include", $template) ) - && length( $conf->config_orbase('invoice_${format}$include', $template) ) - ) { - @inc_src = $conf->config_orbase("invoice_${format}$include", $template ); } else { - @inc_src = - map { s/\[@--/$delimiters{$format}[0]/g; - s/--@]/$delimiters{$format}[1]/g; - $_; - } - &$convert_map( - $conf->config_orbase("invoice_latex$include", $template ) - ); + + $inc_file = $conf->key_orbase("invoice_latex$include", $template); + + my $convert_map = $convert_maps{$format}{$include}; + + @inc_src = map { s/\[\@--/$delimiters{$format}[0]/g; + s/--\@\]/$delimiters{$format}[1]/g; + $_; + } + &$convert_map( $conf->config($inc_file) ); + } my $inc_tt = new Text::Template ( TYPE => 'ARRAY', SOURCE => [ map "$_\n", @inc_src ], DELIMITERS => $delimiters{$format}, - ) or die "can't create new Text::Template object: $Text::Template::ERROR"; + ) or die "Can't create new Text::Template object: $Text::Template::ERROR"; - $inc_tt->compile() - or die "can't compile template: $Text::Template::ERROR"; + unless ( $inc_tt->compile() ) { + my $error = "Can't compile $inc_file template: $Text::Template::ERROR\n"; + warn $error. "Template:\n". join('', map "$_\n", @inc_src); + die $error; + } $invoice_data{$include} = $inc_tt->fill_in( HASH => \%invoice_data ); @@ -2481,9 +2486,18 @@ sub _items_pkg { $self->_items_cust_bill_pkg(\@cust_bill_pkg, %options); } +sub _taxsort { + return 0 unless $a cmp $b; + return -1 if $b eq 'Tax'; + return 1 if $a eq 'Tax'; + return -1 if $b eq 'Other surcharges'; + return 1 if $a eq 'Other surcharges'; + $a cmp $b; +} + sub _items_tax { my $self = shift; - my @cust_bill_pkg = grep { ! $_->pkgnum } $self->cust_bill_pkg; + my @cust_bill_pkg = sort _taxsort grep { ! $_->pkgnum } $self->cust_bill_pkg; $self->_items_cust_bill_pkg(\@cust_bill_pkg, @_); } @@ -2494,6 +2508,8 @@ sub _items_cust_bill_pkg { my @b = (); foreach my $cust_bill_pkg ( @$cust_bill_pkg ) { + my $cust_pkg = $cust_bill_pkg->cust_pkg; + my $desc = $cust_bill_pkg->desc; if ( $cust_bill_pkg->pkgnum > 0 ) { @@ -2501,7 +2517,7 @@ sub _items_cust_bill_pkg { if ( $cust_bill_pkg->setup != 0 ) { my $description = $desc; $description .= ' Setup' if $cust_bill_pkg->recur != 0; - my @d = $cust_bill_pkg->cust_pkg->h_labels_short($self->_date); + my @d = $cust_pkg->h_labels_short($self->_date); push @d, $cust_bill_pkg->details if $cust_bill_pkg->recur == 0; push @b, { description => $description, @@ -2524,8 +2540,11 @@ sub _items_cust_bill_pkg { pkgnum => $cust_bill_pkg->pkgnum, amount => sprintf("%.2f", $cust_bill_pkg->recur), ext_description => - [ $cust_bill_pkg->cust_pkg->h_labels_short( $cust_bill_pkg->edate, - $cust_bill_pkg->sdate), + #at least until cust_bill_pkg has "past" ranges in addition to + #the "future" sdate/edate ones... see #3032 + [ $cust_pkg->h_labels_short( $self->_date ), + #$cust_bill_pkg->edate, + #$cust_bill_pkg->sdate), $cust_bill_pkg->details, ], };