summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/factura
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-05-16 20:36:12 +0000
committerKarl Berry <karl@freefriends.org>2016-05-16 20:36:12 +0000
commit5a4815a1e4e22f0b4bf7358647c51bb9ec342fe0 (patch)
tree01f384a3e983e713b06d43bab04245238c59d4e4 /Master/texmf-dist/tex/latex/factura
parentc1224c35298e95661e09676cbab3d5830612ce87 (diff)
factura (16may16)
git-svn-id: svn://tug.org/texlive/trunk@41202 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/factura')
-rw-r--r--Master/texmf-dist/tex/latex/factura/factura.cls358
-rw-r--r--Master/texmf-dist/tex/latex/factura/factura.def18
2 files changed, 216 insertions, 160 deletions
diff --git a/Master/texmf-dist/tex/latex/factura/factura.cls b/Master/texmf-dist/tex/latex/factura/factura.cls
index bb8c10b67e5..12f553c9579 100644
--- a/Master/texmf-dist/tex/latex/factura/factura.cls
+++ b/Master/texmf-dist/tex/latex/factura/factura.cls
@@ -36,7 +36,7 @@
%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{factura}
-[2016/02/07 v2.6
+[2016/05/16 v2.72
Clase para elaborar facturas legales
en la República Bolivariana de Venezuela.
]
@@ -83,6 +83,7 @@ en la República Bolivariana de Venezuela.
\newif\if@nombre
\newif\if@pagado
\newif\if@impdesc
+\newif\if@pruebaref
\RequirePackage{etoolbox}% 'etoolbox' para los condicionales binarios.
@@ -218,6 +219,7 @@ en la República Bolivariana de Venezuela.
\RequirePackage{tabularx}% Con 'tabularx' hacemos la tabla.
\RequirePackage{environ}% Con 'environ' podemos usar tabularx dentro del ambiente de la factura y escribir texto en el enddef.
\RequirePackage{fancyhdr}% Las cabeceras fancy; así se use solamente en reporte, hay que cargarlo siempre.
+\RequirePackage{MnSymbol}% Para el símbolo $\lcurvearrowsw$ cuando la descripción ocupa más de una línea.
\AtBeginDocument{% Da error si algún campo necesario no está definido.
\if@reporte
@@ -273,7 +275,7 @@ en la República Bolivariana de Venezuela.
\ClassWarning{factura}{** Fecha del documento\space \@Fecha\space distinta de la fecha de hoy. **}{}%
\fi
\fi
- \if@factura\ClassInfo{factura}{\@@Total: \space\space\space \@Moneda \Total}{}\fi}
+ \if@factura\ClassInfo{factura}{\@@Total: \space\space\space \Moneda \Total}{}\fi}
%% La geometría en formato de factura y de reporte.
%% El margen superior está definido desde el encabezado con los datos del cliente.
@@ -637,6 +639,7 @@ en la República Bolivariana de Venezuela.
\newlength{\@SeparaElementos}
\newlength{\@SeparaMinTotales}
\newlength{\@SeparaFilas}
+\newlength{\@SeparaFinLineaDesc}
\newlength{\@InicioReporte}
\newlength{\@FirmaFacturaXcorr}
\newlength{\@FirmaFacturaYcorr}
@@ -658,6 +661,7 @@ en la República Bolivariana de Venezuela.
\newbox{\@CajaCond}
\newbox{\@CajaEspacioVacio}
\newbox{\@CajaPrueba}
+\newbox{\@CajaCaracterCR}
%% Contadores para uso interno para uso interno:
\newcounter{@IVANoGeneral}% '0' con sólo IVA G, '1' cuando hay IVA R o IVA A, y '2' cuando hay ambos.
@@ -723,11 +727,14 @@ en la República Bolivariana de Venezuela.
%% http://tex.stackexchange.com/questions/296035/insert-a-special-character-at-each-end-of-line-in-a-paragraph
%% http://tex.stackexchange.com/questions/248944/how-to-put-before-lines
\newcommand{\@DescripcionAuxCmd}[2]{%
- \setbox0\hbox{\parbox[t]{\linewidth}{#1\par\global\count1=\prevgraf}}%
+ \setbox0\hbox{\parbox[t]{\linewidth}{#1%
+ \if@impdesc\hfill\ \@EscribeTipoDeImpuesto{#2}\fi%
+ \par\global\count1=\prevgraf}}%
\ifnum\count1 = 1
- #1\if@impdesc\hfill\ \@EscribeTipoDeImpuesto*{#2}\fi
+ #1%
+ \if@impdesc\hfill\ \@EscribeTipoDeImpuesto{#2}\fi
\else
- \parbox[t]{\linewidth-1em}{%
+ \parbox[t]{\linewidth-\wd\@CajaCaracterCR-\@SeparaFinLineaDesc}{%
\David@XStart#1\David@XEnd
\par
\count0=\prevgraf
@@ -736,10 +743,10 @@ en la República Bolivariana de Venezuela.
\ifnum\count0=\count2
\if@impdesc
\vskip-\baselineskip
- \mbox{}\hfill\rlap{\hspace*{1em}\llap{\@EscribeTipoDeImpuesto*{#2}}}%
+ \mbox{}\hfill\rlap{\hspace*{\wd\@CajaCaracterCR}\hspace*{\@SeparaFinLineaDesc}\llap{\@EscribeTipoDeImpuesto{#2}}}%
\fi
\else
- \mbox{}\hfill\rlap{\hspace*{0.1em}\@CaracterEOL}%
+ \mbox{}\hfill\rlap{\hspace*{\@SeparaFinLineaDesc}\usebox{\@CajaCaracterCR}}%
\fi
\vskip-2\baselineskip
\advance\count0 -1
@@ -747,9 +754,7 @@ en la República Bolivariana de Venezuela.
\repeat
\kern\count2\baselineskip\mbox{}%
\strut}%
- \fi
- \global\expandafter\newcount\csname c@Item\expandafter\romannumeral\value{@NumItem}Lineas\endcsname
- \global\expandafter\csname c@Item\expandafter\romannumeral\value{@NumItem}Lineas\endcsname=\count1}
+ \fi}
%% Comandos auxiliares para colocar en \parbox cada celda.
\newcommand{\@CantidadAuxCmd}[1]{%
@@ -940,22 +945,15 @@ en la República Bolivariana de Venezuela.
\newcommand{\@LineaNodoBCoordX}{\hspace*{-\tabcolsep}\zsaveposx{LineaNodoBCoordX}\hspace*{\tabcolsep}}
%% Escribe la letra que designa al tipo de impuesto que aplica al ítem.
-\NewDocumentCommand{\@EscribeTipoDeImpuesto}{s m}{%
+\NewDocumentCommand{\@EscribeTipoDeImpuesto}{m}{%
% Hay que abrir un grupo de ejecución porque el cambio en la tipografía altera la celda.
- \ifx#2G{%
- \if@G
- {\@LetraTipoIVA\@DenomAlicuotaG}% Si tiene IVA general escribimos 'G' si se solicita.
- \IfBooleanF{#1}{\ \hfill}%
- \else
- \hfill
- \fi}\fi
- {\if@G
- {\@LetraTipoIVA
- \ifx#2E\@DenomAlicuotaE\fi% Si está exento escribimos '(E)'.
- \ifx#2R\@DenomAlicuotaR\fi% Si tiene IVA reducido escribimos 'R'.
- \ifx#2A\@DenomAlicuotaA\fi% Si tiene IVA adicional escribimos 'A'.
- \IfBooleanF{#1}{\ \hfill}}%
- \fi}}
+ {\if@G
+ \@LetraTipoIVA
+ \ifx#1G\@DenomAlicuotaG\fi% Si tiene IVA general escribimos 'G'.
+ \ifx#1E\@DenomAlicuotaE\fi% Si está exento escribimos '(E)'.
+ \ifx#1R\@DenomAlicuotaR\fi% Si tiene IVA reducido escribimos 'R'.
+ \ifx#1A\@DenomAlicuotaA\fi% Si tiene IVA adicional escribimos 'A'.
+ \fi}}
%% Comando para poner en cero los contadores de los totales porque el ambiente de la factura se evalúa tres veces y los totales se sumarían todos tres veces.
\newcommand{\@ZERO}{%
@@ -967,10 +965,12 @@ en la República Bolivariana de Venezuela.
\FPset\SubtG{0}\global\let\SubtG\SubtG
\FPset\SubtR{0}\global\let\SubtR\SubtR
\FPset\SubtA{0}\global\let\SubtA\SubtA
+ \FPset\SubtX{0}\global\let\SubtX\SubtX
\FPset\DescE{0}\global\let\DescE\DescE
\FPset\DescG{0}\global\let\DescG\DescG
\FPset\DescR{0}\global\let\DescR\DescR
\FPset\DescA{0}\global\let\DescA\DescA
+ \FPset\DescX{0}\global\let\DescX\DescX
\FPset\AlicuotaG{0}\global\let\AlicuotaG\AlicuotaG
\FPset\AlicuotaR{0}\global\let\AlicuotaR\AlicuotaR
\FPset\AlicuotaA{0}\global\let\AlicuotaA\AlicuotaA}
@@ -1002,7 +1002,7 @@ en la República Bolivariana de Venezuela.
\def\@FacturaAuxColumnasEval{
% Primera línea.
\ifbool{SinLineasVertExt}{}{|}
- % Columna 'X' con DCU, columna fantasma con 'sincantidad' y columa 'c' con CDU.
+ % Columna 'X' con DCU, columna fantasma con 'sincantidad' y columna 'c' con CDU.
\ifbool{PrimeroDesc}{X}{
\ifbool{SinCantidad}{l@{\extracolsep{0pt}}}{c}}
% Segunda línea.
@@ -1028,6 +1028,52 @@ en la República Bolivariana de Venezuela.
\edef\@FacturaAuxInicioCmd{\noexpand\begin{tabularx}{\textwidth}{\@FacturaAuxColumnasEval}}
+%% Comando para hacer los cálculos sobre cada ítem y establecer las macros con el contenido de cada ítem introducido.
+\newcommand{\@CalculaItem}[5]{%
+ \addtocounter{@NumItem}{1}%
+ % Calculamos.
+ \FPupn\PrecioU{#4 \@DigitosMoneda{} round}%
+ \ifx\\#5\\\FPset\Dcto{0}\else\FPupn\Dcto{#5 \@DigitosPorc{} round clip}\fi% Fijamos en 0 el descuento si no se especifica.
+ \FPupn\PrecioT{100 \Dcto{} 100 - / #2 * \PrecioU{} * \@DigitosMoneda{} round}%
+ \global\let\PrecioU\PrecioU
+ \global\let\Dcto\Dcto
+ \global\let\PrecioT\PrecioT
+ % Suma el elemento actual al subtotal acumulado.
+ \expandafter\FPupn\csname Subt#1\endcsname{\PrecioT{} \csname Subt#1\endcsname{} + \@DigitosMoneda{} round}%
+ \global\expandafter\let\csname Subt#1\expandafter\endcsname\csname Subt#1\endcsname
+ % Guardamos en macros cada elemento agregado a la factura; por ejemplo: \@Item@i@Cantidad contiene la cantidad que se introdujo para el primer ítem; así mismo con ii@, @iii@, y así mismo también con @Descripcion, @PrecioU, @Descuento y @PrecioT.
+ \expandafter\gdef\csname @Item@\romannumeral\value{@NumItem}@Cantidad\endcsname{\numprint{#2}}%
+ \expandafter\gdef\csname @Item@\romannumeral\value{@NumItem}@Descripcion\endcsname{#3}%
+ \expandafter\global\expandafter\edef\csname @Item@\romannumeral\value{@NumItem}@PrecioU\endcsname{\noexpand\numprint{\PrecioU}}%
+ \expandafter\global\expandafter\edef\csname @Item@\romannumeral\value{@NumItem}@Descuento\endcsname{\noexpand\numprint{\Dcto}}%
+ \expandafter\global\expandafter\edef\csname @Item@\romannumeral\value{@NumItem}@PrecioT\endcsname{\noexpand\numprint{\PrecioT}}}
+
+\gdef\@pruebaref#1{%
+ \expandafter\ifx\csname @Etiqueta@@#1\endcsname\relax
+ \ClassWarning{factura}{La etiqueta `#1' no está definida}{}\ignorespaces
+ \@pruebareffalse
+ \else
+ \@pruebareftrue
+ \fi}
+
+\gdef\itemref#1{\@pruebaref{#1}\if@pruebaref \csname @Etiqueta@@#1\endcsname \fi}
+\gdef\cantref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@@#1\endcsname @Cantidad\endcsname \fi}
+\gdef\descref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@@#1\endcsname @Descripcion\endcsname \fi}
+\gdef\puref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@@#1\endcsname @PrecioU\endcsname \fi}
+\gdef\dctoref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@@#1\endcsname @Descuento\endcsname \fi}
+\gdef\ptref#1{\@pruebaref{#1}\if@pruebaref \csname @Item@\expandafter\romannumeral\csname @Etiqueta@@#1\endcsname @PrecioT\endcsname \fi}
+
+\newcommand{\label@factura}[1]{%
+ \expandafter\ifx\csname @Etiqueta@@#1\endcsname\relax
+ \expandafter\global\expandafter\edef\csname @Etiqueta@@#1\endcsname{\arabic{@NumItem}}\ignorespaces
+ \else
+ \expandafter\if\csname @Etiqueta@@#1\endcsname\the@NumItem
+ \ClassInfo{factura}{Etiqueta `#1' definida para el ítem \arabic{@NumItem}}{}%
+ \else
+ \ClassWarning{factura}{La etiqueta `#1' se definió más de una vez}{}\ignorespaces
+ \fi
+ \fi}
+
%% Comando auxiliar para la definición del ambiente de la factura; al final de este comando está el texto que va en el enddef del ambiente de la factura.
\newcommand{\@FacturaAuxCmd}[1]{%
\if@exparriba
@@ -1067,16 +1113,18 @@ en la República Bolivariana de Venezuela.
\def\David@XLeft##1{\David@XPad{\romannumeral\value{@NumItem}}{\hbox{##1}}{}}%
\def\David@XRight##1{\David@XPad{\romannumeral\value{@NumItem}}{}{\hbox{##1}}}%
%
- % Comando interno para todos los ítems.
- \newcommand{\@ITEM}[5]{% 1. [R|G|A|E]; 2. cantidad; 3. descripción; 4. p/u; 5. dcto.
- \addtocounter{@NumItem}{1}%
- % Calculamos.
- \FPupn\PrecioU{##4 \@DigitosMoneda{} round}%
- \ifx\\##5\\\FPset\Dcto{0}\else\FPupn\Dcto{##5 \@DigitosPorc{} round clip}\fi% Fijamos en 0 el descuento si no se especifica.
- \FPupn\PrecioT{100 \Dcto{} 100 - / ##2 * \PrecioU{} * \@DigitosMoneda{} round}%
- \global\let\PrecioU\PrecioU
- \global\let\Dcto\Dcto
- \global\let\PrecioT\PrecioT
+ % Caja auxiliar para el caracter de retorno de carro y poder saber si tamaño en el campo de la descripción.
+ \savebox{\@CajaCaracterCR}{\@LetraItems\@CaracterCR}
+ %
+ % Comando interno general para agregar cualquier ítem.
+ \newcommand{\@ITEM}[5]{% 1. [R|G|A|E|X]; 2. cantidad; 3. descripción; 4. p/u; 5. dcto.
+ \@CalculaItem{##1}{##2}{##3}{##4}{##5}%
+ % Si no es el primer ítem, entonces hace falta \\ para terminar el ítem anterior.
+ \ifnum\value{@NumItem}=1%
+ \else
+ \\
+ \if@conlineasha\hline\fi% Líneas para separar cada ítem, si hiciera falta.
+ \fi
% Primer campo: Acá puede ir la cantidad (cdu) o la descripción (dcu y duc).
\ifbool{SinCantidad}{}{%
\ifbool{PrimeroDesc}
@@ -1088,7 +1136,11 @@ en la República Bolivariana de Venezuela.
\if@dcu
\David@XRight{\@CantidadAuxCmd{\mbox{}\hfill \@LetraNumeros \numprint{##2}\hfill\mbox{}}}% dcu.
\else
- \David@XRight{\@PrecioUAuxCmd{\if@impdesc\else\@EscribeTipoDeImpuesto{##1}\fi \@LetraNumeros \numprint{\PrecioU}}}% duc.
+ \David@XRight{\@PrecioUAuxCmd{%
+ \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
+ \else
+ \if@impdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioU}
+ \fi}}% duc.
\fi}
{\@DescripcionAuxCmd{##3}{##1}}% cdu.
&
@@ -1098,132 +1150,65 @@ en la República Bolivariana de Venezuela.
\if@duc
\David@XRight{\@CantidadAuxCmd{\mbox{}\hfill \@LetraNumeros \numprint{##2}\hfill\mbox{}}}% duc.
\else
- \David@XRight{\@PrecioUAuxCmd{\if@impdesc\else\@EscribeTipoDeImpuesto{##1}\fi \@LetraNumeros \numprint{\PrecioU}}}% dcu y cdu.
+ \David@XRight{\@PrecioUAuxCmd{%
+ \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
+ \else
+ \if@impdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioU}
+ \fi}}% dcu y cdu.
\fi}%
&
% Cuarto campo: Descuento.
- \ifbool{Descuentos}{\FPifeq\Dcto{0}\else\David@XRight{\@DescuentoAuxCmd{\mbox{}\hfill \@LetraNumeros \numprint{\Dcto}\%\hfill\mbox{}}}\fi}{}% Tenemos que usar un condicional booleano porque si no da problemas con el condicional \FPifeq.
+ \ifbool{Descuentos}{%
+ \David@XRight{\@DescuentoAuxCmd{%
+ \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
+ \else
+ \mbox{}\hfill \@LetraNumeros \numprint{\Dcto}\%\hfill\mbox{}
+ \fi}}}{}% Tenemos que usar un condicional booleano porque si no da problemas con el condicional \FPifeq.
&
% Quinto campo: El total.
- \David@XRight{\@PrecioTAuxCmd{\if@impdesc\else\@EscribeTipoDeImpuesto{##1}\fi \@LetraNumeros \numprint{\PrecioT}}}%
+ \David@XRight{\@PrecioTAuxCmd{%
+ \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
+ \else
+ \if@impdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioT}
+ \fi}}%
% Escribimos al csv.
\if@csv
\ifbool{SinCantidad}
{\if@descuentos
- \immediate\write\csv{"\unexpanded{##3}","##5","\PrecioT","##1"}%
+ \immediate\write\csv{"\unexpanded{##3}","\Dcto","\PrecioT","##1"}%
\else
\immediate\write\csv{"\unexpanded{##3}","\PrecioT","##1"}%
\fi}
{\if@cdu
\if@descuentos
- \immediate\write\csv{"##2","\unexpanded{##3}","##4","##5","\PrecioT","##1"}%
+ \immediate\write\csv{"##2","\unexpanded{##3}","\PrecioU","\Dcto","\PrecioT","##1"}%
\else
- \immediate\write\csv{"##2","\unexpanded{##3}","##4","\PrecioT","##1"}%
+ \immediate\write\csv{"##2","\unexpanded{##3}","\PrecioU","\PrecioT","##1"}%
\fi
\fi
\if@dcu
\if@descuentos
- \immediate\write\csv{"\unexpanded{##3}","##2","##4","##5","\PrecioT","##1"}%
+ \immediate\write\csv{"\unexpanded{##3}","##2","\PrecioU","\Dcto","\PrecioT","##1"}%
\else
- \immediate\write\csv{"\unexpanded{##3}","##2","##4","\PrecioT","##1"}%
+ \immediate\write\csv{"\unexpanded{##3}","##2","\PrecioU","\PrecioT","##1"}%
\fi
\fi
\if@duc
\if@descuentos
- \immediate\write\csv{"\unexpanded{##3}","##4","##2","##5","\PrecioT","##1"}%
+ \immediate\write\csv{"\unexpanded{##3}","\PrecioU","##2","\Dcto","\PrecioT","##1"}%
\else
- \immediate\write\csv{"\unexpanded{##3}","##4","##2","\PrecioT","##1"}%
+ \immediate\write\csv{"\unexpanded{##3}","\PrecioU","##2","\PrecioT","##1"}%
\fi
\fi}%
- \fi
- % Suma el elemento actual al subtotal acumulado.
- \expandafter\FPupn\csname Subt##1\endcsname{\PrecioT{} \csname Subt##1\endcsname{} + \@DigitosMoneda{} round}%
- \global\expandafter\let\csname Subt##1\expandafter\endcsname\csname Subt##1\endcsname
- \\
- \if@conlineasha\hline\fi}%
- %
- \ifbool{SinCantidad}
- % Definamos todos los comandos \Item***.
- {%
- \if@descuentos
- \newcommand{\Item}[3]{\@ITEM{G}{1}{##1}{##2}{##3}}% Ítem normal.
- \newcommand{\ItemR}[3]{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{1}{##1}{##2}{##3}}% Ítem con IVA reducido.
- \newcommand{\ItemA}[3]{\global\@BIAtrue\global\@Gtrue\@ITEM{A}{1}{##1}{##2}{##3}}% Ítem con IVA reducido.
- \newcommand{\ItemE}[3]{\global\@Exentotrue\global\@Gtrue\@ITEM{E}{1}{##1}{##2}{##3}}% Ítem con IVA reducido.
- \else
- \newcommand{\Item}[2]{\@ITEM{G}{1}{##1}{##2}{0}}% Ítem normal.
- \newcommand{\ItemR}[2]{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{1}{##1}{##2}{0}}% Ítem con IVA reducido.
- \newcommand{\ItemA}[2]{\global\@BIAtrue\global\@Gtrue\@ITEM{A}{1}{##1}{##2}{0}}% Ítem con IVA reducido.
- \newcommand{\ItemE}[2]{\global\@Exentotrue\global\@Gtrue\@ITEM{E}{1}{##1}{##2}{0}}% Ítem con IVA reducido.
- \fi
- \let\ItemG\Item
- \newcommand{\ItemX}[1]{% Ítem sin precio.
- \if@csv\immediate\write\csv{"\unexpanded{##1}"}\fi
- & ##1 && \if@descuentos \@CaracterItemXVacio \fi & \hfill \@CaracterItemXVacio \hfill\mbox{}\\
- \if@conlineasha\hline\fi}%
- \if@csv
- \if@descuentos
- \immediate\write\csv{"\@@Descripcion","\@@Descuento","\@@Precio \space (\@Moneda)"}
- \else
- \immediate\write\csv{"\@@Descripcion","\@@Precio \space (\@Moneda)"}
- \fi
- \fi}
- {%
- \if@descuentos
- \newcommand{\Item}[4]{\@ITEM{G}{##1}{##2}{##3}{##4}}% Ítem normal.
- \newcommand{\ItemR}[4]{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{##1}{##2}{##3}{##4}}% Ítem con IVA reducido.
- \newcommand{\ItemA}[4]{\global\@BIAtrue\global\@Gtrue\@ITEM{A}{##1}{##2}{##3}{##4}}% Ítem con IVA adicional.
- \newcommand{\ItemE}[4]{\global\@Exentotrue\global\@Gtrue\@ITEM{E}{##1}{##2}{##3}{##4}}% Ítem exento de IVA.
- \else
- \newcommand{\Item}[3]{\@ITEM{G}{##1}{##2}{##3}{0}}% Ítem normal.
- \newcommand{\ItemR}[3]{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{##1}{##2}{##3}{0}}% Ítem con IVA reducido.
- \newcommand{\ItemA}[3]{\global\@BIAtrue\global\@Gtrue\@ITEM{A}{##1}{##2}{##3}{0}}% Ítem con IVA adicional.
- \newcommand{\ItemE}[3]{\global\@Exentotrue\global\@Gtrue\@ITEM{E}{##1}{##2}{##3}{0}}% Ítem exento de IVA.
- \fi
- \let\ItemG\Item
- \newcommand{\ItemX}[2]{% Ítem sin precio.
- \if@cdu
- \if@csv\immediate\write\csv{"##1","\unexpanded{##2}",""}\fi
- \@LetraNumeros\numprint{##1} & ##2 & \hfill \@CaracterItemXVacio \hfill\mbox{} & \if@descuentos \@CaracterItemXVacio \fi & \hfill \@CaracterItemXVacio \hfill\mbox{} \\
- \fi
- \if@dcu
- \if@csv\immediate\write\csv{"\unexpanded{##2}","##1",""}\fi
- ##2 & \@LetraNumeros\numprint{##1} & \hfill \@CaracterItemXVacio \hfill\mbox{} & \if@descuentos \@CaracterItemXVacio \fi & \hfill \@CaracterItemXVacio \hfill\mbox{} \\
- \fi
- \if@duc
- \if@csv\immediate\write\csv{"\unexpanded{##2}","","##1"}\fi
- ##2 & \hfill \@CaracterItemXVacio \hfill\mbox{} & \@LetraNumeros\numprint{##1} & \if@descuentos \@CaracterItemXVacio \fi & \hfill \@CaracterItemXVacio \hfill\mbox{} \\
- \fi
- \if@conlineasha\hline\fi}%
- \if@csv
- \if@cdu
- \if@descuentos
- \immediate\write\csv{"\@@Cantidad","\@@Descripcion","\@@PrecioU \space (\@Moneda)","\@@Descuento","\@@PrecioT \space (\@Moneda)"}%
- \else
- \immediate\write\csv{"\@@Cantidad","\@@Descripcion","\@@PrecioU \space (\@Moneda)","\@@PrecioT \space (\@Moneda)"}%
- \fi
- \fi
- \if@dcu
- \if@descuentos
- \immediate\write\csv{"\@@Descripcion","\@@Cantidad","\@@PrecioU \space (\@Moneda)","\@@Descuento","\@@PrecioT \space (\@Moneda)"}%
- \else
- \immediate\write\csv{"\@@Descripcion","\@@Cantidad","\@@PrecioU \space (\@Moneda)","\@@PrecioT \space (\@Moneda)"}%
- \fi
- \fi
- \if@duc
- \if@descuentos
- \immediate\write\csv{"\@@Descripcion","\@@PrecioU \space (\@Moneda)","\@@Cantidad","\@@Descuento","\@@PrecioT \space (\@Moneda)"}%
- \else
- \immediate\write\csv{"\@@Descripcion","\@@PrecioU \space (\@Moneda)","\@@Cantidad","\@@PrecioT \space (\@Moneda)"}%
- \fi
- \fi
- \fi}
+ \fi}%
%
+ % Usamos la definición de \label@factura dentro del entorno de la factura para que sea local aquí nada más.
+ \let\label\label@factura
\@LetraItems% Este es el tipo de letra que tendrán los ítems, y en este tipo de letra se define el \baselineskip de toda la factura.
\@FacturaAuxInicioCmd
\ifbool{SinLineasHoriExt}{}{\hline}%
\@ZERO
- % Estamos en la cantidad o la descripción.
+ % Estamos en la cantidad, o la descripción.
\ifbool{LineaDesdeColUno}{\@LineaNodoACoordX}{}%
\ifbool{SinCantidad}{}{\ifbool{PrimeroDesc}{\@DescripcionAuxCmd{\@LetraTitCuadro \@@Descripcion}{}}{\@CantidadAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@Cantidad \hfill\mbox{}}}}%
&% Avanzamos hasta la descripción, la cantidad o el precio unitario.
@@ -1232,7 +1217,7 @@ en la República Bolivariana de Venezuela.
\ifbool{SinCantidad}{\@DescripcionAuxCmd{\@LetraTitCuadro \@@Descripcion}{}}
{\if@cdu \@DescripcionAuxCmd{\@LetraTitCuadro \@@Descripcion}{}\fi
\if@dcu \@CantidadAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@Cantidad \hfill\mbox{}}\fi
- \if@duc \@PrecioUAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@PrecioU \hfill\mbox{}}\fi}%
+ \if@duc \@PrecioUAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@PrecioU \space (\Moneda)\hfill\mbox{}}\fi}%
&% Avanzamos hasta el precio unitario, o la cantidad, o columna fantasma cuando es 'sincantidad'.
\ifbool{SinCantidad}{%
\ifbool{LineaHastaColDos}{\hspace*{\tabcolsep}\zsaveposx{LineaNodoBCoordX}\hspace*{-\tabcolsep}}{}}%
@@ -1241,18 +1226,19 @@ en la República Bolivariana de Venezuela.
\if@duc
\@CantidadAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@Cantidad \hfill\mbox{}}%
\else
- \@PrecioUAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@PrecioU \space (\@Moneda)\hfill\mbox{}}%
+ \@PrecioUAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@PrecioU \space (\Moneda)\hfill\mbox{}}%
\fi}%
&% Avanzamos hasta el descuento, que puede o no existir.
\if@descuentos \@DescuentoAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@Descuento \hfill\mbox{}}\fi
&% Avanzamos hasta el precio total.
- \@PrecioTAuxCmd{\mbox{}\hfill \@LetraTitCuadro \ifbool{SinCantidad}{\@@Precio}{\@@PrecioT}\space (\@Moneda)\hfill\mbox{}}%
+ \@PrecioTAuxCmd{\mbox{}\hfill \@LetraTitCuadro \ifbool{SinCantidad}{\@@Precio}{\@@PrecioT}\space (\Moneda)\hfill\mbox{}}%
\ifbool{LineaHastaFinal}{\hspace*{\tabcolsep}\zsaveposx{LineaNodoBCoordX}\hspace*{-\tabcolsep}}{}%
\\
\ifbool{SinLineasHoriInt}{}{\hline}%
%
#1% Aquí entran todos los items que el usuario declara dentro del ambiente.
- %
+ \\% El último fin de línea se hace aquí.
+ \if@conlineasha\hline\fi% Se verifica si hace falta una línea horizontal o no.
\if@filas
% Esto en lugar de \if@exparriba para que no se haga una linea vacía en la tabla cuando la caja está vacía.
\ifdim \ht\@CajaEspacioVacio=0pt
@@ -1368,6 +1354,67 @@ en la República Bolivariana de Venezuela.
\if@exparriba\zsaveposy{EspacioVacioFinal}\fi
\vspace*{\@SeparaElementos}\par}
+ \ifbool{SinCantidad}
+ % Definamos todos los comandos \Item***.
+ {%
+ \if@descuentos
+ \newcommand{\Item}[3]{\@ITEM{G}{1}{#1}{#2}{#3}}% Ítem normal.
+ \newcommand{\ItemR}[3]{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{1}{#1}{#2}{#3}}% Ítem con IVA reducido.
+ \newcommand{\ItemA}[3]{\global\@BIAtrue\global\@Gtrue\@ITEM{A}{1}{#1}{#2}{#3}}% Ítem con IVA reducido.
+ \newcommand{\ItemE}[3]{\global\@Exentotrue\global\@Gtrue\@ITEM{E}{1}{#1}{#2}{#3}}% Ítem con IVA reducido.
+ \else
+ \newcommand{\Item}[2]{\@ITEM{G}{1}{#1}{#2}{0}}% Ítem normal.
+ \newcommand{\ItemR}[2]{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{1}{#1}{#2}{0}}% Ítem con IVA reducido.
+ \newcommand{\ItemA}[2]{\global\@BIAtrue\global\@Gtrue\@ITEM{A}{1}{#1}{#2}{0}}% Ítem con IVA reducido.
+ \newcommand{\ItemE}[2]{\global\@Exentotrue\global\@Gtrue\@ITEM{E}{1}{#1}{#2}{0}}% Ítem con IVA reducido.
+ \fi
+ \newcommand{\ItemX}[1]{\@ITEM{X}{1}{#1}{0}{0}}% Ítem sin precio.
+ \let\ItemG\Item
+ \if@csv
+ \if@descuentos
+ \immediate\write\csv{"\@@Descripcion","\@@Descuento","\@@Precio \space (\Moneda)"}
+ \else
+ \immediate\write\csv{"\@@Descripcion","\@@Precio \space (\Moneda)"}
+ \fi
+ \fi}
+ {%
+ \if@descuentos
+ \newcommand{\Item}[4]{\@ITEM{G}{#1}{#2}{#3}{#4}}% Ítem normal.
+ \newcommand{\ItemR}[4]{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{#1}{#2}{#3}{#4}}% Ítem con IVA reducido.
+ \newcommand{\ItemA}[4]{\global\@BIAtrue\global\@Gtrue\@ITEM{A}{#1}{#2}{#3}{#4}}% Ítem con IVA adicional.
+ \newcommand{\ItemE}[4]{\global\@Exentotrue\global\@Gtrue\@ITEM{E}{#1}{#2}{#3}{#4}}% Ítem exento de IVA.
+ \else
+ \newcommand{\Item}[3]{\@ITEM{G}{#1}{#2}{#3}{0}}% Ítem normal.
+ \newcommand{\ItemR}[3]{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{#1}{#2}{#3}{0}}% Ítem con IVA reducido.
+ \newcommand{\ItemA}[3]{\global\@BIAtrue\global\@Gtrue\@ITEM{A}{#1}{#2}{#3}{0}}% Ítem con IVA adicional.
+ \newcommand{\ItemE}[3]{\global\@Exentotrue\global\@Gtrue\@ITEM{E}{#1}{#2}{#3}{0}}% Ítem exento de IVA.
+ \fi
+ \newcommand{\ItemX}[2]{\@ITEM{X}{#1}{#2}{0}{0}}% Ítem sin precio.
+ \let\ItemG\Item
+ \if@csv
+ \if@cdu
+ \if@descuentos
+ \immediate\write\csv{"\@@Cantidad","\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@Descuento","\@@PrecioT \space (\Moneda)"}%
+ \else
+ \immediate\write\csv{"\@@Cantidad","\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@PrecioT \space (\Moneda)"}%
+ \fi
+ \fi
+ \if@dcu
+ \if@descuentos
+ \immediate\write\csv{"\@@Descripcion","\@@Cantidad","\@@PrecioU \space (\Moneda)","\@@Descuento","\@@PrecioT \space (\Moneda)"}%
+ \else
+ \immediate\write\csv{"\@@Descripcion","\@@Cantidad","\@@PrecioU \space (\Moneda)","\@@PrecioT \space (\Moneda)"}%
+ \fi
+ \fi
+ \if@duc
+ \if@descuentos
+ \immediate\write\csv{"\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@Cantidad","\@@Descuento","\@@PrecioT \space (\Moneda)"}%
+ \else
+ \immediate\write\csv{"\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@Cantidad","\@@PrecioT \space (\Moneda)"}%
+ \fi
+ \fi
+ \fi}
+
\if@factura
% Los descuentos totales no son compatibles -y no sé si lo serán- con el modo de totalización en filas.
\if@filas
@@ -1444,8 +1491,13 @@ en la República Bolivariana de Venezuela.
\end{tikzpicture}
\par\vspace*{\@SombraDescrip}}%
\else
- \RenewEnviron{factura}{}
- \NewDocumentCommand{\Descripcion}{s m}{}
+ \RenewEnviron{factura}{%
+ \@ZERO
+ \let\label\label@factura
+ \let\@ITEM\@CalculaItem
+ \BODY
+ \@CalculaTotalesI}
+ \NewDocumentCommand{\Descripcion}{s +m}{}
\fi
\if@reporte
@@ -1678,34 +1730,34 @@ en la República Bolivariana de Venezuela.
\if@csv
\if@Exento
\if@DescE
- \immediate\write\csv{Totales: \@@SubtotalE: \@Moneda \SubtE}%
- \immediate\write\csv{Totales: \@@DescuentoE: \@Moneda \DescE}%
+ \immediate\write\csv{Totales: \@@SubtotalE: \Moneda \SubtE}%
+ \immediate\write\csv{Totales: \@@DescuentoE: \Moneda \DescE}%
\fi
- \immediate\write\csv{Totales: \@@BIE: \@Moneda \BIE}%
+ \immediate\write\csv{Totales: \@@BIE: \Moneda \BIE}%
\fi
\if@BIR
\if@DescE
- \immediate\write\csv{Totales: \@@SubtotalR: \@Moneda \SubtR}%
- \immediate\write\csv{Totales: \@@DescuentoR: \@Moneda \DescR}%
+ \immediate\write\csv{Totales: \@@SubtotalR: \Moneda \SubtR}%
+ \immediate\write\csv{Totales: \@@DescuentoR: \Moneda \DescR}%
\fi
- \immediate\write\csv{Totales: \@@BIR: \@Moneda \BIR}%
- \immediate\write\csv{Totales: \@@AlicuotaR: \@Moneda \AlicuotaR}%
+ \immediate\write\csv{Totales: \@@BIR: \Moneda \BIR}%
+ \immediate\write\csv{Totales: \@@AlicuotaR: \Moneda \AlicuotaR}%
\fi
\if@DescG
- \immediate\write\csv{Totales: \@@SubtotalG: \@Moneda \SubtG}%
- \immediate\write\csv{Totales: \@@DescuentoG: \@Moneda \DescG}%
+ \immediate\write\csv{Totales: \@@SubtotalG: \Moneda \SubtG}%
+ \immediate\write\csv{Totales: \@@DescuentoG: \Moneda \DescG}%
\fi
- \immediate\write\csv{Totales: \@@BIG: \@Moneda \BIG}%
- \immediate\write\csv{Totales: \@@AlicuotaG: \@Moneda \AlicuotaG}%
+ \immediate\write\csv{Totales: \@@BIG: \Moneda \BIG}%
+ \immediate\write\csv{Totales: \@@AlicuotaG: \Moneda \AlicuotaG}%
\if@BIA
\if@DescA
- \immediate\write\csv{Totales: \@@SubtotalA: \@Moneda \SubtA}%
- \immediate\write\csv{Totales: \@@DescuentoA: \@Moneda \DescA}%
+ \immediate\write\csv{Totales: \@@SubtotalA: \Moneda \SubtA}%
+ \immediate\write\csv{Totales: \@@DescuentoA: \Moneda \DescA}%
\fi
- \immediate\write\csv{Totales: \@@BIA: \@Moneda \BIA}%
- \immediate\write\csv{Totales: \@@AlicuotaA: \@Moneda \AlicuotaA}%
+ \immediate\write\csv{Totales: \@@BIA: \Moneda \BIA}%
+ \immediate\write\csv{Totales: \@@AlicuotaA: \Moneda \AlicuotaA}%
\fi
- \immediate\write\csv{Totales: \@@Total: \@Moneda \Total}%
+ \immediate\write\csv{Totales: \@@Total: \Moneda \Total}%
\immediate\closeout\csv
\fi}
diff --git a/Master/texmf-dist/tex/latex/factura/factura.def b/Master/texmf-dist/tex/latex/factura/factura.def
index 272cd2a0300..676d18e0aa9 100644
--- a/Master/texmf-dist/tex/latex/factura/factura.def
+++ b/Master/texmf-dist/tex/latex/factura/factura.def
@@ -35,7 +35,7 @@
%% and factura-beispiel-rechnung.tex.
%%
\ProvidesFile{factura.def}
-[2016/02/07 v2.6
+[2016/05/16 v2.72
Archivo valores iniciales y condiciones de borde para factura.cls
]
@@ -59,7 +59,7 @@ Archivo valores iniciales y condiciones de borde para factura.cls
\def\@DigitosNumeracion{5}
%% La moneda:
-\def\@Moneda{Bs.}
+\def\Moneda{Bs.}
%% Al lado de cada ítem va la letra que designa el gravamen que aplica sobre él:
\def\@DenomAlicuotaG{G}
@@ -109,14 +109,18 @@ Archivo valores iniciales y condiciones de borde para factura.cls
\def\@@Proveedor{Proveedor:}
\def\@@Cliente{Cliente:}
-%% i) Carácter de fin de línea en el cuadro de la factura,
-%% ii) carácter para separar el teléfono del e-mail del cliente,
-%% iii) carácter para los campos vacíos cuando se usa \ItemX,
-%% iv) carácter para las celdas vacíos cuando la descripción del ítem ocupa más que una línea.
-\def\@CaracterEOL{$\hookleftarrow$}
+%% i) carácter para separar el teléfono del e-mail del cliente,
+%% ii) carácter para los campos vacíos cuando se usa \ItemX,
+%% iii) carácter para las celdas vacíos cuando la descripción del ítem ocupa más que una línea.
+%% iv) carácter de retorno de carro en el cuadro de la factura,
\def\@CaracterSeparaTelefonoEmail{$\diamond$}
\def\@CaracterItemXVacio{...}
\def\@CaracterCeldasVacias{$\cdot$}
+\def\@CaracterCR{$\lcurvearrowsw\!$}% (del paquete MnSymbol)
+%% \def\@CaracterCR{$\hookleftarrow$}% también puede usarse este.
+
+%% Separación entre la última letra y el carácter que indica que se continúa en la línea siguiente en la descripción cuando ocupa más de una línea. No vale la pena hacer una macro para cambiar esto.
+\setlength{\@SeparaFinLineaDesc}{0.05cm}
%% Separación entre el inicio de una columna en la tabla y el inicio del texto.
\tabcolsep=0.15cm