Revision f0e9585f
Von wulf@coulmann.de vor etwa 13 Jahren hinzugefügt
doc/2011-12-14_alternatives_vorlagensystem_f-tex.txt | ||
---|---|---|
README lx-office Fancy-LaTeX (f-tex)
|
||
|
||
# Revision 1.0-u (16.11.2011)
|
||
# Revision 0.9 (13.11.2011)
|
||
# Revision 0.8 (12.09.2011)
|
||
# Revision 0.7 (12.07.2011)
|
||
# Revision 0.6 (16.06.2011)
|
||
# Revision 0.5 (15.04.2011)
|
||
# Revision 0.4 (14.02.2011)
|
||
# Revision 0.3 (03.01.2011)
|
||
# Revision 0.2 (24.12.2010)
|
||
# Revision 0.1 (03.11.2009)
|
||
|
||
|
||
# Einleitung
|
||
|
||
Es gibt ein alternatives LaTeX Vorlagensystem im Verzeichnis
|
||
templates/f-tex
|
||
Fuer das Einrichten der Vorlagen gibt es ein Setup-Script
|
||
|
||
|
||
# Voraussetzung:
|
||
|
||
- funktionierende Lx-Office Intallation
|
||
- mindestens eine Mandantendatenbank
|
||
weiter ist es hilfreich:
|
||
- mindestens einen Benutzer mit Verweis auf ein Vorlagenverzeichs
|
||
- Bereits angelegte Sprachkuerzel, wenn mehrsprachige Dokumente erstellt
|
||
werden sollen.
|
||
|
||
# Feature Uebersicht
|
||
|
||
- einfach Nutzung durch mitgeliefertes Setup-Script
|
||
- Keine Retundanz. Es wird ein und die selbe Latex-Vorlage fuer alle
|
||
briefartigen Dokumente verwendet. Also Angebot, Rechnung,
|
||
Performarechnung, Lieferschein, aber eben nicht fuer Paketaufkleber
|
||
etc..
|
||
- Leichte Anpassung an das Firmen Layout durch verwendung eines Hintergrund-PDF
|
||
dieses kann leicht mit dem eigenen Lieblingsprogramm erstellt werden
|
||
(Openoffice, Inkscape, Gimp, Adobe*)
|
||
- Hintergrundpdf um schaltbar auf "nur erste Seite" (default) oder "alle Seiten"
|
||
(option "bgPdfFirstPageOnly" in Datei letter.lco)
|
||
- Hintergrundpdf fuer Ausdruck auf bereits bedrucktem Briefpapier Abschaltbar,
|
||
es wird dann nur bei per email versendeten Dokumenten eingebunden.
|
||
(Option "bgPdfEmailOnly" in Datei letter.lco)
|
||
- Nutzung der Layout-Funktionen von Latex fuer Seitenumbruch,
|
||
wiederholung von Kopfzeilen, Zwischensummen etc. (danke an Kai-Martin fuer
|
||
die Vorarbeit)
|
||
- Anzeige des Empfaengerlandes im Adressfeld nur, wenn es vom Land des
|
||
eigenen Unternehmens abweicht (also die Rechnung das Land verlaesst).
|
||
- Multisprachfaehig leicht um weitere Sprachen zu erweitern, alle
|
||
Übersetzungen in der Datei translatinos.tex.
|
||
- Auflistung von Bruttopreisen fuer Endverbraucher.
|
||
|
||
|
||
|
||
|
||
# die Installation
|
||
|
||
Wenn es noch keine LaTeX installation gibt, installiere die folgenden Pakete
|
||
(Debian)
|
||
aptitude install \
|
||
texlive-base-bin \
|
||
texlive-latex-recommended \
|
||
texlive-fonts-recommended \
|
||
texlive-latex-extra \
|
||
texlive-lang-german \
|
||
texlive-generic-extra
|
||
(Info fuer != Debian Installationen: die Abhaengigkeiten werden waehrend des
|
||
Setups nochmals geprueft)
|
||
|
||
Rufe das folgende Script auf:
|
||
[lxo-home]/templates/f-tex/setup.sh
|
||
und folge den Anweisungen.
|
||
|
||
Erstelle eine pdf-Hintergrund Datei und verlinke sie nach ./letter_head.pdf
|
||
|
||
Editiere den Bereich "settings" in der datei letter.lco ""
|
||
|
||
# oder etwas Detaillierter:
|
||
Es wird eine Datei sample.lco erstellt und diese nach letter.lco verlinkt.
|
||
Eigentlich ist dies die Datei die fuer die Firmenspezifischen Anpassungen
|
||
gedacht ist. Da die Einstiegshuerde in LaTeX nicht ganz niedrig ist, wird in
|
||
dieser Datei auf ein Hintergrundpdf verwiesen. Ich empfehle ueber dieses pdf
|
||
die persoenlichen Layoutanpassungen vorzunehmen und sample.lco unveraendert zu
|
||
lassen. Die die Anpassung ueber eine *.lco Datei die letztlich auf letter.lco
|
||
verlinkt ist ist aber auch moeglich.
|
||
|
||
Es wird eine Datei sample_head.pdf mit ausgeliefert, diese wird nach
|
||
letter_head.pdf verlinkt. Damit gibt es schon mal eine Funktionsfaehige
|
||
Vorlage. Schau Dir nach Abschluss der Installation die Datei sample_haed.pdf
|
||
an und erstelle ein entsprechendes pdf passend zum Briefkopf Deiner Firma,
|
||
diese dann im Template Verzeichniss ablegen und statt sample_head.pdf nach
|
||
letter_head.pdf verlinken.
|
||
|
||
per default erstellt das Setupscript einen symbolischen Link
|
||
./sample_head.pdf -> ./letter_head.pdf
|
||
letzlich muss ./letter_head.pdf auf das passende Hintergrundpdf verweisen,
|
||
welches gewuenschten Briefkopf enthaelt. Bei Updates oder nach erneutem
|
||
Aufruf des setup Scripts werden bestehende Links nicht ohne Rueckfrage
|
||
ersetzt, wer also schon seinen Briefkopf verlinkt hat, braucht diesen Link
|
||
nicht immer wieder neu anlegen. Das gleiche Prinzip gilt fuer letter.lco.
|
||
|
||
Es wird eine Datei mydata.tex erstellt, sie ist mit der aus
|
||
lp (Label Print in erp) kompatibel. Diese braucht man also nur einmal
|
||
fuer jedes template Verzeichnis zu generieren.
|
||
Bei Formatierungsschwierigkeiten bitte mit
|
||
[lxo-home]/templates/f-tex/mydata.tex.example vergleichen.
|
||
|
||
Alle Anpassungen zum Briefkopf, Fusszeilen, Firmenlogos, etc.
|
||
sollten ueber die Hintergrund pdf datei oder die *.lco Datei erfolgen.
|
||
|
||
|
||
# einheitliche Latex-Vorlagen -- Background
|
||
|
||
Das Konzept von lx-office sieht vor, fuer jedes Dokument
|
||
(Auftragsbestaetigung, Lieferschein, Rechnung, etc.) eine
|
||
Latex-Vorlage vorzuhalten, dies ist sehr Wartungsunfreundlich. Auch
|
||
das Einlesen einer einheitlichen Quelle fuer den Briefkopf bringt nur
|
||
bedingte Vorteile, da hier leicht die Pflege der Artikel-Tabellen aus
|
||
dem Ruder laeuft. Bei dem vorliegenden Ansatz wird fuer alle
|
||
Briefartigen Dokumente mit Artikel-Tabellen eine einheitliche
|
||
Latexvorlage verwendet, welche ueber Codeweichen die Besonderheiten
|
||
der jeweiligen Dokumente Beruecksichtigt
|
||
- Tabellen mit oder ohne Preis
|
||
- Sprache der Tabellenueberschriften etc.
|
||
- Anpassung der Bezugs-Zeile (z.B. Rechnungsnummer versus
|
||
Angebotsnummer)
|
||
- Darstellung von Brutto oder Netto-Preisen in der Auflistung
|
||
(Endverbraucher versus Gewerblicher Kunde)
|
||
Dies laesst sich in lx-office nur ueber einen Kunstgriff realisieren,
|
||
da zum einen die perl-Anwendung nach latex-Vorlagen mit bestimmten
|
||
Namen sucht (z.B. sales_order_de.tex fuer die deutschsprachige
|
||
Auftragsbestaetigung -- wenn deutsch mit dem Vorlagenkuerzel de
|
||
angelegt wurde) und zum Anderen die Information um welches Dokument es
|
||
sich handelt nicht direkt innerhalb von Latex zur Verfuegung steht.
|
||
|
||
Umgesetzt wurde dies hier nun ueber symbolische Links im Dateisystem. Es
|
||
gibt also eine Vorlage letter.tex (die ihrerseits weitere tex-Dateien
|
||
einbindet) und fuer jeden Dokumenttyp der durch letter.tex abgedeckt on von
|
||
jedem dieser wiederum in jeder verfuegbaren Sprache legt das setup Script einen
|
||
link in der lx-office Namenskonvention an, der auf die Datei letter.tex
|
||
verweist. Die Datei letter.tex wertet den Namen der Aufgerufenen Datei aus und
|
||
passt ihre Ausgabe dementsprechend an. Wenn zum Beispiel lx-office die Datei
|
||
packing_list_de.tex aufruft (die ja nur ein Link nach letter.tex ist) liegt die
|
||
Information des aktuellen Dokumentnamen (packing_list_de.tex) vor und latex
|
||
weiss, keine Preise, Lieferscheinnummer anzeigen, deutsche sprachumgebung, usw.
|
||
|
||
Es liegt mit der Datei setup.sh ein script vor, welches die Abhaengigkeiten
|
||
im System prueft und die benotigten Dateien und symbolischen Links erstellt.
|
||
Das script ist so aufgebaut, dass es bei Updates auch auf bestehende f-tex
|
||
Vorlagenordner angewendet werden kann, ohne vorhandene Personalisierungen zu
|
||
ueberschreiben. Die Benoetigten Informationen wie Template-Verzeichniss,
|
||
vorhandene Sprachkuerzel, etc werden waerend des setupprozesses abgefragt. Der
|
||
Setupprozess kann also sooft wie benoetigt wiederholt werden, auch wenn bereits
|
||
ein templateverzeichniss existiert.
|
||
|
||
|
||
Nachteil:
|
||
Ja, alles hat seinen Preis ...
|
||
Latex hat ohnehin eine sehr steile Lehrnkurve. Die Datei letter.tex
|
||
ist sehr komplex und verstaerkt damit diesen Effekt noch einmal erheblich.
|
||
Wer Latex-Erfahrung hat, oder geuebt ist Scriptsparachen nachzuvollziehen kann
|
||
natuerlich auch innerhalb der Tabellendarstellung gut persoenliche Anpassungen
|
||
vornehmen. Aber man kann sich hier bei Veraenderungen sehr schnell haeftig in
|
||
den Fuss schiessen.
|
||
Wer nicht so tief in die Materie einsteigen will oder leicht zu
|
||
frustrieren ist, sollte sein Hintergrund PDF auf Basis der mitglieferten
|
||
Datei sample_head.pdf erstellen, und sich an der Form der dargestellten Tabellen
|
||
wie sie ausgeliefert werden, erfreuen.
|
||
Kleiner Tipp:
|
||
|
||
Nicht zu viel auf einmal wollen, lieber kleine kontinuierliche
|
||
Schritte gehen.
|
||
|
||
Alternativ kann man sich natuerlich fuer die Latex-Vorlagen
|
||
professionelle Hilfe hohlen.
|
||
|
||
|
||
Bruttopreise fuer Endvorbraucher
|
||
Der auszuweisende Bruttopreis wird innerhalb der LaTeX Umgebung berechnet.
|
||
|
||
- Background:
|
||
es gibt zwar ein Feld um bei Auftraegen "alle Preise Brutto" auszuwaehlen,
|
||
aber:
|
||
- hierfuer muessen die Preise auch in Brutto in der Datenbank stehen
|
||
(ja -- das laesst sich ueber die Preisgruppen und die Zuordung einer Default-Preisgruppe
|
||
handhaben)
|
||
- man darf beim Anlegen des Vorgangs nicht vergessen Dieses Haekchen zu setzen.
|
||
(das ist in der Praxis wenn man sowohl Endverbraucher- wie Gewerbekunden beliefert
|
||
der eigentliche Knackpunkt)
|
||
|
||
Es gibt mit f-tex eine weitere Alternative. Die Information ob Brutto oder
|
||
Nettorechnung wird mit den Zahlarten verknuepft. Zahlarten bei denen
|
||
Rechnungen, Angebote, etc, in Brutto ausgegeben werden sollen enden mit "_E"
|
||
(fuer Endverbraucher) Falls identische Zahlarten fuer Gewerbekunden und
|
||
Endverbraucher vorhanden sind legt man diese einfach doppelt an (einmal mit
|
||
der Namensendung "_E")
|
||
- Gewinn:
|
||
- die Entscheidung ob Netopreise ausgewiesen werden ist nicht mehr fix
|
||
mit einer Preisliste Verbunden.
|
||
- die Default-Zahlart kann im Kundendatensatz hinterlegt werden und man
|
||
muss nicht mehr daran denken "alle Preise Netto" auszuwaehlen.
|
||
- Die Entscheidung ob Netto/Oder Bruttopreise ausgewiesen werden kann direkt
|
||
beim Drucken reviediert werden, ohne dass sich der Auftragswert aendert.
|
||
|
||
Lieferadressen
|
||
|
||
- in Lieferscheinen kommen shipto* -Variablen im Adressfeld zum Einsatz
|
||
- wenn die shipto*variable leer ist wird die entsprechende
|
||
Adressvariable eingesetzt. Wenn Also die Lieferadresse in Strasse,
|
||
Hausnummer und Ort abweicht, muessen auch nur diese Felder in der
|
||
Lieferadresse ausgefuellt werden. Fuer den Firmenname wird der Wert der
|
||
Hauptadresse angezeigt.
|
||
|
||
Troubleshooting -- Fehler suchen:
|
||
Wenn sich das Problem nicht auf Grund der ausgabe im Webbrowser verifizieren laesst:
|
||
|
||
editiere [flxo-home]/config/lx_office.conf und aendere "keep_tmp_files" auf 1
|
||
keep_temp_files = 1;
|
||
|
||
bei fastcgi oder mod_perl den Webserver neu Starten
|
||
|
||
Nochmal einen Druckversuch im Webfrontend ausloesen
|
||
|
||
wechsele in das users Verzeichnis von lxo
|
||
cd [lxo-home]/users
|
||
|
||
LaTeX Suchpfad anpassen:
|
||
export TEXINPUTS=".:[lxo-home]/templates/[aktuelles_template_verzeichniss]:"
|
||
|
||
Finde herraus welche datei lxo beim letzten Durchlauf erstellt hat
|
||
ls -lahtr ./1*.tex
|
||
Es sollte die letzte Datei ganz unten sein
|
||
|
||
fuer besseren Hinweis auf Fehler texdatei nochmals uebersetzen
|
||
pdflatex ./1*.tex
|
||
|
||
in der *.tex datei nach dem Fehler suchen.
|
||
|
||
Changelogeintrag fuer offiziellen tree:
|
||
Kleine Verbesserungen:
|
||
Zusaetzliches alternatives LaTeX Templatesystem
|
||
|
||
|
doc/changelog | ||
---|---|---|
# Veränderungen von Lx-Office ERP #
|
||
###################################
|
||
|
||
- Alternatives Vorlagenstemsystem f-tex
|
||
* Setup Script
|
||
* mehrsprachig
|
||
* leichte Integration des Firmenbriefkopfs
|
||
* Ausgabe von Bruttopreisen in den Positionen fuer Endverbraucher moeglich
|
||
siehe doc/2011-12-14_alternatives_vorlagensystem_f-tex.txt
|
||
|
||
- Ein neuer Vorlagensatz RB kam hinzu, der einige Ideen aufgreift, die
|
||
in folgendem Vortrag erwähnt wurden:
|
||
http://www.lx-office.org/uploads/media/Lx-Office_Anwendertreffen_LaTeX-Druckvorlagen-31.01.2011_01.pdf
|
templates/f-tex/letter.tex | ||
---|---|---|
% ----------------------------------------------------------
|
||
% 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}
|
templates/f-tex/mydata.tex.example | ||
---|---|---|
|
||
% \employeecountry wird fuer lxo fancy LaTeX benoetigt
|
||
\newcommand{\employeecountry}{Deutschland}
|
||
|
||
|
||
|
||
% die folgenden definitionen koennten auch direkt in der Steuerdatei *.lco stehen
|
||
\newcommand{\MYfromname}{Die globalen Problemlöser}
|
||
\newcommand{\MYaddrsecrow}{Gesellschaft für anderer Leute Sorgen mbH}
|
||
\newcommand{\MYrechtsform}{Handelsregister: HRA 123456789 }
|
||
\newcommand{\MYfromaddress}{Hauptstraße 5\\12345 Hier}
|
||
\newcommand{\MYfromphone}{Tel: +49 (0)12 3456780}
|
||
\newcommand{\MYfromfax}{Fax: +49 (0)12 3456781}
|
||
\newcommand{\MYfromemail}{mail@g-problemloeser.com}
|
||
\newcommand{\MYsignature}{Herbert Wichtig - Geschäftsführer}
|
||
\newcommand{\MYustid}{UstID: DE 123 456 789}
|
||
\newcommand{\MYfrombank}{Bankverbindung\\
|
||
Ensifera Bank\\
|
||
Kto 1234567800\\
|
||
BLZ 123 456 78
|
||
}
|
templates/f-tex/sample.lco | ||
---|---|---|
% ----------------------------------------------------------
|
||
% letter.lco
|
||
% Steuerdatei Briefklasse f-tex
|
||
%
|
||
% Changelog: see gitlog
|
||
\newcommand{\ftLcoVTversion}{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
|
||
%
|
||
%
|
||
% ----------------------------------------------------------
|
||
|
||
|
||
\begingroup
|
||
\makeatletter
|
||
\@latex@warning@no@line{ #### this is letter.lco \ftLcoVTversion #####}
|
||
\endgroup
|
||
|
||
|
||
|
||
\ProvidesFile{letter.lco}[%
|
||
2002/07/09 v0.9a LaTeX2e unsupported letter-class-option]
|
||
|
||
\KOMAoptions{foldmarks=false}
|
||
\usepackage{graphicx}
|
||
\usepackage[utf8]{inputenc}
|
||
\usepackage{ngerman}
|
||
\usepackage{lmodern}
|
||
\usepackage{xcolor}
|
||
\usepackage{watermark}
|
||
\usepackage{xifthen}
|
||
|
||
|
||
% ================== settings ==============================
|
||
|
||
% Name der pdf Datei die den Briefkopf enthaelt
|
||
\newcommand{\bgPdfName}{letter_head.pdf}
|
||
|
||
% Hintergrund pdf nur bei erster Dokumentseite [1|0]
|
||
\newcommand{\bgPdfFirstPageOnly}{1}
|
||
|
||
% Hintergrundpdf nur bei versand per email [1|0]
|
||
% (setze diesen Wert auf 1, wenn auf bereits Bedruktes Briefpapier ausgedruckt werden soll)
|
||
\newcommand{\bgPdfEmailOnly}{0}
|
||
|
||
% Trennlienie unter der Seitenkopfzeile ab Seite 2 ff.
|
||
\KOMAoptions{headsepline=on}
|
||
|
||
% der Abstand zu den Fusszeilen
|
||
\addtolength{\textheight}{23mm}
|
||
|
||
% zusaetzlicher Zwischenraum zur Fusszeile ab Seite 2 ff.
|
||
% (nur bei bgPdfFirstPageOnly = 1)
|
||
\addtolength{\footskip}{10mm}
|
||
|
||
|
||
% ================== end settings ==============================
|
||
|
||
|
||
|
||
\setkomavar{backaddress}{}
|
||
|
||
\setkomavar{fromname}{\MYfromname}
|
||
\newcommand\addrsecrow{\MYaddrsecrow}
|
||
\newcommand\rechtsform{\MYrechtsform}
|
||
\setkomavar{fromaddress}{\MYfromaddress}
|
||
\setkomavar{fromphone}{\MYfromphone}
|
||
\setkomavar{fromfax}{\MYfromfax}
|
||
\setkomavar{fromemail}{\MYfromemail}
|
||
\setkomavar{signature}{\MYsignature}
|
||
\newcommand\ustid{\MYustid}
|
||
\setkomavar{frombank}{\MYfrombank}
|
||
|
||
\renewcommand{\rmdefault}{cmss}
|
||
\newlength\entrytblsub
|
||
\setlength\entrytblsub{\dimexpr\tabcolsep+1.3mm+\arrayrulewidth\relax}
|
||
\setlength\textwidth{166mm}
|
||
\oddsidemargin -0.4mm
|
||
\KOMAoptions{headsepline=on}
|
||
|
||
\pagestyle{myheadings}
|
||
\@addtoplength{firstfootvpos}{18mm}
|
||
\@addtoplength{foldmarkhpos}{5mm}
|
||
\@setplength{firstheadvpos}{0mm}
|
||
\@setplength{firstheadwidth}{165mm}
|
||
\@setplength{firstfootwidth}{165mm}
|
||
\@setplength{toaddrhpos}{25mm}
|
||
\@setplength{toaddrvpos}{38mm}
|
||
\@setplength{refhpos}{26mm}
|
||
\@addtoplength{refvpos}{-18mm}
|
||
|
||
\font\mainfont=cmss9
|
||
|
||
|
||
|
||
\ifthenelse{\bgPdfFirstPageOnly = 0 }{
|
||
\addtolength{\headheight}{50mm}
|
||
\watermark{
|
||
\setlength{\unitlength}{1mm}
|
||
\put(-22,-226){
|
||
\includegraphics[width=210mm]{\bgPdfName}
|
||
}
|
||
}
|
||
}{}
|
||
|
||
\firsthead{
|
||
\ifthenelse{\bgPdfFirstPageOnly = 1 }{
|
||
\put(-69,0){ % Mit diesem put-Befehl wird die Position des Logos bestimmt.
|
||
\includegraphics[width=210mm]{\bgPdfName}
|
||
}
|
||
}{}
|
||
}
|
||
|
||
|
||
|
||
|
||
\firstfoot{%
|
||
}
|
||
|
||
\nextfoot{%
|
||
\parbox{\useplength{firstfootwidth}}{
|
||
\hspace{-\entrytblsub}
|
||
\begin{tabular}{l}
|
||
\usekomavar{fromname}
|
||
\end{tabular}\hfill
|
||
\begin{tabular}{r}
|
||
\thepage
|
||
\end{tabular}
|
||
\hspace{-\entrytblsub}
|
||
}
|
||
\vspace{10mm}
|
||
}
|
||
|
||
|
||
|
||
\endinput
|
||
% vim: set filetype=tex :EOF
|
templates/f-tex/setup.sh | ||
---|---|---|
#!/bin/bash
|
||
|
||
|
||
# Setup script fuer die Nutzung der fancy-LaTeX Umgebung oder
|
||
# der Label-Print erweiterung (lp) in LX-Office-erp.
|
||
# Welches Setup ist von der Position innerhalb des Dateisystems abhaengig.
|
||
# Das Script kann auch nach erfolgtem Setup erneut aufgerufen werden
|
||
|
||
# see ./setup.sh -h
|
||
|
||
|
||
|
||
|
||
|
||
# Revision 0.2 (13.02.2011) add lp
|
||
# setup add determination of company data
|
||
# Revision 0.1 (19.12.2010) initial script create
|
||
|
||
|
||
# config
|
||
|
||
DB_AUTH='../../config/lx_office.conf'
|
||
|
||
FILE_LIST_FTEX='
|
||
letter.tex
|
||
sample.lco
|
||
sample_head.pdf
|
||
translations.tex
|
||
xstring.sty
|
||
zwischensumme.sty
|
||
'
|
||
|
||
FILE_LIST_LP='
|
||
label_abs_a7_de.tex
|
||
label_nn_brief_a4_de.tex
|
||
zweckform_3427.tdf
|
||
zweckform_3483.tdf
|
||
'
|
||
|
||
|
||
DOC_TYPE_FTEX='
|
||
invoice
|
||
proforma
|
||
sales_quotation
|
||
sales_order
|
||
sales_delivery_order
|
||
credit_note
|
||
pick_list
|
||
purchase_order
|
||
'
|
||
|
||
|
||
LXO_DETERMINE='
|
||
../../SL/Form.pm
|
||
../../config/lx_office.conf.default
|
||
../../doc/changelog
|
||
'
|
||
|
||
CHK_RAWNUMBER_PATCH='
|
||
../../SL/DO.pm
|
||
../../SL/IS.pm
|
||
../../SL/OE.pm
|
||
'
|
||
|
||
MY_DATA='
|
||
employeecountry
|
||
labelcompanyname
|
||
labelbankname
|
||
labelbankcode
|
||
labelbankaccount
|
||
MYfromname
|
||
MYaddrsecrow
|
||
MYrechtsform
|
||
MYfromaddress
|
||
MYfromphone
|
||
MYfromfax
|
||
MYfromemail
|
||
MYsignature
|
||
MYustid
|
||
MYfrombank
|
||
'
|
||
|
||
BASE_DIR=`readlink -f $0 | sed 's/setup\.sh$//'`
|
||
|
||
MODUL=`basename ${BASE_DIR}`
|
||
export TEXINPUTS=".:${BASE_DIR}:"
|
||
|
||
OK='...... [ok]'
|
||
MARK='\033[1;34m'
|
||
UNMARK='\033[0m'
|
||
TIME=`date +%s`
|
||
|
||
USAGE="\n\n setup LaTeX templates for lx-office erp (www.lx-office.org)
|
||
\n\n USAGE: ./`basename $0` [OPTION] \n
|
||
\n
|
||
-h print this Help\n
|
||
\n
|
||
\n
|
||
OPTIONS for trouble shooting:\n\n
|
||
-D don't connect to any database\n
|
||
-C no colored output (don't use any terminal escape character)\n
|
||
\n\n
|
||
RECOMMENDED USE ./setup.sh
|
||
|
||
\n
|
||
"
|
||
|
||
# script control
|
||
|
||
DATABASE=1
|
||
|
||
while getopts "hDC" flag
|
||
do
|
||
case $flag in
|
||
h)
|
||
echo -e ${USAGE}
|
||
exit
|
||
;;
|
||
D)
|
||
DATABASE=0
|
||
;;
|
||
C)
|
||
NO_COLOR=1
|
||
;;
|
||
esac
|
||
done
|
||
|
||
# Disclaim
|
||
|
||
cat << EOD
|
||
|
||
##########################################################################
|
||
# Disclaimer #
|
||
##########################################################################
|
||
# #
|
||
# Dies ist ein Script zum Einrichten von LaTeX Templates #
|
||
# (fancy-latex (f-tex)) oder (label-print (lp) fuer #
|
||
# #
|
||
# lx-office erp (www.lx-erp.org) #
|
||
# #
|
||
# Obwohl LX-Office sich an deutschsprachige Anwender richtet ist dieses #
|
||
# Script in Englisch und soll auch nicht uebersetzt werden. #
|
||
# #
|
||
# * es richtet sich an System-Administratoren #
|
||
# * da es das Script nur in einer Sprache gibt, ist es viel leichter #
|
||
# bei Fehlern und Fehlermeldungen aus dem Script selbst, im Internet #
|
||
# nach Loesungen zu suchen. #
|
||
# #
|
||
##########################################################################
|
||
# #
|
||
# This script provides an easy to use setup for the fancy LaTeX #
|
||
# environment of lx-office erp (templates/f-tex) #
|
||
# #
|
||
# Normal use is to run ./setup.sh without any parameter. You may also #
|
||
# check #
|
||
# ./setup.sh -h #
|
||
# for help. #
|
||
# #
|
||
# The script tries to be as save as possible to avoid unwanted file #
|
||
# overwriting by being very interactive. It's designed to be invoked #
|
||
# multiple times inside the same template directory. So it is possible #
|
||
# to rerun the script if there are updates available or after you break #
|
||
# your LaTeX templates by any changes. #
|
||
# #
|
||
# I recommend to backup your installation and database before you run #
|
||
# this script. #
|
||
# #
|
||
# ANYHOW: I do not take responsibility for any harm initiated by this #
|
||
# script. (Wulf Coulmann -- scripts_at_gpl.coulmann.de) #
|
||
# #
|
||
##########################################################################
|
||
|
||
|
||
EOD
|
||
|
||
QUESTION=' I understand the above warnings [YES/NO/Q]:'
|
||
|
||
echo -n "${QUESTION} "
|
||
|
||
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne ${MARK}
|
||
read ANSWER
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne "${UNMARK}"
|
||
|
||
|
||
until [ "${ANSWER}" = YES ]\
|
||
|| [ "${ANSWER}" = NO ] \
|
||
|| [ "${ANSWER}" = N ] \
|
||
|| [ "${ANSWER}" = n ] \
|
||
|| [ "${ANSWER}" = q ] \
|
||
|| [ "${ANSWER}" = Q ] ; do
|
||
echo -n "${QUESTION} "
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne ${MARK}
|
||
read ANSWER
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne "${UNMARK}"
|
||
done
|
||
|
||
case ${ANSWER} in
|
||
YES)
|
||
echo -n ' accepted'
|
||
;;
|
||
NO|n|N|q|Q)
|
||
echo
|
||
echo ' script aborted by user input'
|
||
exit 72
|
||
;;
|
||
esac
|
||
|
||
|
||
FEEDBACK='################################\n # FEEDBACK:\n
|
||
'
|
||
|
||
|
||
# load functions
|
||
|
||
function error {
|
||
echo '[error]' ...... $1 ...... '[terminate script]'
|
||
exit 72
|
||
}
|
||
|
||
function mark {
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne "${MARK}"
|
||
echo -n "${1}"
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne "${UNMARK}"
|
||
}
|
||
|
||
|
||
|
||
function ask_yn {
|
||
local QUESTION=$1
|
||
until [ "${ANSWER}" = y ]\
|
||
|| [ "${ANSWER}" = Y ] \
|
||
|| [ "${ANSWER}" = j ] \
|
||
|| [ "${ANSWER}" = J ] \
|
||
|| [ "${ANSWER}" = n ] \
|
||
|| [ "${ANSWER}" = N ] \
|
||
|| [ "${ANSWER}" = Q ] \
|
||
|| [ "${ANSWER}" = q ] ; do
|
||
echo -n "${QUESTION}"
|
||
read ANSWER
|
||
done
|
||
|
||
case ${ANSWER} in
|
||
y|Y|j|J)
|
||
return
|
||
;;
|
||
n|N)
|
||
return
|
||
;;
|
||
q|Q)
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne "${UNMARK}"
|
||
echo
|
||
echo ' script aborted by user input'
|
||
exit 72
|
||
;;
|
||
esac
|
||
}
|
||
|
||
function latex_pack_check {
|
||
echo ' -> search LaTeX package '$1' '
|
||
echo -n ' '
|
||
if [ ! `kpsewhich ${1}.sty` ] ; then
|
||
echo
|
||
echo " can't find package ${1}"
|
||
echo " on debian systems you may install apt-file"
|
||
echo " aptitude install apt-file"
|
||
echo " apt-file update"
|
||
echo " apt-file search ${1}.sty"
|
||
echo " this will show which package contains the needet LaTeX .sty file"
|
||
echo " on other systems, please refer to their documentation on how to "
|
||
echo " find matching packages."
|
||
echo
|
||
echo " If you are done, rerun this script"
|
||
echo " [unsatisfied dependencies]' ...... ${1} ...... [terminate script]"
|
||
exit 72
|
||
else
|
||
echo \ \ ${OK}
|
||
fi
|
||
|
||
}
|
||
|
||
function check_accepted_names {
|
||
echo ' -> check for suspect characters in '${2}
|
||
echo -n ${1} | egrep '[^-_\.!A-Za-z0-9]' && echo ' [suspect characters found] in ... '${2}' ... [terminate script]' && exit 72
|
||
}
|
||
|
||
function check_int {
|
||
echo ' -> check for suspect characters in '${2}
|
||
echo -n ${1} | egrep '[^0-9]' && echo ' [suspect characters found] in ... '${2}' ... [terminate script]' && exit 72
|
||
}
|
||
|
||
function create_file {
|
||
ANSWER=0
|
||
if [ "${1}" = ln ] ;then
|
||
DO=1
|
||
echo -n ' -> try to create symbolic link '${3}
|
||
if [ -e "${3}" ] ; then
|
||
if [ -L "${3}" ] ; then
|
||
if [ "`ls -l ${3} | awk '{print $10}'`" = "${2}" ]; then
|
||
echo ' ... symbolic link already exists, nothing to do!'
|
||
DO=0
|
||
else
|
||
echo ' ... symbolic link with different target exist!'
|
||
ls -lah "${3}"
|
||
echo ' you may'
|
||
echo ' [d] delete and replace the current link'
|
||
echo ' [m] move current link to '${3}.${TIME}.old
|
||
echo ' [s] skip -- leave it as it is'
|
||
echo ' [q] abort setup.sh'
|
||
QUESTION=' what do do? [d/m/s/q]: '
|
||
echo -en ${QUESTION}
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne ${MARK}
|
||
read ANSWER
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne ${UNMARK}
|
||
until [ "${ANSWER}" = D ] \
|
||
|| [ "${ANSWER}" = d ] \
|
||
|| [ "${ANSWER}" = m ] \
|
||
|| [ "${ANSWER}" = s ] \
|
||
|| [ "${ANSWER}" = q ] ; do
|
||
echo -n "${QUESTION}"
|
||
read ANSWER
|
||
done
|
||
|
||
case ${ANSWER} in
|
||
d)
|
||
rm -f ${3} || error ' unable to delete symbolic link '${3}
|
||
;;
|
||
m)
|
||
mv -f ${3} ${3}.${TIME}.old || error ' unable to move symbolic link '${3}
|
||
;;
|
||
s)
|
||
echo ' as you decide, we leave it as it is!'
|
||
DO=0
|
||
;;
|
||
q)
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne "${UNMARK}"
|
||
echo
|
||
echo ' script aborted by user input'
|
||
exit 72
|
||
;;
|
||
esac
|
||
fi
|
||
else
|
||
echo ' ... file already exists where I tried to create a symbolic link!'
|
||
ls -lah "${3}"
|
||
echo ' you may'
|
||
echo ' [S] show the file (exit file display with "q")'
|
||
echo ' [m] move current file to '${3}.${TIME}.old
|
||
echo ' [d] delete and replace the file with symbolic link'
|
||
echo ' [s] skip -- leave it as it is'
|
||
echo ' [q] abort setup.sh'
|
||
QUESTION='what to do? [S/d/m/s/q]:'
|
||
echo -en " ${QUESTION} "
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne ${MARK}
|
||
read ANSWER
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne ${UNMARK}
|
||
until [ "${ANSWER}" = S ] \
|
||
|| [ "${ANSWER}" = d ] \
|
||
|| [ "${ANSWER}" = m ] \
|
||
|| [ "${ANSWER}" = s ] \
|
||
|| [ "${ANSWER}" = q ] ; do
|
||
echo -n " ${QUESTION} "
|
||
read ANSWER
|
||
done
|
||
|
||
case ${ANSWER} in
|
||
S)
|
||
echo
|
||
echo
|
||
less "${3}"
|
||
echo
|
||
echo
|
||
create_file "${1}" "${2}" "${3}"
|
||
return
|
||
;;
|
||
m)
|
||
mv -f ${3} ${3}.${TIME}.old || error ' unable to move file '${3}
|
||
;;
|
||
d)
|
||
rm -f ${3} || error ' unable to delete file '${3}
|
||
;;
|
||
s)
|
||
echo ' as you decide, we leave it as it is!'
|
||
DO=0
|
||
;;
|
||
q)
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne "${UNMARK}"
|
||
echo
|
||
echo ' script aborted by user input'
|
||
exit 72
|
||
;;
|
||
esac
|
||
fi
|
||
fi
|
||
if [ "${DO}" = "1" ] ;then ln -s "${2}" "${3}" || error ' failed to create symbolic link '${3} ; fi
|
||
[ "${DO}" = "1" ] && echo \ \ ${OK}
|
||
fi
|
||
|
||
if [ "${1}" = cp ] ;then
|
||
echo -n ' -> try to copy file '${3}
|
||
DO=1
|
||
if [ -e "${3}" ] ; then
|
||
echo ' ... file already exists!'
|
||
diff "${2}" "${3}" >/dev/null
|
||
if [ "$?" = 0 ] ; then
|
||
echo ' files are equal, we leave it as it is!'
|
||
DO=0
|
||
else
|
||
ls -lah "${3}"
|
||
echo ' you may'
|
||
echo ' [D] show a diff between the new and current file'
|
||
echo ' [m] move current file to '${3}.${TIME}.old
|
||
echo ' [d] delete and replace with new file'
|
||
echo ' [s] skip -- leave it as it is'
|
||
echo ' [q] abort setup.sh'
|
||
QUESTION='what to do? [D/m/d/s/q]:'
|
||
echo -en " ${QUESTION} "
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne ${MARK}
|
||
read ANSWER
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne ${UNMARK}
|
||
until [ "${ANSWER}" = D ] \
|
||
|| [ "${ANSWER}" = d ] \
|
||
|| [ "${ANSWER}" = m ] \
|
||
|| [ "${ANSWER}" = s ] \
|
||
|| [ "${ANSWER}" = q ] ; do
|
||
echo -n " ${QUESTION} "
|
||
read ANSWER
|
||
done
|
||
|
||
case ${ANSWER} in
|
||
D)
|
||
echo
|
||
echo
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne ${MARK}
|
||
echo '---------------------------------------'
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne ${UNMARK}
|
||
diff -C 3 "${2}" "${3}"
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne ${MARK}
|
||
echo '---------------------------------------'
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne ${UNMARK}
|
||
echo
|
||
echo
|
||
create_file "${1}" "${2}" "${3}"
|
||
;;
|
||
m)
|
||
mv -f ${3} ${3}.${TIME}.old || error ' unable to move file '${3}
|
||
;;
|
||
d)
|
||
rm -f ${3} || error ' unable to delete file '${3}
|
||
;;
|
||
s)
|
||
echo ' as you decide, we leave it as it is!'
|
||
DO=0
|
||
;;
|
||
q)
|
||
[ "${NO_COLOR}" = 1 ] || echo -ne "${UNMARK}"
|
||
echo
|
||
echo ' script aborted by user input'
|
||
exit 72
|
||
;;
|
||
esac
|
||
fi
|
||
fi
|
||
if [ "${DO}" = "1" ] ;then cp "${2}" "${3}" || error ' failed to copy '${3} ; fi
|
||
[ "${DO}" = "1" ] && echo \ \ ${OK}
|
||
fi
|
||
|
||
}
|
||
|
||
function create_mydata {
|
||
|
Auch abrufbar als: Unified diff
fancy LaTeX initial
siehe doc/2011-12-14_alternatives_vorlagensystem_f-tex.txt