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}{}