From fe16cec1c82f4e1f1c2586c8259cd607fcb14d79 Mon Sep 17 00:00:00 2001 From: jeff Date: Sat, 31 May 2008 14:49:03 +0000 Subject: [PATCH] invoice cosmetic improvements --- FS/FS/cust_bill.pm | 93 +++++++++++++++++++++++++++++++++++++++++++++++------- conf/invoice_html | 20 ++++++++++++ conf/invoice_latex | 23 +++++++++++--- 3 files changed, 120 insertions(+), 16 deletions(-) diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index b96b09710..0906c5dfe 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -1951,6 +1951,14 @@ sub print_generic { sprintf('%.2f', $pr_total), }; + my $taxtotal = 0; + my $tax_section = { 'description' => 'Taxes, Surcharges, and Fees', + 'subtotal' => $taxtotal }; # adjusted below + + my $adjusttotal = 0; + my $adjust_section = { 'description' => 'Credits, Payments, and Adjustments', + 'subtotal' => 0 }; # adjusted below + my $multisection = $conf->exists('invoice_sections', $cust_main->agentnum); if ( $multisection ) { push @sections, $self->_items_sections; @@ -2048,16 +2056,28 @@ sub print_generic { } if ( $multisection && !$conf->exists('disable_previous_balance') ) { - unshift @sections, $previous_section; + unshift @sections, $previous_section if $pr_total; } - my $taxtotal = 0; foreach my $tax ( $self->_items_tax ) { my $total = {}; $total->{'total_item'} = &$escape_function($tax->{'description'}); $taxtotal += $tax->{'amount'}; $total->{'total_amount'} = $other_money_char. $tax->{'amount'}; - push @total_items, $total; + if ( $multisection ) { + my $money = $old_latex ? '' : $money_char; + push @detail_items, { + ext_description => [], + ref => '', + quantity => '', + description => &$escape_function($tax->{'description'}), + amount => $money. $tax->{'amount'}, + product_code => '', + section => $tax_section, + }; + }else{ + push @total_items, $total; + } push @buf,[ $total->{'total_item'}, $money_char. sprintf("%10.2f", $total->{'total_amount'}), ]; @@ -2066,14 +2086,19 @@ sub print_generic { if ( $taxtotal ) { my $total = {}; + $total->{'total_item'} = 'Sub-total'; + $total->{'total_amount'} = + $other_money_char. sprintf('%.2f', $self->charged - $taxtotal ); + if ( $multisection ) { - $total->{'total_item'} = 'New charges sub-total'; + $tax_section->{'subtotal'} = $other_money_char. + sprintf('%.2f', $taxtotal); + $tax_section->{'pretotal'} = 'New charges sub-total '. + $total->{'total_amount'}; + push @sections, $tax_section if $taxtotal; }else{ - $total->{'total_item'} = 'Sub-total'; + unshift @total_items, $total; } - $total->{'total_amount'} = - $other_money_char. sprintf('%.2f', $self->charged - $taxtotal ); - unshift @total_items, $total; } push @buf,['','-----------']; @@ -2097,7 +2122,12 @@ sub print_generic { ) ) ); - push @total_items, $total; + if ( $multisection ) { + $adjust_section->{'pretotal'} = 'New charges total '. + $total->{'total_amount'}; + }else{ + push @total_items, $total; + } push @buf,['','-----------']; push @buf,['Total Charges', $money_char. @@ -2120,7 +2150,21 @@ sub print_generic { $total->{'total_item'} = &$escape_function($credit->{'description'}); #$credittotal $total->{'total_amount'} = '-'. $other_money_char. $credit->{'amount'}; - push @total_items, $total; + $adjusttotal += $credit->{'amount'}; + if ( $multisection ) { + my $money = $old_latex ? '' : $money_char; + push @detail_items, { + ext_description => [], + ref => '', + quantity => '', + description => &$escape_function($credit->{'description'}), + amount => $money. $credit->{'amount'}, + product_code => '', + section => $adjust_section, + }; + }else{ + push @total_items, $total; + } } # credits (again) @@ -2143,12 +2187,32 @@ sub print_generic { $total->{'total_item'} = &$escape_function($payment->{'description'}); #$paymenttotal $total->{'total_amount'} = '-'. $other_money_char. $payment->{'amount'}; - push @total_items, $total; + $adjusttotal += $payment->{'amount'}; + if ( $multisection ) { + my $money = $old_latex ? '' : $money_char; + push @detail_items, { + ext_description => [], + ref => '', + quantity => '', + description => &$escape_function($payment->{'description'}), + amount => $money. $payment->{'amount'}, + product_code => '', + section => $adjust_section, + }; + }else{ + push @total_items, $total; + } push @buf, [ $payment->{'description'}, $money_char. sprintf("%10.2f", $payment->{'amount'}), ]; } + if ( $multisection ) { + $adjust_section->{'subtotal'} = $other_money_char. + sprintf('%.2f', $adjusttotal); + push @sections, $adjust_section; + } + { my $total; $total->{'total_item'} = &$embolden_function($self->balance_due_msg); @@ -2156,7 +2220,12 @@ sub print_generic { &$embolden_function( $other_money_char. sprintf('%.2f', $self->owed + $pr_total ) ); - push @total_items, $total; + if ( $multisection ) { + $adjust_section->{'posttotal'} = $total->{'total_item'}. ' '. + $total->{'total_amount'}; + }else{ + push @total_items, $total; + } push @buf,['','-----------']; push @buf,[$self->balance_due_msg, $money_char. sprintf("%10.2f", $balance_due ) ]; diff --git a/conf/invoice_html b/conf/invoice_html index 14b25c671..ae6910dba 100644 --- a/conf/invoice_html +++ b/conf/invoice_html @@ -70,6 +70,16 @@ <%= foreach my $section ( @sections ) { + if ($section->{'pretotal'}) { + $OUT .= + '
'. + '

'. + uc(substr($section->{'pretotal'},0,1)). + ''. uc(substr($section->{'pretotal'},1)). + ''. + '

'. + '

'; + } $OUT .= '' ; } + + if ($section->{'posttotal'}) { + $OUT .= ''; + } + } my $style = 'border-top: 3px solid #000000;'; diff --git a/conf/invoice_latex b/conf/invoice_latex index ece0897da..aadd326c5 100644 --- a/conf/invoice_latex +++ b/conf/invoice_latex @@ -19,7 +19,7 @@ \documentclass[letterpaper]{article} -\usepackage{fancyhdr,lastpage,ifthen,longtable,afterpage} +\usepackage{fancyhdr,lastpage,ifthen,longtable,afterpage,caption} \usepackage{graphicx} % required for logo graphic \addtolength{\voffset}{-0.0cm} % top margin to top of header @@ -35,6 +35,8 @@ \setlength{\oddsidemargin}{-0.9cm} % odd page left margin \setlength{\evensidemargin}{-0.9cm} % even page left margin +\LTchunksize=40 + \renewcommand{\headrulewidth}{0pt} \renewcommand{\footrulewidth}{1pt} @@ -188,11 +190,19 @@ Terms: [@-- $terms --@]\\ \end{minipage}} \vspace{1.5cm} % +\section*{} [@-- foreach my $section ( @sections ) { - $OUT .= '\section*{\textsc{'; - $OUT .= ($section->{'description'}) ? $section->{'description'} : 'Charges'; - $OUT .= '}}\begin{longtable}{cllllllr}'; + if ($section->{'pretotal'}) { + $OUT .= '\begin{flushright}'; + $OUT .= '\large\textsc{'. $section->{'pretotal'}. '}\\\\'; + $OUT .= '\\end{flushright}'; + } + $OUT .= '\captionsetup{singlelinecheck=false,justification=raggedright,font={Large,sc,bf}}'; + $OUT .= '\begin{longtable}{cllllllr}'; + $OUT .= '\caption*{ '; + $OUT .= ($section->{'description'}) ? $section->{'description'}: 'Charges'; + $OUT .= '}\\\\'; $OUT .= '\hline'; $OUT .= '\rule{0pt}{2.5ex}'; $OUT .= '\makebox[1.4cm]{\textbf{Ref}} & '; @@ -256,6 +266,11 @@ Terms: [@-- $terms --@]\\ $OUT .= '\end{longtable}'; + if ($section->{'posttotal'}) { + $OUT .= '\begin{flushright}'; + $OUT .= '\normalfont\large\bfseries\textsc{'. $section->{'posttotal'}. '}\\\\'; + $OUT .= '\\end{flushright}'; + } } --@] -- 2.11.0
'; if ($section->{'description'}) { $OUT .= @@ -132,6 +142,16 @@ '
'; + $OUT .= + '

'. $section->{'posttotal'}. + ''. + '

'; + $OUT .= '