summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/invoice
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/invoice
Initial commit
Diffstat (limited to 'macros/latex/contrib/invoice')
-rw-r--r--macros/latex/contrib/invoice/README15
-rw-r--r--macros/latex/contrib/invoice/invoice.pdfbin0 -> 96697 bytes
-rw-r--r--macros/latex/contrib/invoice/invoice.sty1061
-rw-r--r--macros/latex/contrib/invoice/invoice.tex778
-rw-r--r--macros/latex/contrib/invoice/invoicelabels.sty558
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
new file mode 100644
index 0000000000..9b2a8e1bef
--- /dev/null
+++ b/macros/latex/contrib/invoice/invoice.pdf
Binary files differ
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 & &#2 &#3 &
+%
+% 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