043d94fbd4a0a263c6c06448a8310fc7faebba2a
[kivitendo-erp.git] / templates / print / f-tex / zwischensumme.sty
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 % Makros zur Berechnung und Ausgabe einer Zwischensumme bei langen Tabellen
3 % Der Hack der longtable Ausgabe ist von Heiko Oberdiek, das Paket zref auch.
4 %                            ---<(kaimartin)>---(August, 2007)
5 %
6 %  - Dezimaltrennzeichenn nur noch "."               by scripts_at_gpl.coulmann.de 2010-12
7 %    (raw_numbers patch)
8 %  - \Wert -> default Wert 0,                        by scripts_at_gpl.coulmann.de 2009-08
9 %    wenn kein Wert uebergebenn wird, dies
10 %    ermoeglicht das Ausgeben von Tabellen ohne
11 %    Preise (z.b. Lieferscheine)
12 %  - keine Ausgabe der Zwischensumme, wenn 0
13 %  - neu: \brutto zur Ausgabe von Bruttopreisen      by scripts_at_gpl.coulmann.de 2009-07
14 %  - Anpassungen fuer fancy LaTeX                    by scripts_at_gpl.coulmann.de 2009-03
15 %
16 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
17 % Diese Datei steht unter der GPL-Lizenz, Version 3
18 % siehe http://www.gnu.de/licenses/gpl-3.0.html
19 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
20
21 \usepackage{etex}           % Damit Marken verwendet werden koennen
22 \usepackage[savepos,user]{zref}  % Um die jeweils aktuelle Position zu merken
23 \usepackage{fltpoint}       % Rechnen mit Komma-Zahlen
24 \usepackage{numprint}       % Zahlen formatiert ausgeben
25 \usepackage{eurosym}        % Das Euro-Zeichen
26 \usepackage{calc}           % Fuer das Makro \widthof{}
27
28 % Vorlagen sind auf raw_num Patch ausgelegt daher nur noch . als Trennzeichen
29 \newcommand{\DecimalSign}{.}
30 \fpDecimalSign{\DecimalSign}
31
32 % Globale Einstellungen fuer numprint
33 \npstylegerman      % Deutsche Zahlenformatierung, in der Ausgabe
34 \nprounddigits{2}   % Zwei Nachkommasstellen
35
36 % \leer ist bereits in letter.tex definiert, wenn nicht muss es hier passieren
37 % \newcommand{\leer}{}
38
39 %%%%%%%%%%%%%%Befehle zur Berechnung der Zwischensumme%%%%%%%%%%%%%%%%%%%%%%%
40 \newcommand*\laufsumme{0}
41 \newcommand*\resetlaufsumme{\global\def\laufsumme{0}}
42 \newcommand*\addlaufsumme[1]{\fpAdd{\laufsumme}{\laufsumme}{#1}%
43                                  \global\let\laufsumme\laufsumme}
44 \newcommand*\printwert[1]{
45   \ifthenelse{\NoValue > 0}{
46   }{
47     \numprint{#1}
48   }
49 }
50
51
52 %%%%%%%%Plaintex-Hack fuer Positionierung der Zwischensummen%%%%%%%%%%%%%%%%%%
53
54
55 \makeatletter  % Das at-Zeichen in Variablen zulassen
56
57 % Variablen bereit stellen
58   \newdimen\drx
59   \newdimen\dry
60
61   \newmarks\ltm@marks
62   \def\ltm@setmarks#1{%
63     \marks\ltm@marks{#1}%
64     }
65   \def\ltm@getmarks{%
66     \botmarks\ltm@marks
67     }
68
69
70 % Den aktuellen Wert der Laufsumme berechnen und merken
71 \newcommand*{\Wert}[1]{%
72   \ifthenelse{\equal{#1}{\leer}}{
73     \addlaufsumme{0}%  Den uebergebenen Wert zur Laufsumme addieren
74     \expandafter\ltm@setmarks\expandafter{\laufsumme}% Die Laufsumme merken
75   }{
76     \printwert{#1}%     Ausgabe des Werts vor Ort
77     \addlaufsumme{#1}%  Den uebergebenen Wert zur Laufsumme addieren
78     \expandafter\ltm@setmarks\expandafter{\laufsumme}% Die Laufsumme merken
79   }
80 }
81
82 % Merken der aktuellen Position
83 \newcommand*{\MarkZwsumPos}{%
84   \leavevmode
85      \zsavepos{zwsumpos\thepage}%
86      \zrefused{zwsumpos\thepage}%
87 }
88
89
90 % Ausgabe der Zwischensumme
91 \def\ltm@insertfoot#1{%
92     \vbox to\z@{%
93       \vss
94       \hb@xt@\z@{%
95         \color@begingroup
96            \zsavepos{tabende\thepage}%   % Die aktuelle Position merken
97            \drx=0sp
98            \dry=0sp
99            % Die aktuelle Position abziehen und die gemerkte addieren
100            \advance \drx by -\zposx{tabende\thepage}sp
101            \advance \drx by \zposx{zwsumpos\thepage}sp
102            \advance \dry by -\zposy{tabende\thepage}sp
103            \advance \dry by \zposy{zwsumpos\thepage}sp
104            \smash{\kern\drx\raise\dry%
105              %\hbox{\makebox[\widthof{ \currency}][r]{\printwert{#1} \currency}}%  % mit Waehrungszeichen
106             \hbox{\printwert{#1} }%                                                % ohne Waehrungszeichen
107            }% end smash
108         \color@endgroup
109       }%
110     }%
111     \vspace{4mm}
112 }
113
114 % Ausgabe des Uebertrags
115 % Wie die Ausgabe der Zwischensumme, nur ohne neu gemerkte Position
116 \def\ltm@inserthead#1{%
117     \vbox to\z@{%
118       \vss
119       \hb@xt@\z@{%
120         \color@begingroup
121            \drx=0sp
122            \dry=0sp
123            % Die Position des Tabellenendes abziehen und zur gemerkten gehen
124            \advance \drx by -\zposx{tabende\thepage}sp
125            \advance \drx by \zposx{zwsumpos\thepage}sp
126            \advance \dry by -\zposy{tabende\thepage}sp
127            \advance \dry by \zposy{zwsumpos\thepage}sp
128            \smash{\kern\drx\raise\dry%
129               % Die eigentliche Ausgabe.
130               %  Rechtsbuendig und um die Breite der Währung verschoben.
131               %\hbox{\makebox[\widthof{ \currency}][r]{\printwert{#1} \currency}}%
132              \hbox{\printwert{#1}}%                                                % ohne Waehrungszeichen
133             %\hbox{\makebox[\widthof{ \printwert{#1}}][r]{\printwert{#1}\rule{0mm}{10mm} }}%                                                % ohne Waehrungszeichen
134              }% end smash
135         \color@endgroup
136       }%
137     }%
138     \vspace{1mm}
139 }
140
141
142 \def\ltm@lastfoot{\ltm@insertfoot\ltm@getmarks}
143 \def\ltm@foot{\ltm@insertfoot{\ltm@getmarks}}
144 \def\ltm@head{\ltm@inserthead{\ltm@getmarks}}
145
146
147 % Ueberschreiben der Output-Routine von longtable
148 \def\LT@output{%
149   \ifnum\outputpenalty <-\@Mi
150     \ifnum\outputpenalty > -\LT@end@pen
151       \LT@err{floats and marginpars %
152               not allowed in a longtable}\@ehc
153     \else
154       \setbox\z@\vbox{\unvbox\@cclv}%
155       \ifdim \ht\LT@lastfoot>\ht\LT@foot
156         \dimen@\pagegoal
157         \advance\dimen@-\ht\LT@lastfoot
158         \ifdim\dimen@<\ht\z@
159           \setbox\@cclv\vbox{%
160             \unvbox\z@\copy\LT@foot\ltm@foot\vss
161           }%
162           \@makecol
163           \@outputpage
164           \setbox\z@\vbox{\box\LT@head}%
165         \fi
166       \fi
167       \global\@colroom\@colht
168       \global\vsize\@colht
169       \vbox{%
170         \unvbox\z@
171         \box\ifvoid\LT@lastfoot
172           \LT@foot\ltm@foot
173         \else
174           \LT@lastfoot\ltm@lastfoot
175         \fi
176       }%
177     \fi
178   \else
179     \setbox\@cclv\vbox{%
180       \unvbox\@cclv\copy\LT@foot\ltm@foot\vss
181     }%
182     \@makecol
183     \@outputpage
184     \global\vsize\@colroom
185     \copy\LT@head\ltm@head
186   \fi
187 }
188
189 \newcommand\BruttoSellPrice[2]{
190       \fpAdd{\tax}{#2}{100}
191       \fpDiv{\taxF}{\tax}{100}
192       \fpMul{\result}{#1}{\taxF}
193       \numprint{\result}
194 }
195 \newcommand\BruttoWert[2]{
196       \fpAdd{\tax}{#2}{100}
197       \fpDiv{\taxF}{\tax}{100}
198       \fpMul{\rawresult}{#1}{\taxF}
199       \Wert{\rawresult}
200 }
201
202
203 \newcommand\BruttoLineSum[4]{
204       \fpAdd{\tax}{#4}{100}
205       \fpDiv{\taxF}{\tax}{100}
206       \fpMul{\result}{#1}{\taxF}
207       \fpMul{\result}{#2}{\result}
208       \fpSub{\rabatt}{100}{#3}
209       \fpDiv{\rabatt}{\rabatt}{100}
210       \fpMul{\result}{\result}{\rabatt}
211       \Wert{\result}
212 }
213
214 %      \ifthenelse{\equal{<%p_discount%>}{0}}{}{ -<%p_discount%>\%} &
215 %        %<%sellprice%>
216 %      \Wert{<%linetotal%>}    % Zeilensumme
217
218 %  \fpMul{\result}{#1}{1.19}
219 %  \fpMul{\resultt}{#2}{\result}
220 %  \fpSub{\rabatt}{100}{#3}
221 %  \fpDiv{\rabattt}{\rabatt}{100}
222 %  \fpMul{\resulttt}{\resultt}{\rabattt}
223 %  %\fpRound{\roundresult}{\result}{3}
224 %  %\roundresult
225 %  \resulttt
226
227 \makeatother    % Das at-Zeichen in Variablen wieder verbieten
228 %%%%%%%%%%%%%%%%%%%%Ende plaintex-Hack%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%