Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision f0e9585f

Von wulf@coulmann.de vor etwa 13 Jahren hinzugefügt

  • ID f0e9585f5e47401746e78b8b939078d80a848120
  • Vorgänger 2828d156
  • Nachfolger c8bdac22

fancy LaTeX initial
siehe doc/2011-12-14_alternatives_vorlagensystem_f-tex.txt

Unterschiede anzeigen:

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

  
... Dieser Diff wurde abgeschnitten, weil er die maximale Anzahl anzuzeigender Zeilen überschreitet.

Auch abrufbar als: Unified diff