%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Makros zur Berechnung und Ausgabe einer Zwischensumme bei langen Tabellen
% Der Hack der longtable Ausgabe ist von Heiko Oberdiek, das Paket zref auch.
%                            ---<(kaimartin)>---(August, 2007)
%
%  - Dezimaltrennzeichenn nur noch "."               by scripts_at_gpl.coulmann.de 2010-12
%    (raw_numbers patch)
%  - \Wert -> default Wert 0,                        by scripts_at_gpl.coulmann.de 2009-08
%    wenn kein Wert uebergebenn wird, dies
%    ermoeglicht das Ausgeben von Tabellen ohne
%    Preise (z.b. Lieferscheine)
%  - keine Ausgabe der Zwischensumme, wenn 0
%  - neu: \brutto zur Ausgabe von Bruttopreisen      by scripts_at_gpl.coulmann.de 2009-07
%  - Anpassungen fuer fancy LaTeX                    by scripts_at_gpl.coulmann.de 2009-03
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Diese Datei steht unter der GPL-Lizenz, Version 3
% siehe http://www.gnu.de/licenses/gpl-3.0.html
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\usepackage{etex}           % Damit Marken verwendet werden koennen
\usepackage[savepos,user]{zref}  % Um die jeweils aktuelle Position zu merken
\usepackage{fltpoint}       % Rechnen mit Komma-Zahlen
\usepackage{numprint}       % Zahlen formatiert ausgeben
\usepackage{eurosym}        % Das Euro-Zeichen
\usepackage{calc}           % Fuer das Makro \widthof{}

% Vorlagen sind auf raw_num Patch ausgelegt daher nur noch . als Trennzeichen
\newcommand{\DecimalSign}{.}
\fpDecimalSign{\DecimalSign}

% Globale Einstellungen fuer numprint
\npstylegerman      % Deutsche Zahlenformatierung, in der Ausgabe
\nprounddigits{2}   % Zwei Nachkommasstellen

% \leer ist bereits in letter.tex definiert, wenn nicht muss es hier passieren
% \newcommand{\leer}{}

%%%%%%%%%%%%%%Befehle zur Berechnung der Zwischensumme%%%%%%%%%%%%%%%%%%%%%%%
\newcommand*\laufsumme{0}
\newcommand*\resetlaufsumme{\global\def\laufsumme{0}}
\newcommand*\addlaufsumme[1]{\fpAdd{\laufsumme}{\laufsumme}{#1}%
                                 \global\let\laufsumme\laufsumme}
\newcommand*\printwert[1]{
  \ifthenelse{\NoValue > 0}{
  }{
    \numprint{#1}
  }
}


%%%%%%%%Plaintex-Hack fuer Positionierung der Zwischensummen%%%%%%%%%%%%%%%%%%


\makeatletter  % Das at-Zeichen in Variablen zulassen

% Variablen bereit stellen
  \newdimen\drx
  \newdimen\dry

  \newmarks\ltm@marks
  \def\ltm@setmarks#1{%
    \marks\ltm@marks{#1}%
    }
  \def\ltm@getmarks{%
    \botmarks\ltm@marks
    }


% Den aktuellen Wert der Laufsumme berechnen und merken
\newcommand*{\Wert}[1]{%
  \ifthenelse{\equal{#1}{\leer}}{
    \addlaufsumme{0}%  Den uebergebenen Wert zur Laufsumme addieren
    \expandafter\ltm@setmarks\expandafter{\laufsumme}% Die Laufsumme merken
  }{
    \printwert{#1}%     Ausgabe des Werts vor Ort
    \addlaufsumme{#1}%  Den uebergebenen Wert zur Laufsumme addieren
    \expandafter\ltm@setmarks\expandafter{\laufsumme}% Die Laufsumme merken
  }
}

% Merken der aktuellen Position
\newcommand*{\MarkZwsumPos}{%
  \leavevmode
     \zsavepos{zwsumpos\thepage}%
     \zrefused{zwsumpos\thepage}%
}


% Ausgabe der Zwischensumme
\def\ltm@insertfoot#1{%
    \vbox to\z@{%
      \vss
      \hb@xt@\z@{%
        \color@begingroup
           \zsavepos{tabende\thepage}%   % Die aktuelle Position merken
           \drx=0sp
           \dry=0sp
           % Die aktuelle Position abziehen und die gemerkte addieren
           \advance \drx by -\zposx{tabende\thepage}sp
           \advance \drx by \zposx{zwsumpos\thepage}sp
           \advance \dry by -\zposy{tabende\thepage}sp
           \advance \dry by \zposy{zwsumpos\thepage}sp
           \smash{\kern\drx\raise\dry%
             %\hbox{\makebox[\widthof{ \currency}][r]{\printwert{#1} \currency}}%  % mit Waehrungszeichen
            \hbox{\printwert{#1} }%                                                % ohne Waehrungszeichen
           }% end smash
        \color@endgroup
      }%
    }%
    \vspace{4mm}
}

% Ausgabe des Uebertrags
% Wie die Ausgabe der Zwischensumme, nur ohne neu gemerkte Position
\def\ltm@inserthead#1{%
    \vbox to\z@{%
      \vss
      \hb@xt@\z@{%
        \color@begingroup
           \drx=0sp
           \dry=0sp
           % Die Position des Tabellenendes abziehen und zur gemerkten gehen
           \advance \drx by -\zposx{tabende\thepage}sp
           \advance \drx by \zposx{zwsumpos\thepage}sp
           \advance \dry by -\zposy{tabende\thepage}sp
           \advance \dry by \zposy{zwsumpos\thepage}sp
           \smash{\kern\drx\raise\dry%
              % Die eigentliche Ausgabe.
              %  Rechtsbuendig und um die Breite der Währung verschoben.
              %\hbox{\makebox[\widthof{ \currency}][r]{\printwert{#1} \currency}}%
             \hbox{\printwert{#1}}%                                                % ohne Waehrungszeichen
            %\hbox{\makebox[\widthof{ \printwert{#1}}][r]{\printwert{#1}\rule{0mm}{10mm} }}%                                                % ohne Waehrungszeichen
             }% end smash
        \color@endgroup
      }%
    }%
    \vspace{1mm}
}


\def\ltm@lastfoot{\ltm@insertfoot\ltm@getmarks}
\def\ltm@foot{\ltm@insertfoot{\ltm@getmarks}}
\def\ltm@head{\ltm@inserthead{\ltm@getmarks}}


% Ueberschreiben der Output-Routine von longtable
\def\LT@output{%
  \ifnum\outputpenalty <-\@Mi
    \ifnum\outputpenalty > -\LT@end@pen
      \LT@err{floats and marginpars %
              not allowed in a longtable}\@ehc
    \else
      \setbox\z@\vbox{\unvbox\@cclv}%
      \ifdim \ht\LT@lastfoot>\ht\LT@foot
        \dimen@\pagegoal
        \advance\dimen@-\ht\LT@lastfoot
        \ifdim\dimen@<\ht\z@
          \setbox\@cclv\vbox{%
            \unvbox\z@\copy\LT@foot\ltm@foot\vss
          }%
          \@makecol
          \@outputpage
          \setbox\z@\vbox{\box\LT@head}%
        \fi
      \fi
      \global\@colroom\@colht
      \global\vsize\@colht
      \vbox{%
        \unvbox\z@
        \box\ifvoid\LT@lastfoot
          \LT@foot\ltm@foot
        \else
          \LT@lastfoot\ltm@lastfoot
        \fi
      }%
    \fi
  \else
    \setbox\@cclv\vbox{%
      \unvbox\@cclv\copy\LT@foot\ltm@foot\vss
    }%
    \@makecol
    \@outputpage
    \global\vsize\@colroom
    \copy\LT@head\ltm@head
  \fi
}

\newcommand\BruttoSellPrice[2]{
      \fpAdd{\tax}{#2}{100}
      \fpDiv{\taxF}{\tax}{100}
      \fpMul{\result}{#1}{\taxF}
      \numprint{\result}
}
\newcommand\BruttoWert[2]{
      \fpAdd{\tax}{#2}{100}
      \fpDiv{\taxF}{\tax}{100}
      \fpMul{\rawresult}{#1}{\taxF}
      \Wert{\rawresult}
}


\newcommand\BruttoLineSum[4]{
      \fpAdd{\tax}{#4}{100}
      \fpDiv{\taxF}{\tax}{100}
      \fpMul{\result}{#1}{\taxF}
      \fpMul{\result}{#2}{\result}
      \fpSub{\rabatt}{100}{#3}
      \fpDiv{\rabatt}{\rabatt}{100}
      \fpMul{\result}{\result}{\rabatt}
      \Wert{\result}
}

%      \ifthenelse{\equal{<%p_discount%>}{0}}{}{ -<%p_discount%>\%} &
%        %<%sellprice%>
%      \Wert{<%linetotal%>}    % Zeilensumme

%  \fpMul{\result}{#1}{1.19}
%  \fpMul{\resultt}{#2}{\result}
%  \fpSub{\rabatt}{100}{#3}
%  \fpDiv{\rabattt}{\rabatt}{100}
%  \fpMul{\resulttt}{\resultt}{\rabattt}
%  %\fpRound{\roundresult}{\result}{3}
%  %\roundresult
%  \resulttt

\makeatother    % Das at-Zeichen in Variablen wieder verbieten
%%%%%%%%%%%%%%%%%%%%Ende plaintex-Hack%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
