Merge pull request #29 from TeXhackse/marei-reimplement-table
[kivitendo-erp.git] / templates / print / marei / kiviletter.sty
index cce6ebe..90ccaff 100644 (file)
@@ -2,35 +2,40 @@
 \ProvidesPackage{kiviletter}[2020/04/24 Letter Layouts for Kivitendo]
 
 \newif\if@kivi@infobox
+\newif\if@kivi@footer
 \DeclareOption{reffields}{\@kivi@infoboxfalse}
 \DeclareOption{infobox}{\@kivi@infoboxtrue}
+\DeclareOption{nofooter}{\@kivi@footerfalse}
+\DeclareOption{footer}{\@kivi@footertrue}
 \@kivi@infoboxtrue
+\@kivi@footertrue
+
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{scrletter}}
 
 \ProcessOptions\relax
 
 
 \RequirePackage{expl3}
+\RequirePackage{xparse}
 \RequirePackage{iftex}
 \KOMAoptions{fontsize=12pt}
 % Schriftart, Eingabelayout der Tastatur
 \ifPDFTeX
-\RequirePackage[utf8]{inputenc}% Nur notwendig, wenn Basis älter als TL2018
-\RequirePackage[T1]{fontenc}
-\RequirePackage{lmodern}
+       \RequirePackage[utf8]{inputenc}% Nur notwendig, wenn Basis älter als TL2018
+       \RequirePackage[T1]{fontenc}
+       \RequirePackage{lmodern}
+
+       \RequirePackage{eurosym}
+       \DeclareUnicodeCharacter{20AC}{\euro}
 \else
-\RequirePackage{fontspec}
+       \RequirePackage{fontspec}
 \fi
 
-%\RequirePackage{xltabular}
-\RequirePackage{tabularx}
-\RequirePackage{longtable}
+\RequirePackage{xltabular}
 \RequirePackage{booktabs}
 \RequirePackage{graphicx}
 
-\ifPDFTeX
-\RequirePackage{eurosym}
-\DeclareUnicodeCharacter{20AC}{\euro}
-\fi
+
 
 \RequirePackage[fromlogo,fromalign=right,
   firstfoot=false,%Für einheitliche Randeinstellungen
 \newkomavar{transaction}
 \newkomavar[\lieferschein{}~\nr]{delivery}
 \newkomavar[\angebot{}~\nr]{quote}
-\newkomavar{orderID}
-\newkomavar{projectID}
+\newkomavar[\auftragsnummer]{orderID}
+\newkomavar[\projektnummer]{projectID}
+\setkomavar*{fromphone}{\textTelefon}
+\setkomavar*{fromemail}{\textEmail}
+\setkomavar*{fromfax}{\textFax}
+\setkomavar*{customer}{\kundennummer}
+
 
 \usepackage{geometry}
 
@@ -150,36 +160,48 @@ contents={\usebox\shippingAddressBox}
 \dim_new:N \g_kivi_tabcolsep_dim
 \dim_gset:Nn \g_kivi_tabcolsep_dim {.5\tabcolsep}
 
+\prg_new_conditional:Nnn \kivi_if_Price_col:n {T} {
+       \prop_get:cnN {l_kivi_col_#1_prop} {colspec} \l_tmpa_tl
+       \exp_args:NV \tl_if_eq:nnTF \l_tmpa_tl {Price}
+               {\prg_return_true:}
+               {\prg_return_false:}
+}
+
+
 \cs_new:Nn \__kivi_calc_desc_column: {
        \dim_zero:N \l_kivi_tab_desc_leftskip_dim
        \dim_zero:N \l_kivi_tab_desc_dim
        \bool_set_false:N \l_tmpa_bool
+       \tl_gclear:N \g_kivi_Pricing_colspec_tl
        \clist_map_inline:Nn \g_kivi_pricingtable_col_clist {
                \tl_if_eq:nnTF {##1} {desc}  {
                        \dim_set:Nn \l_kivi_tab_desc_dim {
                                \textwidth-\l_kivi_tab_desc_leftskip_dim
                        }
                        \bool_set_true:N \l_tmpa_bool
-               
+                       \tl_gput_right:Nn \g_kivi_Pricing_colspec_tl {p{\l_kivi_tab_desc_dim}}
                }{
-                       \bool_if:NTF \l_tmpa_bool {
-                               \bool_if:cT {l_kivi_col_##1_bool} {
+                       \bool_if:cT {l_kivi_col_##1_bool} {
+                               \bool_if:NTF \l_tmpa_bool {
                                        \dim_sub:Nn \l_kivi_tab_desc_dim {
                                                \dim_use:c {l_kivi_tab_##1_dim}+2\g_kivi_tabcolsep_dim
                                        }
-                               }
-                       }{
-                               \bool_if:cT {l_kivi_col_##1_bool} {
+                               }{
                                        \dim_add:Nn \l_kivi_tab_desc_leftskip_dim {
                                                \dim_use:c {l_kivi_tab_##1_dim}+2\g_kivi_tabcolsep_dim
                                        }
                                }
+                               \tl_gput_right:Nn \g_kivi_Pricing_colspec_tl {K{\dim_use:c {l_kivi_tab_##1_dim}}}
+                               \kivi_if_Price_col:nT {##1} {\tl_gput_right:Nn \g_kivi_Pricing_colspec_tl {<{\__kivi_tab_column_currency:}}}
                        }
                }
        }
+       \tl_gput_left:Nn \g_kivi_Pricing_colspec_tl {@{}}
+       \tl_gput_right:Nn \g_kivi_Pricing_colspec_tl {@{}}
 }
 
-\newcolumntype{P}[1]{>{\raggedleft\arraybackslash}p{#1}<{\__kivi_tab_column_currency:}}
+\newcolumntype{K}[1]{>{\raggedleft\arraybackslash}p{#1}}
+\newcolumntype{P}[1]{K{#1}<{\__kivi_tab_column_currency:}}
 
 \RequirePackage{tcolorbox}
 \tcbuselibrary{breakable, skins}
@@ -252,7 +274,7 @@ contents={\usebox\shippingAddressBox}
        \setlength{\leftskip}{\l_kivi_tab_desc_leftskip_dim}
        \usekomafont{extraDescription}
        \seq_use:Nn \g_kivi_extraDescription_seq {\\}
-       \par\nointerlineskip
+       \par
        \endgroup
        }
        }
@@ -282,7 +304,7 @@ contents={\usebox\shippingAddressBox}
        @{}
 }
 
-\cs_new:Nn \__kivi_tab_column_currency: {\,\currency}
+\cs_new_protected:Nn \__kivi_tab_column_currency: {\,\currency}
 \def\tabcurrency{\__kivi_tab_column_currency:}
 \cs_set:Nn \__kivi_tab_column_header_currency: {}
 \cs_set_eq:NN \__kivi_tab_column_body_currency:  \__kivi_tab_column_currency:
@@ -374,7 +396,6 @@ contents={\usebox\shippingAddressBox}
        \midrule
 }
 
-\RequirePackage{xltabular}
 
 \keys_define:nn {kivi/SimpleTabular} {
        colspec .tl_set:N =\l_kivi_SimpleTabular_colspec_tl,
@@ -383,21 +404,28 @@ contents={\usebox\shippingAddressBox}
        headline .initial:n = {\bfseries\position & \bfseries\menge & \bfseries\bezeichnung},
 }
 
+\newcommand*{\SetupSimpleTabular}[1]{\keys_set:nn {kivi/SimpleTabular} {#1}}
+\newcommand*{\SetupPricingTabular}[1]{\keys_set:nn {kivi/PricingTable} {#1}}
+
 \newenvironment{SimpleTabular}[1][]
 {
        \tl_if_in:nnTF {#1} {=} {\keys_set:nn {kivi/SimpleTabular} {#1}} {\tl_if_empty:nF {#1} {\tl_set:Nn \l_kivi_SimpleTabular_headline_tl {#1}}}
        \setlength{\tabcolsep}{\g_kivi_tabcolsep_dim}
+       \dim_set:Nn \parskip {\c_zero_dim}
        \tl_put_right:Nn \l_kivi_SimpleTabular_colspec_tl {@{}}
        \tl_put_left:Nn \l_kivi_SimpleTabular_colspec_tl {@{}}
        \exp_args:NnV \xltabular{\linewidth}\l_kivi_SimpleTabular_colspec_tl
-       \toprule
-       \l_kivi_SimpleTabular_headline_tl\\
-       \midrule
+               \toprule
+               \cs_gset_eq:NN \__kivi_tab_column_currency: \__kivi_tab_column_header_currency:
+               \l_kivi_SimpleTabular_headline_tl
+               \\
+               \noalign{\cs_gset_eq:NN \__kivi_tab_column_currency: \__kivi_tab_column_body_currency:}
+               \midrule
        \endhead
-       \midrule
-       \rlap{\makebox[\textwidth][r]{\weiteraufnaechsterseite}}\\
+               \midrule
+               \rlap{\makebox[\textwidth][r]{\weiteraufnaechsterseite}}\\
        \endfoot
-       \bottomrule
+               \bottomrule
        \endlastfoot
        \ignorespaces
 }{
@@ -420,37 +448,61 @@ contents={\usebox\shippingAddressBox}
 
 \newtcolorbox{PricingTabularBox}{breakable,skin=kivi@LT}
 
+\if@kivi@infobox
+
+       \def\locationsep{:}
+
+       \NewDocumentCommand{\locationentry}{som}{
+               \Ifkomavarempty{#3}{}{
+               \IfBooleanTF {#1} {
+                       \strut
+                       \IfNoValueTF {#2}
+                               {\usekomavar*{#3}}
+                               {#2}
+                       \locationsep
+                       \hfill\strut\space
+                       \hbox_set:Nn \l_tmpa_box {\usekomavar{#3}}
+                       \dim_compare:nTF {\box_wd:N \l_tmpa_box>\linewidth}
+                               {\newline\hspace*{\fill}\llap}
+                               {\hspace*{\fill}}
+                               {\box_use:N \l_tmpa_box\strut}
+               }{
+                       \@hangfrom{\strut
+                               \IfNoValueTF {#2}
+                                       {\usekomavar*{#3}}
+                                       {#2}\locationsep~
+                       }{
+                               \parbox[t]{\dimexpr\linewidth-\hangindent}{
+                                       \raggedleft
+                                       \usekomavar{#3}\strut
+                               }
+                       }
+               }
+               }
+               \par
+       }
 
 
-\if@kivi@infobox
 \setkomavar{location}{
-       \ifkomavarempty{transaction}{}{
+       \Ifkomavarempty{transaction}{}{
        \bfseries
        \usekomavar{transaction}
        }
        \par
        \medskip
-       \begin{tabularx}{\useplength{locwidth}}{@{}l<{:}>{\raggedleft\arraybackslash}X@{}}
-               \usekomavar*{date}&\usekomavar{date}\\
-               \ifkomavarempty{myref}{}{
-                       \usekomavar*{myref}&\usekomavar{myref}\\
-               }
-               \kundennummer&\usekomavar{customer}\\
-               \ifkomavarempty{yourref}{}{
-                       \usekomavar*{yourref}&\usekomavar{yourref}\\
-               }
-               \ifkomavarempty{delivery}{}{
-                       \usekomavar*{delivery}&\usekomavar{delivery}\\
-               }
-               \ifkomavarempty{quote}{}{
-                       \usekomavar*{quote}&\usekomavar{quote}\\
-               }
-               \ifkomavarempty{orderID}{}{\auftragsnummer&\usekomavar{orderID}\\}
-               \ifkomavarempty{projectID}{}{\projektnummer&\usekomavar{projectID}\\}
-               \ansprechpartner&\usekomavar{fromname}
-               \ifkomavarempty{fromphone}{}{\\\textTelefon&\usekomavar{fromphone}}
-               \ifkomavarempty{fromemail}{}{\\\textEmail&\usekomavar{fromemail}}
-       \end{tabularx}
+       \parbox{\useplength{locwidth}}{
+               \locationentry{date}
+               \locationentry{myref}
+               \locationentry{customer}
+               \locationentry{yourref}
+               \locationentry{delivery}
+               \locationentry{quote}
+               \locationentry{orderID}
+               \locationentry{projectID}
+               \locationentry[\ansprechpartner]{fromname}
+               \locationentry{fromphone}
+               \locationentry*{fromemail}
+       }
 }
 \removereffields
 \AtBeginLetter{
@@ -462,6 +514,12 @@ contents={\usebox\shippingAddressBox}
 
 \fi
 
+%Fallback for older KOMA-Script-Versions
+\cs_if_exist:NF \Ifstr {\let\Ifstr\ifstr}
+\cs_if_exist:NF \Ifkomavarempty {\let\Ifkomavarempty\ifkomavarempty}
+
+%Definitionen für die insettings.tex
+
 \newcommand*{\setupIdentpath}[1]{
        \int_set:Nn \l_kivi_tmp_int {1}
        \bool_set_true:N \l_kivi_tmp_bool