\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{kiviletter}[2019/10/10 Letter Layouts for Kivitendo]
+\newif\if@kivi@infobox
+\DeclareOption{reffields}{\@kivi@infoboxfalse}
+\DeclareOption{infobox}{\@kivi@infoboxtrue}
+\@kivi@infoboxtrue
+
+\newif\if@kivi@faketable
+\DeclareOption{faketable}{\@kivi@faketabletrue}
+
+\ProcessOptions\relax
+
+
\RequirePackage{expl3}
\RequirePackage{iftex}
% Schriftart, Eingabelayout der Tastatur
\RequirePackage[fromlogo,fromalign=right]{scrletter}
\LoadLetterOption{DIN}
+\usepackage{geometry}
+
+\geometry{a4paper,left=\useplength{toaddrhpos}, right=\useplength{toaddrhpos}}
+
\ExplSyntaxOn
%Scratch variables
\int_new:N \l_kivi_tmp_int
\dim_new:N \g_kivi_tab_id_dim
\dim_gset:Nn \g_kivi_tab_id_dim {4em}
\dim_new:N \g_kivi_tab_num_dim
-\dim_gset:Nn \g_kivi_tab_num_dim {4em}
+\dim_gset:Nn \g_kivi_tab_num_dim {5em}
\dim_new:N \g_kivi_tab_price_dim
-\dim_gset:Nn \g_kivi_tab_price_dim {4em}
+\dim_gset:Nn \g_kivi_tab_price_dim {5em}
\dim_new:N \g_kivi_tab_desc_dim
\dim_new:N \g_kivi_tabcolsep_dim
\dim_gset:Nn \g_kivi_tab_desc_dim {\textwidth-\g_kivi_tab_pos_dim -\g_kivi_tab_id_dim-\g_kivi_tab_num_dim - 2\g_kivi_tab_price_dim - 10\g_kivi_tabcolsep_dim}
}
-\newcolumntype{P}{>{\arraybackslash}p{\g_kivi_tab_price_dim}}
+\newcolumntype{P}{>{\raggedleft\arraybackslash}p{\g_kivi_tab_price_dim}}
+
+%\if@kivi@faketable
+\RequirePackage{tcolorbox}
+\tcbuselibrary{breakable, skins}
+\seq_new:N \l_kivi_PricingTable_seq
+\seq_new:N \g_kivi_extraDescription_seq
+\newcommand{\FakeTable}[1]{
+% \tl_set:No \l_tmpa_tl {\BODY}
+ \endPricingTabular
+ \seq_set_split:Nnn \l_kivi_PricingTable_seq {\tabularnewline} {#1}
+ \begingroup
+ \setlength{\tabcolsep}{\g_kivi_tabcolsep_dim}
+ \seq_map_inline:Nn \l_kivi_PricingTable_seq {
+ \seq_gclear:N \g_kivi_extraDescription_seq
+ \tabular{@{}p{\g_kivi_tab_pos_dim}p{\g_kivi_tab_id_dim}p{\g_kivi_tab_desc_dim}>{\raggedleft\arraybackslash}p{\g_kivi_tab_num_dim}*2{P<{\,\currency}}@{}}
+ ##1
+ \endtabular
+ \seq_if_empty:NTF \g_kivi_extraDescription_seq
+ {\par\nointerlineskip}
+ {\par\nointerlineskip
+ \begin{tcolorbox}[left~skip=\dim_eval:n {\g_kivi_tab_pos_dim+ \g_kivi_tab_id_dim +4\tabcolsep},right~skip=\dim_eval:n {\g_kivi_tab_num_dim+ 2\g_kivi_tab_price_dim +6\tabcolsep}, breakable, blank]
+ \seq_use:N \g_kivi_extraDescription_seq {\newline}
+ \end{tcolorbox}
+ }
+ }
+ \endgroup
+ \PricingTabular
+}
-\newenvironment{PricingTabular}{
+\newcommand{\ExtraDescription}[1]{\seq_gput_right:Nn \g_kivi_extraDescription_seq {#1}}
+%\else
+\newenvironment{PricingTabular}[1][]{
\begingroup
\setlength{\tabcolsep}{\g_kivi_tabcolsep_dim}
\CalcTabCols
\longtable{@{}p{\g_kivi_tab_pos_dim}p{\g_kivi_tab_id_dim}p{\g_kivi_tab_desc_dim}>{\raggedleft\arraybackslash}p{\g_kivi_tab_num_dim}*2{P<{\,\currency}}@{}}
% Tabellenkopf
\toprule
- \bfseries\position & \bfseries\artikelnummer & \bfseries\bezeichnung & \bfseries\menge &\multicolumn{1}{P}{\bfseries\einzelpreis}&\multicolumn{1}{P}{\bfseries\gesamtpreis}\\
+ \bfseries\position & \bfseries\artikelnummer & \bfseries\bezeichnung & \bfseries\menge &\multicolumn{1}{P}{\bfseries\einzelpreis}&\multicolumn{1}{P@{}}{\bfseries\gesamtpreis}\\
\midrule
\endhead
\midrule
\endlongtable
\endgroup
}
+%\fi
\ExplSyntaxOff
+\if@kivi@infobox
+\newkomavar{locationtitle}
+\setkomavar{location}{
+ \begin{flushright}
+ \bfseries
+ \LARGE
+ \usekomavar{locationtitle}
+ \end{flushright}
+
+ \medskip
+ \begin{tabularx}{\linewidth}{@{}l<{:}>{\raggedright\arraybackslash}X@{}}
+ \datum&\usekomavar{date}\\
+ \kundennummer&\usekomavar{customer}\\
+ \ansprechpartner&\usekomavar{fromname}\\
+ \ifkomavarempty{fromphone}{}{\textTelefon&\usekomavar{fromphone}\\}
+ \ifkomavarempty{fromemail}{}{\textEmail&\usekomavar{fromemail}\\}
+ \end{tabularx}
+}
+\removereffields
+
+\ExplSyntaxOn
+\AtBeginLetter{
+ \ifkomavarempty{title}{}{
+ \exp_args:Nno\setkomavar{locationtitle}{\scr@title@var}
+ \setkomavar{title}{}
+ }
+}
+\ExplSyntaxOff
+\fi
+
+
+
\renewcommand*{\raggedsignature}{\raggedright}
\endinput