%% 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,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;
  }
  '';
--@] \small{
[@-- $footer --@]
    }[@-- $coupon ? '\vspace{\extracouponspace}' : '' --@]
  }
  { % ... pages
    \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{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
%
%%	The LH Heading comprising logo
%%	UNCOMMENT the following FOUR lines and change the path if necssary to provide a logo
%
%%	The Heading comprising isue date, customer ref & INVOICE name
%
%%	Header & footer changes for subsequent pages
%
%
%
\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}
%
\section*{}
[@--
  foreach my $section ( @sections ) {
    if ($section->{'pretotal'}) {
      $OUT .= '\begin{flushright}';
      $OUT .= '\large\textsc{'. $section->{'pretotal'}. '}\\\\';
      $OUT .= '\\end{flushright}';
    }
    $OUT .= '\pagebreak' if $section{'post_total'};
    $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 .= '}\\\\';
    $OUT .= '\FShead';
    $OUT .= '\endfirsthead';
    $OUT .= '\multicolumn{7}{r}{\rule{0pt}{2.5ex}Continued from previous page}\\\\';
    $OUT .= '\FShead';
    $OUT .= '\endhead';
    $OUT .= '\multicolumn{7}{r}{\rule{0pt}{2.5ex}Continued on next page...}\\\\';
    $OUT .= '\endfoot';
    $OUT .= '\hline';

    if (scalar(@sections) > 1) {
      $OUT .= '\FStotaldesc{' . $section->{'description'} . ' Total}' .
              '{' . $section->{'subtotal'} . '}' . "\n";
    }

    #if ($section == $sections[$#sections]) {
      foreach my $line (grep {$_->{section}->{description} eq $section->{description}} @total_items) {
        $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);
      $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 ( $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
[@-- $notes --@]
\end{document}