%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%        Datei: invoice.sty
%        Autor: Oliver Corff
%      Contact: corff@zedat.fu-berlin.de, oliver.corff@email.de
%        Datum: December 16, 2003
%      Version: 0.7
%    Copyright: Ulaanbaatar, Beijing, Berlin, Zagreb, Shenyang, Shanghai
%  Description: This collection of macros provides
%               tools for generating complex invoices
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Corrections, suggestions and contributions by:
%%%%%%
% 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}[2003/12/16]
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% -------------------    language options    -------------------
%
%
\newcount\invoice@language
\let\invoice@language=\language
%
\ifx\l@english\undefined	\newlanguage\l@english \fi
\ifx\l@german\undefined		\newlanguage\l@german \fi
\ifx\l@dutch\undefined		\newlanguage\l@dutch \fi
\ifx\l@french\undefined		\newlanguage\l@french \fi
\ifx\l@afrikaans\undefined	\newlanguage\l@afrikaans \fi
\ifx\l@italian\undefined	\newlanguage\l@italian \fi
%
\DeclareOption{english}{\invoice@language=\number\l@english}
\DeclareOption{german}{\invoice@language=\number\l@german}
\DeclareOption{dutch}{\invoice@language=\number\l@dutch}
\DeclareOption{french}{\invoice@language=\number\l@french}
\DeclareOption{afrikaans}{\invoice@language=\number\l@afrikaans}
\DeclareOption{italian}{\invoice@language=\number\l@italian}
%
\ProcessOptions
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% -------------------      initial code      -------------------
%
\RequirePackage{ifthen}
\RequirePackage{longtable}
\RequirePackage{calc}
\input{realcalc}
\input{invoice.def}
%
\newcommand{\InvoiceVersion}{0.7}%
\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}%
		\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]{%
	\Rmul\r#1{0.01}%% <- Reduce to BaseCurrency
	\Rtrunc\r{2}\r%	% <- Truncate to two digits
	\r%		% <- Output data!
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\Message@Value}[1]{%
	\Rmul\r#1{0.01}%% <- Reduce to BaseCurrency
	\Rtrunc\r{2}\r%	% <- 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
%
		\setcounter{One@Fee}{100 * \real{#2} * \real{#3} * 1}%
%
		\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}%
	\Rmul\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}%
	\Rmul\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
			\Rmul\r{100}{#3}%
			\Rmul\r \r {#4}%
		}%
		{% Target in BaseCurrency
			\Rmul\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
			\Rmul\r{100}{#3}%
			\Rmul\r\r{#4}%
		}%
		{% Target in BaseCurrency
			\Rmul\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}
	\gdef\Flag{8}%
}
\endinput
% vim:ts=4:sw=4
