Revision f0e9585f
Von wulf@coulmann.de vor fast 13 Jahren hinzugefügt
doc/2011-12-14_alternatives_vorlagensystem_f-tex.txt | ||
---|---|---|
1 |
README lx-office Fancy-LaTeX (f-tex) |
|
2 |
|
|
3 |
# Revision 1.0-u (16.11.2011) |
|
4 |
# Revision 0.9 (13.11.2011) |
|
5 |
# Revision 0.8 (12.09.2011) |
|
6 |
# Revision 0.7 (12.07.2011) |
|
7 |
# Revision 0.6 (16.06.2011) |
|
8 |
# Revision 0.5 (15.04.2011) |
|
9 |
# Revision 0.4 (14.02.2011) |
|
10 |
# Revision 0.3 (03.01.2011) |
|
11 |
# Revision 0.2 (24.12.2010) |
|
12 |
# Revision 0.1 (03.11.2009) |
|
13 |
|
|
14 |
|
|
15 |
# Einleitung |
|
16 |
|
|
17 |
Es gibt ein alternatives LaTeX Vorlagensystem im Verzeichnis |
|
18 |
templates/f-tex |
|
19 |
Fuer das Einrichten der Vorlagen gibt es ein Setup-Script |
|
20 |
|
|
21 |
|
|
22 |
# Voraussetzung: |
|
23 |
|
|
24 |
- funktionierende Lx-Office Intallation |
|
25 |
- mindestens eine Mandantendatenbank |
|
26 |
weiter ist es hilfreich: |
|
27 |
- mindestens einen Benutzer mit Verweis auf ein Vorlagenverzeichs |
|
28 |
- Bereits angelegte Sprachkuerzel, wenn mehrsprachige Dokumente erstellt |
|
29 |
werden sollen. |
|
30 |
|
|
31 |
# Feature Uebersicht |
|
32 |
|
|
33 |
- einfach Nutzung durch mitgeliefertes Setup-Script |
|
34 |
- Keine Retundanz. Es wird ein und die selbe Latex-Vorlage fuer alle |
|
35 |
briefartigen Dokumente verwendet. Also Angebot, Rechnung, |
|
36 |
Performarechnung, Lieferschein, aber eben nicht fuer Paketaufkleber |
|
37 |
etc.. |
|
38 |
- Leichte Anpassung an das Firmen Layout durch verwendung eines Hintergrund-PDF |
|
39 |
dieses kann leicht mit dem eigenen Lieblingsprogramm erstellt werden |
|
40 |
(Openoffice, Inkscape, Gimp, Adobe*) |
|
41 |
- Hintergrundpdf um schaltbar auf "nur erste Seite" (default) oder "alle Seiten" |
|
42 |
(option "bgPdfFirstPageOnly" in Datei letter.lco) |
|
43 |
- Hintergrundpdf fuer Ausdruck auf bereits bedrucktem Briefpapier Abschaltbar, |
|
44 |
es wird dann nur bei per email versendeten Dokumenten eingebunden. |
|
45 |
(Option "bgPdfEmailOnly" in Datei letter.lco) |
|
46 |
- Nutzung der Layout-Funktionen von Latex fuer Seitenumbruch, |
|
47 |
wiederholung von Kopfzeilen, Zwischensummen etc. (danke an Kai-Martin fuer |
|
48 |
die Vorarbeit) |
|
49 |
- Anzeige des Empfaengerlandes im Adressfeld nur, wenn es vom Land des |
|
50 |
eigenen Unternehmens abweicht (also die Rechnung das Land verlaesst). |
|
51 |
- Multisprachfaehig leicht um weitere Sprachen zu erweitern, alle |
|
52 |
Übersetzungen in der Datei translatinos.tex. |
|
53 |
- Auflistung von Bruttopreisen fuer Endverbraucher. |
|
54 |
|
|
55 |
|
|
56 |
|
|
57 |
|
|
58 |
# die Installation |
|
59 |
|
|
60 |
Wenn es noch keine LaTeX installation gibt, installiere die folgenden Pakete |
|
61 |
(Debian) |
|
62 |
aptitude install \ |
|
63 |
texlive-base-bin \ |
|
64 |
texlive-latex-recommended \ |
|
65 |
texlive-fonts-recommended \ |
|
66 |
texlive-latex-extra \ |
|
67 |
texlive-lang-german \ |
|
68 |
texlive-generic-extra |
|
69 |
(Info fuer != Debian Installationen: die Abhaengigkeiten werden waehrend des |
|
70 |
Setups nochmals geprueft) |
|
71 |
|
|
72 |
Rufe das folgende Script auf: |
|
73 |
[lxo-home]/templates/f-tex/setup.sh |
|
74 |
und folge den Anweisungen. |
|
75 |
|
|
76 |
Erstelle eine pdf-Hintergrund Datei und verlinke sie nach ./letter_head.pdf |
|
77 |
|
|
78 |
Editiere den Bereich "settings" in der datei letter.lco "" |
|
79 |
|
|
80 |
# oder etwas Detaillierter: |
|
81 |
Es wird eine Datei sample.lco erstellt und diese nach letter.lco verlinkt. |
|
82 |
Eigentlich ist dies die Datei die fuer die Firmenspezifischen Anpassungen |
|
83 |
gedacht ist. Da die Einstiegshuerde in LaTeX nicht ganz niedrig ist, wird in |
|
84 |
dieser Datei auf ein Hintergrundpdf verwiesen. Ich empfehle ueber dieses pdf |
|
85 |
die persoenlichen Layoutanpassungen vorzunehmen und sample.lco unveraendert zu |
|
86 |
lassen. Die die Anpassung ueber eine *.lco Datei die letztlich auf letter.lco |
|
87 |
verlinkt ist ist aber auch moeglich. |
|
88 |
|
|
89 |
Es wird eine Datei sample_head.pdf mit ausgeliefert, diese wird nach |
|
90 |
letter_head.pdf verlinkt. Damit gibt es schon mal eine Funktionsfaehige |
|
91 |
Vorlage. Schau Dir nach Abschluss der Installation die Datei sample_haed.pdf |
|
92 |
an und erstelle ein entsprechendes pdf passend zum Briefkopf Deiner Firma, |
|
93 |
diese dann im Template Verzeichniss ablegen und statt sample_head.pdf nach |
|
94 |
letter_head.pdf verlinken. |
|
95 |
|
|
96 |
per default erstellt das Setupscript einen symbolischen Link |
|
97 |
./sample_head.pdf -> ./letter_head.pdf |
|
98 |
letzlich muss ./letter_head.pdf auf das passende Hintergrundpdf verweisen, |
|
99 |
welches gewuenschten Briefkopf enthaelt. Bei Updates oder nach erneutem |
|
100 |
Aufruf des setup Scripts werden bestehende Links nicht ohne Rueckfrage |
|
101 |
ersetzt, wer also schon seinen Briefkopf verlinkt hat, braucht diesen Link |
|
102 |
nicht immer wieder neu anlegen. Das gleiche Prinzip gilt fuer letter.lco. |
|
103 |
|
|
104 |
Es wird eine Datei mydata.tex erstellt, sie ist mit der aus |
|
105 |
lp (Label Print in erp) kompatibel. Diese braucht man also nur einmal |
|
106 |
fuer jedes template Verzeichnis zu generieren. |
|
107 |
Bei Formatierungsschwierigkeiten bitte mit |
|
108 |
[lxo-home]/templates/f-tex/mydata.tex.example vergleichen. |
|
109 |
|
|
110 |
Alle Anpassungen zum Briefkopf, Fusszeilen, Firmenlogos, etc. |
|
111 |
sollten ueber die Hintergrund pdf datei oder die *.lco Datei erfolgen. |
|
112 |
|
|
113 |
|
|
114 |
# einheitliche Latex-Vorlagen -- Background |
|
115 |
|
|
116 |
Das Konzept von lx-office sieht vor, fuer jedes Dokument |
|
117 |
(Auftragsbestaetigung, Lieferschein, Rechnung, etc.) eine |
|
118 |
Latex-Vorlage vorzuhalten, dies ist sehr Wartungsunfreundlich. Auch |
|
119 |
das Einlesen einer einheitlichen Quelle fuer den Briefkopf bringt nur |
|
120 |
bedingte Vorteile, da hier leicht die Pflege der Artikel-Tabellen aus |
|
121 |
dem Ruder laeuft. Bei dem vorliegenden Ansatz wird fuer alle |
|
122 |
Briefartigen Dokumente mit Artikel-Tabellen eine einheitliche |
|
123 |
Latexvorlage verwendet, welche ueber Codeweichen die Besonderheiten |
|
124 |
der jeweiligen Dokumente Beruecksichtigt |
|
125 |
- Tabellen mit oder ohne Preis |
|
126 |
- Sprache der Tabellenueberschriften etc. |
|
127 |
- Anpassung der Bezugs-Zeile (z.B. Rechnungsnummer versus |
|
128 |
Angebotsnummer) |
|
129 |
- Darstellung von Brutto oder Netto-Preisen in der Auflistung |
|
130 |
(Endverbraucher versus Gewerblicher Kunde) |
|
131 |
Dies laesst sich in lx-office nur ueber einen Kunstgriff realisieren, |
|
132 |
da zum einen die perl-Anwendung nach latex-Vorlagen mit bestimmten |
|
133 |
Namen sucht (z.B. sales_order_de.tex fuer die deutschsprachige |
|
134 |
Auftragsbestaetigung -- wenn deutsch mit dem Vorlagenkuerzel de |
|
135 |
angelegt wurde) und zum Anderen die Information um welches Dokument es |
|
136 |
sich handelt nicht direkt innerhalb von Latex zur Verfuegung steht. |
|
137 |
|
|
138 |
Umgesetzt wurde dies hier nun ueber symbolische Links im Dateisystem. Es |
|
139 |
gibt also eine Vorlage letter.tex (die ihrerseits weitere tex-Dateien |
|
140 |
einbindet) und fuer jeden Dokumenttyp der durch letter.tex abgedeckt on von |
|
141 |
jedem dieser wiederum in jeder verfuegbaren Sprache legt das setup Script einen |
|
142 |
link in der lx-office Namenskonvention an, der auf die Datei letter.tex |
|
143 |
verweist. Die Datei letter.tex wertet den Namen der Aufgerufenen Datei aus und |
|
144 |
passt ihre Ausgabe dementsprechend an. Wenn zum Beispiel lx-office die Datei |
|
145 |
packing_list_de.tex aufruft (die ja nur ein Link nach letter.tex ist) liegt die |
|
146 |
Information des aktuellen Dokumentnamen (packing_list_de.tex) vor und latex |
|
147 |
weiss, keine Preise, Lieferscheinnummer anzeigen, deutsche sprachumgebung, usw. |
|
148 |
|
|
149 |
Es liegt mit der Datei setup.sh ein script vor, welches die Abhaengigkeiten |
|
150 |
im System prueft und die benotigten Dateien und symbolischen Links erstellt. |
|
151 |
Das script ist so aufgebaut, dass es bei Updates auch auf bestehende f-tex |
|
152 |
Vorlagenordner angewendet werden kann, ohne vorhandene Personalisierungen zu |
|
153 |
ueberschreiben. Die Benoetigten Informationen wie Template-Verzeichniss, |
|
154 |
vorhandene Sprachkuerzel, etc werden waerend des setupprozesses abgefragt. Der |
|
155 |
Setupprozess kann also sooft wie benoetigt wiederholt werden, auch wenn bereits |
|
156 |
ein templateverzeichniss existiert. |
|
157 |
|
|
158 |
|
|
159 |
Nachteil: |
|
160 |
Ja, alles hat seinen Preis ... |
|
161 |
Latex hat ohnehin eine sehr steile Lehrnkurve. Die Datei letter.tex |
|
162 |
ist sehr komplex und verstaerkt damit diesen Effekt noch einmal erheblich. |
|
163 |
Wer Latex-Erfahrung hat, oder geuebt ist Scriptsparachen nachzuvollziehen kann |
|
164 |
natuerlich auch innerhalb der Tabellendarstellung gut persoenliche Anpassungen |
|
165 |
vornehmen. Aber man kann sich hier bei Veraenderungen sehr schnell haeftig in |
|
166 |
den Fuss schiessen. |
|
167 |
Wer nicht so tief in die Materie einsteigen will oder leicht zu |
|
168 |
frustrieren ist, sollte sein Hintergrund PDF auf Basis der mitglieferten |
|
169 |
Datei sample_head.pdf erstellen, und sich an der Form der dargestellten Tabellen |
|
170 |
wie sie ausgeliefert werden, erfreuen. |
|
171 |
Kleiner Tipp: |
|
172 |
|
|
173 |
Nicht zu viel auf einmal wollen, lieber kleine kontinuierliche |
|
174 |
Schritte gehen. |
|
175 |
|
|
176 |
Alternativ kann man sich natuerlich fuer die Latex-Vorlagen |
|
177 |
professionelle Hilfe hohlen. |
|
178 |
|
|
179 |
|
|
180 |
Bruttopreise fuer Endvorbraucher |
|
181 |
Der auszuweisende Bruttopreis wird innerhalb der LaTeX Umgebung berechnet. |
|
182 |
|
|
183 |
- Background: |
|
184 |
es gibt zwar ein Feld um bei Auftraegen "alle Preise Brutto" auszuwaehlen, |
|
185 |
aber: |
|
186 |
- hierfuer muessen die Preise auch in Brutto in der Datenbank stehen |
|
187 |
(ja -- das laesst sich ueber die Preisgruppen und die Zuordung einer Default-Preisgruppe |
|
188 |
handhaben) |
|
189 |
- man darf beim Anlegen des Vorgangs nicht vergessen Dieses Haekchen zu setzen. |
|
190 |
(das ist in der Praxis wenn man sowohl Endverbraucher- wie Gewerbekunden beliefert |
|
191 |
der eigentliche Knackpunkt) |
|
192 |
|
|
193 |
Es gibt mit f-tex eine weitere Alternative. Die Information ob Brutto oder |
|
194 |
Nettorechnung wird mit den Zahlarten verknuepft. Zahlarten bei denen |
|
195 |
Rechnungen, Angebote, etc, in Brutto ausgegeben werden sollen enden mit "_E" |
|
196 |
(fuer Endverbraucher) Falls identische Zahlarten fuer Gewerbekunden und |
|
197 |
Endverbraucher vorhanden sind legt man diese einfach doppelt an (einmal mit |
|
198 |
der Namensendung "_E") |
|
199 |
- Gewinn: |
|
200 |
- die Entscheidung ob Netopreise ausgewiesen werden ist nicht mehr fix |
|
201 |
mit einer Preisliste Verbunden. |
|
202 |
- die Default-Zahlart kann im Kundendatensatz hinterlegt werden und man |
|
203 |
muss nicht mehr daran denken "alle Preise Netto" auszuwaehlen. |
|
204 |
- Die Entscheidung ob Netto/Oder Bruttopreise ausgewiesen werden kann direkt |
|
205 |
beim Drucken reviediert werden, ohne dass sich der Auftragswert aendert. |
|
206 |
|
|
207 |
Lieferadressen |
|
208 |
|
|
209 |
- in Lieferscheinen kommen shipto* -Variablen im Adressfeld zum Einsatz |
|
210 |
- wenn die shipto*variable leer ist wird die entsprechende |
|
211 |
Adressvariable eingesetzt. Wenn Also die Lieferadresse in Strasse, |
|
212 |
Hausnummer und Ort abweicht, muessen auch nur diese Felder in der |
|
213 |
Lieferadresse ausgefuellt werden. Fuer den Firmenname wird der Wert der |
|
214 |
Hauptadresse angezeigt. |
|
215 |
|
|
216 |
Troubleshooting -- Fehler suchen: |
|
217 |
Wenn sich das Problem nicht auf Grund der ausgabe im Webbrowser verifizieren laesst: |
|
218 |
|
|
219 |
editiere [flxo-home]/config/lx_office.conf und aendere "keep_tmp_files" auf 1 |
|
220 |
keep_temp_files = 1; |
|
221 |
|
|
222 |
bei fastcgi oder mod_perl den Webserver neu Starten |
|
223 |
|
|
224 |
Nochmal einen Druckversuch im Webfrontend ausloesen |
|
225 |
|
|
226 |
wechsele in das users Verzeichnis von lxo |
|
227 |
cd [lxo-home]/users |
|
228 |
|
|
229 |
LaTeX Suchpfad anpassen: |
|
230 |
export TEXINPUTS=".:[lxo-home]/templates/[aktuelles_template_verzeichniss]:" |
|
231 |
|
|
232 |
Finde herraus welche datei lxo beim letzten Durchlauf erstellt hat |
|
233 |
ls -lahtr ./1*.tex |
|
234 |
Es sollte die letzte Datei ganz unten sein |
|
235 |
|
|
236 |
fuer besseren Hinweis auf Fehler texdatei nochmals uebersetzen |
|
237 |
pdflatex ./1*.tex |
|
238 |
|
|
239 |
in der *.tex datei nach dem Fehler suchen. |
|
240 |
|
|
241 |
Changelogeintrag fuer offiziellen tree: |
|
242 |
Kleine Verbesserungen: |
|
243 |
Zusaetzliches alternatives LaTeX Templatesystem |
|
244 |
|
|
245 |
|
doc/changelog | ||
---|---|---|
2 | 2 |
# Veränderungen von Lx-Office ERP # |
3 | 3 |
################################### |
4 | 4 |
|
5 |
- Alternatives Vorlagenstemsystem f-tex |
|
6 |
* Setup Script |
|
7 |
* mehrsprachig |
|
8 |
* leichte Integration des Firmenbriefkopfs |
|
9 |
* Ausgabe von Bruttopreisen in den Positionen fuer Endverbraucher moeglich |
|
10 |
siehe doc/2011-12-14_alternatives_vorlagensystem_f-tex.txt |
|
11 |
|
|
5 | 12 |
- Ein neuer Vorlagensatz RB kam hinzu, der einige Ideen aufgreift, die |
6 | 13 |
in folgendem Vortrag erwähnt wurden: |
7 | 14 |
http://www.lx-office.org/uploads/media/Lx-Office_Anwendertreffen_LaTeX-Druckvorlagen-31.01.2011_01.pdf |
templates/f-tex/letter.tex | ||
---|---|---|
1 |
% ---------------------------------------------------------- |
|
2 |
% letter.tex |
|
3 |
% Globale Vorlage fuer Briefartige Documente LX-Office 2.6 |
|
4 |
% |
|
5 |
% Changelog: see gitlog |
|
6 |
\newcommand{\ftLetterVersion}{1.0-u (16.11.2011)} |
|
7 |
% |
|
8 |
% Lizenz |
|
9 |
% http://www.gnu.de/licenses/gpl-3.0.html |
|
10 |
% |
|
11 |
% Siehe ./README |
|
12 |
% |
|
13 |
% Autor: Wulf Coulmann scripts_at_gpl.coulmann.de |
|
14 |
% Aufgebaut auf invoice.tex 0.1 kmk@lilalaser.de |
|
15 |
% |
|
16 |
% ---------------------------------------------------------- |
|
17 |
|
|
18 |
\documentclass[letter,fontsize=11pt]{scrlttr2} |
|
19 |
|
|
20 |
|
|
21 |
\begingroup |
|
22 |
\makeatletter |
|
23 |
\@latex@warning@no@line{ #### this is letter.tex \ftLetterVersion #####} |
|
24 |
\endgroup |
|
25 |
|
|
26 |
|
|
27 |
\usepackage{ifpdf} |
|
28 |
\usepackage{graphicx} |
|
29 |
\usepackage{german} |
|
30 |
\usepackage{textcomp} |
|
31 |
\usepackage{lastpage} |
|
32 |
\usepackage{filecontents} |
|
33 |
\usepackage{etex} |
|
34 |
\usepackage{ltxtable} |
|
35 |
\usepackage{tabularx} |
|
36 |
\usepackage{longtable} |
|
37 |
\usepackage{booktabs} |
|
38 |
\usepackage{numprint} |
|
39 |
\usepackage{xstring} |
|
40 |
\newcommand{\leer}{} |
|
41 |
\usepackage{zwischensumme} |
|
42 |
\ifthenelse{\isundefined{\employeecountry}}{\input{mydata}}{} |
|
43 |
|
|
44 |
|
|
45 |
|
|
46 |
% Dateinamen einlesen und auswertbar machen |
|
47 |
\scantokens\expandafter{% |
|
48 |
\expandafter\def\expandafter\docname\expandafter{\jobname}} |
|
49 |
|
|
50 |
%%%%%%%%% Report-Variablen umsetzen, damit latex sie in lxbriefkopf.tex sieht. |
|
51 |
%%%% Die eigenen Daten |
|
52 |
\newcommand{\employeename}{<%employee_name%>} |
|
53 |
\newcommand{\employeecompany}{<%employee_company%>} |
|
54 |
\newcommand{\employeeaddress}{<%employee_address%>} |
|
55 |
\newcommand{\employeetel}{<%employee_tel%>} |
|
56 |
\newcommand{\employeefax}{<%employee_fax%>} |
|
57 |
\newcommand{\employeecoustid}{<%employee_co_ustid%>} |
|
58 |
\newcommand{\employeetaxnumber}{<%employee_taxnumber%>} |
|
59 |
\newcommand{\media}{<%media%>} |
|
60 |
|
|
61 |
|
|
62 |
%%%% Adressat |
|
63 |
\newcommand{\name}{<%name%>} |
|
64 |
\newcommand{\Shipname}{\ifthenelse{\equal{<%shiptoname%>}{\leer}}{<%name%>}{<%shiptoname%>}} |
|
65 |
\newcommand{\departmentone}{<%department_1%>} |
|
66 |
\newcommand{\departmenttwo}{<%department_2%>} |
|
67 |
\newcommand{\cpgreeting}{<%cp_greeting%>} |
|
68 |
\newcommand{\cptitle}{<%cp_title%>} |
|
69 |
\newcommand{\cpgivenname}{<%cp_givenname%>} |
|
70 |
\newcommand{\cpname}{<%cp_name%>} |
|
71 |
\newcommand{\street}{<%street%>} |
|
72 |
\newcommand{\Shipstreet}{\ifthenelse{\equal{<%shiptostreet%>}{\leer}}{<%street%>}{<%shiptostreet%>}} |
|
73 |
\newcommand{\country}{<%country%>} |
|
74 |
\newcommand{\Shipcountry}{\ifthenelse{\equal{<%shiptocountry%>}{\leer}}{<%country%>}{<%shiptocountry%>}} |
|
75 |
\newcommand{\UstId}{<%ustid%>} |
|
76 |
\newcommand{\zipcode}{<%zipcode%>} |
|
77 |
\newcommand{\Shipzipcode}{\ifthenelse{\equal{<%shiptozipcode%>}{\leer}}{<%zipcode%>}{<%shiptozipcode%>}} |
|
78 |
\newcommand{\city}{<%city%>} |
|
79 |
\newcommand{\Shipcity}{\ifthenelse{\equal{<%shiptocity%>}{\leer}}{<%city%>}{<%shiptocity%>}} |
|
80 |
\newcommand{\phone}{<%customerphone%>} |
|
81 |
\newcommand{\fax}{<%customerfax%>} |
|
82 |
|
|
83 |
%%%% Variablen, die sich auf das ganze Dokument beziehen |
|
84 |
\newcommand{\kundennummer}{<%customernumber%>} |
|
85 |
\newcommand{\vendornumber}{<%vendornumber%>} |
|
86 |
\newcommand{\quonumber}{<%quonumber%>} % Angebotsnummer |
|
87 |
\newcommand{\ordnumber}{<%ordnumber%>} % Auftragsnummer bei uns |
|
88 |
\newcommand{\cusordnumber}{<%cusordnumber%>} % Auftragsnummer beim Kunden |
|
89 |
\newcommand{\invnumber}{<%invnumber%>} % Rechnungsnummer |
|
90 |
\newcommand{\donumber}{<%donumber%>} % Lieferscheinnummer |
|
91 |
%\newcommand{\docnumber}{Rechnungsnummer: \invnumber} |
|
92 |
\newcommand{\quodate}{<%quodate%>} % Angebotsdatum |
|
93 |
\newcommand{\orddate}{<%orddate%>} % Auftragsdatum |
|
94 |
\newcommand{\reqdate}{<%reqdate%>} % gewuenschtes Lieferdatum |
|
95 |
\newcommand{\deliverydate}{<%deliverydate%>} % Lieferdatum |
|
96 |
\newcommand{\invdate}{<%invdate%>} % Rechnungsdatum |
|
97 |
\newcommand{\transdate}{<%transdate%>} % Lieferscheindatum |
|
98 |
\newcommand{\terms}{<%terms%>} % Zahlungsfrist |
|
99 |
\newcommand{\duedate}{<%duedate%>} % Fälligkeitsdatum |
|
100 |
\newcommand{\invtotal}{<%invtotal%>} % Gesamtbetrag |
|
101 |
\newcommand{\paid}{<%paid%>} % Schon bezahlt |
|
102 |
\newcommand{\total}{<%total%>} % Restbetrag |
|
103 |
\newcommand{\subtotal}{<%subtotal NOFORMAT%>} % Restbetrag |
|
104 |
\newcommand{\paymentterms}{<%payment_terms%>} % Zahlungsbedingungen |
|
105 |
\newcommand{\paymentPrivatEnd}{E} % Endung bei Privatkunden |
|
106 |
\newcommand{\paymenttype}{<%payment_description%>} % name der Zahlungs-art - fuer Steuerung brutto/netto |
|
107 |
|
|
108 |
|
|
109 |
%%%% Lieferadresse |
|
110 |
\newcommand{\shiptoname}{<%shiptoname%>} |
|
111 |
\newcommand{\shiptocontact}{<%shiptocontact%>} |
|
112 |
\newcommand{\shiptodepartmentone}{<%shiptodepartment_1%>} |
|
113 |
\newcommand{\shiptodepartmenttwo}{<%shiptodepartment_2%>} |
|
114 |
\newcommand{\shiptostreet}{<%shiptostreet%>} |
|
115 |
\newcommand{\shiptocity}{<%shiptocity%>} |
|
116 |
\newcommand{\shiptocountry}{<%shiptocountry%>} |
|
117 |
\newcommand{\shiptophone}{<%shiptophone%>} |
|
118 |
\newcommand{\shiptozipcode}{<%shiptozipcode%>} |
|
119 |
\newcommand{\shiptofax}{<%shiptofax%>} |
|
120 |
|
|
121 |
%%%% Die Waehrungsvariable in Waehrunszeichen umsetzen |
|
122 |
\newcommand{\currency}{<%currency%>} |
|
123 |
\ifthenelse{\equal{\currency}{EUR}}{\let\currency\euro}{} |
|
124 |
\ifthenelse{\equal{\currency}{YEN}}{\let\currency\textyen}{} |
|
125 |
\ifthenelse{\equal{\currency}{GBP}}{\let\currency\pounds}{} |
|
126 |
\ifthenelse{\equal{\currency}{USD}}{\let\currency\$}{} |
|
127 |
|
|
128 |
%%%%%%%%%%%%% Ende Reportvariablen-Umsetzung |
|
129 |
|
|
130 |
\newcommand{\NoValue}{0} |
|
131 |
\newcommand{\Picklist}{0} |
|
132 |
\newcommand{\PurchaseOrder}{0} |
|
133 |
\newcommand{\trash}{0} |
|
134 |
\newcommand{\nonemptyline}[2]{\ifthenelse{\equal{#2}{\leer}}{}{#1#2~\\}} |
|
135 |
\newcommand{\MyAdress}{\IfSubStr{\docname}{sales_delivery_order}{\Shipname~\\ |
|
136 |
% lieferadresse wenn Lieferschein |
|
137 |
\nonemptyline{\cpgreeting{ }\cpgivenname{ }}{\cpname} |
|
138 |
\nonemptyline{}{\departmentone} |
|
139 |
\Shipstreet ~\\ |
|
140 |
\Shipzipcode{ }\Shipcity |
|
141 |
\ifthenelse{\equal{\Shipcountry}{\employeecountry}}{}{ |
|
142 |
\ifthenelse{\equal{\Shipcountry}{\leer}}{}{ ~\\ \Shipcountry} } % Laenderangabe wird nur gedruckt, |
|
143 |
~ % wenn der Empfaenger nicht im eigenen Land sitzt. |
|
144 |
}{ |
|
145 |
\name~\\ |
|
146 |
\nonemptyline{\cpgreeting{ }\cpgivenname{ }}{\cpname} |
|
147 |
\nonemptyline{}{\departmentone} |
|
148 |
\street ~\\ |
|
149 |
\zipcode{ }\city |
|
150 |
\ifthenelse{\equal{\country} {\employeecountry}}{}{ |
|
151 |
\ifthenelse{\equal{\country}{\leer}}{}{ ~\\ \country} } % Laenderangabe wird nur gedruckt, |
|
152 |
~ % wenn der Empfaenger nicht im eigenen Land sitzt. |
|
153 |
} |
|
154 |
} |
|
155 |
|
|
156 |
|
|
157 |
|
|
158 |
\begin{document} |
|
159 |
|
|
160 |
%%% dei folgenden Funktionen lesen den Dokumentennamen aus und _muessen_nach_ \begin{dokument} stehen. |
|
161 |
|
|
162 |
% ==== statische Begriffe in der aktuellen Sprache einlesen |
|
163 |
\input{translations} |
|
164 |
|
|
165 |
|
|
166 |
\ifthenelse{\bgPdfEmailOnly = 1 }{ |
|
167 |
\ifthenelse{\equal{\media}{email}}{ |
|
168 |
}{ |
|
169 |
\firsthead{} |
|
170 |
\watermark{} |
|
171 |
} |
|
172 |
}{} |
|
173 |
|
|
174 |
|
|
175 |
% ==== dokumenttyp ermitteln |
|
176 |
\IfSubStr{\docname}{pick_list}{ |
|
177 |
% Sammelliste |
|
178 |
\setkomavar{backaddress}{\DeliveryAddress} |
|
179 |
\firsthead{ |
|
180 |
\hspace{-3mm} |
|
181 |
\resizebox{\useplength{firstheadwidth}-50mm}{!}{% |
|
182 |
\huge \TitlePicklist |
|
183 |
} |
|
184 |
} |
|
185 |
\renewcommand{\NoValue}{1} |
|
186 |
\renewcommand{\Picklist}{1} |
|
187 |
\newcommand{\doctype}{} |
|
188 |
\newcommand{\MyDocdate}{\transdate} |
|
189 |
\newcommand{\DocNoTitle}{\DelorderNumber} |
|
190 |
\newcommand{\docnumber}{\donumber} |
|
191 |
\renewcommand{\deliverydate}{\transdate} |
|
192 |
% 2. Documentnummer |
|
193 |
\ifthenelse{\equal{\ordnumber}{\leer}}{ |
|
194 |
% wenn keine Auftragsnummer -> Angebotsnummer |
|
195 |
\newcommand{\SecNoTitle}{\QuotationNumber} |
|
196 |
\newcommand{\secnumber}{\quonumber} |
|
197 |
}{ |
|
198 |
\newcommand{\SecNoTitle}{\OrderNumber} |
|
199 |
\newcommand{\secnumber}{\ordnumber} |
|
200 |
} |
|
201 |
}{} |
|
202 |
\IfSubStr{\docname}{sales_delivery_order}{ |
|
203 |
% Lieferschein |
|
204 |
\renewcommand{\NoValue}{1} |
|
205 |
\newcommand{\doctype}{\TitleDelorder} |
|
206 |
\newcommand{\MyDocdate}{\transdate} |
|
207 |
\newcommand{\DocNoTitle}{\DelorderNumber} |
|
208 |
\newcommand{\docnumber}{\donumber} |
|
209 |
\renewcommand{\deliverydate}{\transdate} |
|
210 |
% 2. Documentnummer |
|
211 |
\ifthenelse{\equal{\ordnumber}{\leer}}{ |
|
212 |
% wenn keine Auftragsnummer -> Angebotsnummer |
|
213 |
\newcommand{\SecNoTitle}{\QuotationNumber} |
|
214 |
\newcommand{\secnumber}{\quonumber} |
|
215 |
}{ |
|
216 |
\newcommand{\SecNoTitle}{\OrderNumber} |
|
217 |
\newcommand{\secnumber}{\ordnumber} |
|
218 |
} |
|
219 |
}{} |
|
220 |
\IfSubStr{\docname}{invoice}{ |
|
221 |
% Rechnung |
|
222 |
\newcommand{\doctype}{\TitleInv} |
|
223 |
\newcommand{\MyDocdate}{\invdate} |
|
224 |
\newcommand{\DocNoTitle}{\InvNumber} |
|
225 |
\newcommand{\docnumber}{\invnumber} |
|
226 |
% 2. Documentnummer |
|
227 |
\ifthenelse{\equal{\ordnumber}{\leer}}{ |
|
228 |
% wenn keine Auftragsnummer -> Angebotsnummer |
|
229 |
\newcommand{\SecNoTitle}{\QuotationNumber} |
|
230 |
\newcommand{\secnumber}{\quonumber} |
|
231 |
}{ |
|
232 |
\newcommand{\SecNoTitle}{\OrderNumber} |
|
233 |
\newcommand{\secnumber}{\ordnumber} |
|
234 |
} |
|
235 |
}{} |
|
236 |
\IfSubStr{\docname}{proforma}{ |
|
237 |
\newcommand{\doctype}{\TitleProforma} |
|
238 |
\newcommand{\MyDocdate}{\invdate} |
|
239 |
\newcommand{\DocNoTitle}{\InvNumber} |
|
240 |
\newcommand{\docnumber}{\invnumber} |
|
241 |
% 2. Documentnummer |
|
242 |
\ifthenelse{\equal{\ordnumber}{\leer}}{ |
|
243 |
% wenn keine Auftragsnummer -> Angebotsnummer |
|
244 |
\newcommand{\SecNoTitle}{\QuotationNumber} |
|
245 |
\newcommand{\secnumber}{\quonumber} |
|
246 |
}{ |
|
247 |
\newcommand{\SecNoTitle}{\OrderNumber} |
|
248 |
\newcommand{\secnumber}{\ordnumber} |
|
249 |
} |
|
250 |
}{} |
|
251 |
\IfSubStr{\docname}{purchase_order}{ |
|
252 |
\renewcommand{\PurchaseOrder}{1} |
|
253 |
\newcommand{\doctype}{\TitlePurchaseOrder} |
|
254 |
\newcommand{\MyDocdate}{\orddate} |
|
255 |
\newcommand{\DocNoTitle}{\RequestOrderNumber} |
|
256 |
\newcommand{\docnumber}{\ordnumber} |
|
257 |
\renewcommand{\deliverydate}{\reqdate} |
|
258 |
\renewcommand{\DelDate}{\ReqByTitle} |
|
259 |
\renewcommand{\CustomerID}{\VendorID} |
|
260 |
\renewcommand{\kundennummer}{\vendornumber} |
|
261 |
\newcommand{\SecNoTitle}{} |
|
262 |
\newcommand{\secnumber}{} |
|
263 |
}{} |
|
264 |
\IfSubStr{\docname}{credit_note}{ |
|
265 |
\newcommand{\doctype}{\TitleCreditNote} |
|
266 |
\newcommand{\MyDocdate}{\invdate} |
|
267 |
\newcommand{\DocNoTitle}{\CredNumber} |
|
268 |
\newcommand{\docnumber}{\invnumber} |
|
269 |
% keine 2. Documentnummer |
|
270 |
\newcommand{\SecNoTitle}{} |
|
271 |
\newcommand{\secnumber}{} |
|
272 |
}{} |
|
273 |
\IfSubStr{\docname}{sales_order}{ |
|
274 |
% Auftragsbestaetigung |
|
275 |
\newcommand{\doctype}{\TitleSalesOrder} |
|
276 |
\newcommand{\MyDocdate}{\orddate} |
|
277 |
\renewcommand{\deliverydate}{\reqdate} |
|
278 |
\newcommand{\DocNoTitle}{\OrderNumber} |
|
279 |
\newcommand{\docnumber}{\ordnumber} |
|
280 |
% 2. Documentnummer |
|
281 |
\ifthenelse{\equal{\ordnumber}{\leer}}{ |
|
282 |
% wenn keine Angebotsnummer -> leer |
|
283 |
\newcommand{\SecNoTitle}{} |
|
284 |
\newcommand{\secnumber}{} |
|
285 |
}{ |
|
286 |
\newcommand{\SecNoTitle}{\QuotationNumber} |
|
287 |
\newcommand{\secnumber}{\quonumber} |
|
288 |
} |
|
289 |
}{ } |
|
290 |
\IfSubStr{\docname}{sales_quotation}{ |
|
291 |
% Angebot |
|
292 |
\newcommand{\doctype}{\TitleSalesQuotation} |
|
293 |
\newcommand{\MyDocdate}{\quodate} |
|
294 |
\renewcommand{\DelDate}{\ValidUntil} |
|
295 |
\renewcommand{\deliverydate}{\reqdate} |
|
296 |
\newcommand{\DocNoTitle}{\QuotationNumber} |
|
297 |
\newcommand{\docnumber}{\quonumber} |
|
298 |
% 2. Documentnummer |
|
299 |
\newcommand{\SecNoTitle}{} |
|
300 |
\newcommand{\secnumber}{} |
|
301 |
}{ } |
|
302 |
|
|
303 |
|
|
304 |
|
|
305 |
% ==== \paid auf 0.00 falls leer |
|
306 |
\IfSubStr{\paid}{\DecimalSign}{}{\renewcommand{\paid}{0{\DecimalSign}00}} |
|
307 |
|
|
308 |
|
|
309 |
|
|
310 |
\setkomavar{date}{} |
|
311 |
|
|
312 |
|
|
313 |
\begin{letter}{{\ifthenelse{\isnamedefined{MyAdressfield}}{\MyAdressfield |
|
314 |
}{\MyAdress |
|
315 |
}} |
|
316 |
} |
|
317 |
\opening{} |
|
318 |
|
|
319 |
%========Datum und Nummern==================================================== |
|
320 |
|
|
321 |
\newcommand{\DocId}{ |
|
322 |
\begin{tabular*}{\textwidth+1em }{@{\extracolsep{\fill}}llllr} |
|
323 |
\MakeUppercase{\tiny \DocNoTitle} & |
|
324 |
\MakeUppercase{\tiny \CustomerID} & |
|
325 |
\MakeUppercase{\tiny \SecNoTitle } & |
|
326 |
\MakeUppercase{\tiny \DelDate } & |
|
327 |
\MakeUppercase{\tiny \Date}~\\ |
|
328 |
\mainfont\docnumber & |
|
329 |
\mainfont\kundennummer & |
|
330 |
\mainfont\secnumber & |
|
331 |
\mainfont\deliverydate & |
|
332 |
\mainfont\MyDocdate~\\ |
|
333 |
\end{tabular*} ~\\ |
|
334 |
} |
|
335 |
|
|
336 |
\hspace{-0.5em} \DocId |
|
337 |
|
|
338 |
|
|
339 |
|
|
340 |
|
|
341 |
\nexthead{ |
|
342 |
\ifthenelse{\bgPdfFirstPageOnly = 1 }{ |
|
343 |
\hspace{-4mm} \DocId |
|
344 |
}{} |
|
345 |
} |
|
346 |
\vspace{ 5mm} |
|
347 |
|
|
348 |
{\noindent\textbf\doctype}~\\ |
|
349 |
\IfEndWith{\paymenttype}{\paymentPrivatEnd}{\PriceInclTax }{ } |
|
350 |
|
|
351 |
|
|
352 |
%======Die eigentliche-Tabelle======================================== |
|
353 |
|
|
354 |
% temporaere Datei mit Tabelle anlegen |
|
355 |
\begin{filecontents}{tabelle.tex} |
|
356 |
\mainfont |
|
357 |
\resetlaufsumme |
|
358 |
|
|
359 |
|
|
360 |
|
|
361 |
\ifthenelse{\NoValue > 0 } |
|
362 |
{ % Tabelle ohne Preisen |
|
363 |
\ifthenelse{\Picklist = 1 }{ |
|
364 |
|
|
365 |
\begin{longtable}{@{}rlX@{ }rlrrrl@{}} |
|
366 |
}{ |
|
367 |
\begin{longtable}{@{}rlX@{ }rlrr@{}} |
|
368 |
|
|
369 |
} |
|
370 |
% Kopfzeile der Tabelle |
|
371 |
|
|
372 |
{\Pos} & |
|
373 |
{\Number} & |
|
374 |
{\ItemNo} & |
|
375 |
{\Count} & |
|
376 |
{\Unit} \hspace{2mm} |
|
377 |
\ifthenelse{\Picklist = 1 }{& {\Take} & {\Storage} }{} |
|
378 |
~\\ |
|
379 |
\midrule |
|
380 |
\endfirsthead |
|
381 |
|
|
382 |
% Tabellenkopf nach dem Umbruch |
|
383 |
{\Pos} & |
|
384 |
{\Number} & |
|
385 |
{\ItemNo} & |
|
386 |
{\Count} & |
|
387 |
{\Unit} \hspace{2mm} |
|
388 |
\ifthenelse{\Picklist = 1 }{& {\Take} & {\Storage} }{} |
|
389 |
~\\ |
|
390 |
|
|
391 |
\midrule |
|
392 |
\endhead |
|
393 |
|
|
394 |
<%foreach number%> |
|
395 |
<%runningnumber%> % Laufende Positionsnummer |
|
396 |
& |
|
397 |
<%number%> % Artikelnummer |
|
398 |
& |
|
399 |
<%description%> % Kurzbeschreibung des Artikels |
|
400 |
\ifthenelse{\equal{<%longdescription%>}{\leer}}{}{ \newline <%longdescription%>} |
|
401 |
% Ein zeilenweises Auslieferdatum, wenn es gesetzt bei der Position hinterlegt ist. |
|
402 |
\ifthenelse{\equal{<%deliverydate_oe%>}{\leer}}{}{ |
|
403 |
\newline \DelDate:~<%deliverydate_oe%>} |
|
404 |
& |
|
405 |
<%qty NOFORMAT%> % Menge |
|
406 |
& |
|
407 |
<%unit%> % Einheit |
|
408 |
%\ifthenelse{\Picklist = 1 }{& {x} & {x} }{} |
|
409 |
%\ifthenelse{\Picklist = 1 }{& {x} & {x} \hhline{~~~~~--} }{~\\} |
|
410 |
\ifthenelse{\Picklist = 1 }{& {\underline{;~~~~~~~~~}} & {\underline{;~~~~~~~~~}}~\\ }{~\\} |
|
411 |
%~\\ % |
|
412 |
<%end number%> |
|
413 |
\end{longtable} % Ende der zentralen Tabelle |
|
414 |
}{ % Tabelle mit Preisen |
|
415 |
\begin{longtable}{@{}rlX@{ }rlrrr@{}} |
|
416 |
% Kopfzeile der Tabelle |
|
417 |
|
|
418 |
{\Pos} & |
|
419 |
{\Number} & |
|
420 |
{\ItemNo} & |
|
421 |
{\Count} & |
|
422 |
{\Unit} & |
|
423 |
{\Fee} & |
|
424 |
{\Dis} & |
|
425 |
{\Total} \hspace{2mm} ~\\ |
|
426 |
\midrule |
|
427 |
\endfirsthead |
|
428 |
|
|
429 |
% Tabellenkopf nach dem Umbruch |
|
430 |
{\Pos} & |
|
431 |
{\Number} & |
|
432 |
{\ItemNo} & |
|
433 |
{\Count} & |
|
434 |
{\Unit} & |
|
435 |
{\Fee} & |
|
436 |
{\Dis} & |
|
437 |
{\Total} \hspace{2mm} ~\\ |
|
438 |
\midrule |
|
439 |
\multicolumn{7}{r}{ \rule{0mm}{5mm} \TabCarry{:} \MarkZwsumPos} |
|
440 |
\endhead |
|
441 |
|
|
442 |
|
|
443 |
% Fuss der Teiltabellen |
|
444 |
\multicolumn{7}{r}{ \rule{0mm}{5mm} \TabSubTotal{:} \MarkZwsumPos } ~\\ |
|
445 |
\endfoot |
|
446 |
|
|
447 |
% Das Ende der Tabelle |
|
448 |
\midrule |
|
449 |
\multicolumn{7}{r}{ \rule{0mm}{5mm} \TabSubTotal{:} \MarkZwsumPos} ~\\ |
|
450 |
\endlastfoot |
|
451 |
|
|
452 |
<%foreach number%> |
|
453 |
<%runningnumber%> % Laufende Positionsnummer |
|
454 |
& |
|
455 |
<%number%> % Artikelnummer |
|
456 |
& |
|
457 |
<%description%> % Kurzbeschreibung des Artikels |
|
458 |
\ifthenelse{\equal{<%longdescription%>}{\leer}}{}{ \newline <%longdescription%>} |
|
459 |
% Ein zeilenweises Auslieferdatum, wenn es gesetzt ist. |
|
460 |
\ifthenelse{\equal{<%reqdate%>}{\leer}}{}{ |
|
461 |
\newline \DelDate:~<%reqdate%>} |
|
462 |
& |
|
463 |
<%qty NOFORMAT%> % Menge |
|
464 |
& |
|
465 |
<%unit%> % Einheit |
|
466 |
& |
|
467 |
%\IfEndWith{\paymentterms}{_e}{EN}{\brutto{<%sellprice NOFORMAT%>}{<%qty NOFORMAT%>}{<%p_discount%>}} |
|
468 |
\IfEndWith{\paymenttype}{\paymentPrivatEnd}{ |
|
469 |
\BruttoSellPrice{<%sellprice NOFORMAT%>}{<%tax_rate%>} |
|
470 |
& |
|
471 |
\ifthenelse{\equal{<%p_discount%>}{0}}{}{ -<%p_discount%>\%} |
|
472 |
& |
|
473 |
\BruttoWert{<%linetotal NOFORMAT%>}{<%tax_rate%>} |
|
474 |
}{ |
|
475 |
\numprint{<%sellprice NOFORMAT%>} |
|
476 |
& |
|
477 |
\ifthenelse{\equal{<%p_discount%>}{0}}{}{ -<%p_discount%>\%} |
|
478 |
& |
|
479 |
\Wert{<%linetotal NOFORMAT%>} % Zeilensumme addieren |
|
480 |
} |
|
481 |
~\\ % |
|
482 |
<%end number%> |
|
483 |
\end{longtable} % Ende der zentralen Tabelle |
|
484 |
} |
|
485 |
\end{filecontents} % Ende der Hilfsdatei. |
|
486 |
|
|
487 |
\LTXtable{\textwidth}{tabelle.tex} |
|
488 |
|
|
489 |
\rule{\textwidth}{0pt} % Ein (unsichtbarer) Strich quer ueber die Seite |
|
490 |
\vspace{ 5mm} |
|
491 |
\vspace{-2em plus 10em minus 2em}~\\ |
|
492 |
\ifthenelse{\NoValue > 0 } |
|
493 |
{ % wenn keine Zahlen |
|
494 |
}{ % Wenn Zahlen |
|
495 |
\parbox{\textwidth}{ |
|
496 |
\mainfont |
|
497 |
% |
|
498 |
% |
|
499 |
\setlength{\tabcolsep}{0.2em} |
|
500 |
\ifthenelse{\equal{\paid}{0{\DecimalSign}00} } |
|
501 |
{ % Wenn noch nichts gezahlt wurde |
|
502 |
\IfSubStr{\invtotal}{\DecimalSign}{}{ |
|
503 |
\fpAdd{\invtotal}{0}{<%subtotal NOFORMAT%>} |
|
504 |
<%foreach tax%> |
|
505 |
\fpAdd{\invtotal}{\invtotal}{<%tax NOFORMAT%>} |
|
506 |
<%end tax%> |
|
507 |
} |
|
508 |
\hfill |
|
509 |
\begin{tabular}{@{}rrr@{}} |
|
510 |
%{Summe vor Steuern:}& {\numprint{<%subtotal NOFORMAT%>}} & ~\\ |
|
511 |
|
|
512 |
% Die unterschiedlichen Steueranteile getrennt ausweisen |
|
513 |
<%foreach tax%> |
|
514 |
{ \IfEndWith{\paymenttype}{\paymentPrivatEnd}{\TaxInc }{ } <%taxdescription%>} |
|
515 |
& |
|
516 |
{\numprint{<%tax NOFORMAT%>}}& ~\\ |
|
517 |
<%end tax%> |
|
518 |
\midrule[1pt] |
|
519 |
{\Sum~ \currency:} & \textbf{\numprint{\invtotal}} |
|
520 |
\end{tabular} |
|
521 |
} |
|
522 |
{ % Wenn bereits etwas gezahlt wurde |
|
523 |
\hfill |
|
524 |
\begin{tabular}{@{}rrr@{}} |
|
525 |
|
|
526 |
{\EbT}& {\numprint{<%subtotal NOFORMAT%>}} & ~\\ |
|
527 |
|
|
528 |
% Die unterschiedlichen Steueranteile getrennt ausweisen |
|
529 |
<%foreach tax%> |
|
530 |
{<%taxdescription%>} |
|
531 |
& |
|
532 |
{\numprint{<%tax NOFORMAT%>}}& ~\\ |
|
533 |
<%end tax%> |
|
534 |
|
|
535 |
\midrule % Ein dünner Strich |
|
536 |
\Sum & \numprint{\invtotal} & ~\\ |
|
537 |
|
|
538 |
<%foreach payment%> |
|
539 |
\AlreadyPayed~ {<%paymentdate%>}:& -{\numprint{<%payment%>}} & ~\\ |
|
540 |
<%end paymentdate%> |
|
541 |
|
|
542 |
\midrule[2pt] % Ein etwas dickerer Strich |
|
543 |
{\Left~ \currency:} & \numprint{\total} |
|
544 |
\end{tabular} |
|
545 |
}% ende ithenelse |
|
546 |
|
|
547 |
} %Ende des Summenkasten |
|
548 |
} |
|
549 |
|
|
550 |
\vfill % Den Rest-Text soweit wie möglich nach unten schieben |
|
551 |
\ifthenelse{\isempty{<%notes%>}}{}{ |
|
552 |
\mainfont |
|
553 |
\noindent <%notes%> ~\\[2em] |
|
554 |
}% |
|
555 |
\small |
|
556 |
\noindent \YourOrder |
|
557 |
\ifthenelse{\Picklist = 0}{\noindent \ifthenelse{\equal{<%ustid%>}{\leer}}{}{\UstidTitle} \UstId}{} |
|
558 |
\noindent \paymenthints % ist in translations.tex deffiniert |
|
559 |
\ifthenelse{\PurchaseOrder = 0}{\noindent \paymentterms}{} |
|
560 |
|
|
561 |
|
|
562 |
\end{letter} |
|
563 |
\end{document} |
templates/f-tex/mydata.tex.example | ||
---|---|---|
1 |
|
|
2 |
% \employeecountry wird fuer lxo fancy LaTeX benoetigt |
|
3 |
\newcommand{\employeecountry}{Deutschland} |
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
% die folgenden definitionen koennten auch direkt in der Steuerdatei *.lco stehen |
|
8 |
\newcommand{\MYfromname}{Die globalen Problemlöser} |
|
9 |
\newcommand{\MYaddrsecrow}{Gesellschaft für anderer Leute Sorgen mbH} |
|
10 |
\newcommand{\MYrechtsform}{Handelsregister: HRA 123456789 } |
|
11 |
\newcommand{\MYfromaddress}{Hauptstraße 5\\12345 Hier} |
|
12 |
\newcommand{\MYfromphone}{Tel: +49 (0)12 3456780} |
|
13 |
\newcommand{\MYfromfax}{Fax: +49 (0)12 3456781} |
|
14 |
\newcommand{\MYfromemail}{mail@g-problemloeser.com} |
|
15 |
\newcommand{\MYsignature}{Herbert Wichtig - Geschäftsführer} |
|
16 |
\newcommand{\MYustid}{UstID: DE 123 456 789} |
|
17 |
\newcommand{\MYfrombank}{Bankverbindung\\ |
|
18 |
Ensifera Bank\\ |
|
19 |
Kto 1234567800\\ |
|
20 |
BLZ 123 456 78 |
|
21 |
} |
templates/f-tex/sample.lco | ||
---|---|---|
1 |
% ---------------------------------------------------------- |
|
2 |
% letter.lco |
|
3 |
% Steuerdatei Briefklasse f-tex |
|
4 |
% |
|
5 |
% Changelog: see gitlog |
|
6 |
\newcommand{\ftLcoVTversion}{1.0-u (16.11.2011)} |
|
7 |
% |
|
8 |
% Lizenz |
|
9 |
% http://www.gnu.de/licenses/gpl-3.0.html |
|
10 |
% |
|
11 |
% Siehe ./README |
|
12 |
% |
|
13 |
% Autor: Wulf Coulmann scripts_at_gpl.coulmann.de |
|
14 |
% |
|
15 |
% |
|
16 |
% ---------------------------------------------------------- |
|
17 |
|
|
18 |
|
|
19 |
\begingroup |
|
20 |
\makeatletter |
|
21 |
\@latex@warning@no@line{ #### this is letter.lco \ftLcoVTversion #####} |
|
22 |
\endgroup |
|
23 |
|
|
24 |
|
|
25 |
|
|
26 |
\ProvidesFile{letter.lco}[% |
|
27 |
2002/07/09 v0.9a LaTeX2e unsupported letter-class-option] |
|
28 |
|
|
29 |
\KOMAoptions{foldmarks=false} |
|
30 |
\usepackage{graphicx} |
|
31 |
\usepackage[utf8]{inputenc} |
|
32 |
\usepackage{ngerman} |
|
33 |
\usepackage{lmodern} |
|
34 |
\usepackage{xcolor} |
|
35 |
\usepackage{watermark} |
|
36 |
\usepackage{xifthen} |
|
37 |
|
|
38 |
|
|
39 |
% ================== settings ============================== |
|
40 |
|
|
41 |
% Name der pdf Datei die den Briefkopf enthaelt |
|
42 |
\newcommand{\bgPdfName}{letter_head.pdf} |
|
43 |
|
|
44 |
% Hintergrund pdf nur bei erster Dokumentseite [1|0] |
|
45 |
\newcommand{\bgPdfFirstPageOnly}{1} |
|
46 |
|
|
47 |
% Hintergrundpdf nur bei versand per email [1|0] |
|
48 |
% (setze diesen Wert auf 1, wenn auf bereits Bedruktes Briefpapier ausgedruckt werden soll) |
|
49 |
\newcommand{\bgPdfEmailOnly}{0} |
|
50 |
|
|
51 |
% Trennlienie unter der Seitenkopfzeile ab Seite 2 ff. |
|
52 |
\KOMAoptions{headsepline=on} |
|
53 |
|
|
54 |
% der Abstand zu den Fusszeilen |
|
55 |
\addtolength{\textheight}{23mm} |
|
56 |
|
|
57 |
% zusaetzlicher Zwischenraum zur Fusszeile ab Seite 2 ff. |
|
58 |
% (nur bei bgPdfFirstPageOnly = 1) |
|
59 |
\addtolength{\footskip}{10mm} |
|
60 |
|
|
61 |
|
|
62 |
% ================== end settings ============================== |
|
63 |
|
|
64 |
|
|
65 |
|
|
66 |
\setkomavar{backaddress}{} |
|
67 |
|
|
68 |
\setkomavar{fromname}{\MYfromname} |
|
69 |
\newcommand\addrsecrow{\MYaddrsecrow} |
|
70 |
\newcommand\rechtsform{\MYrechtsform} |
|
71 |
\setkomavar{fromaddress}{\MYfromaddress} |
|
72 |
\setkomavar{fromphone}{\MYfromphone} |
|
73 |
\setkomavar{fromfax}{\MYfromfax} |
|
74 |
\setkomavar{fromemail}{\MYfromemail} |
|
75 |
\setkomavar{signature}{\MYsignature} |
|
76 |
\newcommand\ustid{\MYustid} |
|
77 |
\setkomavar{frombank}{\MYfrombank} |
|
78 |
|
|
79 |
\renewcommand{\rmdefault}{cmss} |
|
80 |
\newlength\entrytblsub |
|
81 |
\setlength\entrytblsub{\dimexpr\tabcolsep+1.3mm+\arrayrulewidth\relax} |
|
82 |
\setlength\textwidth{166mm} |
|
83 |
\oddsidemargin -0.4mm |
|
84 |
\KOMAoptions{headsepline=on} |
|
85 |
|
|
86 |
\pagestyle{myheadings} |
|
87 |
\@addtoplength{firstfootvpos}{18mm} |
|
88 |
\@addtoplength{foldmarkhpos}{5mm} |
|
89 |
\@setplength{firstheadvpos}{0mm} |
|
90 |
\@setplength{firstheadwidth}{165mm} |
|
91 |
\@setplength{firstfootwidth}{165mm} |
|
92 |
\@setplength{toaddrhpos}{25mm} |
|
93 |
\@setplength{toaddrvpos}{38mm} |
|
94 |
\@setplength{refhpos}{26mm} |
|
95 |
\@addtoplength{refvpos}{-18mm} |
|
96 |
|
|
97 |
\font\mainfont=cmss9 |
|
98 |
|
|
99 |
|
|
100 |
|
|
101 |
\ifthenelse{\bgPdfFirstPageOnly = 0 }{ |
|
102 |
\addtolength{\headheight}{50mm} |
|
103 |
\watermark{ |
|
104 |
\setlength{\unitlength}{1mm} |
|
105 |
\put(-22,-226){ |
|
106 |
\includegraphics[width=210mm]{\bgPdfName} |
|
107 |
} |
|
108 |
} |
|
109 |
}{} |
|
110 |
|
|
111 |
\firsthead{ |
|
112 |
\ifthenelse{\bgPdfFirstPageOnly = 1 }{ |
|
113 |
\put(-69,0){ % Mit diesem put-Befehl wird die Position des Logos bestimmt. |
|
114 |
\includegraphics[width=210mm]{\bgPdfName} |
|
115 |
} |
|
116 |
}{} |
|
117 |
} |
|
118 |
|
|
119 |
|
|
120 |
|
|
121 |
|
|
122 |
\firstfoot{% |
|
123 |
} |
|
124 |
|
|
125 |
\nextfoot{% |
|
126 |
\parbox{\useplength{firstfootwidth}}{ |
|
127 |
\hspace{-\entrytblsub} |
|
128 |
\begin{tabular}{l} |
|
129 |
\usekomavar{fromname} |
|
130 |
\end{tabular}\hfill |
|
131 |
\begin{tabular}{r} |
|
132 |
\thepage |
|
133 |
\end{tabular} |
|
134 |
\hspace{-\entrytblsub} |
|
135 |
} |
|
136 |
\vspace{10mm} |
|
137 |
} |
|
138 |
|
|
139 |
|
|
140 |
|
|
141 |
\endinput |
|
142 |
% vim: set filetype=tex :EOF |
templates/f-tex/setup.sh | ||
---|---|---|
1 |
#!/bin/bash |
|
2 |
|
|
3 |
|
|
4 |
# Setup script fuer die Nutzung der fancy-LaTeX Umgebung oder |
|
5 |
# der Label-Print erweiterung (lp) in LX-Office-erp. |
|
6 |
# Welches Setup ist von der Position innerhalb des Dateisystems abhaengig. |
|
7 |
# Das Script kann auch nach erfolgtem Setup erneut aufgerufen werden |
|
8 |
|
|
9 |
# see ./setup.sh -h |
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
|
15 |
# Revision 0.2 (13.02.2011) add lp |
|
16 |
# setup add determination of company data |
|
17 |
# Revision 0.1 (19.12.2010) initial script create |
|
18 |
|
|
19 |
|
|
20 |
# config |
|
21 |
|
|
22 |
DB_AUTH='../../config/lx_office.conf' |
|
23 |
|
|
24 |
FILE_LIST_FTEX=' |
|
25 |
letter.tex |
|
26 |
sample.lco |
|
27 |
sample_head.pdf |
|
28 |
translations.tex |
|
29 |
xstring.sty |
|
30 |
zwischensumme.sty |
|
31 |
' |
|
32 |
|
|
33 |
FILE_LIST_LP=' |
|
34 |
label_abs_a7_de.tex |
|
35 |
label_nn_brief_a4_de.tex |
|
36 |
zweckform_3427.tdf |
|
37 |
zweckform_3483.tdf |
|
38 |
' |
|
39 |
|
|
40 |
|
|
41 |
DOC_TYPE_FTEX=' |
|
42 |
invoice |
|
43 |
proforma |
|
44 |
sales_quotation |
|
45 |
sales_order |
|
46 |
sales_delivery_order |
|
47 |
credit_note |
|
48 |
pick_list |
|
49 |
purchase_order |
|
50 |
' |
|
51 |
|
|
52 |
|
|
53 |
LXO_DETERMINE=' |
|
54 |
../../SL/Form.pm |
|
55 |
../../config/lx_office.conf.default |
|
56 |
../../doc/changelog |
|
57 |
' |
|
58 |
|
|
59 |
CHK_RAWNUMBER_PATCH=' |
|
60 |
../../SL/DO.pm |
|
61 |
../../SL/IS.pm |
|
62 |
../../SL/OE.pm |
|
63 |
' |
|
64 |
|
|
65 |
MY_DATA=' |
|
66 |
employeecountry |
|
67 |
labelcompanyname |
|
68 |
labelbankname |
|
69 |
labelbankcode |
|
70 |
labelbankaccount |
|
71 |
MYfromname |
|
72 |
MYaddrsecrow |
|
73 |
MYrechtsform |
|
74 |
MYfromaddress |
|
75 |
MYfromphone |
|
76 |
MYfromfax |
|
77 |
MYfromemail |
|
78 |
MYsignature |
|
79 |
MYustid |
|
80 |
MYfrombank |
|
81 |
' |
|
82 |
|
|
83 |
BASE_DIR=`readlink -f $0 | sed 's/setup\.sh$//'` |
|
84 |
|
|
85 |
MODUL=`basename ${BASE_DIR}` |
|
86 |
export TEXINPUTS=".:${BASE_DIR}:" |
|
87 |
|
|
88 |
OK='...... [ok]' |
|
89 |
MARK='\033[1;34m' |
|
90 |
UNMARK='\033[0m' |
|
91 |
TIME=`date +%s` |
|
92 |
|
|
93 |
USAGE="\n\n setup LaTeX templates for lx-office erp (www.lx-office.org) |
|
94 |
\n\n USAGE: ./`basename $0` [OPTION] \n |
|
95 |
\n |
|
96 |
-h print this Help\n |
|
97 |
\n |
|
98 |
\n |
|
99 |
OPTIONS for trouble shooting:\n\n |
|
100 |
-D don't connect to any database\n |
|
101 |
-C no colored output (don't use any terminal escape character)\n |
|
102 |
\n\n |
|
103 |
RECOMMENDED USE ./setup.sh |
|
104 |
|
|
105 |
\n |
|
106 |
" |
|
107 |
|
|
108 |
# script control |
|
109 |
|
|
110 |
DATABASE=1 |
|
111 |
|
|
112 |
while getopts "hDC" flag |
|
113 |
do |
|
114 |
case $flag in |
|
115 |
h) |
|
116 |
echo -e ${USAGE} |
|
117 |
exit |
|
118 |
;; |
|
119 |
D) |
|
120 |
DATABASE=0 |
|
121 |
;; |
|
122 |
C) |
|
123 |
NO_COLOR=1 |
|
124 |
;; |
|
125 |
esac |
|
126 |
done |
|
127 |
|
|
128 |
# Disclaim |
|
129 |
|
|
130 |
cat << EOD |
|
131 |
|
|
132 |
########################################################################## |
|
133 |
# Disclaimer # |
|
134 |
########################################################################## |
|
135 |
# # |
|
136 |
# Dies ist ein Script zum Einrichten von LaTeX Templates # |
|
137 |
# (fancy-latex (f-tex)) oder (label-print (lp) fuer # |
|
138 |
# # |
|
139 |
# lx-office erp (www.lx-erp.org) # |
|
140 |
# # |
|
141 |
# Obwohl LX-Office sich an deutschsprachige Anwender richtet ist dieses # |
|
142 |
# Script in Englisch und soll auch nicht uebersetzt werden. # |
|
143 |
# # |
|
144 |
# * es richtet sich an System-Administratoren # |
|
145 |
# * da es das Script nur in einer Sprache gibt, ist es viel leichter # |
|
146 |
# bei Fehlern und Fehlermeldungen aus dem Script selbst, im Internet # |
|
147 |
# nach Loesungen zu suchen. # |
|
148 |
# # |
|
149 |
########################################################################## |
|
150 |
# # |
|
151 |
# This script provides an easy to use setup for the fancy LaTeX # |
|
152 |
# environment of lx-office erp (templates/f-tex) # |
|
153 |
# # |
|
154 |
# Normal use is to run ./setup.sh without any parameter. You may also # |
|
155 |
# check # |
|
156 |
# ./setup.sh -h # |
|
157 |
# for help. # |
|
158 |
# # |
|
159 |
# The script tries to be as save as possible to avoid unwanted file # |
|
160 |
# overwriting by being very interactive. It's designed to be invoked # |
|
161 |
# multiple times inside the same template directory. So it is possible # |
|
162 |
# to rerun the script if there are updates available or after you break # |
|
163 |
# your LaTeX templates by any changes. # |
|
164 |
# # |
|
165 |
# I recommend to backup your installation and database before you run # |
|
166 |
# this script. # |
|
167 |
# # |
|
168 |
# ANYHOW: I do not take responsibility for any harm initiated by this # |
|
169 |
# script. (Wulf Coulmann -- scripts_at_gpl.coulmann.de) # |
|
170 |
# # |
|
171 |
########################################################################## |
|
172 |
|
|
173 |
|
|
174 |
EOD |
|
175 |
|
|
176 |
QUESTION=' I understand the above warnings [YES/NO/Q]:' |
|
177 |
|
|
178 |
echo -n "${QUESTION} " |
|
179 |
|
|
180 |
|
|
181 |
[ "${NO_COLOR}" = 1 ] || echo -ne ${MARK} |
|
182 |
read ANSWER |
|
183 |
[ "${NO_COLOR}" = 1 ] || echo -ne "${UNMARK}" |
|
184 |
|
|
185 |
|
|
186 |
until [ "${ANSWER}" = YES ]\ |
|
187 |
|| [ "${ANSWER}" = NO ] \ |
|
188 |
|| [ "${ANSWER}" = N ] \ |
|
189 |
|| [ "${ANSWER}" = n ] \ |
|
190 |
|| [ "${ANSWER}" = q ] \ |
|
191 |
|| [ "${ANSWER}" = Q ] ; do |
|
192 |
echo -n "${QUESTION} " |
|
193 |
[ "${NO_COLOR}" = 1 ] || echo -ne ${MARK} |
|
194 |
read ANSWER |
|
195 |
[ "${NO_COLOR}" = 1 ] || echo -ne "${UNMARK}" |
|
196 |
done |
|
197 |
|
|
198 |
case ${ANSWER} in |
|
199 |
YES) |
|
200 |
echo -n ' accepted' |
|
201 |
;; |
|
202 |
NO|n|N|q|Q) |
|
203 |
echo |
|
204 |
echo ' script aborted by user input' |
|
205 |
exit 72 |
|
206 |
;; |
|
207 |
esac |
|
208 |
|
|
209 |
|
|
210 |
FEEDBACK='################################\n # FEEDBACK:\n |
|
211 |
' |
|
212 |
|
|
213 |
|
|
214 |
# load functions |
|
215 |
|
|
216 |
function error { |
|
217 |
echo '[error]' ...... $1 ...... '[terminate script]' |
|
218 |
exit 72 |
|
219 |
} |
|
220 |
|
|
221 |
function mark { |
|
222 |
[ "${NO_COLOR}" = 1 ] || echo -ne "${MARK}" |
|
223 |
echo -n "${1}" |
|
224 |
[ "${NO_COLOR}" = 1 ] || echo -ne "${UNMARK}" |
|
225 |
} |
|
226 |
|
|
227 |
|
|
228 |
|
|
229 |
function ask_yn { |
|
230 |
local QUESTION=$1 |
|
231 |
until [ "${ANSWER}" = y ]\ |
|
232 |
|| [ "${ANSWER}" = Y ] \ |
|
233 |
|| [ "${ANSWER}" = j ] \ |
|
234 |
|| [ "${ANSWER}" = J ] \ |
|
235 |
|| [ "${ANSWER}" = n ] \ |
|
236 |
|| [ "${ANSWER}" = N ] \ |
|
237 |
|| [ "${ANSWER}" = Q ] \ |
|
238 |
|| [ "${ANSWER}" = q ] ; do |
|
239 |
echo -n "${QUESTION}" |
|
240 |
read ANSWER |
|
241 |
done |
|
242 |
|
|
243 |
case ${ANSWER} in |
|
244 |
y|Y|j|J) |
|
245 |
return |
|
246 |
;; |
|
247 |
n|N) |
|
248 |
return |
|
249 |
;; |
|
250 |
q|Q) |
|
251 |
[ "${NO_COLOR}" = 1 ] || echo -ne "${UNMARK}" |
|
252 |
echo |
|
253 |
echo ' script aborted by user input' |
|
254 |
exit 72 |
|
255 |
;; |
|
256 |
esac |
|
257 |
} |
|
258 |
|
|
259 |
function latex_pack_check { |
|
260 |
echo ' -> search LaTeX package '$1' ' |
|
261 |
echo -n ' ' |
|
262 |
if [ ! `kpsewhich ${1}.sty` ] ; then |
|
263 |
echo |
|
264 |
echo " can't find package ${1}" |
|
265 |
echo " on debian systems you may install apt-file" |
|
266 |
echo " aptitude install apt-file" |
|
267 |
echo " apt-file update" |
|
268 |
echo " apt-file search ${1}.sty" |
|
269 |
echo " this will show which package contains the needet LaTeX .sty file" |
|
270 |
echo " on other systems, please refer to their documentation on how to " |
|
271 |
echo " find matching packages." |
|
272 |
echo |
|
273 |
echo " If you are done, rerun this script" |
|
274 |
echo " [unsatisfied dependencies]' ...... ${1} ...... [terminate script]" |
|
275 |
exit 72 |
|
276 |
else |
|
277 |
echo \ \ ${OK} |
|
278 |
fi |
|
279 |
|
|
280 |
} |
|
281 |
|
|
282 |
function check_accepted_names { |
|
283 |
echo ' -> check for suspect characters in '${2} |
|
284 |
echo -n ${1} | egrep '[^-_\.!A-Za-z0-9]' && echo ' [suspect characters found] in ... '${2}' ... [terminate script]' && exit 72 |
|
285 |
} |
|
286 |
|
|
287 |
function check_int { |
|
288 |
echo ' -> check for suspect characters in '${2} |
|
289 |
echo -n ${1} | egrep '[^0-9]' && echo ' [suspect characters found] in ... '${2}' ... [terminate script]' && exit 72 |
|
290 |
} |
|
291 |
|
|
292 |
function create_file { |
|
293 |
ANSWER=0 |
|
294 |
if [ "${1}" = ln ] ;then |
|
295 |
DO=1 |
|
296 |
echo -n ' -> try to create symbolic link '${3} |
|
297 |
if [ -e "${3}" ] ; then |
|
298 |
if [ -L "${3}" ] ; then |
|
299 |
if [ "`ls -l ${3} | awk '{print $10}'`" = "${2}" ]; then |
|
300 |
echo ' ... symbolic link already exists, nothing to do!' |
|
301 |
DO=0 |
|
302 |
else |
|
303 |
echo ' ... symbolic link with different target exist!' |
|
304 |
ls -lah "${3}" |
|
305 |
echo ' you may' |
|
306 |
echo ' [d] delete and replace the current link' |
|
307 |
echo ' [m] move current link to '${3}.${TIME}.old |
|
308 |
echo ' [s] skip -- leave it as it is' |
|
309 |
echo ' [q] abort setup.sh' |
|
310 |
QUESTION=' what do do? [d/m/s/q]: ' |
|
311 |
echo -en ${QUESTION} |
|
312 |
[ "${NO_COLOR}" = 1 ] || echo -ne ${MARK} |
|
313 |
read ANSWER |
|
314 |
[ "${NO_COLOR}" = 1 ] || echo -ne ${UNMARK} |
|
315 |
until [ "${ANSWER}" = D ] \ |
|
316 |
|| [ "${ANSWER}" = d ] \ |
|
317 |
|| [ "${ANSWER}" = m ] \ |
|
318 |
|| [ "${ANSWER}" = s ] \ |
|
319 |
|| [ "${ANSWER}" = q ] ; do |
|
320 |
echo -n "${QUESTION}" |
|
321 |
read ANSWER |
|
322 |
done |
|
323 |
|
|
324 |
case ${ANSWER} in |
|
325 |
d) |
|
326 |
rm -f ${3} || error ' unable to delete symbolic link '${3} |
|
327 |
;; |
|
328 |
m) |
|
329 |
mv -f ${3} ${3}.${TIME}.old || error ' unable to move symbolic link '${3} |
|
330 |
;; |
|
331 |
s) |
|
332 |
echo ' as you decide, we leave it as it is!' |
|
333 |
DO=0 |
|
334 |
;; |
|
335 |
q) |
|
336 |
[ "${NO_COLOR}" = 1 ] || echo -ne "${UNMARK}" |
|
337 |
echo |
|
338 |
echo ' script aborted by user input' |
|
339 |
exit 72 |
|
340 |
;; |
|
341 |
esac |
|
342 |
fi |
|
343 |
else |
|
344 |
echo ' ... file already exists where I tried to create a symbolic link!' |
|
345 |
ls -lah "${3}" |
|
346 |
echo ' you may' |
|
347 |
echo ' [S] show the file (exit file display with "q")' |
|
348 |
echo ' [m] move current file to '${3}.${TIME}.old |
|
349 |
echo ' [d] delete and replace the file with symbolic link' |
|
350 |
echo ' [s] skip -- leave it as it is' |
|
351 |
echo ' [q] abort setup.sh' |
|
352 |
QUESTION='what to do? [S/d/m/s/q]:' |
|
353 |
echo -en " ${QUESTION} " |
|
354 |
[ "${NO_COLOR}" = 1 ] || echo -ne ${MARK} |
|
355 |
read ANSWER |
|
356 |
[ "${NO_COLOR}" = 1 ] || echo -ne ${UNMARK} |
|
357 |
until [ "${ANSWER}" = S ] \ |
|
358 |
|| [ "${ANSWER}" = d ] \ |
|
359 |
|| [ "${ANSWER}" = m ] \ |
|
360 |
|| [ "${ANSWER}" = s ] \ |
|
361 |
|| [ "${ANSWER}" = q ] ; do |
|
362 |
echo -n " ${QUESTION} " |
|
363 |
read ANSWER |
|
364 |
done |
|
365 |
|
|
366 |
case ${ANSWER} in |
|
367 |
S) |
|
368 |
echo |
|
369 |
echo |
|
370 |
less "${3}" |
|
371 |
echo |
|
372 |
echo |
|
373 |
create_file "${1}" "${2}" "${3}" |
|
374 |
return |
|
375 |
;; |
|
376 |
m) |
|
377 |
mv -f ${3} ${3}.${TIME}.old || error ' unable to move file '${3} |
|
378 |
;; |
|
379 |
d) |
|
380 |
rm -f ${3} || error ' unable to delete file '${3} |
|
381 |
;; |
|
382 |
s) |
|
383 |
echo ' as you decide, we leave it as it is!' |
|
384 |
DO=0 |
|
385 |
;; |
|
386 |
q) |
|
387 |
[ "${NO_COLOR}" = 1 ] || echo -ne "${UNMARK}" |
|
388 |
echo |
|
389 |
echo ' script aborted by user input' |
|
390 |
exit 72 |
|
391 |
;; |
|
392 |
esac |
|
393 |
fi |
|
394 |
fi |
|
395 |
if [ "${DO}" = "1" ] ;then ln -s "${2}" "${3}" || error ' failed to create symbolic link '${3} ; fi |
|
396 |
[ "${DO}" = "1" ] && echo \ \ ${OK} |
|
397 |
fi |
|
398 |
|
|
399 |
if [ "${1}" = cp ] ;then |
|
400 |
echo -n ' -> try to copy file '${3} |
|
401 |
DO=1 |
|
402 |
if [ -e "${3}" ] ; then |
|
403 |
echo ' ... file already exists!' |
|
404 |
diff "${2}" "${3}" >/dev/null |
|
405 |
if [ "$?" = 0 ] ; then |
|
406 |
echo ' files are equal, we leave it as it is!' |
|
407 |
DO=0 |
|
408 |
else |
|
409 |
ls -lah "${3}" |
|
410 |
echo ' you may' |
|
411 |
echo ' [D] show a diff between the new and current file' |
|
412 |
echo ' [m] move current file to '${3}.${TIME}.old |
|
413 |
echo ' [d] delete and replace with new file' |
|
414 |
echo ' [s] skip -- leave it as it is' |
|
415 |
echo ' [q] abort setup.sh' |
|
416 |
QUESTION='what to do? [D/m/d/s/q]:' |
|
417 |
echo -en " ${QUESTION} " |
|
418 |
[ "${NO_COLOR}" = 1 ] || echo -ne ${MARK} |
|
419 |
read ANSWER |
|
420 |
[ "${NO_COLOR}" = 1 ] || echo -ne ${UNMARK} |
|
421 |
until [ "${ANSWER}" = D ] \ |
|
422 |
|| [ "${ANSWER}" = d ] \ |
|
423 |
|| [ "${ANSWER}" = m ] \ |
|
424 |
|| [ "${ANSWER}" = s ] \ |
|
425 |
|| [ "${ANSWER}" = q ] ; do |
|
426 |
echo -n " ${QUESTION} " |
|
427 |
read ANSWER |
|
428 |
done |
|
429 |
|
|
430 |
case ${ANSWER} in |
|
431 |
D) |
|
432 |
echo |
|
433 |
echo |
|
434 |
[ "${NO_COLOR}" = 1 ] || echo -ne ${MARK} |
|
435 |
echo '---------------------------------------' |
|
436 |
[ "${NO_COLOR}" = 1 ] || echo -ne ${UNMARK} |
|
437 |
diff -C 3 "${2}" "${3}" |
|
438 |
[ "${NO_COLOR}" = 1 ] || echo -ne ${MARK} |
|
439 |
echo '---------------------------------------' |
|
440 |
[ "${NO_COLOR}" = 1 ] || echo -ne ${UNMARK} |
|
441 |
echo |
|
442 |
echo |
|
443 |
create_file "${1}" "${2}" "${3}" |
|
444 |
;; |
|
445 |
m) |
|
446 |
mv -f ${3} ${3}.${TIME}.old || error ' unable to move file '${3} |
|
447 |
;; |
|
448 |
d) |
|
449 |
rm -f ${3} || error ' unable to delete file '${3} |
|
450 |
;; |
|
451 |
s) |
|
452 |
echo ' as you decide, we leave it as it is!' |
|
453 |
DO=0 |
|
454 |
;; |
|
455 |
q) |
|
456 |
[ "${NO_COLOR}" = 1 ] || echo -ne "${UNMARK}" |
|
457 |
echo |
|
458 |
echo ' script aborted by user input' |
|
459 |
exit 72 |
|
460 |
;; |
|
461 |
esac |
|
462 |
fi |
|
463 |
fi |
|
464 |
if [ "${DO}" = "1" ] ;then cp "${2}" "${3}" || error ' failed to copy '${3} ; fi |
|
465 |
[ "${DO}" = "1" ] && echo \ \ ${OK} |
|
466 |
fi |
|
467 |
|
|
468 |
} |
|
469 |
|
|
470 |
function create_mydata { |
|
471 |
|
Auch abrufbar als: Unified diff
fancy LaTeX initial
siehe doc/2011-12-14_alternatives_vorlagensystem_f-tex.txt