%% 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
%%

\documentclass[letterpaper]{article}

\usepackage{fancyhdr,lastpage,ifthen,array,fslongtable,afterpage,caption,multirow,bigstrut}
\usepackage{graphicx}			% required for logo graphic

\addtolength{\voffset}{-0.0cm}		% top margin to top of header
\addtolength{\hoffset}{-0.6cm}		% left margin on page
\addtolength{\topmargin}{-1.25cm}	% top margin to top of header
\setlength{\headheight}{2.0cm} 		% height of header
\setlength{\headsep}{1.0cm}		% between header and text
\setlength{\footskip}{1.0cm}		% bottom of footer from bottom of text

%\addtolength{\textwidth}{2.1in}    	% width of text
\setlength{\textwidth}{19.5cm}
\setlength{\textheight}{19.5cm}
\setlength{\oddsidemargin}{-0.9cm} 	% odd page left margin
\setlength{\evensidemargin}{-0.9cm} 	% even page left margin

\LTchunksize=40

\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{1pt}

\renewcommand{\footrule}{
[@--
  $coupon ? '\ifthenelse{\equal{\thepage}{1}}' : '';
--@]
  {
  }
  {
    \vbox to 0pt{\rule{\headwidth}{\footrulewidth}\vss}
  }
}

\newcommand{\extracouponspace}{3.6cm}

% 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]{
  \ifthenelse{\equal{\thepage}{1}}
  { % First page
[@--
  if ($coupon) {
    $OUT .= '\vspace{-\extracouponspace}';
    $OUT .= '\rule[0.5em]{\textwidth}{\footrulewidth}\\\\';
    $OUT .= $coupon;
  }
  '';
--@] [@-- $smallerfooter ? '\scriptsize{' : '\small{' --@]
[@-- $footer --@]
    }[@-- $coupon ? '\vspace{\extracouponspace}' : '' --@]
  }
  { % ... pages
    [@-- $smallerfooter ? '\scriptsize{' : '\small{' --@]
[@-- $smallfooter --@]
    }
  }
}

\fancyfoot[R]{
  \ifthenelse{\equal{\thepage}{1}}
  { % First page
  }
  { % ... pages
    \small{\thepage\ of \pageref{LastPage}}
  }
}

\fancyhead[L]{
  \ifthenelse{\equal{\thepage}{1}}
  { % First page
    \returninset
    \makebox{
      \begin{tabular}{ll}
        \includegraphics{[@-- $logo_file --@]} &
        \begin{minipage}[b]{5.5cm}
[@-- $returnaddress --@]
        \end{minipage}
      \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}
    Invoice date & Invoice \#& Customer\#\\
    \vspace{0.2cm}
    \textbf{[@-- $date --@]} & \textbf{[@-- $invnum --@]} & \textbf{[@-- $custnum --@]} \\\hline
    \rule{0pt}{5ex} &~~ \huge{\textsc{[@-- $notice_name || 'Invoice' --@]}} & \\
    \vspace{-0.2cm}
     & & \\\hline
    \end{tabular}
  }
  { % ... pages
    \small{
      \begin{tabular}{lll}
      Invoice date & Invoice \#& 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][l]{\textbf{~~Unit Price}}&\makebox[1.4cm]{\textbf{~Quantity}}&' : '' --@] }

\newcommand{\FShead}{
  \hline
  \rule{0pt}{2.5ex}
  \makebox[1.4cm]{\textbf{Ref}} &
%  \makebox[2.9cm][l]{\textbf{Description}}&
%  \makebox[1.4cm][l]{}&
%  \makebox[1.4cm][l]{}&
%  \makebox[2.5cm][l]{}&
  \multicolumn{\FSdescriptioncolumncount}{l}{\makebox[\FSdescriptionlength][l]{\textbf{Description}}}&
  \FSunitcolumns
  \makebox[1.6cm][r]{\textbf{Amount}} \\
  \hline
}

% ...description...
\newcommand{\FSdesc}[5]{
  \multicolumn{1}{c}{\rule{0pt}{2.5ex}\textbf{#1}} &
  \multicolumn{4}{l}{\textbf{#2}} &
  \multicolumn{1}{l}{\textbf{#3}} &
  \multicolumn{1}{r}{\textbf{#4}} &
  \multicolumn{1}{r}{\textbf{\dollar #5}}\\
}
% ...extended description...
\newcommand{\FSextdesc}[1]{
  \multicolumn{1}{l}{\rule{0pt}{1.0ex}} &
%%  \multicolumn{2}{l}{\small{~-~#1}}\\
#1\\
}
% ...and total line items.
\newcommand{\FStotaldesc}[2]{
  & \multicolumn{6}{l}{#1} & #2\\
}


\begin{document}
%	Headers and footers defined for the first page
\addressinset \rule{0.5cm}{0cm} 
\makebox{
\begin{minipage}[t]{7.0cm}
\vspace{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{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: [@-- $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*{ ';
      $OUT .= ($section->{'description'}) ? $section->{'description'}: 'Charges';
      $OUT .= '}\\\\';
      if ($section->{header_generator}) {
        $OUT .= &{$section->{header_generator}}();
      } else {
        $OUT .= '\FShead';
      }
      $OUT .= '\endfirsthead';
      $OUT .= '\multicolumn{7}{r}{\rule{0pt}{2.5ex}Continued from previous page}\\\\';
      if ($section->{header_generator}) {
        $OUT .= &{$section->{header_generator}}();
      } else {
        $OUT .= '\FShead';
      }
      $OUT .= '\endhead';
      $OUT .= '\multicolumn{7}{r}{\rule{0pt}{2.5ex}Continued on next page...}\\\\';
      $OUT .= '\endfoot';
      $OUT .= '\hline';

      if (scalar(@sections) > 1) {
        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'} && $line->{'ref'} ne $lastref);
        if ($section->{description_generator}) {
          $OUT .= &{$section->{description_generator}}($line);
        } else {
          $OUT .= '\FSdesc'.
                  '{' . ( $line->{'ref'} ne $lastref ? $line->{'ref'} : '' ) . '}'.
                  '{' . $line->{'description'} . '}' .
                  '{' . ( $unitprices ? $line->{'unit_amount'} : '' ) . '}'.
                  '{' . ( $unitprices ? $line->{'quantity'} : ''  ) . '}' .
                  '{' . $line->{'amount'} . "}${rowbreak}\n";
        }
        $lastref = $line->{'ref'};

        foreach my $ext_desc (@$ext_description) {
          if ($section->{extended_description_generator}) {
            $OUT .= &{$section->{extended_description_generator}}($ext_desc);
          } else {
            if ( $ext_desc !~ /[^\\]&/ ) {
              $ext_desc = substr($ext_desc, 0, 80) . '...'
                if (length($ext_desc) > 80);
              $ext_desc = '\multicolumn{6}{l}{\small{~~~'. $ext_desc. '}}';
            }else{
              $ext_desc = "~~~$ext_desc";
            }
            $OUT .= '\FSextdesc{' . $ext_desc . '}' . "${rowbreak}\n";
          }
        }

      }

      $OUT .= '\end{longtable}';
    }
    if ($section->{'posttotal'}) {
      $OUT .= '\begin{flushright}';
      $OUT .= '\normalfont\large\bfseries\textsc{'. $section->{'posttotal'}. '}\\\\';
      $OUT .= '\\end{flushright}';
    }
  }

--@]
\vfill
\begin{minipage}[t]{\textwidth}
  [@-- length($summary)
         ? ''
        : ( $smallernotes
              ? '\scriptsize{ '.$notes.' }'
              : $notes
          )
  --@]
  [@-- $coupon ? '\ifthenelse{\equal{\thepage}{1}}{\rule{0pt}{\extracouponspace}}{}' : '' --@]
\end{minipage}
\end{document}