From b6343424437589018faba310159efaff6cecac18 Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 4 May 2005 00:41:00 +0000 Subject: [PATCH] great new invoice template from kristian! --- FS/FS/Conf.pm | 7 ++ FS/FS/cust_bill.pm | 2 + conf/invoice_latex | 204 ++++++++++++++++++++++++++++------------ conf/invoice_latexfooter | 6 +- conf/invoice_latexreturnaddress | 3 + conf/logo.eps | 9 +- httemplate/docs/billing.html | 2 +- 7 files changed, 166 insertions(+), 67 deletions(-) create mode 100644 conf/invoice_latexreturnaddress diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 8ca2c1ba2..be282971e 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -561,6 +561,13 @@ httemplate/docs/config.html }, { + 'key' => 'invoice_latexreturnaddress', + 'section' => 'billing', + 'description' => 'Return address for LaTeX typeset PostScript invoices.', + 'type' => 'textarea', + }, + + { 'key' => 'invoice_latexsmallfooter', 'section' => 'billing', 'description' => 'Optional small footer for multi-page LaTeX typeset PostScript invoices.', diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index db4cbf0c9..8aadb73aa 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -1137,9 +1137,11 @@ sub print_latex { 'country' => _latex_escape($cust_main->country), 'footer' => join("\n", $conf->config('invoice_latexfooter') ), 'smallfooter' => join("\n", $conf->config('invoice_latexsmallfooter') ), + 'returnaddress' => join("\n", $conf->config('invoice_latexreturnaddress') ), 'quantity' => 1, 'terms' => $conf->config('invoice_default_terms') || 'Payable upon receipt', #'notes' => join("\n", $conf->config('invoice_latexnotes') ), + 'conf_dir' => "$FS::UID::conf_dir/conf.$FS::UID::datasrc", ); my $countrydefault = $conf->config('countrydefault') || 'US'; diff --git a/conf/invoice_latex b/conf/invoice_latex index e7f6d08d6..5938a9872 100644 --- a/conf/invoice_latex +++ b/conf/invoice_latex @@ -5,7 +5,7 @@ %% Asplen Management Ltd %% www.asplen.co.uk %% -%% Modified for Freeside by Ivan Kohler and Kristian Hoffman +%% Modified for Freeside by Kristian Hoffman %% %% Changes %% 0.1 4/12/00 Created @@ -14,7 +14,7 @@ %% 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 10/12/03 forked for Freeside; checked into CVS +%% n/a forked for Freeside; checked into CVS %% \documentclass[letterpaper]{article} @@ -22,30 +22,107 @@ \usepackage{fancyhdr,lastpage,ifthen,longtable,afterpage} \usepackage{graphicx} % required for logo graphic -\addtolength{\voffset}{-0.0in} % top margin to top of header -\addtolength{\hoffset}{-0.60in} %left margin on page -\addtolength{\topmargin}{-0.6in} % top margin to top of header -\setlength{\headheight}{1in} % height of header -\setlength{\headsep}{0.5in} % between header and text -\addtolength{\textheight}{-0.4in} % height of main text +\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{\textheight}{-0.5in} % height of main text -\setlength{\footskip}{0.5in} % bottom of footer from bottom of text - -\addtolength{\textwidth}{2.1in} % width of text -\setlength{\oddsidemargin}{0in} % odd page left margin -\setlength{\evensidemargin}{0in} % even page left margin +%\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} - % New command for address lines i.e. skip them if blank +% 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}} -\newcommand{\dollar}[1][]{\symbol{36}} % Inserts dollar symbol + +% 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]{3.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}{5ex} &~~ \huge{\textsc{Invoice}} & \\ + \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 @@ -54,90 +131,87 @@ %% ptm Times %% pcr Courier -\renewcommand{\familydefault}{phv} +\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 -\fancyfoot[CO,CE]{\small{ -\begin{tabular}{c} -[@-- $footer --@] -\end{tabular}}} % %% The LH Heading comprising logo %% UNCOMMENT the following FOUR lines and change the path if necssary to provide a logo -\fancyhead[LO,LE]{ -\begin{tabular}{l} -\includegraphics{/usr/local/etc/freeside/conf.DBI:Pg:dbname=freeside/logo.eps} -\end{tabular}} % %% The Heading comprising isue date, customer ref & INVOICE name -\fancyhead[RO,RE]{ -\begin{tabular}{rcl} -Invoice date & & Invoice number \\ -\vspace{0.2cm} -\textbf{[@-- $date --@]} & & \textbf{[@-- $invnum --@]} \\\hline -\rule{0pt}{5ex} &~~ \huge{\textsc{Invoice}}& \\ -\vspace{-0.2cm} - & & \\\hline -\end{tabular}} % %% Header & footer changes for subsequent pages % -\afterpage{ \fancyfoot[RO,RE]{\small{\thepage\ of \pageref{LastPage}}} } -\afterpage{ \fancyfoot[CO,CE]{\small{[@-- $smallfooter --@]}} } -\afterpage{ \fancyhead[LO,LE]{\small{}} } -\afterpage{ \fancyhead[RO,RE]{\small{ -\begin{tabular}{ll} -Invoice date & Invoice number\\ -\textbf{[@-- $date --@]} & \textbf{[@-- $invnum --@]}\\ -\end{tabular}}} } % % +\begin{tabular}{ll} +\addressinset \rule{0cm}{0cm} & \makebox{ -\begin{minipage}[t]{2.9in} -\vspace{0.20in} +\begin{minipage}[t]{5.0cm} +\vspace{0.25cm} \textbf{[@-- $payname --@]}\\ \addressline{[@-- $company --@]} \addressline{[@-- $address1 --@]} \addressline{[@-- $address2 --@]} -\addressline{[@-- $city --@], [@-- $state --@] [@-- $zip --@]} +\addressline{[@-- $city --@], [@-- $state --@], [@-- $zip --@]} \addressline{[@-- $country --@]} \end{minipage}} +\end{tabular} \hfill \makebox{ -\begin{minipage}[t]{2.5in} +\begin{minipage}[t]{6.4cm} \begin{flushright} Terms: [@-- $terms --@]\\ [@-- $po_line --@]\\ \end{flushright} \end{minipage}} -\vspace{0.5cm} +\vspace{1.5cm} % \section*{\textsc{Charges}} -\begin{longtable}{|c|l|r|} +\begin{longtable}{clr} \hline \rule{0pt}{2.5ex} \makebox[1.4cm]{\textbf{Ref}} & -\makebox[13cm][l]{\textbf{Description}} & -\makebox[2cm][r]{\textbf{Amount}} \\ +\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[13cm][l]{\textbf{Description}} & -\makebox[2cm][r]{\textbf{Amount}} \\ +\makebox[12.8cm][l]{\textbf{Description}} & +\makebox[2.5cm][r]{\textbf{Amount}} \\ \hline \endhead -\multicolumn{3}{r}{\rule{0pt}{2.5ex}/cont...}\\ +\multicolumn{3}{r}{\rule{0pt}{2.5ex}Continued on next page...}\\ \endfoot +\hline [@-- foreach my $line (@total_items) { - $OUT .= ' & \multicolumn{1}{l}{' . $line->{'total_item'} . '} & ' . - $line->{'total_amount'} . '\\\\' . "\n"; + $OUT .= '\FStotaldesc{' . $line->{'total_item'} . '}' . + '{' . $line->{'total_amount'} . '}' . "\n"; } --@] @@ -146,11 +220,21 @@ Terms: [@-- $terms --@]\\ [@-- foreach my $line (@detail_items) { - $OUT .= '\rule{0pt}{2.5ex}' . $line->{'ref'} . ' &' . "\n". - '\begin{tabular}{l}' . "\n". - $line->{'description'} . '\tabularnewline' . "\n". - '\end{tabular}' . "\n". - '& \dollar ' . $line->{'amount'} . '\\\\\\hline' . "\n"; + 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, 70) . '...' + if (length($ext_desc) > 70); + $OUT .= '\FSextdesc{' . $ext_desc . '}' . "${rowbreak}\n"; + } + } --@] diff --git a/conf/invoice_latexfooter b/conf/invoice_latexfooter index ee5d7e931..527c356f5 100644 --- a/conf/invoice_latexfooter +++ b/conf/invoice_latexfooter @@ -1,5 +1 @@ -Ivan Kohler\\ -12345 Test Lane\\ -Truckee, CA~~96161\\ -ivan@sisd.com~~~~+1 415 462 1624\\ -Freeside - open-source billing - http://www.sisd.com/freeside\\ +Ivan Kohler~~~Freeside - open-source billing diff --git a/conf/invoice_latexreturnaddress b/conf/invoice_latexreturnaddress new file mode 100644 index 000000000..95067e230 --- /dev/null +++ b/conf/invoice_latexreturnaddress @@ -0,0 +1,3 @@ +Ivan Kohler\\* +12345 Test Lane\\* +Truckee, CA~~96161 diff --git a/conf/logo.eps b/conf/logo.eps index 8091b03fd..ff25dd4ce 100644 --- a/conf/logo.eps +++ b/conf/logo.eps @@ -1,10 +1,16 @@ %!PS-Adobe-2.0 EPSF-2.0 -%%BoundingBox: 261 345 419 447 %%HiResBoundingBox: 261.500000 345.500000 418.500000 446.500000 %%Creator: xpdf/pdftops 3.00 %%LanguageLevel: 2 %%DocumentMedia: plain 612 792 0 () () +%%BoundingBox: 19 0 70 33 %%EndComments +%%BeginProcSet: epsffit 1 0 +gsave +-65.000 -111.618 translate +0.324 0.324 scale +%%EndProcSet + % EPSF created by ps2eps 1.54 %%BeginProlog save @@ -13501,3 +13507,4 @@ countdictstack exch sub { end } repeat restore %%EOF +grestore diff --git a/httemplate/docs/billing.html b/httemplate/docs/billing.html index a9d7508fc..7097fda24 100644 --- a/httemplate/docs/billing.html +++ b/httemplate/docs/billing.html @@ -13,7 +13,7 @@
  • Typeset (LaTeX) invoice templates
  • Plaintext invoice templates -- 2.11.0