RT# 81822 - Added new config for remittance coupon location, updated invoice_latex...
authorChristopher Burger <burgerc@freeside.biz>
Tue, 4 Dec 2018 19:30:07 +0000 (14:30 -0500)
committerChristopher Burger <burgerc@freeside.biz>
Tue, 4 Dec 2018 19:30:07 +0000 (14:30 -0500)
FS/FS/Conf.pm
FS/FS/Template_Mixin.pm
conf/invoice_latex
conf/invoice_latexcoupon

index 5a74451..393f068 100644 (file)
@@ -1480,6 +1480,18 @@ and customer address. Include units.',
   },
 
   {
+    'key'         => 'invoice_latexcouponlocation',
+    'section'     => 'invoicing',
+    'description' => 'Location of the remittance coupon.Either top or bottom of page, defaults to bottom.',
+    'type'        => 'select',
+    'select_hash' => [
+                       'bottom' => 'Bottom of page (default)',
+                       'top'    => 'Top of page',
+                     ],
+    'per_agent'   => 1,
+  },
+
+  {
     'key'         => 'invoice_latexsmallfooter',
     'section'     => 'invoice_templates',
     'description' => 'Optional small footer for multi-page LaTeX typeset PostScript invoices.',
index 675dcfa..c6a9b9f 100644 (file)
@@ -597,6 +597,7 @@ sub print_generic {
     'amountenclosedsep'     => scalar($conf->config('invoice_latexcouponamountenclosedsep', $agentnum)),
     'coupontoaddresssep'    => scalar($conf->config('invoice_latexcoupontoaddresssep', $agentnum)),
     'addcompanytoaddress'   => $conf->exists('invoice_latexcouponaddcompanytoaddress', $agentnum),
+    'couponlocation'        => (scalar($conf->config('invoice_latexcouponlocation', $agentnum)) eq "top") ? 'top' : 'bottom',
 
     # better hang on to conf_dir for a while (for old templates)
     'conf_dir'        => "$FS::UID::conf_dir/conf.$FS::UID::datasrc",
index 478405e..885be3d 100644 (file)
-%% file: Standard Multipage.tex\r
-%% Purpose: Multipage bill template for e-Bills\r
-%% \r
-%% Created by Mark Asplen-Taylor\r
-%% Asplen Management Ltd\r
-%% www.asplen.co.uk\r
-%%\r
-%% Modified for Freeside by Kristian Hoffman\r
-%%\r
-%% Changes\r
-%%     0.1     4/12/00 Created\r
-%%     0.2     18/10/01        More fields added\r
-%%     1.0     16/11/01        RELEASED\r
-%%     1.2     16/10/02        Invoice number added\r
-%%     1.3     2/12/02 Logo graphic added\r
-%%     1.4     7/2/03  Multipage headers/footers added\r
-%%      n/a     forked for Freeside; checked into CVS\r
-%%\r
-\r
-\documentclass[letterpaper]{article}\r
-\r
-\usepackage{fancyhdr,lastpage,ifthen,array,longtable,afterpage,caption,multirow,bigstrut}\r
-\usepackage[breakwords]{truncate} % to avoid overflowing boxes\r
-\usepackage{graphicx}                  % required for logo graphic\r
-\usepackage[utf8]{inputenc}             % multilanguage support\r
-\usepackage[T1]{fontenc}\r
-[@-- if ( length($watermark) ) {\r
-  $OUT .= '\r
-\usepackage{background}\r
-\backgroundsetup{\r
-  placement=center,\r
-  opacity=0.25,\r
-  color=black,\r
-  angle=0,\r
-  contents=' . $watermark . '\r
-}';\r
-}\r
-'';\r
---@]\r
-\r
-\catcode`\{=1\r
-\catcode`\}=2\r
-\special{ps:%\r
-  SDict begin [\r
-    /Title (Invoice \#[@-- $invnum --@])\r
-    /DOCINFO pdfmark\r
-  end\r
-}\r
-\end\r
-\r
-\addtolength{\voffset}{-0.0cm}         % top margin to top of header\r
-\addtolength{\hoffset}{-0.6cm}         % left margin on page\r
-\addtolength{\topmargin}{[@-- defined($topmargin) ? $topmargin : '-1.00cm' --@]}\r
-\setlength{\headheight}{2.0cm}                 % height of header\r
-\setlength{\headsep}{[@-- defined($headsep) ? $headsep : '1.0cm' --@]}\r
-\setlength{\footskip}{1.0cm}           % bottom of footer from bottom of text\r
-\r
-%\addtolength{\textwidth}{2.1in}       % width of text\r
-\setlength{\textwidth}{19.5cm}\r
-\setlength{\textheight}{[@-- defined($textheight) ? $textheight : '19.5cm' --@]}\r
-\setlength{\oddsidemargin}{-0.9cm}     % odd page left margin\r
-\setlength{\evensidemargin}{-0.9cm}    % even page left margin\r
-\r
-\LTchunksize=40\r
-\r
-\r
-\begin{document}\r
-\r
-\r
-\renewcommand{\headrulewidth}{0pt}\r
-\renewcommand{\footrulewidth}{1pt}\r
-\r
-\renewcommand{\footrule}{\r
-[@--\r
-  $coupon ? '\ifthenelse{\equal{\thepage}{1}}' : '';\r
---@]\r
-  {\r
-  }\r
-  {\r
-    \vbox to 0pt{\rule{\headwidth}{\footrulewidth}\vss}\r
-  }\r
-}\r
-\r
-\newcommand{\extracouponspace}{[@-- defined($extracouponspace) ? $extracouponspace : '2.7in' --@]}\r
-\r
-% Adjust the inset of the mailing address\r
-\newcommand{\addressinset}[1][]{\hspace{1.0cm}}\r
-\r
-% Adjust the inset of the return address and logo\r
-\newcommand{\returninset}[1][]{\hspace{-0.25cm}}\r
-\r
-% New command for address lines i.e. skip them if blank\r
-\newcommand{\addressline}[1]{\ifthenelse{\equal{#1}{}}{}{#1\\}}\r
-\r
-% Inserts dollar symbol\r
-\newcommand{\dollar}[1][]{\symbol{36}}\r
-\r
-% Remove plain style header/footer\r
-\fancypagestyle{plain}{\r
-  \fancyhead{}\r
-}\r
-\fancyhf{}\r
-\r
-% Define fancy header/footer for first and subsequent pages\r
-\fancyfoot[C]{\r
-  \ifthenelse{\equal{\thepage}{1}}\r
-  { % First page\r
-[@--\r
-  if ($coupon) {\r
-    $OUT .= '\vspace{-\extracouponspace}';\r
-    $OUT .= '\rule[0.5em]{\textwidth}{\footrulewidth}\\\\';\r
-    $OUT .= $coupon;\r
-    $OUT .= '\vspace{'.\r
-      (defined($couponfootsep) ? $couponfootsep : '0.2in') .\r
-      '}';\r
-  }\r
-  '';\r
---@] [@-- $smallerfooter ? '\scriptsize{' : '\small{' --@]\r
-[@-- $footer --@]\r
-    }[@-- $coupon ? '\vspace{\extracouponspace}' : '' --@]\r
-  }\r
-  { % ... pages\r
-    [@-- $smallerfooter ? '\scriptsize{' : '\small{' --@]\r
-[@-- $smallfooter --@]\r
-    }\r
-  }\r
-}\r
-\r
-\fancyfoot[R]{\r
-  \ifthenelse{\equal{\thepage}{1}}\r
-  { % First page\r
-  }\r
-  { % ... pages\r
-    \small{\thepage~[@-- emt('of') --@]~\pageref{LastPage}}\r
-  }\r
-}\r
-\r
-\fancyhead[L]{\r
-  \ifthenelse{\equal{\thepage}{1}}\r
-  { % First page\r
-    \returninset\r
-    \makebox{\r
-      \begin{tabular}{ll}\r
-        \begin{minipage}[b]{5.5cm}\r
-[@-- $returnaddress --@]\r
-        \end{minipage} &\r
-        \includegraphics{[@-- $logo_file --@]}\\\r
-      \end{tabular}\r
-    }\r
-  }\r
-  { % ... pages\r
-    %\includegraphics{[@-- $logo_file --@]}    % Uncomment if you want the logo on all pages.\r
-  }\r
-}\r
-\r
-\fancyhead[R]{\r
-  \ifthenelse{\equal{\thepage}{1}}\r
-  { % First page\r
-    \begin{tabular}{ccc}\r
-    [@-- join(' & ', ( $no_date   ? '' : emt('Invoice date') ),\r
-                     ( $no_number ? '' : emt('Invoice #')    ),\r
-                     emt('Customer #')\r
-             )\r
-    --@]\\\r
-    \vspace{0.2cm}\r
-    \textbf{[@-- $date --@]} & \textbf{[@-- $invnum --@]} & \textbf{[@-- $custnum --@]} \\\hline\r
-    \rule{0pt}{5ex} &~~ \huge{\textsc{[@-- emt($notice_name) --@]}} & \\\r
-    \vspace{-0.2cm}\r
-     & & \\\hline\r
-    \end{tabular}\r
-  }\r
-  { % ... pages\r
-    \small{\r
-      \begin{tabular}{lll}\r
-      [@-- join(' & ', emt('Invoice date'), emt('Invoice #'), emt('Customer #') ) --@]\\\r
-      \textbf{[@-- $date --@]} & \textbf{[@-- $invnum --@]} & \textbf{[@-- $custnum --@]}\\\r
-      \end{tabular}\r
-    }\r
-  }\r
-}\r
-\r
-\pagestyle{fancy}\r
-\r
-\r
-%% Font options are:\r
-%%     bch     Bitsream Charter\r
-%%     put     Utopia\r
-%%     phv     Adobe Helvetica\r
-%%     pnc     New Century Schoolbook\r
-%%     ptm     Times\r
-%%     pcr     Courier\r
-\r
-\renewcommand{\familydefault}{phv}\r
-\r
-\r
-% Commands for freeside table header...\r
-\r
-\newcommand{\FSdescriptionlength} { [@-- $unitprices ? '8.2cm' : '12.8cm' --@] }\r
-\newcommand{\FSdescriptioncolumncount} { [@-- $unitprices ? '4' : '6' --@] }\r
-\newcommand{\FSunitcolumns}{ [@-- \r
-  $unitprices\r
-  ? '\makebox[2.5cm][r]{\textbf{~~' . emt('Unit Price') . '}} &' .\r
-    '\makebox[1.4cm]{\textbf{~' . emt('Quantity') . '}} & ' \r
-  : '' --@] }\r
-\r
-\newcommand{\FShead}{\r
-  \hline\r
-  \rule{0pt}{2.5ex}\r
-  \makebox[1.4cm]{} &\r
-  \multicolumn{\FSdescriptioncolumncount}{l}{\r
-    \truncate{\FSdescriptionlength}{\textbf{[@-- emt('Description') --@]}}\r
-  } &\r
-  \FSunitcolumns\r
-  \makebox[1.6cm][r]{\textbf{[@-- emt('Amount') --@]}} \\\r
-  \hline\r
-}\r
-\r
-\newcommand{\FSusagehead}{\r
-  \hline\r
-  \rule{0pt}{2.5ex}\r
-  \makebox[1.4cm]{} &\r
-  \multicolumn{4}{l}{\r
-    \truncate{\FSdescriptionlength}{\textbf{[@-- emt('Description') --@]}}\r
-  } &\r
-  \textbf{~~[@-- emt('Calls') --@]} &\r
-  \textbf{~~[@-- emt('Duration') --@]} &\r
-  \textbf{~~[@-- emt('Amount') --@]} \\\r
-  \hline\r
-}\r
-\r
-% ...description...\r
-\newcommand{\FSdesc}[5]{\r
-  \multicolumn{1}{c}{\rule{0pt}{2.5ex}\textbf{#1}} &\r
-  \multicolumn{[@-- $unitprices ? '4' : '6' --@]}{l}{\r
-    \truncate{\FSdescriptionlength}{\textbf{#2}}\r
-  } &\r
-[@-- $unitprices ? '  \multicolumn{1}{r}{\textbf{#3}} &'."\n".\r
-                   '  \multicolumn{1}{r}{\textbf{#4}} &'."\n"\r
-                 : ''\r
---@]\r
-  \multicolumn{1}{r}{\textbf{#5}}\\\r
-}\r
-% ...extended description...\r
-\newcommand{\FSextdesc}[1]{\r
-  \multicolumn{1}{l}{\rule{0pt}{1.0ex}} &\r
-  \multicolumn{6}{l}{\r
-    \truncate{12.8cm}{\small{~~~#1}}\r
-  } \\\r
-}\r
-% ...call detail (multiple columns already)...\r
-\newcommand{\FScalldetail}[1]{\r
-  \multicolumn{1}{l}{\rule{0pt}{1.0ex}} &\r
-  ~~~#1\r
-  \\\r
-}\r
-}\r
-% ...and total line items (which use the full 12.8cm length, ignoring\r
-% unitprice/quantity\r
-\newcommand{\FStotaldesc}[2]{\r
-  & \multicolumn{6}{l}{\r
-    \truncate{12.8cm}{#1}\r
-  } & #2\\\r
-}\r
-\r
-% ...usage class summary\r
-\newcommand{\FSusagedesc}[4]{\r
-  \multicolumn{1}{c}{\rule{0pt}{2.5ex}} &\r
-  \multicolumn{4}{l}{\textbf{#1}} &\r
-  \multicolumn{1}{r}{\textbf{#2}} &\r
-  \multicolumn{1}{r}{\textbf{#3}} &\r
-  \multicolumn{1}{r}{\textbf{#4}}\r
-  \\\r
-}\r
-\r
-%      Headers and footers defined for the first page\r
-\addressinset \rule{0.5cm}{0cm} \r
-\makebox{\r
-\begin{minipage}[t]{7.0cm}\r
-\vspace{[@-- defined($addresssep) ? $addresssep : '0.25cm' --@]}\r
-\textbf{[@-- $payname --@]}\\\r
-\addressline{[@-- $company --@]}\r
-\addressline{[@-- $address1 --@]}\r
-\addressline{[@-- $address2 --@]}\r
-\addressline{[@-- $city --@], [@-- $state --@]~~[@-- $zip --@]}\r
-\addressline{[@-- $country --@]}\r
-\end{minipage}}\r
-\hfill\r
-\makebox{\r
-\begin{minipage}[t]{6.4cm}\r
-[@--\r
-  if ($ship_enable) {\r
-    $OUT .= '\textbf{' . emt('Service Address') . '}\\\\';\r
-    $OUT .= "\\addressline{$ship_company}";\r
-    $OUT .= "\\addressline{$ship_address1}";\r
-    $OUT .= "\\addressline{$ship_address2}";\r
-    $OUT .= "\\addressline{$ship_city, $ship_state~~$ship_zip}";\r
-    $OUT .= "\\addressline{$ship_country}";\r
-    $OUT .= '~\\\\';\r
-  }else{\r
-    $OUT .= '';\r
-  }\r
---@]\r
-\begin{flushright}\r
-[@-- $terms ? emt('Terms') . ': ' . emt($terms) : '' --@]\\\r
-[@-- $po_line --@]\\\r
-\end{flushright}\r
-\end{minipage}}\r
-\vspace{1.5cm}\r
-%\r
-[@-- $summary --@]\r
-%\r
-\section*{}\r
-[@--\r
-  foreach my $section ( grep { !$summary || $_->{description} ne $finance_section } @sections ) {\r
-    if ($section->{'pretotal'} && !$summary) {\r
-      $OUT .= '\begin{flushright}';\r
-      $OUT .= '\large\textsc{'. $section->{'pretotal'}. '}\\\\';\r
-      $OUT .= '\\end{flushright}';\r
-    }\r
-    $OUT .= '\pagebreak' if $section->{'post_total'};\r
-    unless ($section->{'summarized'} ) {\r
-      $OUT .= '\captionsetup{singlelinecheck=false,justification=raggedright,font={Large,sc,bf}}';\r
-      $OUT .= '\ifthenelse{\equal{\thepage}{1}}{\setlength{\LTextracouponspace}{\extracouponspace}}{\setlength{\LTextracouponspace}{0pt}}'\r
-        if $coupon;\r
-      $OUT .= '\begin{longtable}{cllllllr}';\r
-      $OUT .= '\caption*{ ';\r
-      if ($section->{'location'}) {\r
-        $OUT .= $section->{'location'}{'label_prefix'}. ': '\r
-          if length($section->{'location'}{'label_prefix'});\r
-        $OUT .= $section->{'location'}{'address1'};\r
-        $OUT .= ', ' . $section->{'location'}{'address2'}\r
-          if length($section->{'location'}{'address2'});\r
-        $OUT .= ', ' .\r
-                $section->{'location'}{'city'} . ', ' .\r
-                $section->{'location'}{'state'} . '~' .\r
-                $section->{'location'}{'zip'};\r
-      } elsif ( $section->{'description'} ) {\r
-        $OUT .= ($section->{'description'});\r
-      } else {\r
-        $OUT .= emt('Charges');\r
-      }\r
-      $OUT .= '}\\\\';\r
-      if ($section->{header_generator}) {\r
-        $OUT .= &{$section->{header_generator}}();\r
-      } elsif ( $section->{usage_section} ) {\r
-        $OUT .= '\FSusagehead';\r
-      } else {\r
-        $OUT .= '\FShead';\r
-      }\r
-      $OUT .= '\endfirsthead';\r
-      $OUT .= '\multicolumn{7}{r}{\rule{0pt}{2.5ex}'.emt('Continued from previous page').'}\\\\';\r
-      if ($section->{header_generator}) {\r
-        $OUT .= &{$section->{header_generator}}();\r
-      } elsif ( $section->{usage_section} ) {\r
-        $OUT .= '\FSusagehead';\r
-      } else {\r
-        $OUT .= '\FShead';\r
-      }\r
-      $OUT .= '\endhead';\r
-      $OUT .= '\multicolumn{7}{r}{\rule{0pt}{2.5ex}'.emt('Continued on next page...').'}\\\\';\r
-      $OUT .= '\endfoot';\r
-      $OUT .= '\hline';\r
-\r
-      if (scalar(@sections) > 1 and !$section->{no_subtotal}) {\r
-        if ($section->{total_generator}) {\r
-          $OUT .= &{$section->{total_generator}}($section);\r
-        } else {\r
-          $OUT .= '\FStotaldesc{' . $section->{'description'} . ' Total}' .\r
-                  '{' . $section->{'subtotal'} . '}' . "\n";\r
-        }\r
-      }\r
-\r
-      #if ($section == $sections[$#sections]) {\r
-        foreach my $line (grep {$_->{section}->{description} eq $section->{description}} @total_items) {\r
-          if ($section->{total_line_generator}) {\r
-            $OUT .= &{$section->{total_line_generator}}($line);\r
-          } else {\r
-            $OUT .= '\FStotaldesc{' . $line->{'total_item'} . '}' .\r
-                    '{' . $line->{'total_amount'} . '}' . "\n";\r
-          }\r
-        }\r
-      #}\r
-\r
-      $OUT .= '\hline';\r
-      $OUT .= '\endlastfoot';\r
-\r
-      my $lastref = 0;\r
-      foreach my $line (\r
-        grep { ( scalar( @sections ) > 1 \r
-               ? $section->{'description'} eq $_->{'section'}->{'description'}\r
-               : 1\r
-             ) }\r
-        @detail_items )\r
-      {\r
-        my $ext_description = $line->{'ext_description'};\r
-  \r
-        # Don't break-up small packages.\r
-        my $rowbreak = @$ext_description < 5 ? '*' : '';\r
-  \r
-        $OUT .= "\\hline\n" if (($line->{'ref'} || 0) ne $lastref);\r
-        if ($section->{description_generator}) {\r
-          $OUT .= &{$section->{description_generator}}($line);\r
-        } elsif ($section->{usage_section}) {\r
-          my $minutes = sprintf('%d', $line->{'duration'} / 60);\r
-          my $seconds = $line->{'duration'} % 60;\r
-          $OUT .= '\FSusagedesc\r
-            {' . $line->{'description'} . '}\r
-            {' . $line->{'quantity'} . '}\r
-            {' . $minutes . 'm ' . $seconds . 's' . '}\r
-            {' . $line->{'amount'} . '}';\r
-        } else {\r
-          $OUT .= '\FSdesc'.\r
-                  '{}'.\r
-                  '{' . $line->{'description'} . '}' ;\r
-          if ( $unitprices and length($line->{'unit_amount'}) ) {\r
-            # then show the unit amount and quantity\r
-            $OUT .= \r
-                '{\\dollar' . $line->{'unit_amount'} . '}'.\r
-                '{'         . $line->{'quantity'}    . '}';\r
-          } else {\r
-            # leave those columns blank\r
-            $OUT .= '{}{}';\r
-          }\r
-          $OUT .= '{\\dollar' . $line->{'amount'} . "}${rowbreak}\n";\r
-        }\r
-        $lastref = $line->{'ref'} || 0;\r
-\r
-        foreach my $ext_desc (@$ext_description) {\r
-          if ($section->{extended_description_generator}) {\r
-            $OUT .= &{$section->{extended_description_generator}}($ext_desc);\r
-          } elsif ( $ext_desc !~ /[^\\]&/ ) {\r
-            $OUT .= '\FSextdesc{' . $ext_desc . "}$rowbreak\n";\r
-          } else { # call detail\r
-            $OUT .= '\FScalldetail{' . $ext_desc . "}$rowbreak\n";\r
-          }\r
-        }\r
-\r
-      }\r
-\r
-      $OUT .= '\end{longtable}';\r
-    }\r
-    if ($section->{'posttotal'}) {\r
-      $OUT .= '\begin{flushright}';\r
-      $OUT .= '\normalfont\large\bfseries\textsc{'. $section->{'posttotal'}. '}\\\\';\r
-      $OUT .= '\\end{flushright}';\r
-    }\r
-  }\r
-\r
---@]\r
-[@--\r
-\r
-  my @location_summary_sections =\r
-    grep {\r
-      ref $_->{location}\r
-      && $_->{locationnum}\r
-      && $_->{description}\r
-      && $_->{description} ne $finance_section\r
-    } @sections;\r
-  if ( $multisection eq 'location' && scalar(@location_summary_sections) > 1 ) {\r
-\r
-$OUT .= '\r
-      \hline\r
-      \section*{}\r
-      \captionsetup{singlelinecheck=false,justification=raggedright,font={Large,sc,bf}}\r
-      \ifthenelse{\equal{\thepage}{1}}{\setlength{\LTextracouponspace}{\extracouponspace}}{\setlength{\LTextracouponspace}{0pt}}\r
-\r
-      \begin{longtable}{cllllllr}\r
-      \caption*{ '. emt('Summary of New Charges by Location') .' }\r
-      \\\\\r
-\r
-      \hline\r
-      \rule{0pt}{2.5ex}\r
-      \makebox[1.4cm]{} &\r
-      \multicolumn{6}{l}{\r
-        \truncate{13.0cm}{\textbf{'. emt('Location') .'}}\r
-      } &\r
-      \makebox[1.6cm][r]{\textbf{'. emt('Amount') .'}} \\\\\r
-      \hline\r
-\r
-      \endfirsthead\r
-      \multicolumn{7}{r}{\rule{0pt}{2.5ex}'. emt('Continued from previous page') .'}\r
-      \\\r
-      \FShead\r
-      \endhead\r
-      \multicolumn{7}{r}{\rule{0pt}{2.5ex}'. emt('Continued on next page...') .'}\r
-      \\\r
-      \endfoot\r
-      \hline\r
-      \endlastfoot\r
-      \hline\r
-    ';\r
-\r
-    for my $section (@location_summary_sections) {\r
-      $OUT.= '\r
-        \rule{0pt}{2.5ex}\r
-        \makebox[1.4cm]{} &\r
-        \multicolumn{6}{l}{\r
-          \truncate{12.0cm}{\textbf{'. $section->{description} .'}}\r
-        } &\r
-        \makebox[1.6cm][r]{\textbf{'. $section->{subtotal} .'}} \\\\\r
-      ';\r
-    }\r
-\r
-    $OUT .= '\end{longtable}';\r
-  }\r
---@]\r
-\r
-\vfill\r
-\begin{minipage}[t]{\textwidth}\r
-  [@-- length($summary)\r
-         ? ''\r
-        : ( $smallernotes\r
-              ? '\scriptsize{ '.$notes.' }'\r
-              : $notes\r
-          )\r
-  --@]\r
-  [@-- $coupon ? '\ifthenelse{\equal{\thepage}{1}}{\rule{0pt}{\extracouponspace}}{}' : '' --@]\r
-\end{minipage}\r
-\end{document}\r
+%% file: Standard Multipage.tex
+%% Purpose: Multipage bill template for e-Bills
+%%
+%% Created by Mark Asplen-Taylor
+%% Asplen Management Ltd
+%% www.asplen.co.uk
+%%
+%% Modified for Freeside by Kristian Hoffman
+%%
+%% Changes
+%%     0.1     4/12/00 Created
+%%     0.2     18/10/01        More fields added
+%%     1.0     16/11/01        RELEASED
+%%     1.2     16/10/02        Invoice number added
+%%     1.3     2/12/02 Logo graphic added
+%%     1.4     7/2/03  Multipage headers/footers added
+%%      n/a     forked for Freeside; checked into CVS
+%%      12/04/18  added support for coupon placement, top or bottom of page
+
+\documentclass[letterpaper]{article}
+
+\usepackage{fancyhdr,lastpage,ifthen,array,longtable,afterpage,caption,multirow,bigstrut}
+\usepackage[breakwords]{truncate} % to avoid overflowing boxes
+\usepackage{graphicx}                  % required for logo graphic
+\usepackage[utf8]{inputenc}             % multilanguage support
+\usepackage[T1]{fontenc}
+[@-- if ( length($watermark) ) {
+  $OUT .= '
+\usepackage{background}
+\backgroundsetup{
+  placement=center,
+  opacity=0.25,
+  color=black,
+  angle=0,
+  contents=' . $watermark . '
+}';
+}
+'';
+--@]
+
+\catcode`\{=1
+\catcode`\}=2
+\special{ps:%
+  SDict begin [
+    /Title (Invoice \#[@-- $invnum --@])
+    /DOCINFO pdfmark
+  end
+}
+\end
+
+\newcommand{\extracouponspace}{[@-- defined($extracouponspace) ? $extracouponspace : '2.7in' --@]}
+
+\addtolength{\voffset}{-0.0cm}         % top margin to top of header
+\addtolength{\hoffset}{-0.6cm}         % left margin on page
+\addtolength{\topmargin}{[@-- defined($topmargin) ? $topmargin : '-1.00cm' --@]}
+\setlength{\headheight}{2.0cm}                 % height of header
+[@-- if ($coupon && $couponlocation eq "top") { '\addtolength{\headheight}{\extracouponspace}'; } --@] % add coupon space to header
+\setlength{\headsep}{[@-- defined($headsep) ? $headsep : '1.0cm' --@]}
+\setlength{\footskip}{1.0cm}           % bottom of footer from bottom of text
+
+%\addtolength{\textwidth}{2.1in}       % width of text
+\setlength{\textwidth}{19.5cm}
+\setlength{\textheight}{[@-- defined($textheight) ? $textheight : '19.5cm' --@]}
+\setlength{\oddsidemargin}{-0.9cm}     % odd page left margin
+\setlength{\evensidemargin}{-0.9cm}    % even page left margin
+
+\LTchunksize=40
+
+
+\begin{document}
+
+
+\renewcommand{\headrulewidth}{0pt}
+\renewcommand{\footrulewidth}{1pt}
+
+[@--
+  if ($couponlocation eq "top") {
+   if ($coupon) {
+    '\makeatletter
+     \newcommand\ifpageone{
+      \ifnum\value{page}=1
+       \expandafter\@firstoftwo
+      \else
+       \expandafter\@secondoftwo
+      \fi}
+     \makeatother';
+   }
+  }
+  else {
+   '\renewcommand{\footrule}{\ifthenelse{\equal{\thepage}{1}}{}{ \vbox to 0pt{\rule{\headwidth}{\footrulewidth}\vss} } }';
+  }
+--@]
+
+% Adjust the inset of the mailing address
+\newcommand{\addressinset}[1][]{\hspace{1.0cm}}
+
+% Adjust the inset of the return address and logo
+\newcommand{\returninset}[1][]{\hspace{-0.25cm}}
+
+% New command for address lines i.e. skip them if blank
+\newcommand{\addressline}[1]{\ifthenelse{\equal{#1}{}}{}{#1\\}}
+
+% Inserts dollar symbol
+\newcommand{\dollar}[1][]{\symbol{36}}
+
+% Remove plain style header/footer
+\fancypagestyle{plain}{
+  \fancyhead{}
+}
+\fancyhf{}
+
+% Define fancy header/footer for first and subsequent pages
+\fancyfoot[C]{
+\ifpageone{\global\setlength\headheight{2cm}}
+  \ifthenelse{\equal{\thepage}{1}}
+  { % First page
+[@--
+  if ($coupon && $couponlocation eq "bottom") {
+    $OUT .= '\vspace{-\extracouponspace}';
+    $OUT .= '\rule[0.5em]{\textwidth}{\footrulewidth}\\\\';
+    $OUT .= $coupon;
+    $OUT .= '\vspace{'.
+      (defined($couponfootsep) ? $couponfootsep : '0.2in') .
+      '}';
+  }
+  '';
+--@] [@-- $smallerfooter ? '\scriptsize{' : '\small{' --@]
+[@-- $footer --@]
+    }[@-- ($coupon && $couponlocation eq "bottom") ? '\vspace{\extracouponspace}' : '' --@]
+  }
+  { % ... pages
+    [@-- $smallerfooter ? '\scriptsize{' : '\small{' --@]
+[@-- $smallfooter --@]
+    }
+  }
+}
+
+\fancyfoot[R]{
+  \ifthenelse{\equal{\thepage}{1}}
+  { % First page
+  }
+  { % ... pages
+    \small{\thepage~[@-- emt('of') --@]~\pageref{LastPage}}
+  }
+}
+
+\fancyhead[L]{
+  \ifthenelse{\equal{\thepage}{1}}
+  { % First page
+[@--
+  if ($coupon && $couponlocation eq "top") {
+    $OUT .= '\vspace{-\extracouponspace}';
+    $OUT .= $coupon;
+    $OUT .= '\rule[0.5em]{\textwidth}{\footrulewidth}\\\\';
+    $OUT .= '\vspace{'.
+      (defined($couponfootsep) ? $couponfootsep : '0.2in') .
+      '}';
+  }
+--@]\returninset
+    \makebox{
+      \begin{tabular}{ll}
+        \begin{minipage}[b]{5.5cm}
+[@-- $returnaddress --@]
+        \end{minipage} &
+        \includegraphics{[@-- $logo_file --@]}\\
+      \end{tabular}
+    }
+  }
+  { % ... pages
+    %\includegraphics{[@-- $logo_file --@]}    % Uncomment if you want the logo on all pages.
+  }
+}
+
+\fancyhead[R]{
+  \ifthenelse{\equal{\thepage}{1}}
+  { % First page
+    \begin{tabular}{ccc}
+    [@-- join(' & ', ( $no_date   ? '' : emt('Invoice date') ),
+                     ( $no_number ? '' : emt('Invoice #')    ),
+                     emt('Customer #')
+             )
+    --@]\\
+    \vspace{0.2cm}
+    \textbf{[@-- $date --@]} & \textbf{[@-- $invnum --@]} & \textbf{[@-- $custnum --@]} \\\hline
+    \rule{0pt}{5ex} &~~ \huge{\textsc{[@-- emt($notice_name) --@]}} & \\
+    \vspace{-0.2cm}
+     & & \\\hline
+    \end{tabular}
+  }
+  { % ... pages
+    \small{
+      \begin{tabular}{lll}
+      [@-- join(' & ', emt('Invoice date'), emt('Invoice #'), emt('Customer #') ) --@]\\
+      \textbf{[@-- $date --@]} & \textbf{[@-- $invnum --@]} & \textbf{[@-- $custnum --@]}\\
+      \end{tabular}
+    }
+  }
+}
+
+\pagestyle{fancy}
+
+
+%% Font options are:
+%%     bch     Bitsream Charter
+%%     put     Utopia
+%%     phv     Adobe Helvetica
+%%     pnc     New Century Schoolbook
+%%     ptm     Times
+%%     pcr     Courier
+
+\renewcommand{\familydefault}{phv}
+
+
+% Commands for freeside table header...
+
+\newcommand{\FSdescriptionlength} { [@-- $unitprices ? '8.2cm' : '12.8cm' --@] }
+\newcommand{\FSdescriptioncolumncount} { [@-- $unitprices ? '4' : '6' --@] }
+\newcommand{\FSunitcolumns}{ [@--
+  $unitprices
+  ? '\makebox[2.5cm][r]{\textbf{~~' . emt('Unit Price') . '}} &' .
+    '\makebox[1.4cm]{\textbf{~' . emt('Quantity') . '}} & '
+  : '' --@] }
+
+\newcommand{\FShead}{
+  \hline
+  \rule{0pt}{2.5ex}
+  \makebox[1.4cm]{} &
+  \multicolumn{\FSdescriptioncolumncount}{l}{
+    \truncate{\FSdescriptionlength}{\textbf{[@-- emt('Description') --@]}}
+  } &
+  \FSunitcolumns
+  \makebox[1.6cm][r]{\textbf{[@-- emt('Amount') --@]}} \\
+  \hline
+}
+
+\newcommand{\FSusagehead}{
+  \hline
+  \rule{0pt}{2.5ex}
+  \makebox[1.4cm]{} &
+  \multicolumn{4}{l}{
+    \truncate{\FSdescriptionlength}{\textbf{[@-- emt('Description') --@]}}
+  } &
+  \textbf{~~[@-- emt('Calls') --@]} &
+  \textbf{~~[@-- emt('Duration') --@]} &
+  \textbf{~~[@-- emt('Amount') --@]} \\
+  \hline
+}
+
+% ...description...
+\newcommand{\FSdesc}[5]{
+  \multicolumn{1}{c}{\rule{0pt}{2.5ex}\textbf{#1}} &
+  \multicolumn{[@-- $unitprices ? '4' : '6' --@]}{l}{
+    \truncate{\FSdescriptionlength}{\textbf{#2}}
+  } &
+[@-- $unitprices ? '  \multicolumn{1}{r}{\textbf{#3}} &'."\n".
+                   '  \multicolumn{1}{r}{\textbf{#4}} &'."\n"
+                 : ''
+--@]
+  \multicolumn{1}{r}{\textbf{#5}}\\
+}
+% ...extended description...
+\newcommand{\FSextdesc}[1]{
+  \multicolumn{1}{l}{\rule{0pt}{1.0ex}} &
+  \multicolumn{6}{l}{
+    \truncate{12.8cm}{\small{~~~#1}}
+  } \\
+}
+% ...call detail (multiple columns already)...
+\newcommand{\FScalldetail}[1]{
+  \multicolumn{1}{l}{\rule{0pt}{1.0ex}} &
+  ~~~#1
+  \\
+}
+}
+% ...and total line items (which use the full 12.8cm length, ignoring
+% unitprice/quantity
+\newcommand{\FStotaldesc}[2]{
+  & \multicolumn{6}{l}{
+    \truncate{12.8cm}{#1}
+  } & #2\\
+}
+
+% ...usage class summary
+\newcommand{\FSusagedesc}[4]{
+  \multicolumn{1}{c}{\rule{0pt}{2.5ex}} &
+  \multicolumn{4}{l}{\textbf{#1}} &
+  \multicolumn{1}{r}{\textbf{#2}} &
+  \multicolumn{1}{r}{\textbf{#3}} &
+  \multicolumn{1}{r}{\textbf{#4}}
+  \\
+}
+
+%      Headers and footers defined for the first page
+\addressinset \rule{0.5cm}{0cm}
+\makebox{
+\begin{minipage}[t]{7.0cm}
+\vspace{[@-- defined($addresssep) ? $addresssep : '0.25cm' --@]}
+\textbf{[@-- $payname --@]}\\
+\addressline{[@-- $company --@]}
+\addressline{[@-- $address1 --@]}
+\addressline{[@-- $address2 --@]}
+\addressline{[@-- $city --@], [@-- $state --@]~~[@-- $zip --@]}
+\addressline{[@-- $country --@]}
+\end{minipage}}
+\hfill
+\makebox{
+\begin{minipage}[t]{6.4cm}
+[@--
+  if ($ship_enable) {
+    $OUT .= '\textbf{' . emt('Service Address') . '}\\\\';
+    $OUT .= "\\addressline{$ship_company}";
+    $OUT .= "\\addressline{$ship_address1}";
+    $OUT .= "\\addressline{$ship_address2}";
+    $OUT .= "\\addressline{$ship_city, $ship_state~~$ship_zip}";
+    $OUT .= "\\addressline{$ship_country}";
+    $OUT .= '~\\\\';
+  }else{
+    $OUT .= '';
+  }
+--@]
+\begin{flushright}
+[@-- $terms ? emt('Terms') . ': ' . emt($terms) : '' --@]\\
+[@-- $po_line --@]\\
+\end{flushright}
+\end{minipage}}
+\vspace{1.5cm}
+%
+[@-- $summary --@]
+%
+\section*{}
+[@--
+  foreach my $section ( grep { !$summary || $_->{description} ne $finance_section } @sections ) {
+    if ($section->{'pretotal'} && !$summary) {
+      $OUT .= '\begin{flushright}';
+      $OUT .= '\large\textsc{'. $section->{'pretotal'}. '}\\\\';
+      $OUT .= '\\end{flushright}';
+    }
+    $OUT .= '\pagebreak' if $section->{'post_total'};
+    unless ($section->{'summarized'} ) {
+      $OUT .= '\captionsetup{singlelinecheck=false,justification=raggedright,font={Large,sc,bf}}';
+      $OUT .= '\ifthenelse{\equal{\thepage}{1}}{\setlength{\LTextracouponspace}{\extracouponspace}}{\setlength{\LTextracouponspace}{0pt}}'
+        if $coupon;
+      $OUT .= '\begin{longtable}{cllllllr}';
+      $OUT .= '\caption*{ ';
+      if ($section->{'location'}) {
+        $OUT .= $section->{'location'}{'label_prefix'}. ': '
+          if length($section->{'location'}{'label_prefix'});
+        $OUT .= $section->{'location'}{'address1'};
+        $OUT .= ', ' . $section->{'location'}{'address2'}
+          if length($section->{'location'}{'address2'});
+        $OUT .= ', ' .
+                $section->{'location'}{'city'} . ', ' .
+                $section->{'location'}{'state'} . '~' .
+                $section->{'location'}{'zip'};
+      } elsif ( $section->{'description'} ) {
+        $OUT .= ($section->{'description'});
+      } else {
+        $OUT .= emt('Charges');
+      }
+      $OUT .= '}\\\\';
+      if ($section->{header_generator}) {
+        $OUT .= &{$section->{header_generator}}();
+      } elsif ( $section->{usage_section} ) {
+        $OUT .= '\FSusagehead';
+      } else {
+        $OUT .= '\FShead';
+      }
+      $OUT .= '\endfirsthead';
+      $OUT .= '\multicolumn{7}{r}{\rule{0pt}{2.5ex}'.emt('Continued from previous page').'}\\\\';
+      if ($section->{header_generator}) {
+        $OUT .= &{$section->{header_generator}}();
+      } elsif ( $section->{usage_section} ) {
+        $OUT .= '\FSusagehead';
+      } else {
+        $OUT .= '\FShead';
+      }
+      $OUT .= '\endhead';
+      $OUT .= '\multicolumn{7}{r}{\rule{0pt}{2.5ex}'.emt('Continued on next page...').'}\\\\';
+      $OUT .= '\endfoot';
+      $OUT .= '\hline';
+
+      if (scalar(@sections) > 1 and !$section->{no_subtotal}) {
+        if ($section->{total_generator}) {
+          $OUT .= &{$section->{total_generator}}($section);
+        } else {
+          $OUT .= '\FStotaldesc{' . $section->{'description'} . ' Total}' .
+                  '{' . $section->{'subtotal'} . '}' . "\n";
+        }
+      }
+
+      #if ($section == $sections[$#sections]) {
+        foreach my $line (grep {$_->{section}->{description} eq $section->{description}} @total_items) {
+          if ($section->{total_line_generator}) {
+            $OUT .= &{$section->{total_line_generator}}($line);
+          } else {
+            $OUT .= '\FStotaldesc{' . $line->{'total_item'} . '}' .
+                    '{' . $line->{'total_amount'} . '}' . "\n";
+          }
+        }
+      #}
+
+      $OUT .= '\hline';
+      $OUT .= '\endlastfoot';
+
+      my $lastref = 0;
+      foreach my $line (
+        grep { ( scalar( @sections ) > 1
+               ? $section->{'description'} eq $_->{'section'}->{'description'}
+               : 1
+             ) }
+        @detail_items )
+      {
+        my $ext_description = $line->{'ext_description'};
+
+        # Don't break-up small packages.
+        my $rowbreak = @$ext_description < 5 ? '*' : '';
+
+        $OUT .= "\\hline\n" if (($line->{'ref'} || 0) ne $lastref);
+        if ($section->{description_generator}) {
+          $OUT .= &{$section->{description_generator}}($line);
+        } elsif ($section->{usage_section}) {
+          my $minutes = sprintf('%d', $line->{'duration'} / 60);
+          my $seconds = $line->{'duration'} % 60;
+          $OUT .= '\FSusagedesc
+            {' . $line->{'description'} . '}
+            {' . $line->{'quantity'} . '}
+            {' . $minutes . 'm ' . $seconds . 's' . '}
+            {' . $line->{'amount'} . '}';
+        } else {
+          $OUT .= '\FSdesc'.
+                  '{}'.
+                  '{' . $line->{'description'} . '}' ;
+          if ( $unitprices and length($line->{'unit_amount'}) ) {
+            # then show the unit amount and quantity
+            $OUT .=
+                '{\\dollar' . $line->{'unit_amount'} . '}'.
+                '{'         . $line->{'quantity'}    . '}';
+          } else {
+            # leave those columns blank
+            $OUT .= '{}{}';
+          }
+          $OUT .= '{\\dollar' . $line->{'amount'} . "}${rowbreak}\n";
+        }
+        $lastref = $line->{'ref'} || 0;
+
+        foreach my $ext_desc (@$ext_description) {
+          if ($section->{extended_description_generator}) {
+            $OUT .= &{$section->{extended_description_generator}}($ext_desc);
+          } elsif ( $ext_desc !~ /[^\\]&/ ) {
+            $OUT .= '\FSextdesc{' . $ext_desc . "}$rowbreak\n";
+          } else { # call detail
+            $OUT .= '\FScalldetail{' . $ext_desc . "}$rowbreak\n";
+          }
+        }
+
+      }
+
+      $OUT .= '\end{longtable}';
+    }
+    if ($section->{'posttotal'}) {
+      $OUT .= '\begin{flushright}';
+      $OUT .= '\normalfont\large\bfseries\textsc{'. $section->{'posttotal'}. '}\\\\';
+      $OUT .= '\\end{flushright}';
+    }
+  }
+
+--@]
+[@--
+
+  my @location_summary_sections =
+    grep {
+      ref $_->{location}
+      && $_->{locationnum}
+      && $_->{description}
+      && $_->{description} ne $finance_section
+    } @sections;
+  if ( $multisection eq 'location' && scalar(@location_summary_sections) > 1 ) {
+
+$OUT .= '
+      \hline
+      \section*{}
+      \captionsetup{singlelinecheck=false,justification=raggedright,font={Large,sc,bf}}
+      \ifthenelse{\equal{\thepage}{1}}{\setlength{\LTextracouponspace}{\extracouponspace}}{\setlength{\LTextracouponspace}{0pt}}
+
+      \begin{longtable}{cllllllr}
+      \caption*{ '. emt('Summary of New Charges by Location') .' }
+      \\\\
+
+      \hline
+      \rule{0pt}{2.5ex}
+      \makebox[1.4cm]{} &
+      \multicolumn{6}{l}{
+        \truncate{13.0cm}{\textbf{'. emt('Location') .'}}
+      } &
+      \makebox[1.6cm][r]{\textbf{'. emt('Amount') .'}} \\\\
+      \hline
+
+      \endfirsthead
+      \multicolumn{7}{r}{\rule{0pt}{2.5ex}'. emt('Continued from previous page') .'}
+      \\
+      \FShead
+      \endhead
+      \multicolumn{7}{r}{\rule{0pt}{2.5ex}'. emt('Continued on next page...') .'}
+      \\
+      \endfoot
+      \hline
+      \endlastfoot
+      \hline
+    ';
+
+    for my $section (@location_summary_sections) {
+      $OUT.= '
+        \rule{0pt}{2.5ex}
+        \makebox[1.4cm]{} &
+        \multicolumn{6}{l}{
+          \truncate{12.0cm}{\textbf{'. $section->{description} .'}}
+        } &
+        \makebox[1.6cm][r]{\textbf{'. $section->{subtotal} .'}} \\\\
+      ';
+    }
+
+    $OUT .= '\end{longtable}';
+  }
+--@]
+
+\vfill
+\begin{minipage}[t]{\textwidth}
+  [@-- length($summary)
+         ? ''
+        : ( $smallernotes
+              ? '\scriptsize{ '.$notes.' }'
+              : $notes
+          )
+  --@]
+  [@-- $coupon ? '\ifthenelse{\equal{\thepage}{1}}{\rule{0pt}{\extracouponspace}}{}' : '' --@]
+\end{minipage}
+\end{document}
index 2380226..8616481 100644 (file)
@@ -1,37 +1,38 @@
-Detach and return this remittance form with your payment.\\\r
-\begin{tabular}{ll}\r
-\begin{tabular}{ll}\r
-\returninset\r
-\begin{tabular}{ll}\r
-  \makebox{ \includegraphics{[@-- $logo_file --@]}} & [@-- $verticalreturnaddress ? '\\\\' : '' --@]\r
-  \begin{minipage}[b]{5.5cm}\r
-[@-- $returnaddress --@]\r
-    \end{minipage}\\\r
-\end{tabular}&\r
-\begin{tabular}{r@{: }lr}\r
-Invoice date & \textbf{[@-- $date --@]} & \multirow{4}*{[@-- $verticalreturnaddress ? '\\rule{1.5cm}{0cm}' : '' --@]\r
-\makebox{\r
-\begin{minipage}[t]{7.0cm}\r
-\textbf{[@-- $payname --@]}\\\r
-\addressline{[@-- $company --@]}\r
-\addressline{[@-- $address1 --@]}\r
-\addressline{[@-- $address2 --@]}\r
-\addressline{[@-- $city --@], [@-- $state --@]~~[@-- $zip --@]}\r
-\addressline{[@-- $country --@]}\r
-[@-- $barcode_file ? '\\\\ \includegraphics{'.$barcode_file.'}' : "\\" --@]\r
-\end{minipage}}}\\\r
-Customer\#& \textbf{[@-- $custnum --@]} & \\\r
-Total Due & \textbf{[@-- $balance --@]} & \\\r
-\rule{0pt}{[@-- defined($amountenclosedsep) ? $amountenclosedsep : '2.25em' --@]}Amount Enclosed & \rule{2cm}{1pt}& \\\r
-\end{tabular}\\\r
-\rule{0pt}{[@-- defined($coupontoaddresssep) ? $coupontoaddresssep : '1in' --@]} &\\\r
-\end{tabular}\\\r
-\begin{tabular}{ll}\r
-\addressinset \rule{0.5cm}{0cm} &\r
-\makebox{\r
-\begin{minipage}[t]{7.0cm}\r
-[@-- $addcompanytoaddress ? $company_name. '\\\\' : '' --@][@-- $returnaddress --@]\r
-\end{minipage}}\r
-\hfill\r
-\end{tabular}\\\r
-\end{tabular}\\\r
+[@-- ($couponlocation eq "bottom") ? 'Detach and return this remittance form with your payment.\\' : '' --@]
+\begin{tabular}{ll}
+\begin{tabular}{ll}
+\returninset
+\begin{tabular}{ll}
+  \makebox{ \includegraphics{[@-- $logo_file --@]}} & [@-- $verticalreturnaddress ? '\\\\' : '' --@]
+  \begin{minipage}[b]{5.5cm}
+[@-- $returnaddress --@]
+    \end{minipage}\\
+\end{tabular}&
+\begin{tabular}{r@{: }lr}
+Invoice date & \textbf{[@-- $date --@]} & \multirow{4}*{[@-- $verticalreturnaddress ? '\\rule{1.5cm}{0cm}' : '' --@]
+\makebox{
+\begin{minipage}[t]{7.0cm}
+\textbf{[@-- $payname --@]}\\
+\addressline{[@-- $company --@]}
+\addressline{[@-- $address1 --@]}
+\addressline{[@-- $address2 --@]}
+\addressline{[@-- $city --@], [@-- $state --@]~~[@-- $zip --@]}
+\addressline{[@-- $country --@]}
+[@-- $barcode_file ? '\\\\ \includegraphics{'.$barcode_file.'}' : "\\" --@]
+\end{minipage}}}\\
+Customer\#& \textbf{[@-- $custnum --@]} & \\
+Total Due & \textbf{[@-- $balance --@]} & \\
+\rule{0pt}{[@-- defined($amountenclosedsep) ? $amountenclosedsep : '2.25em' --@]}Amount Enclosed & \rule{2cm}{1pt}& \\
+\end{tabular}\\
+\rule{0pt}{[@-- defined($coupontoaddresssep) ? $coupontoaddresssep : '1in' --@]} &\\
+\end{tabular}\\
+\begin{tabular}{ll}
+\addressinset \rule{0.5cm}{0cm} &
+\makebox{
+\begin{minipage}[t]{7.0cm}
+[@-- $addcompanytoaddress ? $company_name. '\\\\' : '' --@][@-- $returnaddress --@]
+\end{minipage}}
+\hfill
+\end{tabular}\\
+\end{tabular}\\
+[@-- ($couponlocation eq "top") ? ' \centerline{Detach and return this remittance form with your payment. }\\\\' : '' --@]
\ No newline at end of file