summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/factura
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-06-25 22:10:38 +0000
committerKarl Berry <karl@freefriends.org>2016-06-25 22:10:38 +0000
commitae27a23f9f06830c17b55aa47224a54607700028 (patch)
tree54d5f82069796f3a11a2ab241f7b72e945e4bcf9 /Master/texmf-dist/tex/latex/factura
parentcc6aa42af9e93d8f6ccc61baa0c90370e92f7fa9 (diff)
factura (25jun16)
git-svn-id: svn://tug.org/texlive/trunk@41538 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/factura')
-rw-r--r--Master/texmf-dist/tex/latex/factura/factura.cls217
-rw-r--r--Master/texmf-dist/tex/latex/factura/factura.def15
2 files changed, 127 insertions, 105 deletions
diff --git a/Master/texmf-dist/tex/latex/factura/factura.cls b/Master/texmf-dist/tex/latex/factura/factura.cls
index 12f553c9579..01d934a7c6c 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/05/16 v2.72
+[2016/06/25 v2.82
Clase para elaborar facturas legales
en la República Bolivariana de Venezuela.
]
@@ -57,6 +57,9 @@ en la República Bolivariana de Venezuela.
\newif\if@sinnumero
\newif\if@conlineasha
\newif\if@linea
+\newif\if@lineacompleta
+\newif\if@lineahastatotal
+\newif\if@lineadesdeinicio
\newif\if@G
\newif\if@BIR
\newif\if@BIA
@@ -95,17 +98,10 @@ en la República Bolivariana de Venezuela.
\newbool{SinLineasHoriExt}
\newbool{DCU}
\newbool{DUC}
-\newbool{PrimeroDesc}
+\newbool{NumItem}
+\newbool{PrimeroDescrip}
\newbool{ExpAbajo}\booltrue{ExpAbajo}
-%% Condicionales auxiliares para hacer que la línea oblicua salga donde corresponde.
-\newbool{LineaDesdeColUno}
-\newbool{LineaDesdeColDos}
-\newbool{LineaHastaColUno}
-\newbool{LineaHastaColDos}
-\newbool{LineaHastaFinal}
-\newbool{LineaHastaTotal}
-
%% Condicionales auxiliares para la posición de los objetos fijos cuando son medidos desde la derecha, o desde abajo.
\newbool{FechaXnegativo}
\newbool{FechaYnegativo}
@@ -141,18 +137,19 @@ en la República Bolivariana de Venezuela.
\@agrupadotrue
\fi}
\DeclareOption{impdesc}{\@impdesctrue}% Para el tipo de impuesto en la descripción y no en el precio unitario y total.
+\DeclareOption{numitem}{\booltrue{NumItem}}% Para poner una columna extra al principio con el número del ítem.
\DeclareOption{dcu}{% Descripción, luego cantidad y luego precio unitario.
\@dcutrue\@cdufalse\@ducfalse
\booltrue{DCU}\boolfalse{DUC}
- \booltrue{PrimeroDesc}}
+ \booltrue{PrimeroDescrip}}
\DeclareOption{duc}{% Descripción, luego precio unitario y luego cantidad.
\if@dcu
\ClassWarning{factura}{Las opciones 'duc' y 'dcu' no son compatibles. Sin efecto ambas opciones}{}
- \boolfalse{PrimeroDesc}\boolfalse{DCU}\@dcufalse\@cdutrue
+ \boolfalse{PrimeroDescrip}\boolfalse{DCU}\@dcufalse\@cdutrue
\else
\@ductrue\@cdufalse\@dcufalse
\booltrue{DUC}\boolfalse{DCU}
- \booltrue{PrimeroDesc}
+ \booltrue{PrimeroDescrip}
\fi}
\DeclareOption{siniva}{\AtBeginDocument{\gdef\@ImpuestoG{0}\gdef\@ImpuestoR{0}\gdef\@ImpuestoA{0}}}% No cobra IVA.
\DeclareOption{todosiva}{\@todosivatrue}% Con esta opción salen todos los IVA así valgan cero.
@@ -168,11 +165,11 @@ en la República Bolivariana de Venezuela.
\booltrue{SinCantidad}
\if@dcu
\ClassWarning{factura}{La opción 'sincantidad' no es compatible con 'dcu' . Sin efecto opción 'dcu'}{}
- \@dcufalse\@cdutrue\boolfalse{DCU}\boolfalse{PrimeroDesc}
+ \@dcufalse\@cdutrue\boolfalse{DCU}\boolfalse{PrimeroDescrip}
\fi
\if@duc
\ClassWarning{factura}{La opción 'sincantidad' no es compatible con 'duc' . Sin efecto opción 'duc'}{}
- \@ducfalse\@cdutrue\boolfalse{DUC}\boolfalse{PrimeroDesc}
+ \@ducfalse\@cdutrue\boolfalse{DUC}\boolfalse{PrimeroDescrip}
\fi}
\DeclareOption{conlineasha}{\@conlineashatrue}% Una línea horizontal para cada ítem, como las facturas a mano.
@@ -219,7 +216,6 @@ 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
@@ -374,7 +370,7 @@ en la República Bolivariana de Venezuela.
\def\PosFecha#1#2{%
\IfBeginWith{#1}{-}
{\StrBehind{#1}{-}[\templeng]\setlength{\@PosFechaX}{-\templeng}\booltrue{FechaXnegativo}}
- {\boolfalse{FechaXnegativo}\setlength{\@PosFechaX}{#1}}%
+ {\boolfalse{FechaXnegativo}\setlength{\@PosFechaX}{#1}}
\IfBeginWith{#2}{-}
{\StrBehind{#2}{-}[\templeng]\setlength{\@PosFechaY}{-\templeng}\booltrue{FechaYnegativo}}
{\boolfalse{FechaYnegativo}\setlength{\@PosFechaY}{#2}}}
@@ -382,7 +378,7 @@ en la República Bolivariana de Venezuela.
\def\PosDenom#1#2{%
\IfBeginWith{#1}{-}
{\StrBehind{#1}{-}[\templeng]\setlength{\@PosDenomX}{-\templeng}\booltrue{DenomXnegativo}}
- {\boolfalse{DenomXnegativo}\setlength{\@PosDenomX}{#1}}%
+ {\boolfalse{DenomXnegativo}\setlength{\@PosDenomX}{#1}}
\IfBeginWith{#2}{-}
{\StrBehind{#2}{-}[\templeng]\setlength{\@PosDenomY}{-\templeng}\booltrue{DenomYnegativo}}
{\boolfalse{DenomYnegativo}\setlength{\@PosDenomY}{#2}}}
@@ -390,7 +386,7 @@ en la República Bolivariana de Venezuela.
\def\PosControl#1#2{%
\IfBeginWith{#1}{-}
{\StrBehind{#1}{-}[\templeng]\setlength{\@PosControlX}{-\templeng}\booltrue{ControlXnegativo}}
- {\boolfalse{ControlXnegativo}\setlength{\@PosControlX}{#1}}%
+ {\boolfalse{ControlXnegativo}\setlength{\@PosControlX}{#1}}
\IfBeginWith{#2}{-}
{\StrBehind{#2}{-}[\templeng]\setlength{\@PosControlY}{-\templeng}\booltrue{ControlYnegativo}}
{\boolfalse{ControlYnegativo}\setlength{\@PosControlY}{#2}}}
@@ -500,10 +496,10 @@ en la República Bolivariana de Venezuela.
%% Comando para incluir la firma escaneada en el sitio donde va la línea de la firma del emisor.
\NewDocumentCommand{\FirmaFactura}{m O{0pt} O{0pt}}{% \FirmaFactura{imagen}[x-corr][y-corr]
\if@factura
- \RequirePackage{graphicx}%
+ \RequirePackage{graphicx}
\ifx&#2&\else\setlength{\@FirmaFacturaXcorr}{#2}\fi
\ifx&#3&\else\setlength{\@FirmaFacturaYcorr}{#3}\fi
- \savebox{\@CajaFirmaEmisor}{#1}%
+ \savebox{\@CajaFirmaEmisor}{#1}
\if@reporte
\expandafter\AtBeginShipoutNext
\else
@@ -561,30 +557,30 @@ en la República Bolivariana de Venezuela.
\end{textblock*}
\fi}
-%% Con \FondoFactura le damos el nombre del archivo que contiene el formato de la factura, por ejemplo para compilaciones con 'prefactura', 'cotizacion' o para incluir una imagen de fondo como 'marca de agua'.
-\newcommand{\FondoFactura}[1]{%
+%% Con \FondoFactura le damos el nombre del archivo que contiene el formato de la factura, por ejemplo para compilaciones con 'prefactura', 'cotizacion' o para incluir una imagen de fondo como 'marca de agua'.
+\newcommand{\FondoFactura}[1]{
\if@factura
- \RequirePackage{graphicx}%
+ \RequirePackage{graphicx}
\@fondofacturatrue
- \gdef\@FondoFactura{#1}%
+ \gdef\@FondoFactura{#1}
\fi}
%% Con \FondoReporte le damos el nombre del archivo que contiene el formato del reporte. Existen dos posibilidades: que dicho fondo salga en todas las páginas o sólo en la primera.
-\NewDocumentCommand{\FondoReporte}{s m}{%
+\NewDocumentCommand{\FondoReporte}{s m}{
\if@reporte
\@fondoreportetrue
- \RequirePackage{graphicx}%
- \gdef\@FondoReporte{#2}%
+ \RequirePackage{graphicx}
+ \gdef\@FondoReporte{#2}
\IfBooleanT{#1}{\@fondoreportestartrue}% Con * sale en todas las páginas; sin * sale sólo en la primera página.
\fi}
%% Comando para establecer desde el preámbulo el estilo de página (\pagestyle) del reporte, tanto para la primera página como para las siguientes.
-\NewDocumentCommand{\EstiloPagReporte}{o m}{%
+\NewDocumentCommand{\EstiloPagReporte}{o m}{
\gdef\@EstiloPagReporteResto{#2}
\IfValueTF{#1}{\gdef\@EstiloPagReporteUno{#1}}{\gdef\@EstiloPagReporteUno{\@EstiloPagReporteResto}}}
%% El título para el reporte.
-\NewDocumentCommand{\TituloReporte}{s m}{%
+\NewDocumentCommand{\TituloReporte}{s m}{
\gdef\@TituloReporte{#2}%
\IfBooleanTF{#1}{% Con '*' sale el título en las cabeceras o piés. Sin '*' no.
\gdef\@InfoPagina{\let\\\relax\@InfoPaginaTitulo}}%
@@ -592,8 +588,8 @@ en la República Bolivariana de Venezuela.
%% Para cada cliente o para cada personalización se puede tener un archivo .def o .tex con su nombre y ciertas macros cargadas. Ese archivo lo ponemos incluir con '\Cliente' en lugar de usar \input, y la extensión deberá ser .def o .tex.
\newcommand{\Cliente}[1]{%
- \IfFileExists{#1.def}{\input{#1.def}}{%
- \IfFileExists{#1.tex}{\input{#1.tex}}{%
+ \IfFileExists{#1.def}{\input{#1.def}}{
+ \IfFileExists{#1.tex}{\input{#1.tex}}{
\ClassError{factura}{** No existe #1.def ni #1.tex **}{}}}}
%% Comando para mostrar macros con '@'.
@@ -604,7 +600,9 @@ en la República Bolivariana de Venezuela.
\newlength{\@TamResumen}
\newlength{\@TamFinalEncabez}
\newlength{\@TamLineaFirmas}
+\newlength{\@TamNumItem}
\newlength{\@TamCantidad}
+\newlength{\@TamDescrip}
\newlength{\@TamPrecioU}
\newlength{\@TamDescuento}
\newlength{\@TamPrecioT}
@@ -665,7 +663,7 @@ en la República Bolivariana de Venezuela.
%% 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.
-\newcounter{@NumItem}% Número del ítem actual, para uso de algunas macros en el cuadro de la factura.
+\newcounter{@NumItem}% Número del ítem actual, para uso de algunas macros en el cuadro de la factura y para cuando se usa la opción 'numitem'.
\input{factura.def}% Cargamos los valores predeterminados.
@@ -688,7 +686,7 @@ en la República Bolivariana de Venezuela.
\fi
\if@exparriba
- \RequirePackage{zref-savepos}% Para guardar la posición en 'Y'.
+ \RequirePackage{zref-savepos}[2016/05/21]% Para guardar la posición en 'Y'.
\fi
\if@reporte
@@ -727,6 +725,7 @@ 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]{%
+ \immediate\write\@auxout{\gdef\noexpand\@TamDescrip{\the\linewidth}}% Para poder establecer la línea diagonal hay que saber el tamaño del campo de la descripción.
\setbox0\hbox{\parbox[t]{\linewidth}{#1%
\if@impdesc\hfill\ \@EscribeTipoDeImpuesto{#2}\fi%
\par\global\count1=\prevgraf}}%
@@ -757,25 +756,30 @@ en la República Bolivariana de Venezuela.
\fi}
%% Comandos auxiliares para colocar en \parbox cada celda.
+\newcommand{\@NumItemAuxCmd}[1]{%
+ \savebox{\@CajaPrueba}{#1}%
+ \ifdim\wd\@CajaPrueba > \@TamNumItem \global\@TamNumItem=\wd\@CajaPrueba\fi
+ \parbox[t]{\@TamNumItem}{#1}}
+
\newcommand{\@CantidadAuxCmd}[1]{%
\savebox{\@CajaPrueba}{#1}%
\ifdim\wd\@CajaPrueba > \@TamCantidad \global\@TamCantidad=\wd\@CajaPrueba\fi
- \parbox{\@TamCantidad}{#1}}
+ \parbox[t]{\@TamCantidad}{#1}}
\newcommand{\@PrecioUAuxCmd}[1]{%
\savebox{\@CajaPrueba}{#1}%
\ifdim\wd\@CajaPrueba > \@TamPrecioU \global\@TamPrecioU=\wd\@CajaPrueba\fi
- \parbox{\@TamPrecioU}{#1}}
+ \parbox[t]{\@TamPrecioU}{#1}}
\newcommand{\@DescuentoAuxCmd}[1]{%
\savebox{\@CajaPrueba}{#1}%
\ifdim\wd\@CajaPrueba > \@TamDescuento \global\@TamDescuento=\wd\@CajaPrueba\fi
- \parbox{\@TamDescuento}{#1}}
+ \parbox[t]{\@TamDescuento}{#1}}
\newcommand{\@PrecioTAuxCmd}[1]{%
\savebox{\@CajaPrueba}{#1}%
\ifdim\wd\@CajaPrueba > \@TamPrecioT \global\@TamPrecioT=\wd\@CajaPrueba\fi
- \parbox{\@TamPrecioT}{#1}}
+ \parbox[t]{\@TamPrecioT}{#1}}
%% Presentación de totales en modo de columnas.
\newcommand{\@EscribeTotalCol}[1]{%
@@ -939,11 +943,6 @@ en la República Bolivariana de Venezuela.
\if@Exento\usebox{\@CajaBIET}\else\usebox{\@CajaTotal}\fi
\if@centrado\hspace*{\@SepTotales}\fi}
-%% Comando que guarda la posición en X para el nodo A de la línea.
-\newcommand{\@LineaNodoACoordX}{\hspace*{-\tabcolsep}\zsaveposx{LineaNodoACoordX}\hspace*{\tabcolsep}}
-%% Comando que guarda la posición en X para el nodo B de la línea.
-\newcommand{\@LineaNodoBCoordX}{\hspace*{-\tabcolsep}\zsaveposx{LineaNodoBCoordX}\hspace*{\tabcolsep}}
-
%% Escribe la letra que designa al tipo de impuesto que aplica al ítem.
\NewDocumentCommand{\@EscribeTipoDeImpuesto}{m}{%
% Hay que abrir un grupo de ejecución porque el cambio en la tipografía altera la celda.
@@ -1000,34 +999,47 @@ en la República Bolivariana de Venezuela.
%% Comandos auxiliares para poder evaluar la definición de las columnas en la tabla con un comando que se expande completamente.
\def\@FacturaAuxColumnasEval{
- % Primera línea.
+ % Primera línea, la más externa.
\ifbool{SinLineasVertExt}{}{|}
+ % Columna para el número del ítem, si aplica.
+ \ifbool{NumItem}{c}{r@{\extracolsep{0pt}}}
+ % Segunda línea, que sale solamente cuando se usa la opción 'numitem'
+ \ifbool{NumItem}{\ifbool{SinLineasVertInt}{}{|}}{}
% Columna 'X' con DCU, columna fantasma con 'sincantidad' y columna 'c' con CDU.
- \ifbool{PrimeroDesc}{X}{
+ \ifbool{PrimeroDescrip}{X}{
\ifbool{SinCantidad}{l@{\extracolsep{0pt}}}{c}}
- % Segunda línea.
+ % Tercera línea.
\ifbool{SinCantidad}{}{\ifbool{SinLineasVertInt}{}{|}}
% Columna 'c' con DCU, columna 'r' con DUC, columna 'X' sin espacio para 'sincantidad' y columna 'X' con CDU.
\ifbool{DCU}{c}{
\ifbool{DUC}{r}{
\ifbool{SinCantidad}{X@{\extracolsep{0pt}}}{X}}}
- % Tercera línea, que sale solamente cuando no se usa 'sincantidad'.
+ % Cuarta línea, que sale solamente cuando no se usa 'sincantidad'.
\ifbool{SinCantidad}{}{\ifbool{SinLineasVertInt}{}{|}}
% Columna 'c' para DUC y columna 'r' para cualquier otro caso (DCU, CDU y 'sincantidad').
\ifbool{DUC}{c}{r}
- % Cuarta línea.
+ % Quinta línea.
\ifbool{SinLineasVertInt}{}{|}
% Columna 'c' para 'descuentos' y columna 'r' sin espacio si no hay descuentos individuales.
\ifbool{Descuentos}{c}{r@{\extracolsep{0pt}}}
- % Quinta línea, que sale solamente cuando hay descuentos.
+ % Sexta línea, que sale solamente cuando hay descuentos.
\ifbool{Descuentos}{\ifbool{SinLineasVertInt}{}{|}}{}
% Columna 'r' siempre.
r
- % Sexta y última línea.
+ % Séptima y última línea.
\ifbool{SinLineasVertExt}{}{|}}
+%% Comando auxiliar para abrir la tabla del cuadro de la factura y expandir completamente las columnas.
\edef\@FacturaAuxInicioCmd{\noexpand\begin{tabularx}{\textwidth}{\@FacturaAuxColumnasEval}}
+%% Comando auxiliar para abrir el '\multicolumn' para los totales en el modo de columnas y expandir completamente las columnas cuando hay o no barras verticales.
+\edef\@ColumnasMultiColumnTotalesAuxCmd{%
+ \noexpand\multicolumn{6}{\ifbool{SinLineasVertExt}{}{|} r}\begingroup
+ \noexpand\ifdim \noexpand\ht\noexpand\@CajaEspacioVacio=0pt
+ \noexpand\else
+ \noexpand\if@linea\noexpand\zsaveposx{LineaNodoBCoordX}\noexpand\zsaveposy{LineaNodoBCoordY}\noexpand\fi\noexpand\fi% Fijamos la posición (x,y) final para la línea ya que estaremos justo en el punto donde escribimos el total, y hasta allí llega la línea en el modo de columnas.
+ \noexpand\begin{tabular}[b]{@{\noexpand\extracolsep{2\noexpand\tabcolsep}}lr \ifbool{SinLineasVertExt}{}{|}}}
+
%% 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}%
@@ -1049,26 +1061,30 @@ en la República Bolivariana de Venezuela.
\expandafter\global\expandafter\edef\csname @Item@\romannumeral\value{@NumItem}@PrecioT\endcsname{\noexpand\numprint{\PrecioT}}}
\gdef\@pruebaref#1{%
- \expandafter\ifx\csname @Etiqueta@@#1\endcsname\relax
+ \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}
+\gdef\itemref#1{%
+ \ifbool{NumItem}{}{\ClassWarning{factura}{Es recomendable usar la opción 'numitem' para enumerar los ítems}{}}%
+ \@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
+ \expandafter\ifx\csname @Etiqueta@#1\endcsname\relax
+ \expandafter\global\expandafter\edef\csname @Etiqueta@#1\endcsname{\arabic{@NumItem}}\ignorespaces
+ \ClassInfo{factura}{Etiqueta `#1' definida para el ítem \arabic{@NumItem}}{}%
\else
- \expandafter\if\csname @Etiqueta@@#1\endcsname\the@NumItem
- \ClassInfo{factura}{Etiqueta `#1' definida para el ítem \arabic{@NumItem}}{}%
+ \edef\@label@test@uno{\csname @Etiqueta@#1\endcsname}%
+ \edef\@label@test@dos{\the@NumItem}%
+ \ifx\@label@test@uno\@label@test@dos
\else
\ClassWarning{factura}{La etiqueta `#1' se definió más de una vez}{}\ignorespaces
\fi
@@ -1081,9 +1097,20 @@ en la República Bolivariana de Venezuela.
\setlength{\@EspacioVacioFinal}{\zposy{EspacioVacioFinal}sp}%
\global\@EspacioVacioInicial=\@EspacioVacioInicial% ¿por qué tendré que globalizarlas?
\global\@EspacioVacioFinal=\@EspacioVacioFinal
- \savebox{\@CajaEspacioVacio}{\parbox[b][\@EspacioVacioInicial-\@EspacioVacioFinal]{1pt}{\mbox{}}}%
+ \savebox{\@CajaEspacioVacio}{\parbox[b][\@EspacioVacioInicial-\@EspacioVacioFinal]{\@TamDescrip}{%
+ \if@linea
+ \if@lineacompleta
+ \zsaveposy{LineaNodoBCoordY}%
+ \else
+ \if@lineahastatotal
+ \else
+ \zsaveposx{LineaNodoACoordX}\mbox{}\hfill \zsaveposx{LineaNodoBCoordX}\zsaveposy{LineaNodoBCoordY}%
+ \fi
+ \fi
+ \fi}}%
\ifdim \ht\@CajaEspacioVacio=0pt \global\@lineafalse \fi
\fi
+
\ifx\undefined\Total\relax\else\ClassError{factura}{** Parece ya haberse usado un entorno de factura **}{}\fi
%
% Comandos \David@SavePos, \David@XStart, \David@XEnd, \David@XPad, \David@XLeft y \David@XRight para poder manejar el salto de línea en las columnas adyacentes a la columna 'X' del tabularx (la descripción), cuando esta ocupa más que una línea.
@@ -1106,7 +1133,7 @@ en la República Bolivariana de Venezuela.
\advance\dimen@-\baselineskip
\settowidth{\@TempDimen}{##3}%
\ifdim\@TempDimen=0pt\settowidth{\@TempDimen}{##2}\fi
- \hbox{\parbox{\@TempDimen}{\mbox{}\hfill\@CaracterCeldasVacias\hfill\mbox{}}}%
+ \hbox{\parbox{\@TempDimen}{\@CaracterCeldasVacias}}%
\repeat
\fi
##3}}%
@@ -1125,14 +1152,17 @@ en la República Bolivariana de Venezuela.
\\
\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).
+ % Primer -opcional- campo: El número del ítem.
+ \ifbool{NumItem}{\David@XLeft{\@NumItemAuxCmd{\mbox{}\hfill \@LetraNumeros \arabic{@NumItem}\hfill\mbox{}}}}{}%
+ &
+ % Segundo campo: Acá puede ir la cantidad (cdu) o la descripción (dcu y duc).
\ifbool{SinCantidad}{}{%
- \ifbool{PrimeroDesc}
+ \ifbool{PrimeroDescrip}
{\@DescripcionAuxCmd{##3}{##1}}% dcu y duc.
{\David@XLeft{\@CantidadAuxCmd{\mbox{}\hfill \@LetraNumeros \numprint{##2}\hfill\mbox{}}}}}% cdu.
&
- % Segundo campo: Acá puede ir la descripción (cdu), la cantidad (dcu), o el precio unitario (duc).
- \ifbool{PrimeroDesc}{%
+ % Tercer campo: Acá puede ir la descripción (cdu), la cantidad (dcu), o el precio unitario (duc).
+ \ifbool{PrimeroDescrip}{%
\if@dcu
\David@XRight{\@CantidadAuxCmd{\mbox{}\hfill \@LetraNumeros \numprint{##2}\hfill\mbox{}}}% dcu.
\else
@@ -1144,7 +1174,7 @@ en la República Bolivariana de Venezuela.
\fi}
{\@DescripcionAuxCmd{##3}{##1}}% cdu.
&
- % Tercer campo: Acá puede ir el precio unitario (cdu y dcu) o la cantidad (duc).
+ % Cuarto campo: Acá puede ir el precio unitario (cdu y dcu) o la cantidad (duc).
\FPifeq\PrecioU{##4}\else\ClassWarning{factura}{** Se está introduciendo un precio con más de dos decimales: (##3 - ##4. Redondeado a \PrecioU) **}{}\fi% Advertimos cuando el precio unitario tiene más de dos decimales.
\ifbool{SinCantidad}{}{%
\if@duc
@@ -1157,15 +1187,15 @@ en la República Bolivariana de Venezuela.
\fi}}% dcu y cdu.
\fi}%
&
- % Cuarto campo: Descuento.
+ % Quinto -opcional- campo: Descuento.
\ifbool{Descuentos}{%
\David@XRight{\@DescuentoAuxCmd{%
\ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
\else
- \mbox{}\hfill \@LetraNumeros \numprint{\Dcto}\%\hfill\mbox{}
+ \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.
+ % Sexto campo: El total.
\David@XRight{\@PrecioTAuxCmd{%
\ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
\else
@@ -1208,20 +1238,20 @@ en la República Bolivariana de Venezuela.
\@FacturaAuxInicioCmd
\ifbool{SinLineasHoriExt}{}{\hline}%
\@ZERO
- % 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{}}}}%
+ % Estamos en el número del ítem, si aplicara.
+ \if@lineadesdeinicio \hspace*{-\tabcolsep}\zsaveposx{LineaNodoACoordX}\hspace*{\tabcolsep}\fi
+ \ifbool{NumItem}{\@NumItemAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@NumItem \hfill\mbox{}}}{}%
+ &
+ % Avanzamos a la cantidad, o la descripción.
+ \ifbool{SinCantidad}{}{\ifbool{PrimeroDescrip}{\@DescripcionAuxCmd{\@LetraTitCuadro \@@Descripcion}{}}{\@CantidadAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@Cantidad \hfill\mbox{}}}}%
&% Avanzamos hasta la descripción, la cantidad o el precio unitario.
- \ifbool{LineaDesdeColDos}{\@LineaNodoACoordX}{}%
- \ifbool{LineaHastaColUno}{\hspace*{-\arrayrulewidth}\@LineaNodoBCoordX\hspace*{\arrayrulewidth}}{}%
\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 \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}}{}}%
- {\ifbool{LineaHastaColDos}{\hspace*{-\arrayrulewidth}\@LineaNodoBCoordX\hspace*{\arrayrulewidth}}{}%
+ \ifbool{SinCantidad}{}
+ {%
\mbox{}\hfill
\if@duc
\@CantidadAuxCmd{\mbox{}\hfill \@LetraTitCuadro \@@Cantidad \hfill\mbox{}}%
@@ -1232,7 +1262,7 @@ en la República Bolivariana de Venezuela.
\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{}}%
- \ifbool{LineaHastaFinal}{\hspace*{\tabcolsep}\zsaveposx{LineaNodoBCoordX}\hspace*{-\tabcolsep}}{}%
+ \if@lineacompleta \hspace*{\tabcolsep}\zsaveposx{LineaNodoBCoordX}\hspace*{-\tabcolsep}\fi
\\
\ifbool{SinLineasHoriInt}{}{\hline}%
%
@@ -1244,9 +1274,7 @@ en la República Bolivariana de Venezuela.
\ifdim \ht\@CajaEspacioVacio=0pt
\ifbool{SinLineasHoriExt}{}{\if@conlineasha\else\hline\fi}% Verificamos si hay que poner la línea horizontal. Si está 'conlineasha' ya salió debido a esta opción.
\else
- &\usebox{\@CajaEspacioVacio}%
- \if@linea\mbox{}\zsaveposy{LineaNodoBCoordY}\fi% Se guarda la coordenada Y del punto de la derecha de la línea diagonal. Tiene que haber \mbox{}.
- &&&\\
+ \ifbool{PrimeroDescrip}{&\usebox{\@CajaEspacioVacio}&&&&\\}{&&\usebox{\@CajaEspacioVacio}&&&\\}%
\ifbool{SinLineasHoriExt}{}{\hline}% Siempre que hay relleno se pone la línea acá.
\fi
\else
@@ -1255,16 +1283,10 @@ en la República Bolivariana de Venezuela.
\ifdim \ht\@CajaEspacioVacio=0pt
\else
% Rellenamos la tabla con espacio espúreo, y le agregamos las lineas externas, si aplica.
- \ifbool{SinLineasVertExt}{\multicolumn{5}{c}{\usebox{\@CajaEspacioVacio}}}{\multicolumn{5}{|c|}{\usebox{\@CajaEspacioVacio}}}\\
+ \ifbool{SinLineasVertExt}{\multicolumn{6}{c}{\usebox{\@CajaEspacioVacio}}}{\multicolumn{6}{|c|}{\usebox{\@CajaEspacioVacio}}}\\
\fi
- % Abrimos la tabla para escribir los totales, y le agregamos las líneas verticales externas, si aplica.
- \ifbool{SinLineasVertExt}
- {\multicolumn{5}{r}\begingroup
- \ifdim \ht\@CajaEspacioVacio=0pt \else \if@linea\zsaveposx{LineaNodoBCoordX}\zsaveposy{LineaNodoBCoordY}\fi\fi
- \begin{tabular}[b]{@{\extracolsep{2\tabcolsep}}lr}}
- {\multicolumn{5}{|r}\begingroup
- \ifdim \ht\@CajaEspacioVacio=0pt \else \if@linea\zsaveposx{LineaNodoBCoordX}\zsaveposy{LineaNodoBCoordY}\fi\fi
- \begin{tabular}[b]{@{\extracolsep{2\tabcolsep}}lr|}}% Una vaina loca... tuve que meter también el tabular con la línea '|' porque no pude poner esa línea en el multicolumn.
+ % Modo de columnas: Abrimos la tabla para escribir los totales, y le agregamos las líneas verticales externas, si aplica.
+ \@ColumnasMultiColumnTotalesAuxCmd
\@CalculaTotalesI
\if@agrupado
\@EscribeTotalColAgrupado
@@ -1462,14 +1484,9 @@ en la República Bolivariana de Venezuela.
\RequirePackage{eso-pic}% Para poder usar \AtBeginShipoutNext porque si no se hace en el 'shipout' de la página se genera un espacio en blanco extra.
\AtBeginShipoutNext{\if@linea\@DibujaLinea\fi}
\if@filas
- \ifbool{SinLineasVertInt}
- {\booltrue{LineaDesdeColUno}\booltrue{LineaHastaFinal}}
- {\ifbool{PrimeroDesc}
- {\booltrue{LineaDesdeColUno}\booltrue{LineaHastaColUno}}
- {\booltrue{LineaDesdeColDos}\booltrue{LineaHastaColDos}}}
+ \ifbool{SinLineasVertInt}{\@lineacompletatrue}
\else
- \ifbool{SinCantidad}{\booltrue{LineaDesdeColDos}}{\booltrue{LineaDesdeColUno}}
- \booltrue{LineaHastaTotal}
+ \@lineahastatotaltrue\@lineadesdeiniciotrue
\fi
\fi
@@ -1497,7 +1514,7 @@ en la República Bolivariana de Venezuela.
\let\@ITEM\@CalculaItem
\BODY
\@CalculaTotalesI}
- \NewDocumentCommand{\Descripcion}{s +m}{}
+ \NewDocumentCommand{\Descripcion}{+m}{}
\fi
\if@reporte
diff --git a/Master/texmf-dist/tex/latex/factura/factura.def b/Master/texmf-dist/tex/latex/factura/factura.def
index 676d18e0aa9..70e4979b681 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/05/16 v2.72
+[2016/06/25 v2.82
Archivo valores iniciales y condiciones de borde para factura.cls
]
@@ -70,6 +70,7 @@ Archivo valores iniciales y condiciones de borde para factura.cls
%% Macros que guardan textos que corresponden a nombres de campos:
\def\@@Fecha{Fecha de emisi\'on:}
\def\@@RazonSocial{Raz\'on social:}
+\def\@@NumItem{\#}
\def\@@Cantidad{Cantidad}
\def\@@Descripcion{Descripci\'on}
\def\@@PrecioU{Precio U.}
@@ -111,13 +112,17 @@ Archivo valores iniciales y condiciones de borde para factura.cls
%% 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.
+%% iii) carácter para las celdas vacías 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.
+\def\@CaracterCeldasVacias{\mbox{}\hfill$\cdot$\hfill\mbox{}}
+\def\@CaracterCR{\flechaCR}
+\def\flechaCR{%
+ \raisebox{-0.4ex}{%
+ \begin{tikzpicture}
+ \draw[line width=0.075ex] (0,0) arc (20:70:0.75ex) + (0,0) arc (-70:-20:0.75ex) ++ (0.8ex,0.55ex) arc (0:-100:1ex);
+ \end{tikzpicture}}}
%% 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}