X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=templates%2Ff-tex%2Fletter.tex;fp=templates%2Ff-tex%2Fletter.tex;h=726f5fddf19a83f5d3a22ca3e1a3d377d50f0157;hb=f0e9585f5e47401746e78b8b939078d80a848120;hp=0000000000000000000000000000000000000000;hpb=2828d1565b297bf51e3e06ae8b6baec1817c294d;p=kivitendo-erp.git diff --git a/templates/f-tex/letter.tex b/templates/f-tex/letter.tex new file mode 100644 index 000000000..726f5fddf --- /dev/null +++ b/templates/f-tex/letter.tex @@ -0,0 +1,563 @@ +% ---------------------------------------------------------- +% letter.tex +% Globale Vorlage fuer Briefartige Documente LX-Office 2.6 +% +% Changelog: see gitlog + \newcommand{\ftLetterVersion}{1.0-u (16.11.2011)} +% +% Lizenz +% http://www.gnu.de/licenses/gpl-3.0.html +% +% Siehe ./README +% +% Autor: Wulf Coulmann scripts_at_gpl.coulmann.de +% Aufgebaut auf invoice.tex 0.1 kmk@lilalaser.de +% +% ---------------------------------------------------------- + +\documentclass[letter,fontsize=11pt]{scrlttr2} + + +\begingroup + \makeatletter + \@latex@warning@no@line{ #### this is letter.tex \ftLetterVersion #####} +\endgroup + + +\usepackage{ifpdf} +\usepackage{graphicx} +\usepackage{german} +\usepackage{textcomp} +\usepackage{lastpage} +\usepackage{filecontents} +\usepackage{etex} +\usepackage{ltxtable} +\usepackage{tabularx} +\usepackage{longtable} +\usepackage{booktabs} +\usepackage{numprint} +\usepackage{xstring} +\newcommand{\leer}{} +\usepackage{zwischensumme} +\ifthenelse{\isundefined{\employeecountry}}{\input{mydata}}{} + + + +% Dateinamen einlesen und auswertbar machen +\scantokens\expandafter{% + \expandafter\def\expandafter\docname\expandafter{\jobname}} + +%%%%%%%%% Report-Variablen umsetzen, damit latex sie in lxbriefkopf.tex sieht. +%%%% Die eigenen Daten +\newcommand{\employeename}{<%employee_name%>} +\newcommand{\employeecompany}{<%employee_company%>} +\newcommand{\employeeaddress}{<%employee_address%>} +\newcommand{\employeetel}{<%employee_tel%>} +\newcommand{\employeefax}{<%employee_fax%>} +\newcommand{\employeecoustid}{<%employee_co_ustid%>} +\newcommand{\employeetaxnumber}{<%employee_taxnumber%>} +\newcommand{\media}{<%media%>} + + +%%%% Adressat +\newcommand{\name}{<%name%>} +\newcommand{\Shipname}{\ifthenelse{\equal{<%shiptoname%>}{\leer}}{<%name%>}{<%shiptoname%>}} +\newcommand{\departmentone}{<%department_1%>} +\newcommand{\departmenttwo}{<%department_2%>} +\newcommand{\cpgreeting}{<%cp_greeting%>} +\newcommand{\cptitle}{<%cp_title%>} +\newcommand{\cpgivenname}{<%cp_givenname%>} +\newcommand{\cpname}{<%cp_name%>} +\newcommand{\street}{<%street%>} +\newcommand{\Shipstreet}{\ifthenelse{\equal{<%shiptostreet%>}{\leer}}{<%street%>}{<%shiptostreet%>}} +\newcommand{\country}{<%country%>} +\newcommand{\Shipcountry}{\ifthenelse{\equal{<%shiptocountry%>}{\leer}}{<%country%>}{<%shiptocountry%>}} +\newcommand{\UstId}{<%ustid%>} +\newcommand{\zipcode}{<%zipcode%>} +\newcommand{\Shipzipcode}{\ifthenelse{\equal{<%shiptozipcode%>}{\leer}}{<%zipcode%>}{<%shiptozipcode%>}} +\newcommand{\city}{<%city%>} +\newcommand{\Shipcity}{\ifthenelse{\equal{<%shiptocity%>}{\leer}}{<%city%>}{<%shiptocity%>}} +\newcommand{\phone}{<%customerphone%>} +\newcommand{\fax}{<%customerfax%>} + +%%%% Variablen, die sich auf das ganze Dokument beziehen +\newcommand{\kundennummer}{<%customernumber%>} +\newcommand{\vendornumber}{<%vendornumber%>} +\newcommand{\quonumber}{<%quonumber%>} % Angebotsnummer +\newcommand{\ordnumber}{<%ordnumber%>} % Auftragsnummer bei uns +\newcommand{\cusordnumber}{<%cusordnumber%>} % Auftragsnummer beim Kunden +\newcommand{\invnumber}{<%invnumber%>} % Rechnungsnummer +\newcommand{\donumber}{<%donumber%>} % Lieferscheinnummer +%\newcommand{\docnumber}{Rechnungsnummer: \invnumber} +\newcommand{\quodate}{<%quodate%>} % Angebotsdatum +\newcommand{\orddate}{<%orddate%>} % Auftragsdatum +\newcommand{\reqdate}{<%reqdate%>} % gewuenschtes Lieferdatum +\newcommand{\deliverydate}{<%deliverydate%>} % Lieferdatum +\newcommand{\invdate}{<%invdate%>} % Rechnungsdatum +\newcommand{\transdate}{<%transdate%>} % Lieferscheindatum +\newcommand{\terms}{<%terms%>} % Zahlungsfrist +\newcommand{\duedate}{<%duedate%>} % Fälligkeitsdatum +\newcommand{\invtotal}{<%invtotal%>} % Gesamtbetrag +\newcommand{\paid}{<%paid%>} % Schon bezahlt +\newcommand{\total}{<%total%>} % Restbetrag +\newcommand{\subtotal}{<%subtotal NOFORMAT%>} % Restbetrag +\newcommand{\paymentterms}{<%payment_terms%>} % Zahlungsbedingungen +\newcommand{\paymentPrivatEnd}{E} % Endung bei Privatkunden +\newcommand{\paymenttype}{<%payment_description%>} % name der Zahlungs-art - fuer Steuerung brutto/netto + + +%%%% Lieferadresse +\newcommand{\shiptoname}{<%shiptoname%>} +\newcommand{\shiptocontact}{<%shiptocontact%>} +\newcommand{\shiptodepartmentone}{<%shiptodepartment_1%>} +\newcommand{\shiptodepartmenttwo}{<%shiptodepartment_2%>} +\newcommand{\shiptostreet}{<%shiptostreet%>} +\newcommand{\shiptocity}{<%shiptocity%>} +\newcommand{\shiptocountry}{<%shiptocountry%>} +\newcommand{\shiptophone}{<%shiptophone%>} +\newcommand{\shiptozipcode}{<%shiptozipcode%>} +\newcommand{\shiptofax}{<%shiptofax%>} + +%%%% Die Waehrungsvariable in Waehrunszeichen umsetzen +\newcommand{\currency}{<%currency%>} +\ifthenelse{\equal{\currency}{EUR}}{\let\currency\euro}{} +\ifthenelse{\equal{\currency}{YEN}}{\let\currency\textyen}{} +\ifthenelse{\equal{\currency}{GBP}}{\let\currency\pounds}{} +\ifthenelse{\equal{\currency}{USD}}{\let\currency\$}{} + +%%%%%%%%%%%%% Ende Reportvariablen-Umsetzung + +\newcommand{\NoValue}{0} +\newcommand{\Picklist}{0} +\newcommand{\PurchaseOrder}{0} +\newcommand{\trash}{0} +\newcommand{\nonemptyline}[2]{\ifthenelse{\equal{#2}{\leer}}{}{#1#2~\\}} +\newcommand{\MyAdress}{\IfSubStr{\docname}{sales_delivery_order}{\Shipname~\\ + % lieferadresse wenn Lieferschein + \nonemptyline{\cpgreeting{ }\cpgivenname{ }}{\cpname} + \nonemptyline{}{\departmentone} + \Shipstreet ~\\ + \Shipzipcode{ }\Shipcity + \ifthenelse{\equal{\Shipcountry}{\employeecountry}}{}{ + \ifthenelse{\equal{\Shipcountry}{\leer}}{}{ ~\\ \Shipcountry} } % Laenderangabe wird nur gedruckt, + ~ % wenn der Empfaenger nicht im eigenen Land sitzt. + }{ + \name~\\ + \nonemptyline{\cpgreeting{ }\cpgivenname{ }}{\cpname} + \nonemptyline{}{\departmentone} + \street ~\\ + \zipcode{ }\city + \ifthenelse{\equal{\country} {\employeecountry}}{}{ + \ifthenelse{\equal{\country}{\leer}}{}{ ~\\ \country} } % Laenderangabe wird nur gedruckt, + ~ % wenn der Empfaenger nicht im eigenen Land sitzt. + } +} + + + +\begin{document} + +%%% dei folgenden Funktionen lesen den Dokumentennamen aus und _muessen_nach_ \begin{dokument} stehen. + +% ==== statische Begriffe in der aktuellen Sprache einlesen +\input{translations} + + +\ifthenelse{\bgPdfEmailOnly = 1 }{ + \ifthenelse{\equal{\media}{email}}{ + }{ + \firsthead{} + \watermark{} + } +}{} + + +% ==== dokumenttyp ermitteln +\IfSubStr{\docname}{pick_list}{ + % Sammelliste + \setkomavar{backaddress}{\DeliveryAddress} + \firsthead{ + \hspace{-3mm} + \resizebox{\useplength{firstheadwidth}-50mm}{!}{% + \huge \TitlePicklist + } + } + \renewcommand{\NoValue}{1} + \renewcommand{\Picklist}{1} + \newcommand{\doctype}{} + \newcommand{\MyDocdate}{\transdate} + \newcommand{\DocNoTitle}{\DelorderNumber} + \newcommand{\docnumber}{\donumber} + \renewcommand{\deliverydate}{\transdate} + % 2. Documentnummer + \ifthenelse{\equal{\ordnumber}{\leer}}{ + % wenn keine Auftragsnummer -> Angebotsnummer + \newcommand{\SecNoTitle}{\QuotationNumber} + \newcommand{\secnumber}{\quonumber} + }{ + \newcommand{\SecNoTitle}{\OrderNumber} + \newcommand{\secnumber}{\ordnumber} + } +}{} +\IfSubStr{\docname}{sales_delivery_order}{ + % Lieferschein + \renewcommand{\NoValue}{1} + \newcommand{\doctype}{\TitleDelorder} + \newcommand{\MyDocdate}{\transdate} + \newcommand{\DocNoTitle}{\DelorderNumber} + \newcommand{\docnumber}{\donumber} + \renewcommand{\deliverydate}{\transdate} + % 2. Documentnummer + \ifthenelse{\equal{\ordnumber}{\leer}}{ + % wenn keine Auftragsnummer -> Angebotsnummer + \newcommand{\SecNoTitle}{\QuotationNumber} + \newcommand{\secnumber}{\quonumber} + }{ + \newcommand{\SecNoTitle}{\OrderNumber} + \newcommand{\secnumber}{\ordnumber} + } +}{} +\IfSubStr{\docname}{invoice}{ + % Rechnung + \newcommand{\doctype}{\TitleInv} + \newcommand{\MyDocdate}{\invdate} + \newcommand{\DocNoTitle}{\InvNumber} + \newcommand{\docnumber}{\invnumber} + % 2. Documentnummer + \ifthenelse{\equal{\ordnumber}{\leer}}{ + % wenn keine Auftragsnummer -> Angebotsnummer + \newcommand{\SecNoTitle}{\QuotationNumber} + \newcommand{\secnumber}{\quonumber} + }{ + \newcommand{\SecNoTitle}{\OrderNumber} + \newcommand{\secnumber}{\ordnumber} + } +}{} +\IfSubStr{\docname}{proforma}{ + \newcommand{\doctype}{\TitleProforma} + \newcommand{\MyDocdate}{\invdate} + \newcommand{\DocNoTitle}{\InvNumber} + \newcommand{\docnumber}{\invnumber} + % 2. Documentnummer + \ifthenelse{\equal{\ordnumber}{\leer}}{ + % wenn keine Auftragsnummer -> Angebotsnummer + \newcommand{\SecNoTitle}{\QuotationNumber} + \newcommand{\secnumber}{\quonumber} + }{ + \newcommand{\SecNoTitle}{\OrderNumber} + \newcommand{\secnumber}{\ordnumber} + } +}{} +\IfSubStr{\docname}{purchase_order}{ + \renewcommand{\PurchaseOrder}{1} + \newcommand{\doctype}{\TitlePurchaseOrder} + \newcommand{\MyDocdate}{\orddate} + \newcommand{\DocNoTitle}{\RequestOrderNumber} + \newcommand{\docnumber}{\ordnumber} + \renewcommand{\deliverydate}{\reqdate} + \renewcommand{\DelDate}{\ReqByTitle} + \renewcommand{\CustomerID}{\VendorID} + \renewcommand{\kundennummer}{\vendornumber} + \newcommand{\SecNoTitle}{} + \newcommand{\secnumber}{} +}{} +\IfSubStr{\docname}{credit_note}{ + \newcommand{\doctype}{\TitleCreditNote} + \newcommand{\MyDocdate}{\invdate} + \newcommand{\DocNoTitle}{\CredNumber} + \newcommand{\docnumber}{\invnumber} + % keine 2. Documentnummer + \newcommand{\SecNoTitle}{} + \newcommand{\secnumber}{} +}{} +\IfSubStr{\docname}{sales_order}{ + % Auftragsbestaetigung + \newcommand{\doctype}{\TitleSalesOrder} + \newcommand{\MyDocdate}{\orddate} + \renewcommand{\deliverydate}{\reqdate} + \newcommand{\DocNoTitle}{\OrderNumber} + \newcommand{\docnumber}{\ordnumber} + % 2. Documentnummer + \ifthenelse{\equal{\ordnumber}{\leer}}{ + % wenn keine Angebotsnummer -> leer + \newcommand{\SecNoTitle}{} + \newcommand{\secnumber}{} + }{ + \newcommand{\SecNoTitle}{\QuotationNumber} + \newcommand{\secnumber}{\quonumber} + } +}{ } +\IfSubStr{\docname}{sales_quotation}{ + % Angebot + \newcommand{\doctype}{\TitleSalesQuotation} + \newcommand{\MyDocdate}{\quodate} + \renewcommand{\DelDate}{\ValidUntil} + \renewcommand{\deliverydate}{\reqdate} + \newcommand{\DocNoTitle}{\QuotationNumber} + \newcommand{\docnumber}{\quonumber} + % 2. Documentnummer + \newcommand{\SecNoTitle}{} + \newcommand{\secnumber}{} +}{ } + + + +% ==== \paid auf 0.00 falls leer +\IfSubStr{\paid}{\DecimalSign}{}{\renewcommand{\paid}{0{\DecimalSign}00}} + + + +\setkomavar{date}{} + + +\begin{letter}{{\ifthenelse{\isnamedefined{MyAdressfield}}{\MyAdressfield + }{\MyAdress + }} +} +\opening{} + +%========Datum und Nummern==================================================== + +\newcommand{\DocId}{ + \begin{tabular*}{\textwidth+1em }{@{\extracolsep{\fill}}llllr} + \MakeUppercase{\tiny \DocNoTitle} & + \MakeUppercase{\tiny \CustomerID} & + \MakeUppercase{\tiny \SecNoTitle } & + \MakeUppercase{\tiny \DelDate } & + \MakeUppercase{\tiny \Date}~\\ + \mainfont\docnumber & + \mainfont\kundennummer & + \mainfont\secnumber & + \mainfont\deliverydate & + \mainfont\MyDocdate~\\ +\end{tabular*} ~\\ +} + +\hspace{-0.5em} \DocId + + + + +\nexthead{ + \ifthenelse{\bgPdfFirstPageOnly = 1 }{ + \hspace{-4mm} \DocId + }{} +} +\vspace{ 5mm} + +{\noindent\textbf\doctype}~\\ +\IfEndWith{\paymenttype}{\paymentPrivatEnd}{\PriceInclTax }{ } + + +%======Die eigentliche-Tabelle======================================== + +% temporaere Datei mit Tabelle anlegen +\begin{filecontents}{tabelle.tex} +\mainfont +\resetlaufsumme + + + + \ifthenelse{\NoValue > 0 } + { % Tabelle ohne Preisen + \ifthenelse{\Picklist = 1 }{ + + \begin{longtable}{@{}rlX@{ }rlrrrl@{}} + }{ + \begin{longtable}{@{}rlX@{ }rlrr@{}} + + } + % Kopfzeile der Tabelle + + {\Pos} & + {\Number} & + {\ItemNo} & + {\Count} & + {\Unit} \hspace{2mm} + \ifthenelse{\Picklist = 1 }{& {\Take} & {\Storage} }{} + ~\\ + \midrule + \endfirsthead + + % Tabellenkopf nach dem Umbruch + {\Pos} & + {\Number} & + {\ItemNo} & + {\Count} & + {\Unit} \hspace{2mm} + \ifthenelse{\Picklist = 1 }{& {\Take} & {\Storage} }{} + ~\\ + + \midrule + \endhead + + <%foreach number%> + <%runningnumber%> % Laufende Positionsnummer + & + <%number%> % Artikelnummer + & + <%description%> % Kurzbeschreibung des Artikels + \ifthenelse{\equal{<%longdescription%>}{\leer}}{}{ \newline <%longdescription%>} + % Ein zeilenweises Auslieferdatum, wenn es gesetzt bei der Position hinterlegt ist. + \ifthenelse{\equal{<%deliverydate_oe%>}{\leer}}{}{ + \newline \DelDate:~<%deliverydate_oe%>} + & + <%qty NOFORMAT%> % Menge + & + <%unit%> % Einheit + %\ifthenelse{\Picklist = 1 }{& {x} & {x} }{} + %\ifthenelse{\Picklist = 1 }{& {x} & {x} \hhline{~~~~~--} }{~\\} + \ifthenelse{\Picklist = 1 }{& {\underline{;~~~~~~~~~}} & {\underline{;~~~~~~~~~}}~\\ }{~\\} + %~\\ % + <%end number%> + \end{longtable} % Ende der zentralen Tabelle + }{ % Tabelle mit Preisen + \begin{longtable}{@{}rlX@{ }rlrrr@{}} + % Kopfzeile der Tabelle + + {\Pos} & + {\Number} & + {\ItemNo} & + {\Count} & + {\Unit} & + {\Fee} & + {\Dis} & + {\Total} \hspace{2mm} ~\\ + \midrule + \endfirsthead + + % Tabellenkopf nach dem Umbruch + {\Pos} & + {\Number} & + {\ItemNo} & + {\Count} & + {\Unit} & + {\Fee} & + {\Dis} & + {\Total} \hspace{2mm} ~\\ + \midrule + \multicolumn{7}{r}{ \rule{0mm}{5mm} \TabCarry{:} \MarkZwsumPos} + \endhead + + + % Fuss der Teiltabellen + \multicolumn{7}{r}{ \rule{0mm}{5mm} \TabSubTotal{:} \MarkZwsumPos } ~\\ + \endfoot + + % Das Ende der Tabelle + \midrule + \multicolumn{7}{r}{ \rule{0mm}{5mm} \TabSubTotal{:} \MarkZwsumPos} ~\\ + \endlastfoot + + <%foreach number%> + <%runningnumber%> % Laufende Positionsnummer + & + <%number%> % Artikelnummer + & + <%description%> % Kurzbeschreibung des Artikels + \ifthenelse{\equal{<%longdescription%>}{\leer}}{}{ \newline <%longdescription%>} + % Ein zeilenweises Auslieferdatum, wenn es gesetzt ist. + \ifthenelse{\equal{<%reqdate%>}{\leer}}{}{ + \newline \DelDate:~<%reqdate%>} + & + <%qty NOFORMAT%> % Menge + & + <%unit%> % Einheit + & + %\IfEndWith{\paymentterms}{_e}{EN}{\brutto{<%sellprice NOFORMAT%>}{<%qty NOFORMAT%>}{<%p_discount%>}} + \IfEndWith{\paymenttype}{\paymentPrivatEnd}{ + \BruttoSellPrice{<%sellprice NOFORMAT%>}{<%tax_rate%>} + & + \ifthenelse{\equal{<%p_discount%>}{0}}{}{ -<%p_discount%>\%} + & + \BruttoWert{<%linetotal NOFORMAT%>}{<%tax_rate%>} + }{ + \numprint{<%sellprice NOFORMAT%>} + & + \ifthenelse{\equal{<%p_discount%>}{0}}{}{ -<%p_discount%>\%} + & + \Wert{<%linetotal NOFORMAT%>} % Zeilensumme addieren + } + ~\\ % + <%end number%> + \end{longtable} % Ende der zentralen Tabelle + } +\end{filecontents} % Ende der Hilfsdatei. + +\LTXtable{\textwidth}{tabelle.tex} + +\rule{\textwidth}{0pt} % Ein (unsichtbarer) Strich quer ueber die Seite +\vspace{ 5mm} +\vspace{-2em plus 10em minus 2em}~\\ +\ifthenelse{\NoValue > 0 } +{ % wenn keine Zahlen +}{ % Wenn Zahlen + \parbox{\textwidth}{ + \mainfont + % + % + \setlength{\tabcolsep}{0.2em} + \ifthenelse{\equal{\paid}{0{\DecimalSign}00} } + { % Wenn noch nichts gezahlt wurde + \IfSubStr{\invtotal}{\DecimalSign}{}{ + \fpAdd{\invtotal}{0}{<%subtotal NOFORMAT%>} + <%foreach tax%> + \fpAdd{\invtotal}{\invtotal}{<%tax NOFORMAT%>} + <%end tax%> + } + \hfill + \begin{tabular}{@{}rrr@{}} + %{Summe vor Steuern:}& {\numprint{<%subtotal NOFORMAT%>}} & ~\\ + + % Die unterschiedlichen Steueranteile getrennt ausweisen + <%foreach tax%> + { \IfEndWith{\paymenttype}{\paymentPrivatEnd}{\TaxInc }{ } <%taxdescription%>} + & + {\numprint{<%tax NOFORMAT%>}}& ~\\ + <%end tax%> + \midrule[1pt] + {\Sum~ \currency:} & \textbf{\numprint{\invtotal}} + \end{tabular} + } + { % Wenn bereits etwas gezahlt wurde + \hfill + \begin{tabular}{@{}rrr@{}} + + {\EbT}& {\numprint{<%subtotal NOFORMAT%>}} & ~\\ + + % Die unterschiedlichen Steueranteile getrennt ausweisen + <%foreach tax%> + {<%taxdescription%>} + & + {\numprint{<%tax NOFORMAT%>}}& ~\\ + <%end tax%> + + \midrule % Ein dünner Strich + \Sum & \numprint{\invtotal} & ~\\ + + <%foreach payment%> + \AlreadyPayed~ {<%paymentdate%>}:& -{\numprint{<%payment%>}} & ~\\ + <%end paymentdate%> + + \midrule[2pt] % Ein etwas dickerer Strich + {\Left~ \currency:} & \numprint{\total} + \end{tabular} + }% ende ithenelse + + } %Ende des Summenkasten +} + +\vfill % Den Rest-Text soweit wie möglich nach unten schieben +\ifthenelse{\isempty{<%notes%>}}{}{ + \mainfont +\noindent <%notes%> ~\\[2em] + }% +\small +\noindent \YourOrder +\ifthenelse{\Picklist = 0}{\noindent \ifthenelse{\equal{<%ustid%>}{\leer}}{}{\UstidTitle} \UstId}{} +\noindent \paymenthints % ist in translations.tex deffiniert +\ifthenelse{\PurchaseOrder = 0}{\noindent \paymentterms}{} + + +\end{letter} +\end{document}