%%
%% $Id: invoicemacro.tex,v 1.4 1996/04/10 10:18:35 stefan Exp $
%%
%% BESCHREIBUNG:  Ursprünglich abgeleitet vom `letterformat.tex' aus dem
%% TeXbook, Seite 404 bis 408, und später aus `anschrift.tex', enthält
%% diese Datei meinen Versuch eines Rechnungsformulars mit TeX.
%%
%% ÄNDERUNGEN: 04.07.1993: Einführung von Textvariablen (V0.1)
%%                         Mehrsprachigkeit eingebaut(V0.2)
%%                         Automatische Formatierung von Beträgen (V0.3)
%%             05.07.1993: Automatische Formatierung des Bestellatums (V0.4)
%%                         Fortsetzungshinweis und Schlußdank (V0.5)
%%             07.07.1993: Fehler in `\printformattedamount' bei
%%                         glatten Beträgen beseitigt (V0.6)
%%             10.07.1993: Erweiterung des Rechnungsformates für
%%                         Lieferscheine, Bestellungen und
%%                         Auftragsbestätigungen (V0.7)
%%             11.07.1993: Makros `\begintext', `\textbody', `\endtext'
%%                         sowie `\closing', `\annotations' und `\ps'
%%                         eingebaut, um mit diesem Format auch Briefe
%%                         schreiben zu können (V0.8)
%%                         Dummy-Texte als Vorgabe; suche LOCAL (V0.9)
%%             13.07.1993: Erweiterung für Angebote (V0.10)
%%             16.07.1993: Trennung LOCALer und globaler Makros und
%%                         Einbau in ein TeX-Format (V0.11)
%%             17.07.1993: Weitere LOCALisierte Texte eingebaut und
%%                         die Nachrichtenzeile verbessert (V0.12)
%%             14.09.1993: Makros für Diskettenformate (V0.13)
%%             08.11.1993: Firmenbeschreibung (V0.14)
%%             05.01.1994: Änderung der Offset-Einstellung wegen
%%                         DVIPrint 1.19 und DVIPrintSetUp 3.87 (V0.15)
%%             09.01.1994: Möglichkeit, Freitext als Gruß anzugeben (V0.16)
%%             31.01.1994: Firmenbeschreibung nun zweizeilig (V0.17)
%%             01.02.1994: Neue Seitenbreite und Offsets.  Falzzeile
%%                         erscheint auch ohne \texthead. (V0.18)
%%             01.08.1994: Korrekturen bei einigen Abkürzungen.
%%                         `spacefactor1000'.  (V0.19)
%%             31.08.1994: Falzlinie und Adreßfeld korrigiert.  (V0.20)
%%             01.09.1994: Weitere Dynamisierung von Feldern.  (V0.21)
%%             20.11.1994: Entwurfs-Copyright entfernt
%%             14.05.1995: allgemeine Version. Es sollten hier keine
%%                         Änderungen mehr gemacht werden. Diese werden
%%                         in 'invoicepatch.tex' für spezielle Wünsche
%%                         eingetragen.  (V1.0)
%%             03.03.1996: \frac Makro eingebaut
%%
%% AUTOR: Andreas Scherer
%%        Abt-Wolf-Straße 17
%%        96215 Lichtenfels
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% Durch Einbindung von "`german.sty"' werden Teile des Formulars, wie das
%% Rechnungsdatum oder die Seitenbezeichnung automatisch an eine mehrsprachige
%% Verwendung angepaßt.  Standardsprache ist deutsch.  Zum Umschalten
%% auf eine andere Sprache dient "`\selectlanguage{<language>}"', wobei
%% <language> derzeit die Werte "`german"' (Standard), "`english"',
%% "`USenglish"' und "`french"' annehmen darf.  Weitere Sprachen können
%% in ähnlicher Weise hinzugefügt werden.
%%
\input german.sty

%%
%% Die beliebten Umlaute und Sonderzeichen des Deutschen können auf
%% dem AMIGA in lesbarer Form eingegeben werden.
%%
\input ecma94.tex

%%
%% Makro für Brüche
%%
\def\frac#1/#2{\leavevmode\kern.1em\raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em/\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}

%%
%% Um auf die internen Befehle von "`german.sty"' zugreifen und
%% eigene Makros in dieser Form definieren zu können, wird der
%% Klammeraffe aktiviert.  Sein bisheriger Wert wird gesichert.
%%
\chardef\atcode=\catcode`\@
\catcode`\@=11 % \makeatletter

%%
%% Da einige Dimensionen und Font-Größen in absoluten Maßen angegeben
%% sind, sollte der Vergrößerungsfaktor nicht verändert werden.
%%
\magnification=\magstep1

%%
%% Faltmarken einfügen
%%
{\vbox to0pt{\kern6.1truecm\hbox{\kern-1.5truecm --}\vss}\nointerlineskip}
{\vbox to0pt{\kern10.9truecm\hbox{\kern-1.5truecm ---}\vss}\nointerlineskip}
{\vbox to0pt{\kern16.0truecm\hbox{\kern-1.5truecm --}\vss}\nointerlineskip}

%%
%% Erweiterte Zeichensätze für die verwendeten Macros.  Weitere
%% Fonts können nach eigenem Geschmack an dieser Stelle hinzugefügt
%% werden.  Entfernen sollte man von dieser Liste aber nichts.
%%
\font\mc=cmr9 % kleine Schriften für Versalien
\font\sc=cmr8 % nicht mit Caps Small Caps zu verwechseln
\font\csc=cmcsc10
\font\footboldfont=cmssbx10 at 8truept % für die kleinen Textteile
\font\footfont=cmss8 at 8truept % werden kleine Schriften gewählt
\font\footpound=cmitt10 scaled 800 % das Pfundzeichen
\font\largeheadfont=cmssu30 % für den Namen im Kopfteil
\font\smallheadfont=cmr8 at 8truept % für die Adresse im Kopfteil
\font\symbols=wasy8 at 8truept % das Telefonzeichen

%%
%% Vorsorglich definiere ich einige Macros für spezielle
%% Objektbezeichnungen, die nicht ganz trivial sind.
%%
\newbox\PPbox
\setbox\PPbox=\hbox{\kern.5pt\raise1pt\hbox{\sevenrm+\kern-1pt+}\kern.5pt}
\def\PP{\copy\PPbox}
\def\Cpp{{\mc C\PP\spacefactor1000}}

%%
%% Weitere Macros, die für einige Feinheiten bei den Telefonnummern
%% und der Bankverbindung dienen.  Außerdem werden Makros zur Verfügung
%% gestellt, mit denen das Rechnungsdatum überschrieben werden kann sowie
%% Auftragsdatum und Kundenkennzeichen importiert werden können.
%%
\def\ts{\thinspace}
\def\pushup#1{\leavevmode \raise.16ex\hbox{#1}}
\def\BLZ#1{\pushup{(}\bankcodename\ #1\pushup{)}}
\def\date#1{\def\@date{#1}} \def\@date{\today}
\def\orderdate#1{\def\order@date{\printformatteddate{#1}}} \def\order@date{}
\def\yourref#1{\def\your@ref{#1}} \def\your@ref{}

%%
%% Der Seitenspiegel.  Es dürfte ziemlich einsichtig sein, was hier
%% passiert.  Wie beim Vergrößerungsfaktor gilt, hier möglichst nichts
%% zu ändern.
%%
\tolerance=500
\raggedbottom
\interlinepenalty=1000
\hsize=16truecm
\vsize=21.6truecm
\hoffset=0cm
\voffset=24pt
\advance\vsize by-\voffset
\parindent=0pt
\parskip=2pt plus1pt minus.5pt

%%
%% Kopf- und Fußzeilen:  Auf der ersten Seite besteht der Kopf der
%% Rechnung aus der eigenen Firmenanschrift sowie den Kundendaten.
%% Auf Folgeseiten erscheint eine kleine Kopfzeile.  Die Fußzeile
%% gibt auf allen Seiten die Telefonnummer und die Bankverbindung an.
%% Dazu kommt auf allen Seiten der Hinweis auf die Folgeseiten, nur
%% auf der letzten Seite der Rechnung erscheint eine Dankesformel.
%%
\newcount\nextpage % die Nummer der Folgeseite.
\newskip\footlineskip % zwischen dem Übertrag oder der Endsumme und
\footlineskip=2cm % dem Rechnungsfuß bleibt Platz für Textzeilen.

%%
%% Dieser Teil ist auf spezielle Wünsche anzupassen.  "`\faxnumber"'
%% und "`\myref"' dürfen auch weggelassen werden.  Gegebenenfalls
%% sind weitere Makros zu definieren, zum Beispiel wenn ein zweites
%% Bankkonto anzugeben ist.
%%
\def\bankaccount#1{\def\bank@account{#1}} \def\bank@account{}
\def\phonenumber#1{\def\phone@number{#1}} \def\phone@number{}
\def\faxnumber#1{\def\fax@number{#1}} \def\fax@number{}
\def\myref#1{\def\my@ref{#1}} \def\my@ref{}
\def\company#1{\def\c@mp@ny{#1}}
\def\street#1{\def\str@@t{#1}}
\def\city#1{\def\c@ty{#1}}
\def\owner#1{\def\@wner{#1}}

\bankaccount{Kreditinstitut \BLZ{Bankleitzahl}\ Kontonummer}% LOCAL
\phonenumber{\pushup{(}Vorwahl\pushup{)} Durchwahl}% LOCAL
\faxnumber{\pushup{(}Vorwahl\pushup{)} Durchwahl}% LOCAL
\myref{Unsere Zeichen}% LOCAL
\company{Firmenname}% LOCAL
\street{Stra{\ss}e}% LOCAL
\city{Ort}% LOCAL
\owner{Inhaber}% LOCAL

%%
%% Auf Briefen soll die Kopfzeile auf Folgeseiten nur die
%% Anrede, das Datum und die Seitennummer enthalten.
%% Das Entwurf-Copyright wird bei Briefen unterdrückt.
%%
\newif\ifinvoice
\headline={\ifnum\pageno>1
    \tenrm\headtoname\ \addressee\hfil%
    \ifinvoice\invoicename%
      \ifnum\invoicenumber>0\ \the\invoicenumber\fi\ \ofname\ \fi%
    \@date\hfil\pagename\ \folio
  \else\hfil\fi}

\footline={\ifnum\pageno>0
  \vbox{\null\vbox to \the\footlineskip{\vss\footlinetext\vss}
    \hrule\baselineskip=9truept\tabskip=0pt
    \halign to\hsize{\footfont#\hfil\tabskip=0pt plus 1fil&%
      \footfont#\hfil&\footfont#\hfil\tabskip=0pt\cr
    \noalign{\hrule height4truept width0pt}
    \footboldfont\phonename&
    \ifx\fax@number\empty\null\else
      \footboldfont\faxname\fi&\footboldfont\bankname\cr
    \noalign{\hrule height4truept width0pt}
      \phone@number&
    \ifx\fax@number\empty\null\else
      \fax@number\fi&\bank@account\cr}}\fi}

%%
%% Mode switches.  Dieser Teil ist noch fast original aus
%% "`letterformat.tex"'.
%%
\def\beginlinemode{\endmode
  \begingroup\obeylines\def\endmode{\par\endgroup}}
\def\beginparmode{\endmode
  \begingroup\parskip=\medskipamount \def\endmode{\par\endgroup}}
\let\endmode=\par
\def\endinvoice{\endmode\supereject}

%%
%% Erzeuge die Empfängeradresse durch zeilenweise Eingabe.  Weicht
%% der Anredetext auf den Folgeseiten von der ersten Zeile der
%% Empfängeradresse ab, so kann der Text überschrieben werden.
%%
\newdimen\longindentation \longindentation=11truecm
\newbox\theaddress
\def\address{\beginlinemode\getaddress}
{\obeylines\gdef\getaddress #1
  #2
  {#1\gdef\addressee{#2}%
    \global\setbox\theaddress=\vbox to 3.5cm\bgroup\vss\raggedright%
    \hsize=\longindentation \everypar{\hangindent2em}#2
    \def\endmode{\vss\egroup\endgroup \copy\theaddress \bigskip\bigskip}}}
\def\toname#1{\gdef\addressee{#1}}

%%
%% Auf der ersten Rechnungsseite wird ein allgemeiner Textteil mit
%% Kundenangaben angebracht.  Anschließend folgt, genau wie auf den
%% Folgeseiten, die Tabelle der Rechnungspositionen.  Dafür ist das
%% Makro `\body' zuständig.
%% Will man mit dem `invoice.tex' Programm auch freie Texte, wie
%% zum Beispiel Briefe schreiben, so steht `\textbody' zur Verfügung.
%%
\def\body#1{\beginparmode\global\invoicetrue
  \ifnum\pageno>1\positions#1
  \else\bodyhead\positions#1\fi}
\def\textbody{\beginparmode\global\invoicefalse\hrule\vskip\bigskipamount}
\def\closing{\beginlinemode\getclosing}
{\obeylines\gdef\getclosing #1
  #2
  {#1\nobreak\bigskip \leftskip=.85\longindentation #2
    \nobreak\vskip5\bigskipamount % space for signature
    \def
    {\endgraf\nobreak}}}
\def\annotations{\beginlinemode\def\par{\endgraf\nobreak}\obeylines\par}
\def\ps{\beginparmode\nobreak
  \interlinepenalty5000\def\par{\endgraf\penalty5000}}
\def\begintext{\gdef\footlinetext{\null}\invoice}
\def\endtext{\endinvoice}

%%
%% Der Rechnungskopf enthält neben dem Firmenlogo auch noch die
%% Absendeadresse für Fensterumschläge und das aktuelle Datum.
%%
% Für Briefumschläge mit Klarsichtfenster wird die eigene
% Anschrift über der Kundenanschrift wiederholt.
\def\sender{\c@mp@ny, \str@@t, \c@ty}% LOCAL
% Beim Bedrucken von Briefumschlägen wird eine besondere Form
% der eigenen Anschrift gewählt.
\def\returnaddress{\c@mp@ny\par\@wner\par\str@@t, \c@ty}% LOCAL
% Als Teil der Firmenanschrift wird der Titel und die
% Telefonnummer angegeben.
\def\sendingaddress{\@wner\par{\symbols\char'007}\ \phone@number\par}% LOCAL
% Unter dem Firmennamen bleibt Platz für eine kurze Beschreibung
\def\companytext{Firmenbeschreibung Zeile 1\par
  Firmenbeschreibung Zeile 2}% LOCAL
\def\invoice{\pageno=1 \def\addressee{} \invoicelogo
  \line{\hbox to\longindentation{\vbox{\footfont\baselineskip9truept
    \hsize=\longindentation\companytext}\hfill}\kern-\longindentation
    \vbox{\smallheadfont\baselineskip9truept
      \leftskip=\longindentation\sendingaddress}}%
%  \bigskip\bigskip
  \bigskip
  \line{\hbox to\longindentation{\underbar{\footfont\sender}
    \hfil}\rm\@date\hfil}}
%%
%% Beim derzeitigen Format enthält das Firmenlogo lediglich meine
%% Anschrift in der Form von `letterformat.tex'.
%%
\def\invoicelogo{\vglue-1.6\voffset
  \hbox{\hbox to\longindentation{\smash{\largeheadfont\c@mp@ny}\hfil}% LOCAL
    \kern-\longindentation
    \vbox{\smallheadfont\baselineskip9truept
      \leftskip=\longindentation\str@@t\par\c@ty}}% LOCAL
  \vskip2truept\hrule\vskip4truept}

%%
%% Um dieses Format nicht nur für Rechnungen benutzen zu können,
%% sondern auch für Lieferscheine, Bestellungen, Aufträge und Angebote
%% wird der numerische Schalter "`\invoiceswitch"' eingeführt.  Durch
%% Setzen mit den Werten 0, 1, 2, 3 oder 4 werden entsprechende Bezeichnungen
%% im Rechnungskopf und auf den Folgeseiten verwendet.  Als Standard
%% ist "`Rechnung"' (0) vorgegeben.
%% Für Referenzzwecke wird die Kundennummer und das Auftrags-
%% beziehungsweise Bestelldatum angegeben sowie das Wort "`Rechnung"'
%% zusammen mit der Rechnungsnummer.  Diese wird durch das numerische
%% Argument des Befehles "`\invoice"' bei dessen Aufruf gesetzt.
%%
\newcount\invoiceswitch \invoiceswitch=0
\newcount\invoicenumber \invoicenumber=0
\newcount\customernumber \customernumber=0

\newskip\blocklineskip
\newskip\positionskip
\blocklineskip=.5cm
\positionskip=.5cm

\newcount\entry
\entry=0

\def\bodyhead{\hrule\vskip\blocklineskip
  \line{\ifnum\invoicenumber>0\vbox{\hbox{\footfont\numbername\hfil}
      \hbox{\number\invoiceyear/\the\invoicenumber\hfil}}\hfil\advance\entry1\fi
    \ifnum\customernumber>0\vbox{\hbox{\footfont\customername\hfil}
      \hbox{\the\customernumber\hfil}}\hfil\advance\entry1\fi
    \ifx\order@date\empty\null\else\advance\entry1
      \vbox{\hbox{\footfont\ordername\hfil}
        \hbox{\order@date\hfil}}\hfil\fi
    \ifx\your@ref\empty\null\else\advance\entry1
      \vbox{\hbox{\footfont\yourrefname\hfil}
        \hbox{\your@ref\hfil}}\hfil\fi
    \ifx\my@ref\empty\null\else\ifcase\entry\hfil\fi
      \vbox{\hbox{\footfont\myrefname\hfil}
        \hbox{\my@ref\hfil}}\fi}\bigskip
    \line{\hfil\underbar{\bf\invoicename}\hfil}
    \vskip\blocklineskip\hrule\vskip\positionskip}

\def\texthead{\vskip-\bigskipamount\vskip\blocklineskip
  \line{\ifx\order@date\empty\null\else
      \vbox{\hbox{\footfont\messagename\hfil}
        \hbox{\order@date\hfil}}\hfil\advance\entry1\fi
    \ifx\your@ref\empty\null\else\advance\entry1
      \vbox{\hbox{\footfont\yourrefname\hfil}
        \hbox{\your@ref\hfil}}\hfil\fi
    \ifx\my@ref\empty\null\else\ifcase\entry\hfil\fi
      \vbox{\hbox{\footfont\myrefname\hfil}
        \hbox{\my@ref\hfil}}\fi}\bigskip}

%%
%% Tabelle für die Rechnungspositionen.  Sämtliche Rechnungszeilen
%% einer Seite werden zusammen an dieses Makro übergeben und tabellarisch
%% formatiert.  Als "`Front End"' kann ein geeignetes Rechnungsprogramm
%% dienen, das jede Zeile durch Eintrag in das Makro "`\singleposition"'
%% erzeugt.  Dieses Makro wandelt die vorgegebenen Werte in das von
%% "`\positions"' erwartete Format um, wobei gleichzeitig eine
%% Anpassung an die jeweils verwendete Sprache erfolgt.
%%
\def\positions#1{\tabskip=0pt\halign to \hsize{
  \strut##\hfil\tabskip=1em plus 1fil& % die Artikelbezeichnung
  \hfil##\hskip.5em&% die Mengenangabe
  \hfil##&% der Einzelpreis
  \hfil##&% der Positionspreis  v o r  15% Mehrwertsteuer
  \hfil##\tabskip=0pt\cr % der Positionspreis  v o r   7% Mehrwertsteuer
  \footfont\designationname&\omit\footfont\quantityname&%
  \footfont\retailname&\footfont\pricename~I&\footfont\pricename~II\cr
  \noalign{\smallskip}
  #1\crcr}} % die eigentlichen Rechnungspositionen

%\def\singleposition|#1|#2|#3|#4|#5|#6|#7|#8|#9|{
%  #1& % die Artikelbezeichnung
%  \printformattedamount{#2}&% die Mengenangabe
%  \printformattedamount{#3}&% der Einzelpreis
%  \printformattedamount{#4}&% der Positionspreis  v o r  15% Mehrwertsteuer
%  \printformattedamount{#5}\cr}% der Positionspreis  v o r   7% Mehrwertsteuer


\def\singleposition|#1|#2|#3|#4|#5|#6|#7|#8|#9|{
  #1& % die Artikelbezeichnung
  \ifnum#3=0{\ }\else\printformattedamount{#2}\fi&% die Mengenangabe
  \ifnum#3=0{\ }\else\printformattedamount{#3}\fi&% der Einzelpreis
  \ifnum#3=0{\ }\else\printformattedamount{#4}\fi&% der Positionspreis  v o r  15% Mehrwertsteuer
  \ifnum#3=0{\ }\else\printformattedamount{#5}\fi\cr}% der Positionspreis  v o r   7% Mehrwertsteuer

%%
%% Gesamtsummen und Mehrwertsteuer.  Die Mehrwertsteuer muß bereits
%% errechnet werden.  Die beiden möglichen Steuersätze werden mit den
%% Werten von 1993 vorbelegt.  Eine Änderung ist durch Aufruf der
%% Makros "`\vatrate[I|II]"' möglich.  Am Rechnungsende werden die
%% Nettosummen und Mehrwertsteuerbeträge getrennt aufgeführt und
%% der Rechnungsgesamtbetrag ausgegeben.  Dieser Ausgabeteil wird
%% oben und unten durch Linien eingefaßt.  Im Fußbereich wird eine
%% Dankesformel unter der Rechnung angebracht.  Passen die Positionen
%% einer Rechnung nicht auf eine Seite, so erfolgt die Ausgabe von
%% Übertragsseiten und entsprechender Blöcke bei den getrennten
%% Rechnungsseiten sowie ein Hinweis auf die Folgeseite im Fußbereich.
%%
\def\vatrateI#1{\def\vat@rate@I{#1}}
  \def\vat@rate@I{15} % Normaler Mehrwertsteuersatz (Hard- und Software) LOCAL
\def\vatrateII#1{\def\vat@rate@II{#1}}
  \def\vat@rate@II{7} % Ermäßigter Mehrwertsteuersatz (Bücher) LOCAL

\def\\{\hfil\break}
\def\setthanksname#1{\def\@thanks@name{\vbox{\hsize=8cm
  \baselineskip=\normalbaselineskip#1}}}
\def\@thanks@name{\thanksname}

\def\totals|#1|#2|#3|#4|#5|{\gdef\footlinetext{\hfil\@thanks@name\hfil}
  \vfill\hrule\vskip\blocklineskip\tabskip=0pt\halign to \hsize{
    \strut##\hfil\tabskip=1em plus 1fil&% "`Summe I und II"'
    \hfil##&% Betrag Summe I und Betrag Summe II
    \hfil## \%&% "`15%"' und "`7%"'
    \hfil##&% Mehrwertsteuerbeträge
    \hfil{\bf##}\tabskip=0pt\cr % "`Rechnungsbetrag"' und sein Wert
    \footfont\totalname&\footfont\currencyname&
    \omit\footfont\vatname&\footfont\currencyname&
    \footfont\amountname\ \currencyname\cr
    \pricename~I&\printformattedamount{#1}&
      \printformattedamount{\vat@rate@I}&\printformattedamount{#3}&\cr
    \pricename~II&\printformattedamount{#2}&
      \printformattedamount{\vat@rate@II}&\printformattedamount{#4}&
      \underbar{\printformattedamount{#5}}\cr}
  \vskip\blocklineskip\hrule}

\def\subtotals|#1|#2|#3|#4|#5|{\gdef\footlinetext{\ifnum\pageno>0
  \nextpage=\pageno \advance\nextpage by 1\hfil\continuename\
  \the\nextpage\hfil\fi}
  \vfill\hrule\vskip\blocklineskip\tabskip=0pt\halign to \hsize{
    \strut##\hfil\tabskip=1em plus 1fil&% "`Zwischensumme I und II"'
    \hfil##&% Betrag Zwischensumme I und II
    \hfil## \%&% "`15%"' und "`7%"'
    \hfil##&% Mehrwertsteuerbeträge
    \hfil{\bf##}\tabskip=0pt\crcr % "`Übertrag"' und sein Wert
    \footfont\subtotalname&\footfont\currencyname&
    \omit\footfont\vatname&\footfont\currencyname&
    \footfont\carryovername\ \currencyname\cr
    \pricename~I&\printformattedamount{#1}&
      \printformattedamount{\vat@rate@I}&\printformattedamount{#3}&\cr
    \pricename~II&\printformattedamount{#2}&
      \printformattedamount{\vat@rate@II}&\printformattedamount{#4}&
      \underbar{\printformattedamount{#5}}\cr
  \noalign{\vskip\blocklineskip\hrule\eject\hrule\vskip\blocklineskip}
    \footfont\subtotalname&\footfont\currencyname&
    \omit\footfont\vatname&\footfont\currencyname&
    \footfont\carryovername\ \currencyname\cr
    \pricename~I&\printformattedamount{#1}&
      \printformattedamount{\vat@rate@I}&\printformattedamount{#3}&\cr
    \pricename~II&\printformattedamount{#2}&
      \printformattedamount{\vat@rate@II}&\printformattedamount{#4}&
      \underbar{\printformattedamount{#5}}\cr}
  \vskip\blocklineskip\hrule\vskip\positionskip}

%%
%% In Anlehnung an das Verfahren aus "`german.sty"' werden zahlreiche
%% verwendete Begriffe des Rechnungsformulars in mehreren Sprachen
%% zur Verfügung gestellt.  Vorläufig sind dies Deutsch, britisches
%% und amerikanisches Englisch sowie Französisch.  Andere Sprachen
%% lassen sich in gleicher Weise einbauen.  Dazu ist die Definition
%% eines Makros "`\invoice<Sprache>"' vorzunehmen, wobei <Sprache>
%% dem \languagecount entspricht.
%%
\def\invoicegerman{%
  \def\amountname{Rechnungsbetrag}%
  \def\bankname{Bank}%
  \def\bankcodename{BLZ}%
  \def\carryovername{\"Ubertrag}%
  \def\continuename{Fortsetzung auf Seite}%
  \def\currencyname{DM}%
  \def\customername{Kundennummer}%
  \def\designationname{Bezeichnung}%
  \def\artnumname{Art.-Nr.}%
  \def\faxname{Telefax}%
  \def\fracsep{,}%
  \def\invoicename{\ifcase\invoiceswitch Rechnung\or Lieferschein\or
    Bestellung\or Auftragsbest\"atigung\or Angebot\fi}%
  \def\messagename{Ihre Nachricht vom}%
  \def\millsep{.}%
  \def\myrefname{Unsere Zeichen}%
  \def\numbername{\ifcase\invoiceswitch Rechnungsnummer\or
    Lieferscheinnummer\or Bestellungsnummer\or
    Auftragsbest\"atigung\or Angebotsnummer\fi}%
  \def\ofname{vom}%
  \def\ordername{Ihre Bestellung vom}%
  \def\phonename{Telefon}%
  \def\pricename{Preis}%
  \def\quantityname{Anzahl}%
  \def\retailname{Einzelpreis}%
  \def\sumname{Gesamtpreis}%
  \def\subtotalname{Zwischensumme}%
  \def\thanksname{Wir danken f\"ur Ihren Auftrag}%
  \def\thousep{.}%
  \def\totalname{Summe}%
  \def\vatname{Mehrwertsteuer}%
  \def\yourrefname{Ihre Zeichen}}%

\def\invoiceenglish{%
  \def\amountname{Invoice amount}%
  \def\bankname{Bank}%
  \def\bankcodename{BCN}%
  \def\carryovername{Carry over}%
  \def\continuename{To be continued on page}%
  \def\currencyname{{\footpound\$}}%
  \def\customername{Customer Number}%
  \def\designationname{Designation}%
  \def\artnumname{Art.-Nr.}%
  \def\faxname{Fax number}%
  \def\fracsep{.}%
  \def\invoicename{\ifcase\invoiceswitch Invoice\or Delivery note\or
    Order\or Confirmation of order\or Offer\fi}%
  \def\messagename{Your message of}%
  \def\millsep{,}%
  \def\myrefname{Our reference}%
  \def\numbername{\ifcase\invoiceswitch Number of invoice\or
    Number of delivery\or Number of order\or Number of confirmation\or
    Number of offer\fi}%
  \def\ofname{of}%
  \def\ordername{Your order of}%
  \def\phonename{Phone number}%
  \def\pricename{Price}%
  \def\quantityname{Quantity}%
  \def\retailname{Retail price}%
  \def\sumname{Gesamtpreis}%
  \def\subtotalname{Subtotal}%
  \def\thanksname{Thank you for choosing us}%
  \def\thousep{,}%
  \def\totalname{Total}%
  \def\vatname{Value added tax}%
  \def\yourrefname{Your reference}}%

\def\invoiceUSenglish{%
  \def\amountname{Invoice amount}%
  \def\bankname{Bank}%
  \def\bankcodename{BCN}%
  \def\carryovername{Carry over}%
  \def\continuename{To be continued on page}%
  \def\currencyname{\$}%
  \def\customername{Customer number}%
  \def\designationname{Designation}%
  \def\artnumname{Art.-Nr.}%
  \def\faxname{Fax number}%
  \def\fracsep{.}%
  \def\invoicename{\ifcase\invoiceswitch Invoice\or Delivery note\or
    Order\or Confirmation of order\or Offer\fi}%
  \def\messagename{Your message of}%
  \def\millsep{,}%
  \def\myrefname{Our reference}%
  \def\numbername{\ifcase\invoiceswitch Number of invoice\or
    Number of delivery\or Number of order\or Number of confirmation\or
    Number of offer\fi}%
  \def\ofname{of}%
  \def\ordername{Your order of}%
  \def\phonename{Phone number}%
  \def\pricename{Price}%
  \def\quantityname{Quantity}%
  \def\retailname{Retail price}%
  \def\sumname{Gesamtpreis}%
  \def\subtotalname{Subtotal}%
  \def\thanksname{Thank you for choosing us}%
  \def\thousep{,}%
  \def\totalname{Total value}%
  \def\vatname{Value added tax}%
  \def\yourrefname{Your reference}}%

\def\invoicefrench{%
  \def\amountname{Somme de facture}%
  \def\bankname{Banque}%
  \def\bankcodename{Code de banque}%
  \def\carryovername{Report}%
  \def\continuename{Continu\'e en page}%
  \def\currencyname{FF}%
  \def\customername{Client}%
  \def\designationname{D\'esignation}%
  \def\artnumname{Art.-Nr.}%
  \def\faxname{T\'el\'efax}%
  \def\fracsep{,}%
  \def\invoicename{\ifcase\invoiceswitch Facture\or Bulletin de livraison\or
    Commande\or Confirmation de commande\or Offre\fi}%
  \def\messagename{Votre lettre du}%
  \def\millsep{ }%
  \def\myrefname{Notre r\'ef\'erence}%
  \def\numbername{\ifcase\invoiceswitch Nombre de facture\or
    Nombre de bulletin de livraison\or Nombre du commande\or
    Nombre de confirmation de commande\or Nombre d'offre\fi}%
  \def\ofname{du}%
  \def\ordername{Votre commande du}%
  \def\phonename{T\'el\'ephone}%
  \def\pricename{Prix}%
  \def\quantityname{Quantit\'e}%
  \def\retailname{Prix unitaire}%
  \def\sumname{Gesamtpreis}%
  \def\subtotalname{Montant partiel}%
  \def\thanksname{Nous vous remercions pour votre commande}%
  \def\thousep{ }%
  \def\totalname{Montant total}%
  \def\vatname{Taxe sur la valeur ajout\'ee}%
  \def\yourrefname{Votre r\'ef\'erence}}%

%%
%% Zur formatierten Ausgabe von Beträgen beliebiger Währungseinheiten
%% gehört selbstverständlich auch die richtige Verwendung von
%% Trennsymbolen wie Komma und Punkt.  Sämtliche Rechnungsbeträge
%% werden vom FrontEnd als Zahlenkette in Hundertsteleinheiten erwartet.
%%
\newcount\m
\newcount\fractions
\newcount\units
\newcount\thousands
\newcount\millions

\def\gobbleone1{}
\def\printthreedigits{\advance\m by 1000
  \expandafter\gobbleone\number\m
  \advance\m by -1000}
\def\printtwodigits{\advance\m by 100
  \expandafter\gobbleone\number\m
  \advance\m by -100}

\def\printformattedamount#1{%
  \m=#1 \ifnum\m<0\def\sign{$-$}\m=-\m\else\def\sign{}\fi
  \fractions=\m
  \divide\m by 100 \multiply\m by 100
  \advance\fractions by -\m
  \units=\m \divide\units by 100
  \divide\m by 100000 \multiply\m by 1000
  \advance\units by -\m
  \thousands=\m \divide\thousands by 1000 
  \divide\m by 1000000 \multiply \m by 1000
  \advance\thousands by -\m
  \millions=\m \divide\millions by 1000
  \divide\m by 1000000 \multiply \m by 1000
  \advance\millions by -\m
  \sign%
  \ifnum\millions>0 \the\millions\millsep%
    \m=\thousands\printthreedigits\thousep%
    \m=\units\printthreedigits\fracsep%
  \else\ifnum\thousands>0 \the\thousands\thousep%
      \m=\units\printthreedigits\fracsep%
    \else\ifnum\units>0 \the\units\fracsep%
      \else 0\fracsep\fi\fi\fi
  \m=\fractions\printtwodigits}

%\def\printformattedamount#1{%
%  \m=#1 \ifnum\m<0\def\sign{$-$}\m=-\m\else\def\sign{}\fi
%  \ifnum\m=0{\ }\else{%
%  \fractions=\m
%  \divide\m by 100 \multiply\m by 100
%  \advance\fractions by -\m
%  \units=\m \divide\units by 100
%  \divide\m by 100000 \multiply\m by 1000
%  \advance\units by -\m
%  \thousands=\m \divide\thousands by 1000 
%  \divide\m by 1000000 \multiply \m by 1000
%  \advance\thousands by -\m
%  \millions=\m \divide\millions by 1000
%  \divide\m by 1000000 \multiply \m by 1000
%  \advance\millions by -\m
%  \sign%
%  \ifnum\millions>0 \the\millions\millsep%
%    \m=\thousands\printthreedigits\thousep%
%    \m=\units\printthreedigits\fracsep%
%  \else\ifnum\thousands>0 \the\thousands\thousep%
%      \m=\units\printthreedigits\fracsep%
%    \else\ifnum\units>0 \the\units\fracsep%
%      \else 0\fracsep\fi\fi\fi
%  \m=\fractions\printtwodigits}\fi}
  

%%
%% Ähnliches gilt für die Ausgabe des Bestell- oder Auftragsdatums,
%% das stets im Format [ttmmyyyy] erwartet wird.  Sollen noch weitere
%% Sprachen unterstützt werden, so muß jeweils ein Makro der Form
%% "`\Date<Sprache>"' definiert werden, wobei <Sprache> genau dem
%% \languagecount entsprechen muß.
%%
\newcount\days
\newcount\months
\newcount\years

\newcount\invoiceyear \invoiceyear=1994

\def\Month@German{\ifcase\months \or
  Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
  Juli\or August\or September\or Oktober\or November\or Dezember\fi}
\def\Dategerman{\def\printdate{\number\days.~\Month@German\space\number\years}}
\def\Dateaustrian{\def\printdate{\number\days.~\ifnum 1=\months
  J\"anner\else \Month@German\fi \space\number\years}}
\def\Month@English{\ifcase\months \or
  January\or February\or March\or April\or May\or June\or
  July\or August\or September\or October\or November\or December\fi}
\def\DateUSenglish{\def\printdate{\Month@English\space\number\days,
  \number\years}}
\def\Dateenglish{\def\printdate{\number\days \ifcase\days \or
  st\or nd\or rd\or th\or th\or th\or th\or th\or th\or th\or %  1..10
  th\or th\or th\or th\or th\or th\or th\or th\or th\or th\or % 11..20
  st\or nd\or rd\or th\or th\or th\or th\or th\or th\or th\or % 21..30
  st\fi~\Month@English \space\number\years}}
\def\Datefrench{\def\printdate{\number\days \ifnum1=\days \/$^{\rm er}$\fi
  \space\ifcase\months \or
  janvier\or f\'evrier\or mars\or avril\or mai\or juin\or
  juillet\or ao\^ut\or septembre\or octobre\or novembre\or d\'ecembre\fi
  \space\number\years}}

\def\printformatteddate#1{\m=#1 \years=\m
  \divide\m by 10000 \multiply\m by 10000
  \advance\years by -\m
  \months=\m \divide\months by 10000
  \divide\m by 1000000 \multiply\m by 100
  \advance\months by -\m
  \days=\m \divide\days by 100
  \divide\m by 10000 \multiply \m by 100
  \advance\days by -\m
  \printdate}

%%
%% Will man eigene Briefumschläge bedrucken, so benutzt man
%% diesen Befehl.
%%
\def\makelabel{\endinvoice\hbox{\vrule
    \vbox{\hrule \kern6truept
      \hbox{\kern6truept\vbox to 2truein{\hsize=\longindentation
          \smallheadfont\baselineskip9truept\returnaddress
          \vss\moveright 2truein\copy\theaddress\vss}%
        \kern6truept}\kern6truept\hrule}\vrule}
  \pageno=0\vfill\eject}

%%
%% Auch durch die einfache Wiederholung der Ausgabe im Fensterbrief
%% führt zu geeigneten Adressaufklebern.
%%
\def\invoicelabel{\endinvoice
  \line{\hbox to\longindentation{\underbar{\footfont\sender}\hfil}\hfil}
  \copy\theaddress
  \pageno=0\vfill\eject}

%%
%% Nur in Verbindung mit "`german.sty"' ist folgende Definition
%% überhaupt sinnvoll.  Es handelt sich um die Erweiterung des
%% "`\selectlanguage"'-Makros um die Begriffe für die Rechnung
%% und die eigene Datumsroutine.
%%
\def\selectlanguage#1{\protect\p@selectlanguage{%
  \ifnum\escapechar=\expandafter`\string#1\empty
  \else \string#1\empty\fi}
  \expandafter\ifx\csname l@#1\endcsname\relax\else
    \csname invoice#1\endcsname
    \csname Date#1\endcsname\relax
  \fi}

%%
%% Der Klammeraffe bekommt wieder seine alte Bedeutung.
%%
\catcode`\@=\atcode % return to previous catcode

%%
%% Dies wird zwar bereits in "`german.sty"' gesetzt; wegen der
%% Erweiterung muß aber "`\selectlanguage{german}"' nochmals
%% aufgerufen werden.
%%
\germanTeX

%%
%% Hier endet INVOICEMACRO.TEX.
%%
\endinput
