[freeside-users] TEX invoice tweaking

Vlad Sedov stereomind at gmail.com
Sat Oct 7 09:36:12 PDT 2006


I played around with it some and figured out how to put the tear-off section
at the top, replacing the huge "INVOICE" block.

The code is ugly, but it works...

Vlad


--------cut here----------

\documentclass[letterpaper]{article}

\usepackage{fancyhdr,lastpage,ifthen,longtable,afterpage}
\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

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

% 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\newline}}

% 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
    \small{
[@-- $footer --@]
    }
  }
  { % ... 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{[@-- $conf_dir --@]/logo.eps} &
        \begin{minipage}[b]{5.5cm}
[@-- $returnaddress --@]
        \end{minipage}
      \end{tabular}
    }
  }
  { % ... pages
    %\includegraphics{[@-- $conf_dir --@]/logo.eps}	% Uncomment if you
want the logo on all pages.
  }
}

\fancyhead[R]{
  \ifthenelse{\equal{\thepage}{1}}
  { % First page
    \begin{tabular}{rcl}
    Invoice date & & Invoice number \\
    \vspace{0.2cm}
    \textbf{[@-- $date --@]} & & \textbf{[@-- $invnum --@]} \\\hline
    \rule{0pt}{3ex}
    \textsc{Amount Due:} & \textsc{[@-- foreach my $line
(@total_items) { $OUT = $line->{'total_amount'};}; --@]} & \\
    \textsc{Amount Enclosed:} & \textsc{............} & \\
    \vspace{-0.2cm}
     & & \\\hline
    \end{tabular}
  }
  { % ... pages
    \small{
      \begin{tabular}{ll}
      Invoice date & Invoice number\\
      \textbf{[@-- $date --@]} & \textbf{[@-- $invnum --@]}\\
      \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 description...
\newcommand{\FSdesc}[3]{
  \multicolumn{1}{c}{\rule{0pt}{2.5ex}\textbf{#1}} &
  \textbf{#2} &
  \multicolumn{1}{r}{\textbf{\dollar #3}}\\
}
% ...extended description...
\newcommand{\FSextdesc}[1]{
  \multicolumn{1}{l}{\rule{0pt}{1.0ex}} &
  \multicolumn{2}{l}{\small{~-~#1}}\\
}
% ...and total line items.
\newcommand{\FStotaldesc}[2]{
  & \multicolumn{1}{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
%
%
%
\begin{tabular}{ll}
\addressinset \rule{0cm}{0cm} &
\makebox{
\begin{minipage}[t]{5.0cm}
\vspace{0.25cm}
\textbf{[@-- $payname --@]}\\
\addressline{[@-- $company --@]}
\addressline{[@-- $address1 --@]}
\addressline{[@-- $address2 --@]}
\addressline{[@-- $city --@], [@-- $state --@]~~[@-- $zip --@]}
\addressline{[@-- $country --@]}
\rule{0pt}{8.5ex}
\textsc{....................................................................................................................................................}
\end{minipage}}
\end{tabular}
\hfill
\makebox{
\begin{minipage}[t]{6.4cm}
\begin{flushright}
Terms: [@-- $terms --@]\\
[@-- $po_line --@]\\
\end{flushright}
\end{minipage}}
\vspace{0.5cm}
%
\section*{\textsc{Charges}}
\begin{longtable}{clr}
\hline
\rule{0pt}{2.5ex}
\makebox[1.4cm]{\textbf{Ref}} &
\makebox[12.8cm][l]{\textbf{Description}} &
\makebox[2.5cm][r]{\textbf{Amount}} \\
\hline
\endfirsthead
\multicolumn{3}{r}{\rule{0pt}{2.5ex}Continued from previous page}\\
\hline
\rule{0pt}{2.5ex}
\makebox[1.4cm]{\textbf{Ref}} &
\makebox[12.8cm][l]{\textbf{Description}} &
\makebox[2.5cm][r]{\textbf{Amount}} \\
\hline
\endhead
\multicolumn{3}{r}{\rule{0pt}{2.5ex}Continued on next page...}\\
\endfoot
\hline
[@--

  foreach my $line (@total_items) {
    $OUT .= '\FStotaldesc{' . $line->{'total_item'} . '}' .
            '{' . $line->{'total_amount'} . '}' . "\n";
  }

--@]
\hline
\endlastfoot
[@--

  foreach my $line (@detail_items) {
    my $ext_description = $line->{'ext_description'};

    # Don't break-up small packages.
    my $rowbreak = @$ext_description < 5 ? '*' : '';

    $OUT .= "\\hline\n";
    $OUT .= '\FSdesc{' . $line->{'ref'} . '}{' . $line->{'description'} . '}' .
            '{' . $line->{'amount'} . "}${rowbreak}\n";

    foreach my $ext_desc (@$ext_description) {
      $ext_desc = substr($ext_desc, 0, 80) . '...'
        if (length($ext_desc) > 80);
      $OUT .= '\FSextdesc{' . $ext_desc . '}' . "${rowbreak}\n";
    }

  }

--@]
\end{longtable}
\vfill
[@-- $notes --@]
\end{document}

-----cut here-------




On 10/5/06, Richard Siddall <richard.siddall at elirion.net> wrote:
>
> Vlad Sedov wrote:
> > I'm trying to figure out how to add a "tear-off" section to the LaTeX
> > version of the invoice that would include the "balance due" and "amount
> > enclosed" lines on the bottom of the invoice. Any starting points,
> anyone?
> > This may be a good option to include in a release some day perhaps?
>
> It's on my to-do list, but I won't get to it any time soon.  I haven't
> done anything on it other than browsing around the TeX code a bit, and
> coming up with a long list of "nice to have features" on the tear-off.
>
> I do seem to recall looking at the Perl code to try to figure out how to
> adjust the page length to allow for the space taken up by the tear-off.
>
> I'd probably change to the tear-off version of the invoice template if
> both that and the current version came with future releases of Freeside.
>
> Regards,
>
>         Richard.
>
> _______________________________________________
> freeside-users mailing list
> freeside-users at sisd.com
> http://420.am/cgi-bin/mailman/listinfo/freeside-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://420.am/pipermail/freeside-users/attachments/20061007/664b7692/attachment.htm


More information about the freeside-users mailing list