diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/invoice |
Initial commit
Diffstat (limited to 'macros/latex/contrib/invoice')
-rw-r--r-- | macros/latex/contrib/invoice/README | 15 | ||||
-rw-r--r-- | macros/latex/contrib/invoice/invoice.pdf | bin | 0 -> 96697 bytes | |||
-rw-r--r-- | macros/latex/contrib/invoice/invoice.sty | 1061 | ||||
-rw-r--r-- | macros/latex/contrib/invoice/invoice.tex | 778 | ||||
-rw-r--r-- | macros/latex/contrib/invoice/invoicelabels.sty | 558 |
5 files changed, 2412 insertions, 0 deletions
diff --git a/macros/latex/contrib/invoice/README b/macros/latex/contrib/invoice/README new file mode 100644 index 0000000000..a1ac34e022 --- /dev/null +++ b/macros/latex/contrib/invoice/README @@ -0,0 +1,15 @@ +---------:| --------------------------------------------------------------- + invoice:| A package for generating invoices + Author:| Oliver Corff + E-mail:| oliver.corff@email.de + License:| Released under the LaTeX Project Public License v1.3c or later + See:| http://www.latex-project.org/lppl.txt + +Short description: + +The invoice package offers a complete environment for writing +invoices. Fees can be charged and allocated to a project, and +an invoice supports a multitude of projects. Cost items for +reimbursement can be charged in local or foreign currency. + +The package currently has support for approx. 10 languages. diff --git a/macros/latex/contrib/invoice/invoice.pdf b/macros/latex/contrib/invoice/invoice.pdf Binary files differnew file mode 100644 index 0000000000..9b2a8e1bef --- /dev/null +++ b/macros/latex/contrib/invoice/invoice.pdf diff --git a/macros/latex/contrib/invoice/invoice.sty b/macros/latex/contrib/invoice/invoice.sty new file mode 100644 index 0000000000..2fb397fddc --- /dev/null +++ b/macros/latex/contrib/invoice/invoice.sty @@ -0,0 +1,1061 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Datei: invoice.sty +% Autor: Oliver Corff +% Contact: oliver.corff@email.de +% Datum: August 06, 2018 +% Version: 0.91 +% Copyright: Ulaanbaatar, Beijing, Berlin, Zagreb, Shenyang, Shanghai +% Description: This collection of macros provides +% tools for generating complex invoices +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Corrections, suggestions and contributions by: +%%%%%% +% +% Some of the following contributions came years ago, others quite +% recently: +% +% Czech: Svarny Petr <svarnypetr@gmail.com> +% +% Spanish: Juanjo <jj.hfmc@gmail.com> and Lee Rudolph <lrudolph@panix.com> +% +% Corrections of Italian orthography: Paolo Cusinu <paolo.cusinu@gmail.com> +% +% Estonian and a patch for using fp: Priit Laes <plaes@plaes.org> +% +% Another patch for fp: AFresh1, March 2011 % e-mail: andrew@afresh1.com +% +% One variant of Spanish: Matias Banchoff <matiasb@cespi.unlp.edu.ar> +% +%%%%%% +% 2018-08-05 +% Katrin Michelbach, request for "," instead of "." +% email: katrin.michelbach@googlemail.com +% +%%%%%% +% 2018-08-05 +% Svarny Petr, Czech labels +% email: <svarnypetr@gmail.com> +% +%%%%%% +% Jacopo, May 2003 +% e-mail: jacopo@ +% +% Contributed labels in Italian. +% +%%%%%% +% O. Corff, July 2003 +% +% fixed one nasty spacing bug, simplified internal table +% construction (table now has five instead of six columns, +% the second of which was never used). +% +%%%%%% +% Johann Spies, January 21, 2002 +% e-mail: jspies@sun.ac.za +% +% Hinted that \Subtotal Project should show the project name +% rather than just `Project'. +% +% Contributed labels in Afrikaans. +% +%%%%%% +% Robin Fairbairns, December 6, 2001 +% +% Hinted that the dollar sign can also be printed by saying +% \string$. +% +%%%%%% +% Vincent Tougait, France, November 27, 2001 +% +% Pointed out that fractions of VAT percents were not allowed. +% Bugfix on December 06, 2001 +% +%%%%%% +% Fred Donck, The Hague, The Netherlands, October, 2001 +% e-mail: fd0@donck.com +% +% Dutch labels +% +%%%%%% +% Ian Wormsbecker, October 31, 2001 +% +% Skips the VAT lines if VAT=0 +% Noticed that the terminal message will not accept a Dollar sign. +% The only workaround is to say \char`$ in \begin{invoice}{} +% +%%%%%% +% Fred Donck, The Hague, The Netherlands, Sept 18, 2001 +% e-mail: fd0@donck.com +% +% fixed some minor issues: +% real arithmetic will use integer intermediate values, so +% some calculations failed with the \Fee{title}{rate}{amount} +% where \rate is not an integer +% +% another fix is that in my opinion the VAT line should be +% printed also even though only one project is specified +% +% third fix is that the subtotal-line should not be printed +% on a project with only one \Fee line +% +%%%%%% +% Jacco Kok (fixed some labels), +% +%%%%%% +% Thilo Barth (discussed alternative names and command clashes +% with KOMA Script class scrlettr.cls), +% +%%%%%% +% Robert Inder (discussed general issues) +% +% were gladly and gratefully received and accepted. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ------------------- identification ------------------- +% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{invoice}[2018/08/06] +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ------------------- language options ------------------- +% +% +\newcount\invoice@language +\let\invoice@language=\language +% +\ifx\l@afrikaans\undefined \newlanguage\l@afrikaans \fi +\ifx\l@dutch\undefined \newlanguage\l@dutch \fi +\ifx\l@english\undefined \newlanguage\l@english \fi +\ifx\l@estonian\undefined \newlanguage\l@estonian \fi +\ifx\l@finnish\undefined \newlanguage\l@finnish \fi +\ifx\l@french\undefined \newlanguage\l@french \fi +\ifx\l@german\undefined \newlanguage\l@german \fi +\ifx\l@italian\undefined \newlanguage\l@italian \fi +\ifx\l@spanish\undefined \newlanguage\l@spanish \fi +\ifx\l@swedish\undefined \newlanguage\l@swedish \fi +\ifx\l@spanish\undefined \newlanguage\l@spanish \fi +\ifx\l@spanishe\undefined \newlanguage\l@spanishe \fi +\ifx\l@spanishv\undefined \newlanguage\l@spanishv \fi +% +\DeclareOption{afrikaans}{\invoice@language=\number\l@afrikaans} +\DeclareOption{dutch}{\invoice@language=\number\l@dutch} +\DeclareOption{english}{\invoice@language=\number\l@english} +\DeclareOption{estonian}{\invoice@language=\number\l@estonian} +\DeclareOption{finnish}{\invoice@language=\number\l@finnish} +\DeclareOption{french}{\invoice@language=\number\l@french} +\DeclareOption{german}{\invoice@language=\number\l@german} +\DeclareOption{italian}{\invoice@language=\number\l@italian} +\DeclareOption{spanish}{\invoice@language=\number\l@spanish} +\DeclareOption{spanishe}{\invoice@language=\number\l@spanishe} +\DeclareOption{spanishv}{\invoice@language=\number\l@spanishv} +\DeclareOption{swedish}{\invoice@language=\number\l@swedish} +\DeclareOption{position}{} +\newif\ifcomma +\DeclareOption{comma}{\commatrue} +% +\ProcessOptions +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ------------------- initial code ------------------- +% +\RequirePackage{ifthen} +\RequirePackage{longtable} +\RequirePackage{calc} +\ifcomma + \RequirePackage[output-decimal-marker={,}]{siunitx} +\else + \RequirePackage{siunitx} +\fi +\RequirePackage{fp} +\input{invoicelabels.sty} +% +\newcommand{\InvoiceVersion}{0.91}% +\newcounter{Fee} % +\newcounter{VAT} % +%\newcounter{VAT@rate} % +\newcounter{Expenses} % +\newcounter{Discount} % Discount item +\newcounter{Total} % +\newcounter{Project} % +% +\newcounter{Fee@ctr} % Number of fees per project + % no subtotal will be printed in case of + % value < 2 +% +\newcounter{Expense@ctr} % Number of expense items per project + % no subtotal will be printed in case of + % value < 2 +% +\newcounter{One@Fee} % Individual Fee +\newcounter{One@VAT} % Individual VAT +\newcounter{One@Expense} % Individual Expense +% +\newcounter{ST@Fee} % Subtotal Fee +\newcounter{ST@VAT} % Subtotal VAT +\newcounter{ST@Expenses} % Subtotal Expenses +\newcounter{ST@Project} % Subtotal Project +% +\gdef\Flag{0}% % State 0: Invoice not started yet + % State 1: Start invoice + % State 2: Start project, print title + % State 3: Fee Item + % State 4: Print Subtotal Fee + % State 5: Expense Item + % State 6: Print Subtotal Expenses + % State 7: Print Subtotal Project + % State 8: Print Total, Close invoice +% +\gdef\Project{}% % Empty Project Name +\def\Null{0}% +\newif\ifVATnonzero +% \def\BC{Euro} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%\newcommand{\my@message}[1]{\message{^^J#1^^J^^J}} +\newcommand{\error@message}[1]{\errmessage{^^J\Error: #1^^J^^J}} +\newcommand{\warning@message}[1]{\message{^^J\Warning: #1^^J^^J}} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\ifx\invoice\undefined % False if KOMA Script scrlettr.cls + \def\my@invoice{invoice} % loaded. In this case one may say +\else % "invoice". If true, the environ- + \def\my@invoice{invoiceenv} % ment is renamed to "invoiceenv" + \let\invoiceno\invoice % and the scrlettr macro is renamed + \def\invoice#1{% % to "invoiceno". Thank you, Thilo, + \error@message{\KOMA}} % for this hint! +\fi % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newenvironment{\my@invoice}[2]{% + \setcounter{Fee@ctr}{0}% % reset counter + \setcounter{Expense@ctr}{0}% % reset counter + \def\Null{0}% + \setcounter{Project}{0}% + \ST@Reset\Total@Reset% + \def\BC{#1}% + \def\VAT@rate{#2}% + \ifx\VAT@rate\Null\VATnonzerofalse\else\VATnonzerotrue\fi% + \ifVATnonzero + \message{^^J^^JVAT is not zero!^^J^^J}% + \else + \message{^^J^^JVAT is zero!^^J^^J}% + \fi% + % The VAT is: \the\VAT@rate % Debugging Diagnostics only + \parindent=0cm% + \ifcase\Flag % 0: Invoice not started yet + % + \gdef\Flag{1}% + %\begin{center}% Removed 20050621 by suggestion from ... + \begin{longtable}{p{5cm}lrrr}% + % + \else \error@message{\NoInvoiceNesting}% + \fi}% +% At the end of environment: +% Yields state 8->0, Close and complete invoice, finish tables, etc. +{% + \ifcase\Flag % 0: Invoice not started yet + % + \error@message{\MissingOpening}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 1: Start invoice + % + \error@message{\MissingProject}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 2: Start project, print title + % + \error@message{\MissingInputData}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 3: Print remuneration item + % + \ifnum\theProject>0 \ST@Fee\ST@Project\fi% + \Tot@l% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 4: Print subtotal remuneration + % + \ifnum\theProject>1 \ST@Project\fi% + \Tot@l% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 5: Expense item + % + \ifnum\theProject>1 \ST@Expenses\ST@Project\fi% + \Tot@l% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 6: Print subtotal expenses + % + \ifnum\theProject>1 \ST@Project\fi% + \Tot@l% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 7: Print subtotal project + % + \Tot@l% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 8: Print total, close invoice + % + \warning@message{\InvoiceCompleted}% + % + \else \error@message{\InternalError}% + \fi% + \gdef\Flag{0}% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\ProjectTitle}[1]{% Yields state 2: Start Project + %\gdef\NewProject{#1} + % + \ifcase\Flag% 0: Invoice not started yet + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 1: Start invoice + % + \Project@Title{#1}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 2: Start project, print title + % + \error@message{\NoProjectNesting}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 3: Print remuneration item + % + \ST@Fee% + \ST@Project% + \Project@Title{#1}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 4: Print subtotal remuneration + % + \ST@Project% + \Project@Title{#1}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 5: Expense item + % + \ST@Expenses% + \ST@Project% + \Project@Title{#1}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 6: Print subtotal expenses + % + \ST@Project% + \Project@Title{#1}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 7: Print subtotal project + % + \Project@Title{#1}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 8: Print total, close invoice + % + \error@message{\InvoiceCompletedNoProject}% + % + \else \error@message{\InternalError}% + \fi% + \setcounter{Fee@ctr}{0}% % reset counter + \setcounter{Expense@ctr}{0}% % reset counter +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Fee}[3]{% Yields state 3, Print Fee Item + % + % #1 Contents + % #2 Fee per Unit + % #3 Unit Count + % + \ifcase\Flag % 0: Invoice not started yet + \error@message{\MissingOpening}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 1: Start invoice + % + \error@message{\MissingProject}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 2: Start project, print title + % + \Fee@Title% + \Fee@Line{#1}{#2}{#3}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 3: Print remuneration item + % + \Fee@Line{#1}{#2}{#3}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 4: Print subtotal remuneration + % + \warning@message{\FeeSTExists}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 5: Expense item + % + \error@message{\FeeBeforeExpense}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 6: Print subtotal expenses + % + \error@message{\FeeBeforeExpense}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 7: Print subtotal project + % + \error@message{\ProjectCompletedNoFee}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 8: Print total, close invoice + % + \error@message{\InvoiceCompletedNoFee}% + % + % + \else \error@message{\InternalError}% + \fi% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\STFee}{% Yields state 4, print subtotal remuneration + % + \ifcase\Flag % 0: Invoice not started yet + % + \error@message{\MissingOpening}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 1: Start invoice + % + \error@message{\MissingProject}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 2: Start project, print title + % + \error@message{\MissingFee}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 3: Print remuneration item + % + \Print@ST@Fees% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 4: Print subtotal remuneration + % + \warning@message{\FeeSTExists}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 5: Expense item + % + \error@message{\FeeBeforeExpense}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 6: Print subtotal expenses + % + \error@message{\FeeBeforeExpense}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 7: Print subtotal project + % + \error@message{\ProjectCompletedNoFee}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 8: Print total, close invoice + % + \error@message{\ProjectCompletedNoFee}% + % + \else \error@message{\InternalError}% + \fi% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\EBC}[2]{% Yields state 5: Expenses in BaseCurrency + % + % #1 Contents und Datum + % #2 Amount in BaseCurrency + % + \ifcase\Flag % 0: Invoice not started yet + % + \error@message{\MissingOpening}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 1: Start invoice + % + \error@message{\MissingProject}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 2: Start project, print title + % + \Expense@Title% + \Expense@BaseCurrency{#1}{#2}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 3: Print remuneration item + % + \ST@Fee% + \Expense@Title% + \Expense@BaseCurrency{#1}{#2}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 4: Print subtotal remuneration + % + \Expense@Title% + \Expense@BaseCurrency{#1}{#2}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 5: Expense item + % + \Expense@BaseCurrency{#1}{#2}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 6: Print subtotal expenses + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 7: Print subtotal project + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 8: Print total, close invoice + % + \error@message{\InvoiceCompletedNoExpense}% + % + \else \error@message{\InternalError}% + \fi% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\EBCi}[2]{% Yields state 5: Expenses in BaseCurrency + % But, unlike base form (no + % 'invisible') this version does + % not state the item, it only + % the total amount of expenses. + % + % #1 Contents und Datum + % #2 Amount in BaseCurrency + % + \ifcase\Flag % 0: Invoice not started yet + % + \error@message{\MissingOpening}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 1: Start invoice + % + \error@message{\MissingProject}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 2: Start project, print title + % + %\Expense@Title% + \Expense@Base@Currency{#1}{#2}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 3: Print remuneration item + % + \ST@Fee% + %\Expense@Title% + \Expense@Base@Currency{#1}{#2}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 4: Print subtotal remuneration + % + %\Expense@Title% + \Expense@Base@Currency{#1}{#2}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 5: Expense item + % + \Expense@Base@Currency{#1}{#2}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 6: Print subtotal expenses + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 7: Print subtotal project + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 8: Print total, close invoice + % + \error@message{\InvoiceCompletedNoExpense}% + % + \else \error@message{\InternalError}% + \fi% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\EFC}[5]{% Yields state 5: Expenses in ForeignCurrency + % + % #1 Contents und Datum + % #2 Currency + % #3 Amount + % #4 Exchange Rate + % #5 Amount Zielwaehrung + % + % Usage: + % 1. {Contents}{ForeignCurrency}{ExchangeRate}{} + % 2. {Contents}{ForeignCurrency}{}{BaseCurrency} + % 3. {Contents}{ForeignCurrency}{ExchangeRate}{BaseCurrency} + % + \ifcase\Flag % 0: Invoice not started yet + % + \error@message{\MissingOpening}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 1: Start invoice + % + \error@message{\MissingProject}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 2: Start project, print title + % + \Expense@Title% + \Expense@ForeignCurrency{#1}{#2}{#3}{#4}{#5}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 3: Print remuneration item + % + \ST@Fee% + \Expense@Title% + \Expense@ForeignCurrency{#1}{#2}{#3}{#4}{#5}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 4: Print subtotal remuneration + % + \Expense@Title% + \Expense@ForeignCurrency{#1}{#2}{#3}{#4}{#5}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 5: Expense item + % + \Expense@ForeignCurrency{#1}{#2}{#3}{#4}{#5}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 6: Print subtotal expenses + % + \error@message{\ProjectCompletedNoExpense}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 7: Print subtotal project + % + \error@message{\ProjectCompletedNoExpense}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 8: Print total, close invoice + % + \error@message{\InvoiceCompletedNoExpense}% + % + \else \error@message{\InternalError}% + \fi% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\EFCi}[5]{% Yields state 5: Expenses in ForeignCurrency + % But, unlike base form (no + % 'invisible') this version does + % not state the item, it only + % the total amount of expenses. + % + % #1 Contents und Datum + % #2 Currency + % #3 Amount + % #4 Exchange Rate + % #5 Amount Zielwaehrung + % + % Usage: + % 1. {Contents}{ForeignCurrency}{ExchangeRate}{} + % 2. {Contents}{ForeignCurrency}{}{BaseCurrency} + % 3. {Contents}{ForeignCurrency}{ExchangeRate}{BaseCurrency} + % + \ifcase\Flag % 0: Invoice not started yet + % + \error@message{\MissingOpening}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 1: Start invoice + % + \error@message{\MissingProject}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 2: Start project, print title + % + \Expense@Title% + \Expense@Foreign@Currency{#1}{#2}{#3}{#4}{#5}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 3: Print remuneration item + % + \ST@Fee% + % \Expense@Title% + \Expense@Foreign@Currency{#1}{#2}{#3}{#4}{#5}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 4: Print subtotal remuneration + % + % \Expense@Title% + \Expense@Foreign@Currency{#1}{#2}{#3}{#4}{#5}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 5: Expense item + % + \Expense@Foreign@Currency{#1}{#2}{#3}{#4}{#5}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 6: Print subtotal expenses + % + \error@message{\ProjectCompletedNoExpense}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 7: Print subtotal project + % + \error@message{\ProjectCompletedNoExpense}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 8: Print total, close invoice + % + \error@message{\InvoiceCompletedNoExpense}% + % + \else \error@message{\InternalError}% + \fi% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\STExpenses}{% Yields state 6: Ausgabe der ST Expenses + % + \ifcase\Flag % 0: Invoice not started yet + % + \error@message{\MissingOpening}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 1: Start invoice + % + \error@message{\MissingProject}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + \or % 2: Start project, print title + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + \or % 3: Print remuneration item + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + \or % 4: Print subtotal remuneration + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 5: Expense item + % + \Print@ST@Expenses% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 6: Print subtotal expenses + % + \warning@message{\ProjectCompletedNoExpense}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 7: Print subtotal project + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 8: Print total, close invoice + % + \error@message{\InvoiceCompletedNoExpense}% + % + \else \error@message{\InternalError}% + \fi% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\STProject}{% Yields state 7: Ausgabe der ST Project + % + \ifcase\Flag % 0: Invoice not started yet + % + \error@message{\MissingOpening}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 1: Start invoice + % + \error@message{\MissingProject}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 2: Start project, print title + % + \warning@message{\ProjectEmpty}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 3: Print remuneration item + % + \ST@Fee% + \ST@Project% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 4: Print subtotal remuneration + % + \ST@Project% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 5: Expense item + % + \ST@Expenses% + \ST@Project% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 6: Print subtotal expenses + % + \ST@Project% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 7: Print subtotal project + % + \warning@message{\ProjectSTExists}% + % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \or % 8: Print total, close invoice + % + \error@message{\InvoiceCompletedNoProjectST}% + % + \else \error@message{\InternalError}% + \fi% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Discount}[2]{% Yields no particular state. + % Inserts discount in project total, + % names discount reason + % and amount of discount + % + \gdef\Discount@Contents{#1}% + \setcounter{Discount}{100 * \real{-#2}}% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Total@Reset}{% + \setcounter{Fee}{0}% + \setcounter{VAT}{0}% + \setcounter{Expenses}{0}% + \setcounter{Total}{0}% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\ST@Reset}{% + \setcounter{ST@Fee}{0}% + \setcounter{ST@VAT}{0}% + \setcounter{ST@Expenses}{0}% + \setcounter{ST@Project}{0}% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Print@Value}[1]{% + \FPmul\r#1{0.01}%% <- Reduce to BaseCurrency + \FPtrunc\r\r{2}%% <- Truncate to two digits + \num{\r}% % <- Output data! +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Message@Value}[1]{% + \FPmul\r#1{0.01}%% <- Reduce to BaseCurrency + \FPtrunc\r\r{2}%% <- Truncate to two digits + \message{\r}% % <- Output data! +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Project@Title}[1]{% + % Internal command called by \ProjectTitle. + % + \gdef\Flag{2}% + \gdef\Project{#1}% + \ST@Reset\addtocounter{Project}{1}% + \ifnum\theProject>1 \\\\\else\\\fi% + \multicolumn{5}{c}{\textbf{\large#1}}\\% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Fee@Title}{% + \\ + \noindent\textbf{\Activity}&&\UnitRate&\Count&\Amount\ (\BC)\\ + \hline% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Fee@Line}[3]{% + % + % #1 Contents + % #2 Charged Fee per Unit + % #3 Count + % + % Internal command, called by \Fee. + % + \gdef\Flag{3}% + % + #1 &   & +% +% next is reversed to allow real arithmetic. +% intermediate results are stored in integer format, +% so calculations are incorrect in case #2 is a real. +% fixed by exchanging the 1 and the 100 +% + \FPmul\r{100}{#2}% added 2006-01-04 + \setcounter{One@Fee}{1 *\real{\r} * \real{#3} }% +% + \addtocounter{ST@Fee}{\theOne@Fee}% + \addtocounter{Fee}{\theOne@Fee}% + \addtocounter{Fee@ctr}{1}% increase counter with 1 + \Print@Value{\theOne@Fee}\\% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\ST@Fee}{% + % \gdef\Flag{4}% + \ifnum\theST@Fee>0% + \ifthenelse{\theFee@ctr>1} % % if more than 1 \Fee line + {\Print@ST@Fees% % print it, else + }% + {}% % do nothing + \ifVATnonzero\ST@VAT@Printout\fi% + \fi% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Print@ST@Fees}{% + \gdef\Flag{4}% + \SubtotalFee & & & &% print the subtotal of fees + \Print@Value{\theST@Fee}\\% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\ST@VAT@Printout}{% + \VAT\ (\VAT@rate\%) & & & &% + \setcounter{ST@VAT}{\theST@Fee * \real{\VAT@rate} / 100}% + \Print@Value{\theST@VAT}\\% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Expense@BaseCurrency}[2]{% + #1 & \BC & & &% + \gdef\Flag{5}% + \FPmul\r{100}{#2}% + \setcounter{One@Expense}{1*\real{\r}}% + \addtocounter{ST@Expenses}{\theOne@Expense}% + \addtocounter{Expenses}{\theOne@Expense}% + \addtocounter{Expense@ctr}{1}%advance counter + \Print@Value{\theOne@Expense}\\% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Expense@Base@Currency}[2]{% + \gdef\Flag{5}% + \FPmul\r{100}{#2}% + \setcounter{One@Expense}{1*\real{\r}}% + \addtocounter{ST@Expenses}{\theOne@Expense}% + \addtocounter{Expenses}{\theOne@Expense}% + \addtocounter{Expense@ctr}{1}%advance counter + & & & & \\[-1.2em]% This is an ugly kludge: + % Inserting an empty line + % which rolls backwards + % makes disappear the spurious + % spaces caused by external + % routines. +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Expense@ForeignCurrency}[5]{% + \gdef\Flag{5}% + % + % Folgende Angaben sind moeglich: + % 1. {Contents}{Currency}{Amount}{Umrechnung}{ } + % 2. {Contents}{Currency}{Amount}{ }{BaseCurrency} + % 3. {Contents}{Currency}{Amount}{Umrechnung}{BaseCurrency} + % + #1 & #2 & #3 & #4&% + \ifthenelse{\equal{#5}{}}% Target in BaseCurrency or not? + {% Target not in BaseCurrency + \FPmul\r{100}{#3}% + \FPmul\r \r {#4}% + }% + {% Target in BaseCurrency + \FPmul\r{100}{#5}% + }% + \setcounter{One@Expense}{1*\real{\r}}% + \addtocounter{ST@Expenses}{\theOne@Expense}% + \addtocounter{Expenses}{\theOne@Expense}% + \addtocounter{Expense@ctr}{1}%advance counter + \Print@Value{\theOne@Expense}% +\\% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Expense@Foreign@Currency}[5]{% + \gdef\Flag{5}% + % + % Folgende Angaben sind moeglich: + % 1. {Contents}{Currency}{Amount}{Umrechnung}{ } + % 2. {Contents}{Currency}{Amount}{ }{BaseCurrency} + % 3. {Contents}{Currency}{Amount}{Umrechnung}{BaseCurrency} + % + \ifthenelse{\equal{#5}{}}% Target in BaseCurrency or not? + {% Target not in BaseCurrency + \FPmul\r{100}{#3}% + \FPmul\r\r{#4}% + }% + {% Target in BaseCurrency + \FPmul\r{100}{#5}% + }% + \setcounter{One@Expense}{1*\real{\r}}% + \addtocounter{ST@Expenses}{\theOne@Expense}% + \addtocounter{Expenses}{\theOne@Expense}% + \addtocounter{Expense@ctr}{1}%advance counter + & & & & \\[-1.2em]% ugly kludge as above +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Expense@Title}{% + \\% + \textbf{\Expense}&\Currency&\Amount&\Factor &\BC\\% + \hline% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\ST@Expenses}{% + % \gdef\Flag{6}% + \ifnum\theST@Expenses>0% + \ifthenelse{\theExpense@ctr>1}% % if more than 1 Expense line + {\Print@ST@Expenses}% % print it, else + {}% % do nothing + \fi% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Print@ST@Expenses}{% + \gdef\Flag{6}% + & & & & \\[-1.2em]% ugly kludge as above + \SubtotalExpenses & & & &% print the subtotal of expenses + \Print@Value{\theST@Expenses}\\% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\ST@Project}{% + \gdef\Flag{7}% + \\ + %\multicolumn{4}{l}{\SubtotalProject}% + %\let\Project\NewProject% + %& + \SubtotalProject & & & & + \addtocounter{ST@Project}{\theST@Fee}% + \addtocounter{ST@Project}{\theST@VAT}% + \addtocounter{ST@Project}{\theST@Expenses}% + \Print@Value{\theST@Project}\\ +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Total@VAT@Printout}{% + \setcounter{VAT}{\theFee*\real{\VAT@rate}/100}% + \SumVAT & & & &\Print@Value{\theVAT}\\% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\Tot@l}{% + \\\hline + \ifnum\theFee>0 \SumFees& & & &% + \Print@Value{\theFee}\\ + \ifVATnonzero% + \Total@VAT@Printout% + \fi% + \fi% + \ifnum\theExpenses>0 \SumExpenses& & & &% + \Print@Value{\theExpenses}\\ + \fi% + \ifnum\theDiscount<0 \Discount@Contents& & & &% + \Print@Value{\theDiscount}\\ + \fi% + \hline\hline + \textbf{\Total} & & & &% + \message{^^J\Currency: \BC}% + \message{^^J\VAT: \VAT@rate}% + \addtocounter{Total}{\theFee}% + \message{^^J\SumFees: }\Message@Value{\theFee}% + \addtocounter{Total}{\theVAT}% + \message{^^J\SumVAT: }\Message@Value{\theVAT}% + \addtocounter{Total}{\theExpenses}% + \message{^^J\SumExpenses: }\Message@Value{\theExpenses}% + \ifnum\theDiscount<0 % + \addtocounter{Total}{\theDiscount}% + \message{^^J\Discount@Contents: }\Message@Value{\theDiscount}% + \fi % + \textbf{\Print@Value{\theTotal}}% + \message{^^J\Total: }% + \Message@Value{\theTotal}\message{^^J^^J}\\% + \end{longtable} + %\end{center}% Removed 20050621 by suggestion from ... + \gdef\Flag{8}% +} +\endinput +% vim:ts=4:sw=4 diff --git a/macros/latex/contrib/invoice/invoice.tex b/macros/latex/contrib/invoice/invoice.tex new file mode 100644 index 0000000000..701a7e17b2 --- /dev/null +++ b/macros/latex/contrib/invoice/invoice.tex @@ -0,0 +1,778 @@ +\documentclass[10pt]{ltxdoc} +\usepackage[]{invoice} +%\usepackage{hyperref} + +\title{\texttt{invoice \InvoiceVersion}\\ + A Package for Writing Invoices} +\author{Oliver Corff} +\date{August 6th, 2018} +\begin{document} +\maketitle + +\tableofcontents + +\section{Introduction} + +The \texttt{invoice} package was conceived in late 2000 when the +author had to dig through a truly aweful pile of expense bills +without having a spreadsheet featuring \LaTeXe-compliant output (or +any spreadsheet, for that purpose) available. After several +miscalculations with a pocket calculator due to forgotten or +double entries the idea came up to have \LaTeXe\ do the calculation +work. As such, the package in its present stage is highly +specialized with regard to the documents it generates. The +\texttt{invoice} package is basically a tailor-made solution for a +consultant who charges fees and claims all sorts of expenses, +sometimes working on different assignments for the same client. + +The author expresses his gratitude to +Robert Inder, +Thilo Barth, +Jacco Kok, +Fred Donck, +Jacopo, +Katrin Mittelbach, +Johann Spies, +Petr Svarny, +Ian Wormsbecker, +Vincent Tougait +and +Robin Fairbairns +who contributed ideas, corrections, +bugfixes and caption translations after the first discussions on +\texttt{comp.text.tex} and the initial release of \texttt{invoice} as well as +later on by providing patch suggestions and label translations. + +Given the current capabilities of \texttt{invoice}, it should well +be possible to extend the capabilities of this package in the future +or to rewrite it in a generalized fashion. + +\section{Software Requirements} + +The \texttt{invoice} environment runs under \LaTeXe\ and relies on the +\texttt{calc.sty} (providing infix arithmetic) and \texttt{fp} +(providing fixed point arithmetic) utilities to do its work which can be found +at CTAN% + \footnote{The \texttt{fp} package is found at + \texttt{CTAN:macros/latex/contrib/fp}, + and \texttt{calc} is found at + \texttt{CTAN:macros/latex/required/tools/}.}. +Compile and read \texttt{00README.tex} for further information if +you are not sure whether these packages are installed at your site. + +\section{The \texttt{invoice} Environment} + +Within a given document, invoices are built with the +\texttt{invoice} environment\footnote{Users of the KOMA-Script + class \texttt{scrlettr.cls} are kindly requested to use + \texttt{invoiceenv} instead; see also page~\pageref{koma}.}. +Figure~\ref{structure} on page~\pageref{structure} shows the +logical structure of an invoice as well as its basic commands. +In case a full-fledged invoice stationary is needed, it is recommended +to use the \texttt{invoice} environment within existing business +letters which may have been pre-defined already. The \texttt{invoice} +package itself does not provide tools for including company logos, +recipient's addresses, bank account numbers etc. as these are usually +covered by the various \texttt{letter} classes available for \LaTeXe. + +\begin{figure}[h] +\begin{center} +\fbox{ +\begin{minipage}{8.5cm}% +\textbf{\huge --- Invoice ---\\[2mm]} + \texttt{\Large \char92 begin\{invoice\}\{...\}\{...\}\\[2mm]} + \fbox{ + \begin{minipage}{7.0cm} + \textbf{\Large --- Project ---\\[1.5mm]} + \texttt{\large\char92 ProjectTitle\{...\}\\[1.5mm]} + \fbox{ + \begin{minipage}{5.5cm} + \textbf{\large --- Fees ---\\} + \texttt{\char92 Fee\{...\}\{...\}\{...\}}\\ + ...\\ + ...\\ + \end{minipage} + }\\[2mm] + \fbox{ + \begin{minipage}{5.5cm} + \textbf{\large --- Expenses (local) ---\\} + \texttt{\char92 EBC\{...\}\{...\}}\\ + ...\\ + ...\\ + \textbf{\large --- Expenses (foreign) ---\\} + \texttt{\char92 EFC\{...\}\{...\}\{...\}\{...\}\{...\}}\\ + ...\\ + ...\\ + \end{minipage} + }\\[2mm] + \end{minipage} + }\\[2mm] + \fbox{ + \begin{minipage}{7.0cm} + \textbf{\Large --- \dots\ More Projects\dots\ ---} + \end{minipage} + }\\[2mm] +% \fbox{ +% \begin{minipage}{7.0cm} +% \textbf{\Large --- Project ---} +% \end{minipage} +% }\\ + \texttt{\Large\char92 end\{invoice\}} +\end{minipage} +} +\end{center} +\caption{The \texttt{invoice} Environment + and its Logical Structure\label{structure}} +\end{figure} + +Invoices contain one or more projects which in return contain the charged +items, either fees (plus tax, if applicable) and/or expenses. An +invoice with one project is announced by saying + +\begin{verbatim} +\begin{invoice}{<Base Currency>}{<VAT>} + \ProjectTitle{...}% +\end{invoice} +\end{verbatim} + +There is no limit for the number of projects in an invoice, as there +is no limit for the number of invoices per document. + +The \texttt{invoice} environment requires two arguments: +\begin{enumerate} + \item \texttt{<Base Currency>} is the name of the currency + in which the invoice is charged, e.\,g. DM, Euro, + US\$, RMB etc. + \item \texttt{<VAT>} is the percentage rate of VAT which is charged; + in Germany this is currently (autumn 2011) 19\%. If + no VAT is required, enter a \texttt{0} + (\textit{zero}) here. It is neither necessary nor + permissible to use a percent sign here. As some + countries (e.\,g. France) have fractions of + percentages (like 16.9\%), you would in this case + enter \verb|16.9| (without any percent sign). + + Setting the VAT rate to \verb-0- produces the side + effect that the lines stating the VAT subtotals and + totals disappear. + + If it is, however, desired to show the VAT results + even if they amount to zero, enter \verb-0.0- instead. +\end{enumerate} + + +\subsection{Projects} + +An invoice contains items which are usually, in the case of e.\,g. +consultancy fees and related expenses like hotel bills and air +fares, attributed to a given case or \textit{project}, or +cost center, or ``Kostenstelle'' (in German). + +A project contains any of three different types of charged items: +\begin{enumerate} + \item \textbf{Fees}. A tax can be added, if applicable. Fees + are always charged in the + base currency + of the invoice. + \item \textbf{Local Expenses}. Local expenses are charged in + units of the + base currency + of the invoice. + \item \textbf{Foreign Expenses}. Foreign expenses are charged in + units of any given foreign currency. Either the + base currency + equivalent is known (as taken from a credit card + billing statement, for example), or, if not, an + exchange rate between foreign currency and base + currency has to be stated. +\end{enumerate} + +\textbf{Nota bene:} The order of fees and expenses is fixed. Either fees or +expenses can be omitted, but expenses must be charged \textit{after} +fees. + + +\section{The First Example: How to Charge Fees} + + +A consultant charges fees per day, hour or any other unit. Usually +this unit is agreed upon in a contract and there is no further need +to refer to this unit but by its count. This is done by the +\verb-\Fee{}{}{}- command: + +\begin{verbatim} + \Fee{<Contents>}{<Rate/Unit>}{<Count>} +\end{verbatim} + +Let's assume an interim manager +charges Euro 1818.00 a day for 12 working days while +negotiating a major project, nicknamed \textit{Project Phenix}. +He also charges Euro 2750.00 a day for analysing and negotiating +the restructuring of the sales division, a work he spent 9 days with. + +\subsection{Invoices with VAT} + +We further assume that the consultant is required to charge VAT. +All information above would be entered into the invoice as follows: + +\begin{verbatim} +\begin{invoice}{Euro}{19} + \ProjectTitle{Project Phenix}% + % Contents Rate/Unit Count + \Fee{Some really lengthy and utterly + tedious negotiation} {1818.00} {12} + + \ProjectTitle{Sales Restructuring}% + % Contents Rate/Unit Count + \Fee{Sales Structure Analysis} {2750.00} { 6} + \Fee{Negotiation with Agents} {2750.00} { 3} +\end{invoice} +\end{verbatim} + +And here is how the result looks like: + +\begin{invoice}{Euro}{19} + \ProjectTitle{Project Phenix}% + \Fee{Some really lengthy and utterly + tedious negotiation} {1818.00} {12} + + \ProjectTitle{Sales Restructuring}% + \Fee{Sales Structure Analysis} {2750.00} { 6} + \Fee{Negotiation with Agents} {2750.00} { 3} +\end{invoice} + +Hints: If the base currency is to contain a dollar sign (\$), then +dollar sign must be entered in the form of \verb|\string$| +or otherwise the command writing the log file data will fail. The +contents of each fee may be verbose; while the column width is +limited, text contents longer than the column width wraps over +several columns, if necessary. + +The astute observer will note that a line beginning with ``Subtotal~Fees'' +appeared in the output of the Sales Restructuring Project without explicit +input to this effect from the user's side. The full grammar of the Fee block +requires that all fees are closed by a fee subtotal. Internally, +\texttt{invoice} is defined as a finite state automaton providing +mechanisms to insert a fee subtotal if logic requires it, and print +its value if it makes sense to humans, which is the case if there is more +than one fee. + +Note that there is an explicit command \texttt{\char92 STFee} which will +produce a subtotal of the fees charged so far. This can be used if +you want to show fee subtotals within the same project. + + +\subsection{Invoices without VAT} + +As mentioned above, an invoice may be calculated without any VAT. +The VAT lines may completely disappear, as in the following +example: +\begin{verbatim} +\begin{invoice}{Euro}{0} + \ProjectTitle{Project Phenix}% + % Contents Rate/Unit Count + \Fee{Some really lengthy and utterly + tedious negotiation} {1818.00} {12} + + \ProjectTitle{Sales Restructuring}% + % Contents Rate/Unit Count + \Fee{Sales Structure Analysis} {2750.00} { 6} + \Fee{Negotiation with Agents} {2750.00} { 3} +\end{invoice} +\end{verbatim} + + +Figure~\ref{invoice_without_VAT} on +page~\pageref{invoice_without_VAT} +shows the result. + +\begin{figure}[h] +\begin{invoice}{Euro}{0} + \ProjectTitle{Project Phenix}% + \Fee{Some really lengthy and utterly + tedious negotiation} {1818.00} {12} + + \ProjectTitle{Sales Restructuring}% + \Fee{Sales Structure Analysis} {2750.00} { 6} + \Fee{Negotiation with Agents} {2750.00} { 3} +\end{invoice} +\caption{A complete invoice + with fees but no VAT.\label{invoice_without_VAT}} +\end{figure} + +In contrast, if for any reason the VAT subtotals and totals should +be kept visible despite a \textit{value} of zero, then use a VAT +value of \verb-0.0- as in the following example: +\begin{verbatim} +\begin{invoice}{Euro}{0.0} + \ProjectTitle{Project Phenix}% + % Contents Rate/Unit Count + \Fee{Some really lengthy and utterly + tedious negotiation} {1818.00} {12} + + \ProjectTitle{Sales Restructuring}% + % Contents Rate/Unit Count + \Fee{Sales Structure Analysis} {2750.00} { 6} + \Fee{Negotiation with Agents} {2750.00} { 3} +\end{invoice} +\end{verbatim} + + +Figure~\ref{invoice_with_zero_VAT} on +page~\pageref{invoice_with_zero_VAT} +shows the result. + +\begin{figure}[h] +\begin{invoice}{Euro}{0.0} + \ProjectTitle{Project Phenix}% + \Fee{Some really lengthy and utterly + tedious negotiation} {1818.00} {12} + + \ProjectTitle{Sales Restructuring}% + \Fee{Sales Structure Analysis} {2750.00} { 6} + \Fee{Negotiation with Agents} {2750.00} { 3} +\end{invoice} +\caption{A complete invoice + with fees but zero VAT.\label{invoice_with_zero_VAT}} +\end{figure} + + +\section{The Second Example: How to Claim Expenses} + +Expenses can be charged in base currency or in any foreign currency. +The base currency's name should be announced once at the beginning +of the invoice. + +\subsection{Expenses in Base Currency} + +The shape of an expense item in base currency is simple: + +\begin{verbatim} +\EBC{<Contents>} {<Amount>} +\end{verbatim} + +Both fields contain mandatory arguments: + +\begin{enumerate} + \item \texttt{<Contents>} contains a description of the + charged item, e.\,g. ``Hotel'', ``Airport Tax'' or + whatever. + \item \texttt{<Amount>} contains the amount in base currency + units. +\end{enumerate} + + +\subsection{Expenses in Foreign Currency} + +Charging an expense in foreign currency is only slightly more +complicated. The command is: + +\begin{verbatim} +\EFC{<Contents>} + {<Foreign Currency>}{<Amount>} + {<Conversion Rate>}{<Base Currency Result>} +\end{verbatim} + +Arguments to the five fields are partially mandatory, partially optional: +\begin{enumerate} + \item \texttt{<Contents>} contains a description of the + charged item, e.\,g. ``Hotel'', ``Airport Tax'' or + whatever. + + \item \texttt{<Foreign Currency>} contains the name of the + foreign currency. + + \item \texttt{<Amount>} contains the amount in foreign currency + units. + + \item \texttt{<Conversion Rate>} contains the factor by + which the foreign currency amount has to be + multiplied in order to achieve the base currency + result. If the base currency result is stated, + then, and only then, the Conversion Rate can be + omitted. + + \item \texttt{<Base Currency Result>} contains an optional + amount in base currency units. Credit card billing + statements show this amount which usually contains + certain service charges of the credit card issuer; + the base currency result is thus the true amount of + money to be charged. If a \texttt{<Conversion Rate>} + is given, stating a base currency result becomes + optional. This is usually applied for expenses made + with cash money. +\end{enumerate} + + +Since some of the arguments given to \verb-\EFC- are optional, +there are basically two different forms of using this command. +With the variant + +\begin{verbatim} +\EFC{<Contents>}{<Foreign Currency>}{<Amount>} + {<Conversion Rate>} % Conversion rate + {} % Base currency empty! +\end{verbatim} + +(amount in foreign currency given, as well as exchange rate stated), +the command will automatically calculate the resulting amount in +base currency. + +\begin{verbatim} +\EFC{<Contents>} + {<Foreign Currency>}{<Amount>} + {} % Conversion rate empty! + {<Base Currency Result>} % Base currency +\end{verbatim} + +If, however, the exchange rate is omitted and the target amount in +base currency is given, then this value is taken directly. Stating +the resulting amount overrides the internal calculation mechanism. +Examples are given below. We use our interim manager's invoice +again, assuming this time that she spent working on Project Phenix +12 days in her home country while the Sales Restructuring effort +took her to Hong Kong. The taxi bills are paid in cash, hence she +enters the (fictive) conversion rate, whereas the hotel is paid by +credit card. She can then take the final amount from her credit card +billing statement; an example input would look as follows: + +\begin{verbatim} +\begin{invoice}{Euro}{19} + \ProjectTitle{Project Phenix}% + % Contents Rate/Unit Count + \Fee{Negotiation} {1818.00} {12} + % + % Contents Amount + \EBC{Hotel, 12 nights} {2400.00} + + \ProjectTitle{Sales Restructuring}% + % Contents Rate/Unit Count + \Fee{Sales Structure Analysis} {2750.00} { 6} + \Fee{Negotiation with Agents} {2750.00} { 3} + % + % Contents Currency Amount Conv.Rate Result + \EFC{Taxi Airport -- Hotel} {HK\$} {325.00} {0.2354} {} + \EFC{Hotel, 9 nights} {HK\$} {9180.00} {} {2111.40} +\end{invoice} +\end{verbatim} + +Figure~\ref{full_invoice} on +page~\pageref{full_invoice} +shows the result. + +\begin{figure}[h] +\begin{invoice}{Euro}{19} + \ProjectTitle{Project Phenix}% + \Fee{Negotiation} {1818.00} {12} + % + % Contents Amount + \EBC{Hotel, 12 nights} {2400.00} + + \ProjectTitle{Sales Restructuring}% + \Fee{Sales Structure Analysis} {2750.00} { 6} + \Fee{Negotiation with Agents} {2750.00} { 3} + % + % Contents Currency Amount Conv.Rate Result + \EFC{Taxi Airport -- Hotel} {HK\$} {325.00} {0.2354} {} + \EFC{Hotel, 9 nights} {HK\$} {9180.00} {} {2111.40} +\end{invoice} +\caption{A complete invoice with fees and expenses.\label{full_invoice}} +\end{figure} + +Again, a subtotal of the expenses appears only if there is more than +one expense item in a project. + + +\subsection{Hidden Expense Details} + +Occasionally it may be desirable to list only the total of expenses +incurred, while hiding the structure of expenses. In such a case, +the expense commands can be modified by attaching an \verb|i| to +their names (as in \textit{invisible}). + +A hidden expense in base currency is thus declared as: + +\begin{verbatim} +\EBCi{<Contents>} {<Amount>} +\end{verbatim} + +A hidden expense in foreign currency is declared as: + +\begin{verbatim} +\EFCi{<Contents>} + {<Foreign Currency>}{<Amount>} + {<Conversion Rate>}{<Base Currency Result>} +\end{verbatim} + +Both commands accept and require exactly the same arguments as their +visible counterparts. The expenses will be added to the expense subtotals +and the invoice total in the same way as if they were visible. If there +is no visible expense stated at all it may be useful to have at least +a line with the expense subtotal appear; this is done by the \verb|STExpenses| +command, as shown in the following example: + +\begin{verbatim} +\begin{invoice}{Euro}{19} + \ProjectTitle{Project Phenix}% + % Contents Rate/Unit Count + \Fee{Negotiation} {1818.00} {12} + % + % Contents Amount + \EBCi{Hotel, 12 nights} {2400.00} + % + \STExpenses + + \ProjectTitle{Sales Restructuring}% + % Contents Rate/Unit Count + \Fee{Sales Structure Analysis} {2750.00} { 6} + \Fee{Negotiation with Agents} {2750.00} { 3} + % + % Contents Currency Amount Conv.Rate Result + \EFCi{Taxi Airport -- Hotel} {HK\$} {325.00} {0.2354} {} + \EFCi{Hotel, 9 nights} {HK\$} {9180.00} {} {2111.40} + \STExpenses +\end{invoice} +\end{verbatim} + +Figure~\ref{invoice_with_hidden_expenses} on +page~\pageref{invoice_with_hidden_expenses} +shows the result. + +\begin{figure}[h] +\begin{invoice}{Euro}{19} + \ProjectTitle{Project Phenix}% + \Fee{Negotiation} {1818.00} {12} + % + % Contents Amount + \EBCi{Hotel, 12 nights} {2400.00} + % + \STExpenses + + \ProjectTitle{Sales Restructuring}% + \Fee{Sales Structure Analysis} {2750.00} { 6} + \Fee{Negotiation with Agents} {2750.00} { 3} + % + % Contents Currency Amount Conv.Rate Result + \EFCi{Taxi Airport -- Hotel} {HK\$} {325.00} {0.2354} {} + \EFCi{Hotel, 9 nights} {HK\$} {9180.00} {} {2111.40} + \STExpenses +\end{invoice} +\caption{A complete invoice with visible fees + but invisible expenses.\label{invoice_with_hidden_expenses}} +\end{figure} + + +\section{Deduction of Discounts and Downpayments} + +Finally, it may be possible that previous downpayments etc. have to +be considered for the invoice total. An optional discount line +can state the item and deduct the amount from the invoice total. +Deductions are always stated in base currency. They follow the following +syntax: + + +\begin{verbatim} +\Discount{<Contents>} {<Amount>} +\end{verbatim} + +Both fields contain mandatory arguments: + +\begin{enumerate} + \item \texttt{<Contents>} contains a description of the + discount item, e.\,g. ``Downpayment'', ``Tickets for + private use'' or whatever. + \item \texttt{<Amount>} contains the amount in base currency + units. +\end{enumerate} + +Figure~\ref{full_and_discounted_invoice} on +page~\pageref{full_and_discounted_invoice} +shows the result. + +\begin{figure}[h] +\begin{invoice}{Euro}{19} + \ProjectTitle{Project Phenix}% + \Fee{Negotiation} {1818.00} {12} + % + % Contents Amount + \EBC{Hotel, 12 nights} {2400.00} + + \ProjectTitle{Sales Restructuring}% + \Fee{Sales Structure Analysis} {2750.00} { 6} + \Fee{Negotiation with Agents} {2750.00} { 3} + % + % Contents Currency Amount Conv.Rate Result + \EFC{Taxi Airport -- Hotel} {HK\$} {325.00} {0.2354} {} + \EFC{Hotel, 9 nights} {HK\$} {9180.00} {} {2111.40} + \Discount{Downpayment received} {2000.00} +\end{invoice} +\caption{A complete invoice with fees, + expenses and a deduction.\label{full_and_discounted_invoice}} +\end{figure} + +\section{Postprocessing} + +In order to allow the further processing of +\texttt{invoice}-generated data, the log file contains the totals of +fees, expenses and taxes in the form of \verb-key:value- pairs. This +information appears also on the terminal while \LaTeXe\ runs. Please +note that the key appearing in the log file is expressed in the same +language as that of the master document. + +\section{Document Language} + +All column headers appearing in \texttt{invoice} can be redefined in +order to match the language of the master document. E.\,g., headings +like ``Total'' will automatically appear as ``Gesamtsumme'' if the +document language is set to German (either via \texttt{babel} or +\verb-\usepackage{german}-). + +Please observe that the \texttt{invoice} package must be called {\em +after} the document language has been selected. + +This is correct: + +\begin{verbatim} +\documentclass[10pt]{ltxdoc} +\usepackage{german} +\usepackage{invoice} % labels will now appear in German! +\end{verbatim} + +This will not work: + +\begin{verbatim} +\documentclass[10pt]{ltxdoc} +\usepackage{invoice} +\usepackage{german} % labels will still appear in English! +\end{verbatim} + + +\subsection{Specifying the Desired Language} + +It is also possible to ignore the global language settings and select +a language local to the \texttt{invoice} package by specifying the +desired language as an option: + +\begin{verbatim} +\documentclass[10pt]{ltxdoc} +\usepackage[german]{invoice} % labels in German, rest + % of document in English +\end{verbatim} + +This is useful whenever the desired language is not provided by the +installation base where \texttt{invoice} is executed. + +At present, column labels produced by \texttt{invoice} can appear +in ten languages: +Afrikaans (use \verb|afrikaans|), +Czech (use \verb|czech|), +Dutch (use \verb|dutch|), +English (use \verb|english|), +Estonian (use \verb|estonian|), +Finnish (use \verb|finnish|), +French (use \verb|french|), +German (use \verb|german| or \verb|ngerman|), +Italian (use \verb|italian|), +Spanish (use \verb|spanish|, \verb|spanishe| or \verb|spanishv|) and +Swedish (use \verb|swedish|). + +German accommodates for both \verb|german| and \verb|ngerman|, +however the output is the same. +Spanish is exceptional as there are three different versions +with differences in lexicon and grammar. There is one `traditional' +version, the second is said to demonstrate a strong `New World' influence, +and the third one is considered a variation in style, albeit +traditional. + +\subsection{Setting the Decimal Separator} + +In most Continental European languages and typesetting conventions, +the decimal separator is a comma \verb|,|, not a decimal point. +In order to produce invoices with the comma as decimal separator, +simply use \verb|comma| as a package option. + +\begin{verbatim} +\documentclass[10pt]{ltxdoc} +\usepackage{german} +\usepackage[german,comma]{invoice} +\end{verbatim} + +\subsection{Adding Labels in a New Language} + +Other languages can be added easily by editing the file +\verb-invoicelabels.sty-. Language-dependent definitions are contained in +the \verb-\if--clause. Extending the file is simple: + +\begin{enumerate} + \item Copy the labels template to the end of the file. + \item Remove the comments (\verb-%-) in column 1. + \item Fill each label definition with the appropriate + foreign language translation. + \item Put the correct internal name of the foreign language + into the condition expression of the \verb-\ifx-- + and \verb-\ifnum--clauses. +\end{enumerate} + +\begin{sloppypar} +Whenever you create your own foreign language extension please kindly +consider sending your modified \verb-invoicelabels.sty- file to the author +(at \verb+oliver.corff@email.de+) +so that it can be included in the next update. Future users can then +share your work. +\end{sloppypar} + +\section{Bugs} + +Certainly there are bugs. After all, this is not Moon, but Earth +(where life is supposed to exist, as opposed to Moon). The author +has not conducted extensive tests on the algebraic functions, and +there may be rounding and truncating errors. + +The author considers it a bug that the decimal point cannot be +replaced by a comma at present, while entering dollar signs +requires the \verb|\string$| notation. + +Spurious spaces may distort the table layout. It is especially +recommended to close all \verb"\ProjectTitle{...}%" lines with a +percent mark, as shown. If the percent mark is omitted, the first +column header is not properly aligned to the left. + +Breaking long invoice statements with many projects over several +pages results in many orphans and widows. + +\subsection{\label{koma}Compatibility with KOMA-Script} + +Unfortunately, when first writing this package the author was not aware +of the KOMA-Script classes, notably the class \texttt{scrlettr.cls} +which defines its own \verb-\invoice{#1}- command, albeit with completely +different scope, usage and syntax. KOMA-Script's \verb-\invoice{#1}- command +accepts a number and prints ``Invoice no. \#1'' in a letter +opening. Now that the names of the \texttt{invoice} package and +environment have stuck it is easier to think of a workaround than to +conceive a new name. Therefore, If the class \texttt{scrlettr.cls} is +used, the environment \texttt{invoice} is automatically renamed to +\texttt{invoiceenv}. Writing + +\begin{verbatim} +\documentclass[10pt]{scrlettr} +\usepackage{invoice} +\begin{invoice}{Euro}{19} +... +... +\end{verbatim} + +will result in an error message. Say \verb-\begin{invoiceenv}{Euro}{19}- +instead. KOMA-Script's own \verb-\invoice{#1}- command is renamed to +\verb-\invoiceno{#1}-, while \verb-\invoice{#1}- now generates an +error message reminding KOMA-Script users to apply the renamed +commands. + +\section{Desiderata} + +The \verb-invoice- package is far from complete. Future expansions +should aim at making the package more flexible. How taxes are +treated, etc., is at present a rather particular arrangement +suitable for the author's immediate needs, but a more general +solution can be designed as soon as more users reflect their needs +to the author. +\end{document} diff --git a/macros/latex/contrib/invoice/invoicelabels.sty b/macros/latex/contrib/invoice/invoicelabels.sty new file mode 100644 index 0000000000..9c8b0e6638 --- /dev/null +++ b/macros/latex/contrib/invoice/invoicelabels.sty @@ -0,0 +1,558 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% File: invoicelabels.sty (used to be invoice.def, renamed for CTAN's sake) +% Author: Oliver Corff +% Date: 2018-08-06 +% +% This file contains messages, labels etc. in English, German +% and other languages. +% +% This file cannot be used alone but is called by invoice.sty +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% This file is the only file of this package which may be +% modified without renaming it. +% +% Adding a new language to labels is simple. Follow the +% instructions at line 275 of this file, and, please!, +% do not forget to send the result to +% +% corff@zedat.fu-berlin.de or oliver.corff@email.de +% +% Credits for language contributions given in invoice.sty. +% +% Thank you very much for your support of "invoice". +% +% Oliver Corff, +% +% Berlin, Guangzhou, Ulaanbaatar, Zagreb, Shenyang, Shanghai 2003--2018 +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% English definitions are default. Other +% languages are selected automatically. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Warning messages for non-fatal situations +% +\def\InvoiceCompleted {Invoice completed. Command ignored.}% +\def\FeeSTExists {You cannot print a fee subtotal twice!}% +\def\ProjectEmpty {Project empty. No subtotal possible!}% +\def\ProjectSTExists {You cannot print a project subtotal twice!}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Error messages for fatal situations +% +\def\InternalError {Package `invoice': Internal error!}% +% +\def\NoInvoiceNesting {Invoices cannot be nested. + Close this invoice first!}% +% +\def\InvoiceCompletedNoExpense {Invoice closed. + No new expense item allowed. + Start a new invoice + first!}% +% +\def\InvoiceCompletedNoFee {Invoice closed. + No new fee item allowed. + Start a new invoice + first!}% +% +\def\InvoiceCompletedNoFeeST {Invoice closed. + No fee subtotal allowed. + Start a new invoice + first!}% +% +\def\InvoiceCompletedNoProject {Invoice closed. + No new project allowed. + Start a new invoice + first!}% +% +\def\InvoiceCompletedNoProjectST {Invoice closed. + No project subtotal allowed. + Start a new invoice + first!}% +% +\def\MissingFee {No fee given. + You must charge at least one fee!}% +% +\def\MissingInputData {Missing input data!}% +% +\def\MissingOpening {You must open an invoice!}% +% +\def\MissingProject {No project given. + Open a project first!}% +% +\def\FeeBeforeExpense {Fees are charged first. + Expenses follow.}% +% +\def\NoProjectNesting {Projects cannot be nested. + Close this project first!}% +% +\def\ProjectCompletedNoExpense {Project closed. + No new expense item allowed. + Start a new project + first!}% +% +\def\ProjectCompletedNoFee {Project closed. + No new fee item allowed. + Start a new project + first!}% +% +\def\KOMA {Users of KOMA-Script's scrlettr.cls% + ^^Jsay `invoiceno' for the scrlettr + invoice command,^^Jand `invoiceenv' + for the invoice environment!}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Labels. These ones are available in translation, too. See below. +% +\def\Warning {Warning}% +\def\Error {Error}% +\def\Expense {Expense}% +\def\Amount {Amount}% +\def\Currency {Currency}% +\def\Factor {Factor}% +\def\Activity {Activity}% +\def\Count {Count}% +\def\UnitRate {Rate/Unit}% +\def\Fees {Fees}% +\def\VAT {VAT}% +\def\Expenses {Expenses}% +\def\SumFees {Sum \Fees}% +\def\SumVAT {Sum \VAT}% +\def\SumExpenses {Sum \Expenses}% +\def\SubtotalFee {Subtotal \Fees}% +\def\SubtotalExpenses {Subtotal \Expenses}% +\def\SubtotalProject {Subtotal \Project}% + +\def\Total {Total}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Languages other than English in alphabetical order. +% So far we have: +% - Afrikaans +% - Czech +% - Dutch +% - (English) (default) +% - Estonian +% - Finnish +% - French +% - German +% - Italian +% - Spanish I +% - Spanish II, with strong English influences +% - Spanish III, a variant +% - Swedish +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is Afrikaans. +% +\ifx\l@afrikaans\undefined + \message{^^J(invoice) \Warning: + Language \string\l@afrikaans\space unknown.^^J^^J} +\else +\ifnum\number\invoice@language=\number\l@afrikaans + \def\Warning {Waarskuwing} + \def\Error {Fout} + \def\Expense {Onkostes} + \def\Amount {Bedrag} + \def\Currency {Valuta} + \def\Factor {Faktor} + \def\Activity {Aktiwiteit} + \def\Count {Aantal ure} + \def\UnitRate {Tarief} + \def\Fees {Fooie} + \def\VAT {BTW} + \def\Expenses {Uitgawes} + \def\SumFees {Totaal Fooie} + \def\SumVAT {Totaal BTW} + \def\SumExpenses {Totaal Uitgawes} + \def\SubtotalFee {Subtotaal \Fees} + \def\SubtotalExpenses {Subtotaal \Expenses} + \def\SubtotalProject {Subtotaal \Project} + \def\Total {Totaal} +\fi\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is Czech. +% +\ifx\l@czech\undefined + \message{^^J(invoice) \Warning: + Language \string\l@czech\space unknown.^^J^^J} +\else +\ifnum\number\invoice@language=\number\l@czech + \def\Warning {Upozorn{\v e}n{\' i}}% + \def\Error {Chyba}% + \def\Expense {Výdaj}% + \def\Amount {Cena}% + \def\Currency {M{\v e}na}% + \def\Factor {Pom{\e }r}% + \def\Activity {{\v C}innost}% + \def\Count {Po{\v c}et}% + \def\UnitRate {Cena}% + \def\Fees {Cena}% + \def\VAT {DPH}% + \def\Expenses {V{\' y}daje}% + \def\SumFees {\Fees celkem bez \VAT}% + \def\SumVAT {\VAT celkem}% + \def\SumExpenses {\Expenses celkem}% + \def\SubtotalFee {Mezisou{\v c}et \Fees}% + \def\SubtotalExpenses {Mezisou{\v c}et \Expenses}% + \def\SubtotalProject {Mezisou{\v c}et \Project}% + \def\Total {Celkem k {\' u}hrad{\v e}}% +\fi\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is Dutch. +% +\ifx\l@dutch\undefined + \message{^^J(invoice) \Warning: + Language \string\l@dutch\space unknown.^^J^^J} +\else +\ifnum\number\invoice@language=\number\l@dutch + \def\Warning {Waarschuwing}% + \def\Error {Fout}% + \def\Expense {Onkosten}% + \def\Amount {Bedrag}% + \def\Currency {Valuta}% + \def\Factor {Faktor}% + \def\Activity {Activiteit}% + \def\Count {Aantal}% + \def\UnitRate {Prijs/Eenheid}% + \def\Fees {Honorarium}% + \def\VAT {BTW}% + \def\Expenses {Onkosten}% + \def\SumFees {Totaal \Fees}% + \def\SumVAT {Totaal \VAT}% + \def\SumExpenses {Totaal \Expenses}% + \def\SubtotalFee {Subtotaal \Fees}% + \def\SubtotalExpenses {Subtotaal \Expenses}% + \def\SubtotalProject {Subtotaal \Project}% + \def\Total {Totaal}% +\fi\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is Estonian +\ifx\l@estonian\undefined + \message{^^J(invoice) \Warning: + Language \string\l@estonian\space unknown.^^J^^J} +\else +\ifnum\number\invoice@language=\number\l@estonian + \def\Warning {Hoiatus} % + \def\Error {Viga} % + \def\Expense {Kulu} % + \def\Amount {Kogus} % + \def\Currency {Valuuta} % + \def\Factor {Kordaja} % + \def\Activity {Tegevus} % + \def\Count {Arv} % + \def\UnitRate {\"{U}hiku hind} % + \def\Fees {Maksud} % + \def\VAT {K\"{a}ibemaks} % + \def\Expenses {Kulud} % + \def\SumFees {Maksude summa} % + \def\SumVAT {K\"{a}ibemaksu summa} % + \def\SumExpenses {Kulutuste summa} % + \def\SubtotalFee {Maksude vahesumma} % + \def\SubtotalExpenses {Kulude vahesumma} % + \def\SubtotalProject {Projekti vahesumma} % + \def\Total {Kogusumma} % +\fi\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is Finnish +\ifx\l@finnish\undefined + \message{^^J(invoice) \Warning: + Language \string\l@finnish\space unknown.^^J^^J} +\else +\ifnum\number\invoice@language=\number\l@finnish + \def\Warning {Varoitus} % Enter translations here! + \def\Error {Virhe} % + \def\Expense {Kulu} % + \def\Amount {Summa} % + \def\Currency {Valuutta} % + \def\Factor {Kerroin} % + \def\Activity {Laskutusperuste} % + \def\Count {Määrä} % + \def\UnitRate {Yksikköhinta} % + \def\Fees {Työt} % + \def\VAT {ALV} % + \def\Expenses {Kulut} % + \def\SumFees {Työt yhteensä} % + \def\SumVAT {ALV yhteensä} % + \def\SumExpenses {Kulut yhteensä} % + \def\SubtotalFee {Työt välisumma} % + \def\SubtotalExpenses {Kulut välisumma} % + \def\SubtotalProject {Välisumma} % + \def\Total {Yhteensä} % +\fi\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is French. +% +\ifx\l@french\undefined + \message{^^J(invoice) \Warning: + Language \string\l@french\space unknown.^^J^^J} +\else +\ifnum\number\invoice@language=\number\l@french + \def\Warning {Avertissement}% + \def\Error {Erreur}% + \def\Expense {D\'epense}% + \def\Amount {Montant}% + \def\Currency {Devise}% + \def\Factor {Facteur}% + \def\Activity {Activit\'e}% + \def\Count {Quantit\'e}% + \def\UnitRate {Prix/Unit\'e}% + \def\Fees {Honoraires}% + \def\VAT {TVA}% + \def\Expenses {D\'epenses}% + \def\SumFees {Total \Fees}% + \def\SumVAT {Total \VAT}% + \def\SumExpenses {Total \Expenses}% + \def\SubtotalFee {Sous-Total \Fees}% + \def\SubtotalExpenses {Sous-Total \Expenses}% + \def\SubtotalProject {Sous-Total \Project}% + \def\Total {Total}% +\fi\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is German. +% +\ifx\l@german\undefined + \message{^^J(invoice) \Warning: + Language \string\l@german\space unknown.^^J^^J} +\else +\ifnum\number\invoice@language=\number\l@german + \def\Warning {Warnung}% + \def\Error {Fehler}% + \def\Expense {Auslage}% + \def\Amount {Betrag}% + \def\Currency {W\"ahrung}% + \def\Factor {Faktor}% + \def\Activity {Aktivit\"at}% + \def\Count {Anzahl}% + \def\UnitRate {Rate/Einheit}% + \def\Fees {Honorare}% + \def\VAT {MWSt.}% + \def\Expenses {Auslagen}% + \def\SumFees {Summe \Fees}% + \def\SumVAT {Summe \VAT}% + \def\SumExpenses {Summe \Expenses}% + \def\SubtotalFee {Zwischensumme \Fees}% + \def\SubtotalExpenses {Zwischensumme \Expenses}% + \def\SubtotalProject {Zwischensumme \Project}% + \def\Total {Gesamtsumme}% +\fi\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is New German. +% +\ifx\l@ngerman\undefined + \message{^^J(invoice) \Warning: + Language \string\l@ngerman\space unknown.^^J^^J} +\else +\ifnum\number\invoice@language=\number\l@ngerman + \def\Warning {Warnung}% + \def\Error {Fehler}% + \def\Expense {Auslage}% + \def\Amount {Betrag}% + \def\Currency {W\"ahrung}% + \def\Factor {Faktor}% + \def\Activity {Aktivit\"at}% + \def\Count {Anzahl}% + \def\UnitRate {Rate/Einheit}% + \def\Fees {Honorare}% + \def\VAT {MWSt.}% + \def\Expenses {Auslagen}% + \def\SumFees {Summe \Fees}% + \def\SumVAT {Summe \VAT}% + \def\SumExpenses {Summe \Expenses}% + \def\SubtotalFee {Zwischensumme \Fees}% + \def\SubtotalExpenses {Zwischensumme \Expenses}% + \def\SubtotalProject {Zwischensumme \Project}% + \def\Total {Gesamtsumme}% +\fi\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is Italian. +% +\ifx\l@italian\undefined + \message{^^J(invoice) \Warning: + Language \string\l@italian\space unknown.^^J^^J} +\else +\ifnum\number\invoice@language=\number\l@italian + \def\Warning {Avvertenza}% + \def\Error {Errore}% + \def\Expense {Spesa}% + \def\Amount {Ammontare}% + \def\Currency {Valuta}% + \def\Factor {Fattore}% + \def\Activity {Attivit\`a}% + \def\Count {Quantit\`a}% + \def\UnitRate {Prezzo/Unit\`a}% + \def\Fees {Onorario}% + \def\VAT {IVA}% + \def\Expenses {Spese}% + \def\SumFees {Totale onorario}% + \def\SumVAT {Totale IVA}% + \def\SumExpenses {Totale spese}% + \def\SubtotalFee {Subtotale onorario}% + \def\SubtotalExpenses {Subtotale spese}% + \def\SubtotalProject {Subtotale progetto}% + \def\Total {Totale}% +\fi\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is Spanish I. +% +\ifx\l@spanish\undefined + \message{^^J(invoice) \Warning: + Language \string\l@spanish\space unknown.^^J^^J} +\else +\ifnum\number\invoice@language=\number\l@spanish + \def\Warning {Advertencia} + \def\Error {Error} + \def\Expense {Gasto} + \def\Amount {Cantidad} + \def\Currency {Divisa} + \def\Factor {Factor} + \def\Activity {Actividad} + \def\Count {Cuant\'ia} + \def\UnitRate {Precio/Unidad} + \def\Fees {Honorario} + \def\VAT {IVA} + \def\Expenses {Gastos} + \def\SumFees {Total de honorarios} + \def\SumVAT {Total IVA} + \def\SumExpenses {Total de gastos} + \def\SubtotalFee {Subtotal de honorarios} + \def\SubtotalExpenses {Subtotal de gastos} + \def\SubtotalProject {Subtotal del proyecto} + \def\Total {Total} +\fi\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is Spanish II. +% +\ifx\l@spanishe\undefined + \message{^^J(invoice) \Warning: + Language \string\l@spanishe\space unknown.^^J^^J} +\else +\ifnum\number\invoice@language=\number\l@spanishe + \def\Warning {Advertencia} + \def\Error {Error} + \def\Expense {Expensa} + \def\Amount {Monto} + \def\Currency {Moneda} + \def\Factor {Factor} + \def\Activity {Actividad} + \def\Count {Cantidad} + \def\UnitRate {Precio unitario} + \def\Fees {Pago} % + \def\VAT {IVA} % + \def\Expenses {Expensas} % + \def\SumFees {Total a pagar} + \def\SumVAT {Total IVA} + \def\SumExpenses {Total expensas} + \def\SubtotalFee {Subtotal a pagar} + \def\SubtotalExpenses {Subtotal expensas} + \def\SubtotalProject {Subtotal proyecto} + \def\Total {Total} +\fi\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is Spanish III +% +\ifx\l@spanishv\undefined + \message{^^J(invoice) \Warning: + Language \string\l@spanishv\space unknown.^^J^^J} +\else +\ifnum\number\invoice@language=\number\l@spanishv + \def\Warning {Advertencia} + \def\Error {Error} + \def\Expense {Gasto} + \def\Amount {Importe} + \def\Currency {Divisa} + \def\Factor {Factor} + \def\Activity {Actividad} + \def\Count {Cantidad} + \def\UnitRate {Precio por unidad} + \def\Fees {Honorarios} % + \def\VAT {IVA} % + \def\Expenses {Gastos} % + \def\SumFees {Honorarios totales} + \def\SumVAT {Total IVA} + \def\SumExpenses {Gastos totales} + \def\SubtotalFee {Subtotal de honorarios} + \def\SubtotalExpenses {Subtotal de gastos} + \def\SubtotalProject {Subtotal del proyecto} + \def\Total {Total} +\fi\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is Swedish. +% +\ifx\l@swedish\undefined + \message{^^J(invoice) \Warning: + Language \string\l@swedish\space unknown.^^J^^J} +\else +\ifnum\number\invoice@language=\number\l@swedish + \def\Warning {Varning}% + \def\Error {Fel}% + \def\Expense {Utlägg}% + \def\Amount {Belopp}% + \def\Currency {Valuta}% + \def\Factor {Faktor}% + \def\Activity {Aktivitet}% + \def\Count {Antal}% + \def\UnitRate {Pris/Enhet}% + \def\Fees {Arvoden}% + \def\VAT {Moms}% + \def\Expenses {Utlägg}% + \def\SumFees {Summa \Fees}% + \def\SumVAT {Summa \VAT}% + \def\SumExpenses {Summa \Expenses}% + \def\SubtotalFee {Mellansumma \Fees}% + \def\SubtotalExpenses {Mellansumma \Expenses}% + \def\SubtotalProject {Mellansumma \Project}% + \def\Total {Slutsumma}% +\fi\fi +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% How to add new label languages to the `invoice' package: +% +% 1. Copy all following lines after this explanation +% and insert them above this comment. +% +% 2. Remove all comment symbols at the beginning of the lines. +% +% 3. Fill the empty parentheses {} with the appropriate +% translations. +% +% 4. Enter the correct internal language name used by LaTeX2e +% into the condition of the \ifnum clause. +% +% 5. Please do not forget to mail the resulting file to +% oliver.corff@email.de +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Name correct language name here --v-- +% and --v--! +%\ifx\l@german\undefined +% \message{^^J(invoice) \Warning: +% Language \string\l@german\space unknown.^^J^^J} +%\else +%\ifnum\number\invoice@language=\number\l@german +% \def\Warning {} % Enter translations here! +% \def\Error {} % +% \def\Expense {} % +% \def\Amount {} % +% \def\Currency {} % +% \def\Factor {} % +% \def\Activity {} % +% \def\Count {} % +% \def\UnitRate {} % +% \def\Fees {} % +% \def\VAT {} % +% \def\Expenses {} % +% \def\SumFees {} % +% \def\SumVAT {} % +% \def\SumExpenses {} % +% \def\SubtotalFee {} % +% \def\SubtotalExpenses {} % +% \def\SubtotalProject {} % +% \def\Total {} % +%\fi\fi |