1 % ----------------------------------------------------------
3 % Globale Vorlage fuer Briefartige Documente LX-Office 2.6
5 % Changelog: see gitlog
6 \newcommand{\ftLetterVersion}{1.2-u (05.12.2012)}
9 % http://www.gnu.de/licenses/gpl-3.0.html
13 % Autor: Wulf Coulmann scripts_at_gpl.coulmann.de
14 % Aufgebaut auf invoice.tex 0.1 kmk@lilalaser.de
16 % ----------------------------------------------------------
18 \documentclass[letter,fontsize=11pt]{scrlttr2}
23 \@latex@warning@no@line{ #### this is default.tex \ftLetterVersion #####}
32 \usepackage{filecontents}
36 \usepackage{longtable}
41 \usepackage{zwischensumme}
42 \ifthenelse{\isundefined{\employeecountry}}{\input{mydata}}{}
45 \newcommand{\docname}{<%template_meta.formname NOESCAPE%>}
46 \newcommand{\TemplateMetaLanguageDescription}{<%template_meta.language.description NOESCAPE%>}
47 \newcommand{\LangCode}{<%template_meta.language.template_code NOESCAPE%>}
48 \newcommand{\TemplateMetaLanguageOutputNumberformat}{<%template_meta.language.output_numberformat NOESCAPE%>}
49 \newcommand{\TemplateMetaLanguageOutputDateformat}{<%template_meta.language.output_dateformat NOESCAPE%>}
50 \newcommand{\TemplateMetaFormat}{<%template_meta.format NOESCAPE%>}
51 \newcommand{\TemplateMetaExtension}{<%template_meta.extension NOESCAPE%>}
52 \newcommand{\TemplateMetaMedia}{<%template_meta.media NOESCAPE%>}
53 \newcommand{\TemplateMetaPrinterDescription}{<%template_meta.printer.description NOESCAPE%>}
54 \newcommand{\TemplateMetaPrinterTemplateCode}{<%template_meta.printer.template_code NOESCAPE%>}
56 %%%%%%%%% Report-Variablen umsetzen, damit latex sie in lxbriefkopf.tex sieht.
57 %%%% Die eigenen Daten
58 \newcommand{\employeename}{<%employee_name%>}
59 \newcommand{\employeecompany}{<%employee_company%>}
60 \newcommand{\employeeaddress}{<%employee_address%>}
61 \newcommand{\employeetel}{<%employee_tel%>}
62 \newcommand{\employeefax}{<%employee_fax%>}
63 \newcommand{\employeecoustid}{<%employee_co_ustid%>}
64 \newcommand{\employeetaxnumber}{<%employee_taxnumber%>}
65 \newcommand{\media}{<%media%>}
69 \newcommand{\name}{<%name%>}
70 \newcommand{\Shipname}{\ifthenelse{\equal{<%shiptoname%>}{\leer}}{<%name%>}{<%shiptoname%>}}
71 \newcommand{\departmentone}{<%department_1%>}
72 \newcommand{\departmenttwo}{<%department_2%>}
73 \newcommand{\cpgreeting}{<%cp_greeting%>}
74 \newcommand{\cptitle}{<%cp_title%>}
75 \newcommand{\cpgivenname}{<%cp_givenname%>}
76 \newcommand{\cpname}{<%cp_name%>}
77 \newcommand{\street}{<%street%>}
78 \newcommand{\Shipstreet}{\ifthenelse{\equal{<%shiptostreet%>}{\leer}}{<%street%>}{<%shiptostreet%>}}
79 \newcommand{\country}{<%country%>}
80 \newcommand{\Shipcountry}{<%shiptocountry%>}
81 \newcommand{\UstId}{<%ustid%>}
82 \newcommand{\zipcode}{<%zipcode%>}
83 \newcommand{\Shipzipcode}{\ifthenelse{\equal{<%shiptozipcode%>}{\leer}}{<%zipcode%>}{<%shiptozipcode%>}}
84 \newcommand{\city}{<%city%>}
85 \newcommand{\Shipcity}{\ifthenelse{\equal{<%shiptocity%>}{\leer}}{<%city%>}{<%shiptocity%>}}
86 \newcommand{\phone}{<%customerphone%>}
87 \newcommand{\fax}{<%customerfax%>}
89 %%%% Variablen, die sich auf das ganze Dokument beziehen
90 \newcommand{\kundennummer}{<%customernumber%>}
91 \newcommand{\vendornumber}{<%vendornumber%>}
92 \newcommand{\quonumber}{<%quonumber%>} % Angebotsnummer
93 \newcommand{\ordnumber}{<%ordnumber%>} % Auftragsnummer bei uns
94 \newcommand{\cusordnumber}{<%cusordnumber%>} % Auftragsnummer beim Kunden
95 \newcommand{\invnumber}{<%invnumber%>} % Rechnungsnummer
96 \newcommand{\donumber}{<%donumber%>} % Lieferscheinnummer
97 %\newcommand{\docnumber}{Rechnungsnummer: \invnumber}
98 \newcommand{\quodate}{<%quodate%>} % Angebotsdatum
99 \newcommand{\orddate}{<%orddate%>} % Auftragsdatum
100 \newcommand{\reqdate}{<%reqdate%>} % gewuenschtes Lieferdatum
101 \newcommand{\deliverydate}{<%deliverydate%>} % Lieferdatum
102 \newcommand{\invdate}{<%invdate%>} % Rechnungsdatum
103 \newcommand{\transdate}{<%transdate%>} % Lieferscheindatum
104 \newcommand{\terms}{<%terms%>} % Zahlungsfrist
105 \newcommand{\duedate}{<%duedate%>} % Fälligkeitsdatum
106 \newcommand{\invtotal}{<%invtotal NOFORMAT%>} % Gesamtbetrag
107 \newcommand{\paid}{<%paid NOFORMAT%>} % Schon bezahlt
108 \newcommand{\total}{<%total NOFORMAT%>} % Restbetrag
109 \newcommand{\subtotal}{<%subtotal NOFORMAT%>} % Restbetrag
110 \newcommand{\paymentterms}{<%payment_terms%>} % Zahlungsbedingungen
111 \newcommand{\paymentPrivatEnd}{E} % Endung bei Privatkunden
112 \newcommand{\paymenttype}{<%payment_description%>} % name der Zahlungs-art - fuer Steuerung brutto/netto
116 \newcommand{\shiptoname}{<%shiptoname%>}
117 \newcommand{\shiptocontact}{<%shiptocontact%>}
118 \newcommand{\shiptodepartmentone}{<%shiptodepartment_1%>}
119 \newcommand{\shiptodepartmenttwo}{<%shiptodepartment_2%>}
120 \newcommand{\shiptostreet}{<%shiptostreet%>}
121 \newcommand{\shiptocity}{<%shiptocity%>}
122 \newcommand{\shiptocountry}{<%shiptocountry%>}
123 \newcommand{\shiptophone}{<%shiptophone%>}
124 \newcommand{\shiptozipcode}{<%shiptozipcode%>}
125 \newcommand{\shiptofax}{<%shiptofax%>}
127 %%%% Die Waehrungsvariable in Waehrunszeichen umsetzen
128 \newcommand{\currency}{<%currency%>}
129 \ifthenelse{\equal{\currency}{EUR}}{\let\currency\euro}{}
130 \ifthenelse{\equal{\currency}{YEN}}{\let\currency\textyen}{}
131 \ifthenelse{\equal{\currency}{GBP}}{\let\currency\pounds}{}
132 \ifthenelse{\equal{\currency}{USD}}{\let\currency\$}{}
134 %%%%%%%%%%%%% Ende Reportvariablen-Umsetzung
136 \newcommand{\NoValue}{0}
137 \newcommand{\Picklist}{0}
138 \newcommand{\PurchaseOrder}{0}
139 \newcommand{\trash}{0}
140 \newcommand{\nonemptyline}[2]{\ifthenelse{\equal{#2}{\leer}}{}{#1#2~\\}}
141 \newcommand{\MyAdress}{\IfStrEq{\docname}{sales_delivery_order}{\Shipname~\\
142 % lieferadresse wenn Lieferschein
143 \nonemptyline{\cpgreeting{ }\cpgivenname{ }}{\cpname}
144 \nonemptyline{}{\departmentone}
146 \Shipzipcode{ }\Shipcity
147 \ifthenelse{\equal{\Shipcountry}{\employeecountry}}{}{~\\ \Shipcountry} % Laenderangabe wird nur gedruckt,
148 ~ % wenn der Empfaenger nicht im eigenen Land sitzt.
151 \nonemptyline{\cpgreeting{ }\cpgivenname{ }}{\cpname}
152 \nonemptyline{}{\departmentone}
155 \ifthenelse{\equal{\country} {\employeecountry}}{}{
156 \ifthenelse{\equal{\country}{\leer}}{}{ ~\\ \country} } % Laenderangabe wird nur gedruckt,
157 ~ % wenn der Empfaenger nicht im eigenen Land sitzt.
165 %%% dei folgenden Funktionen lesen den Dokumentennamen aus und _muessen_nach_ \begin{dokument} stehen.
167 % ==== statische Begriffe in der aktuellen Sprache einlesen
171 \ifthenelse{\bgPdfEmailOnly = 1 }{
172 \ifthenelse{\equal{\media}{email}}{
180 % ==== dokumenttyp ermitteln
181 \IfStrEq{\docname}{pick_list}{
183 \setkomavar{backaddress}{\DeliveryAddress}
186 \resizebox{\useplength{firstheadwidth}-50mm}{!}{%
190 \renewcommand{\NoValue}{1}
191 \renewcommand{\Picklist}{1}
192 \newcommand{\doctype}{}
193 \newcommand{\MyDocdate}{\transdate}
194 \newcommand{\DocNoTitle}{\DelorderNumber}
195 \newcommand{\docnumber}{\donumber}
196 \renewcommand{\deliverydate}{\transdate}
198 \ifthenelse{\equal{\ordnumber}{\leer}}{
199 % wenn keine Auftragsnummer -> Angebotsnummer
200 \newcommand{\SecNoTitle}{\QuotationNumber}
201 \newcommand{\secnumber}{\quonumber}
203 \newcommand{\SecNoTitle}{\OrderNumber}
204 \newcommand{\secnumber}{\ordnumber}
207 \IfStrEq{\docname}{sales_delivery_order}{
209 \renewcommand{\NoValue}{1}
210 \newcommand{\doctype}{\TitleDelorder}
211 \newcommand{\MyDocdate}{\transdate}
212 \newcommand{\DocNoTitle}{\DelorderNumber}
213 \newcommand{\docnumber}{\donumber}
214 \renewcommand{\deliverydate}{\transdate}
216 \ifthenelse{\equal{\ordnumber}{\leer}}{
217 % wenn keine Auftragsnummer -> Angebotsnummer
218 \newcommand{\SecNoTitle}{\QuotationNumber}
219 \newcommand{\secnumber}{\quonumber}
221 \newcommand{\SecNoTitle}{\OrderNumber}
222 \newcommand{\secnumber}{\ordnumber}
225 \IfStrEq{\docname}{invoice}{
227 \newcommand{\doctype}{\TitleInv}
228 \newcommand{\MyDocdate}{\invdate}
229 \newcommand{\DocNoTitle}{\InvNumber}
230 \newcommand{\docnumber}{\invnumber}
232 \ifthenelse{\equal{\ordnumber}{\leer}}{
233 % wenn keine Auftragsnummer -> Angebotsnummer
234 \newcommand{\SecNoTitle}{\QuotationNumber}
235 \newcommand{\secnumber}{\quonumber}
237 \newcommand{\SecNoTitle}{\OrderNumber}
238 \newcommand{\secnumber}{\ordnumber}
241 \IfStrEq{\docname}{proforma}{
242 \newcommand{\doctype}{\TitleProforma}
243 \newcommand{\MyDocdate}{\invdate}
244 \newcommand{\DocNoTitle}{\InvNumber}
245 \newcommand{\docnumber}{\invnumber}
247 \ifthenelse{\equal{\ordnumber}{\leer}}{
248 % wenn keine Auftragsnummer -> Angebotsnummer
249 \newcommand{\SecNoTitle}{\QuotationNumber}
250 \newcommand{\secnumber}{\quonumber}
252 \newcommand{\SecNoTitle}{\OrderNumber}
253 \newcommand{\secnumber}{\ordnumber}
256 \IfStrEq{\docname}{purchase_order}{
257 \renewcommand{\PurchaseOrder}{1}
258 \newcommand{\doctype}{\TitlePurchaseOrder}
259 \newcommand{\MyDocdate}{\orddate}
260 \newcommand{\DocNoTitle}{\RequestOrderNumber}
261 \newcommand{\docnumber}{\ordnumber}
262 \renewcommand{\deliverydate}{\reqdate}
263 \renewcommand{\DelDate}{\ReqByTitle}
264 \renewcommand{\CustomerID}{\VendorID}
265 \renewcommand{\kundennummer}{\vendornumber}
266 \newcommand{\SecNoTitle}{}
267 \newcommand{\secnumber}{}
269 \IfStrEq{\docname}{credit_note}{
270 \newcommand{\doctype}{\TitleCreditNote}
271 \newcommand{\MyDocdate}{\invdate}
272 \newcommand{\DocNoTitle}{\CredNumber}
273 \newcommand{\docnumber}{\invnumber}
274 % keine 2. Documentnummer
275 \newcommand{\SecNoTitle}{}
276 \newcommand{\secnumber}{}
278 \IfStrEq{\docname}{sales_order}{
279 % Auftragsbestaetigung
280 \newcommand{\doctype}{\TitleSalesOrder}
281 \newcommand{\MyDocdate}{\orddate}
282 \renewcommand{\deliverydate}{\reqdate}
283 \newcommand{\DocNoTitle}{\OrderNumber}
284 \newcommand{\docnumber}{\ordnumber}
286 \ifthenelse{\equal{\ordnumber}{\leer}}{
287 % wenn keine Angebotsnummer -> leer
288 \newcommand{\SecNoTitle}{}
289 \newcommand{\secnumber}{}
291 \newcommand{\SecNoTitle}{\QuotationNumber}
292 \newcommand{\secnumber}{\quonumber}
295 \IfStrEq{\docname}{sales_quotation}{
297 \newcommand{\doctype}{\TitleSalesQuotation}
298 \newcommand{\MyDocdate}{\quodate}
299 \renewcommand{\DelDate}{\ValidUntil}
300 \renewcommand{\deliverydate}{\reqdate}
301 \newcommand{\DocNoTitle}{\QuotationNumber}
302 \newcommand{\docnumber}{\quonumber}
304 \newcommand{\SecNoTitle}{}
305 \newcommand{\secnumber}{}
310 % ==== \paid auf 0.00 falls leer
311 \IfSubStr{\paid}{\DecimalSign}{}{\renewcommand{\paid}{0{\DecimalSign}00}}
318 \begin{letter}{{\ifthenelse{\isnamedefined{MyAdressfield}}{\MyAdressfield
324 %========Datum und Nummern====================================================
327 \begin{tabular*}{\textwidth+1em }{@{\extracolsep{\fill}}llllr}
328 \MakeUppercase{\tiny \DocNoTitle} &
329 \MakeUppercase{\tiny \CustomerID} &
330 \MakeUppercase{\tiny \SecNoTitle } &
331 \MakeUppercase{\tiny \DelDate } &
332 \MakeUppercase{\tiny \Date}~\\
333 \mainfont\docnumber &
334 \mainfont\kundennummer &
335 \mainfont\secnumber &
336 \mainfont\deliverydate &
337 \mainfont\MyDocdate~\\
341 \hspace{-0.5em} \DocId
347 \ifthenelse{\bgPdfFirstPageOnly = 1 }{
353 {\noindent\textbf\doctype}~\\
354 \IfEndWith{\paymenttype}{\paymentPrivatEnd}{\PriceInclTax }{ }
357 %======Die eigentliche-Tabelle========================================
359 % temporaere Datei mit Tabelle anlegen
360 \begin{filecontents}{<%template_meta.tmpfile NOESCAPE%>.table.tex}
366 \ifthenelse{\NoValue > 0 }
367 { % Tabelle ohne Preisen
368 \ifthenelse{\Picklist = 1 }{
370 \begin{longtable}{@{}rlX@{ }rlrrrl@{}}
372 \begin{longtable}{@{}rlX@{ }rlrr@{}}
375 % Kopfzeile der Tabelle
382 \ifthenelse{\Picklist = 1 }{& {\Take} & {\Storage} }{}
387 % Tabellenkopf nach dem Umbruch
393 \ifthenelse{\Picklist = 1 }{& {\Take} & {\Storage} }{}
400 <%runningnumber%> % Laufende Positionsnummer
402 <%number%> % Artikelnummer
404 <%description%> % Kurzbeschreibung des Artikels
405 \ifthenelse{\equal{<%longdescription%>}{\leer}}{}{ \newline <%longdescription%>}
406 % Ein zeilenweises Auslieferdatum, wenn es gesetzt bei der Position hinterlegt ist.
407 \ifthenelse{\equal{<%deliverydate_oe%>}{\leer}}{}{
408 \newline \DelDate:~<%deliverydate_oe%>}
410 <%qty NOFORMAT%> % Menge
413 %\ifthenelse{\Picklist = 1 }{& {x} & {x} }{}
414 %\ifthenelse{\Picklist = 1 }{& {x} & {x} \hhline{~~~~~--} }{~\\}
415 \ifthenelse{\Picklist = 1 }{& {\underline{;~~~~~~~~~}} & {\underline{;~~~~~~~~~}}~\\ }{~\\}
418 \end{longtable} % Ende der zentralen Tabelle
419 }{ % Tabelle mit Preisen
420 \begin{longtable}{@{}rlX@{ }rlrrr@{}}
421 % Kopfzeile der Tabelle
430 {\Total} \hspace{2mm} ~\\
434 % Tabellenkopf nach dem Umbruch
442 {\Total} \hspace{2mm} ~\\
444 \multicolumn{7}{r}{ \rule{0mm}{5mm} \TabCarry{:} \MarkZwsumPos}
448 % Fuss der Teiltabellen
449 \multicolumn{7}{r}{ \rule{0mm}{5mm} \TabSubTotal{:} \MarkZwsumPos } ~\\
452 % Das Ende der Tabelle
454 \multicolumn{7}{r}{ \rule{0mm}{5mm} \TabSubTotal{:} \MarkZwsumPos} ~\\
458 <%runningnumber%> % Laufende Positionsnummer
460 <%number%> % Artikelnummer
462 <%description%> % Kurzbeschreibung des Artikels
463 \ifthenelse{\equal{<%longdescription%>}{\leer}}{}{ \newline <%longdescription%>}
464 % Ein zeilenweises Auslieferdatum, wenn es gesetzt ist.
465 \ifthenelse{\equal{<%reqdate%>}{\leer}}{}{
466 \newline \DelDate:~<%reqdate%>}
468 <%qty NOFORMAT%> % Menge
472 %\IfEndWith{\paymentterms}{_e}{EN}{\brutto{<%sellprice NOFORMAT%>}{<%qty NOFORMAT%>}{<%p_discount%>}}
473 \IfEndWith{\paymenttype}{\paymentPrivatEnd}{
474 \BruttoSellPrice{<%sellprice NOFORMAT%>}{<%tax_rate%>}
476 \ifthenelse{\equal{<%p_discount%>}{0}}{}{ -<%p_discount%>\%}
478 \BruttoWert{<%linetotal NOFORMAT%>}{<%tax_rate%>}
480 \numprint{<%sellprice NOFORMAT%>}
482 \ifthenelse{\equal{<%p_discount%>}{0}}{}{ -<%p_discount%>\%}
484 \Wert{<%linetotal NOFORMAT%>} % Zeilensumme addieren
488 \end{longtable} % Ende der zentralen Tabelle
490 \end{filecontents} % Ende der Hilfsdatei.
492 \LTXtable{\textwidth}{<%template_meta.tmpfile NOESCAPE%>.table.tex}
494 \rule{\textwidth}{0pt} % Ein (unsichtbarer) Strich quer ueber die Seite
496 \vspace{-2em plus 10em minus 2em}~\\
497 \ifthenelse{\NoValue > 0 }
498 { % wenn keine Zahlen
504 \setlength{\tabcolsep}{0.2em}
505 \ifthenelse{\equal{\paid}{0{\DecimalSign}00} }
506 { % Wenn noch nichts gezahlt wurde
507 \IfSubStr{\invtotal}{\DecimalSign}{}{
508 \fpAdd{\invtotal}{0}{<%subtotal NOFORMAT%>}
510 \fpAdd{\invtotal}{\invtotal}{<%tax NOFORMAT%>}
514 \begin{tabular}{@{}rrr@{}}
515 %{Summe vor Steuern:}& {\numprint{<%subtotal NOFORMAT%>}} & ~\\
517 % Die unterschiedlichen Steueranteile getrennt ausweisen
519 { \IfEndWith{\paymenttype}{\paymentPrivatEnd}{\TaxInc }{ } <%taxdescription%>}
521 {\numprint{<%tax NOFORMAT%>}}& ~\\
524 {\Sum~ \currency:} & \textbf{\numprint{\invtotal}}
527 { % Wenn bereits etwas gezahlt wurde
529 \begin{tabular}{@{}rrr@{}}
531 {\EbT}& {\numprint{<%subtotal NOFORMAT%>}} & ~\\
533 % Die unterschiedlichen Steueranteile getrennt ausweisen
537 {\numprint{<%tax NOFORMAT%>}}& ~\\
540 \midrule % Ein dünner Strich
541 \Sum & \numprint{\invtotal} & ~\\
544 \AlreadyPayed~ {<%paymentdate%>}:& -{\numprint{<%payment%>}} & ~\\
547 \midrule[2pt] % Ein etwas dickerer Strich
548 {\Left~ \currency:} & \numprint{\total}
552 } %Ende des Summenkasten
555 \vfill % Den Rest-Text soweit wie möglich nach unten schieben
556 \ifthenelse{\isempty{<%notes%>}}{}{
558 \noindent <%notes%> ~\\[2em]
562 \ifthenelse{\Picklist = 0}{\noindent \ifthenelse{\equal{<%ustid%>}{\leer}}{}{\UstidTitle} \UstId}{}
563 \noindent \paymenthints % ist in translations.tex deffiniert
564 \ifthenelse{\PurchaseOrder = 0}{\noindent \paymentterms}{}