summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/factura
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-03-13 21:59:20 +0000
committerKarl Berry <karl@freefriends.org>2018-03-13 21:59:20 +0000
commit086b1547b4ca9345835a2417ad40e5ec9fee3842 (patch)
treeafa42c5b3fd68f523f81b364bd10115b161dbfe9 /Master/texmf-dist/tex/latex/factura
parenteb8ef25be547b60759a018127fc2676c21b02e6d (diff)
factura (13mar18)
git-svn-id: svn://tug.org/texlive/trunk@46949 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/factura')
-rw-r--r--Master/texmf-dist/tex/latex/factura/factura.cls1671
-rw-r--r--Master/texmf-dist/tex/latex/factura/factura.def14
2 files changed, 924 insertions, 761 deletions
diff --git a/Master/texmf-dist/tex/latex/factura/factura.cls b/Master/texmf-dist/tex/latex/factura/factura.cls
index d8bfef76317..467826fcdaa 100644
--- a/Master/texmf-dist/tex/latex/factura/factura.cls
+++ b/Master/texmf-dist/tex/latex/factura/factura.cls
@@ -37,7 +37,7 @@
%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{factura}
-[2017/12/11 v3.40
+[2018/03/13 v3.44
Clase para elaborar facturas legales
en la República Bolivariana de Venezuela.
]
@@ -75,37 +75,55 @@ en la República Bolivariana de Venezuela.
\newbool{FirmasYnegativo}% no hay FirmasXnegativo; hay X_inicial y X_final para las firmas.
%% Condicionales relativos a opciones de la clase.
-\newif\if@prefactura
-\newif\if@cotizacion
-\newif\if@nospanish
-\newif\if@sinivaexpresado
-\newif\if@todosiva
-\newif\if@sinfirmas
-\newif\if@unafirma
-\newif\if@filas
-\newif\if@agrupado
-\newif\if@centrado
-\newif\if@descuentos
-\newif\if@denom
-\newif\if@vencimiento
-\newif\if@sinnumero
-\newif\if@sintotales
-\newif\if@conlineasha
-\newif\if@linea
-\newif\if@G
-\newif\if@csv
+\newif\ifagrupado
+\newif\ifcentradesc
+\newif\ifcentrado
+\newif\ifconlineasha
+\newif\ifconreporte
+\newif\ifcotizacion
+\newif\ifcsv
+\newif\ifdcu
+\newif\ifdenom
+\newif\ifdescuentos
+\newif\ifdosfirmas
+\newif\ifduc
+\newif\ifelectro
+\newif\ifexpandecuadro
+\newif\iffilas
+\newif\ifG
+\newif\ifimpdesc
+\newif\ifiva
+\newif\iflinea
+\newif\ifnospanish
+\newif\ifnumitem
+\newif\ifprefactura
+\newif\ifsincantidad
+\newif\ifsinexpandir
+\newif\ifsinfirmas
+\newif\ifsiniva
+\newif\ifsinivaexpresado
+\newif\ifsinlineash
+\newif\ifsinlineashe
+\newif\ifsinlineashi
+\newif\ifsinlineasv
+\newif\ifsinlineasve
+\newif\ifsinlineasvi
+\newif\ifsinmarcas
+\newif\ifsinnumero
+\newif\ifsinreverso
+\newif\ifsintotales
+\newif\ifsoloreporte
+\newif\ifsubtotal
+\newif\iftodosiva
+\newif\iftwoside
+\newif\ifunafirma
+\newif\ifvencimiento
+
+%% Condicionales auxiliares.
\newif\if@cdu \@cdutrue
-\newif\if@dcu
-\newif\if@duc
-\newif\if@expandecuadro
\newif\if@factura \@facturatrue
\newif\if@reverso \@reversotrue
\newif\if@reporte
-\newif\if@impdesc
-\newif\if@centradesc
-\newif\if@sinmarcas
-
-%% Condicionales auxiliares.
\newif\if@FondoFactura
\newif\if@FondoReporte
\newif\if@FondoReporteStar
@@ -210,134 +228,68 @@ en la República Bolivariana de Venezuela.
%% Contadores.
\newcounter{@IVANoGeneral}% '0' con sólo IVA G, '1' cuando hay IVA R o IVA A, y '2' cuando hay ambos.
+\newcounter{@Firmas}% '0' para sinfirmas, '1' para unafirma, y '2' para dosfirmas.
+\setcounter{@Firmas}{2}
\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'.
\newcount\AuxFecha
+%% Errores, advertencias e informaciones de LaTeX.
\newcommand{\CLASSERROR}[1]{\ClassError{factura}{** #1. **}{}}
\newcommand{\CLASSWARNING}[1]{\ClassWarning{factura}{** #1. **}{}}
\newcommand{\CLASSINFO}[1]{\ClassInfo{factura}{** #1. **}{}}
-\DeclareOption{prefactura}{\@prefacturatrue\@denomtrue\@sinfirmastrue}% La prefactura; con el diseño de la forma libre... para enviar por correo electrónico, fax o imprimir preliminarmente.
-\DeclareOption{cotizacion}{\@cotizaciontrue\@denomtrue\@unafirmatrue}% Cambia la denominación a 'COTIZACIÓN' y no 'FACTURA'.
-\DeclareOption{nospanish}{\@nospanishtrue}% No carga babel en castellano ni la codificación T1 de las letras.
-\DeclareOption{sinfirmas}{\@sinfirmastrue}% No agrega los espacios para firmar.
-\DeclareOption{unafirma}{\@unafirmatrue\@sinfirmasfalse}% No agrega el espacio para que firme quien recibe.
-\DeclareOption{dosfirmas}{\@unafirmafalse\@sinfirmasfalse}% Pone las dos firmas para firmar.
-\DeclareOption{descuentos}{\booltrue{Descuentos}\@descuentostrue}% Para los descuentos individuales.
-\DeclareOption{iva}{\@impdesctrue\booltrue{IVA}}% Para la columna del IVA.
-\DeclareOption{subtotal}{% Para la columna extra del subtotal antes del descuento.
- \if@descuentos
- \booltrue{Subtotal}
- \else
- \CLASSWARNING{La opción 'subtotal' no aplica sin descuentos individuales. Sin efecto opción 'subtotal'}
- \fi}
-\DeclareOption{denom}{\@denomtrue}% Agrega el texto con la denominación del documento, para las formas libres que no tienen el número de factura.
-\DeclareOption{vencimiento}{\@vencimientotrue}% Escribe fecha de vencimiento, aún con facturas sin crédito.
-\DeclareOption{sinnumero}{\@sinnumerotrue\@denomtrue}% Escribir el texto de la denominación del documento pero sin escribir el número.
-\DeclareOption{G}{\@Gtrue}% Con esta opción sale la letra 'G' en los items con IVA general, y sale el porcentaje en la base imponible general.
-\DeclareOption{filas}{\@filastrue}% Estilo de totalización en filas.
-\DeclareOption{sintotales}{\@sintotalestrue% No escribe los totales al final, por ejemplo para cotizaciones de productos similares.
- \if@filas
- \CLASSWARNING{La opción 'sintotales' no aplica para el modo de totalización en filas. Sin efecto opción 'filas'}
- \@filasfalse
- \fi
- \if@cotizacion
- \else
- \CLASSWARNING{La opción 'sintotales' no debe usarse en facturas sino en cotizaciones. No es válida una factura sin totales}
- \fi}
-\DeclareOption{centrado}{% Total y exento 'centrado'; sólo para estilo 'filas'
- \if@filas
- \@centradotrue
- \else
- \CLASSWARNING{La opción 'centrado' no es compatible con el modo de totalización en columnas. Sin efecto opción 'centrado'}
- \fi}
-\DeclareOption{agrupado}{% Agrupados los elementos totalizadores en el modo en columnas.
- \if@filas
- \CLASSWARNING{La opción 'agrupado' no es compatible con el modo de totalización en filas. Sin efecto opción 'agrupado'}
- \else
- \@agrupadotrue
- \fi}
-\DeclareOption{impdesc}{\@impdesctrue}% Para el tipo de impuesto en la descripción y no en el precio unitario y total.
-\DeclareOption{centradesc}{\@centradesctrue}% Para centrar la descripción de cada ítem.
-\DeclareOption{sinmarcas}{\@sinmarcastrue}% Para evitar que aparezcan los caracteres especiales cuando la descripción es larga.
-\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{PrimeroDescripcion}}
-\DeclareOption{duc}{% Descripción, luego precio unitario y luego cantidad.
- \if@dcu
- \CLASSWARNING{Las opciones 'duc' y 'dcu' no son compatibles. Sin efecto ambas opciones}
- \boolfalse{PrimeroDescripcion}\boolfalse{DCU}\@dcufalse\@cdutrue
- \else
- \@ductrue\@cdufalse\@dcufalse
- \booltrue{DUC}\boolfalse{DCU}
- \booltrue{PrimeroDescripcion}
- \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.
-\DeclareOption{electro}{% Parche por el Decreto 3085 de Nikolài.
- \booltrue{Electro}
- \gdef\@NotaInterna{\@TextoDescuentoPresidencial}
- \CLASSINFO{Se estableció el texto aclaratorio del descuento presidencial como 'nota interna'}
- \if@filas
- \CLASSWARNING{La opción 'electro' no es compatible con la opción 'filas'. Sin efecto la opción 'filas'}
- \@filasfalse
- \fi}
-\DeclareOption{sinivaexpresado}{% Cuando no se cobra IVA y tampoco se quiere que aparezca la totalización del IVA.
- \@sinivaexpresadotrue
- \if@filas
- \CLASSWARNING{La opción 'sinivaexpresado' no es compatible con la opción 'filas'. Sin efecto la opción 'filas'}
- \@filasfalse
- \else
- \AtBeginDocument{\gdef\@ImpuestoG{0}\gdef\@ImpuestoR{0}\gdef\@ImpuestoA{0}}
- \fi}
-\DeclareOption{sincantidad}{% Para no poner el campo de la cantidad.
- \booltrue{SinCantidad}
- \if@dcu
- \CLASSWARNING{La opción 'sincantidad' no es compatible con 'dcu' . Sin efecto opción 'dcu'}
- \@dcufalse\@cdutrue\boolfalse{DCU}\boolfalse{PrimeroDescripcion}
- \fi
- \if@duc
- \CLASSWARNING{La opción 'sincantidad' no es compatible con 'duc' . Sin efecto opción 'duc'}
- \@ducfalse\@cdutrue\boolfalse{DUC}\boolfalse{PrimeroDescripcion}
- \fi}
-\DeclareOption{conlineasha}{\@conlineashatrue}% Una línea horizontal para cada ítem, como las facturas a mano.
-\DeclareOption{sinlineasv}{% Estilo 'sinlineasv'.
- \booltrue{SinLineasVertExt}\booltrue{SinLineasVertInt}}
-\DeclareOption{sinlineasvi}{\booltrue{SinLineasVertInt}}% Estilo 'sinlineasvi'.
-\DeclareOption{sinlineasve}{\booltrue{SinLineasVertExt}}% Estilo 'sinlineasve'.
-\DeclareOption{sinlineash}{% Estilo 'sinlineash'.
- \booltrue{SinLineasHoriExt}\booltrue{SinLineasHoriInt}}
-\DeclareOption{sinlineashi}{\booltrue{SinLineasHoriInt}}% Estilo 'sinlineashi'.
-\DeclareOption{sinlineashe}{\booltrue{SinLineasHoriExt}}% Estilo 'sinlineashe'.
-\DeclareOption{expandecuadro}{\@expandecuadrotrue\boolfalse{ExpAbajo}}% Para rellenar con líneas en blanco de manera automática.
-\DeclareOption{sinexpandir}{\boolfalse{ExpAbajo}\@expandecuadrofalse}% No expande ninguna de las dos partes de la factura.
-\DeclareOption{linea}{% Para la línea que protege el espacio en blanco.
- \if@expandecuadro
- \@lineatrue
- \else
- \CLASSWARNING{La opción 'linea' requiere la opción 'expandecuadro'. Sin efecto opción 'linea'}
- \fi}
-\DeclareOption{conreporte}{\@reportetrue}% Para imprimir factura y reporte.
-\DeclareOption{soloreporte}{\@reportetrue\@facturafalse\@reversofalse}% Para imprimir sólo el reporte.
-\DeclareOption{sinreverso}{\@reversofalse}% Para no imprimir el reverso de la factura.
-\DeclareOption{twoside}{\PassOptionsToClass{twoside}{article}}% Opción 'twoside' de article para los reportes.
-\DeclareOption{csv}{% Para la salida en modo csv también.
- \if@factura
- \@csvtrue
- \if@sintotales\else\AtEndDocument{\@EscribeTotalesEnCSV}\fi
- \else
- \CLASSWARNING{La opción 'csv' require generar la factura. Sin efecto opción 'csv'}
- \fi}
+%% Opciones de la clase.
+\DeclareOption{agrupado}{\agrupadotrue}% Agrupados los elementos totalizadores en el modo en columnas.
+\DeclareOption{centradesc}{\centradesctrue}% Para centrar la descripción de cada ítem.
+\DeclareOption{centrado}{\centradotrue}% Total y exento 'centrado'; sólo para estilo 'filas'
+\DeclareOption{conlineasha}{\conlineashatrue}% Una línea horizontal para cada ítem, como las facturas a mano.
+\DeclareOption{conreporte}{\conreportetrue}% Para imprimir factura y reporte.
+\DeclareOption{cotizacion}{\cotizaciontrue}% Cambia la denominación a 'COTIZACIÓN' y no 'FACTURA'.
+\DeclareOption{csv}{\csvtrue}% Para la salida en modo csv también.
+\DeclareOption{dcu}{\dcutrue}% Descripción, luego cantidad y luego precio unitario.
+\DeclareOption{denom}{\denomtrue}% Agrega el texto con la denominación del documento, para las formas libres que no tienen el número de factura.
+\DeclareOption{descuentos}{\descuentostrue}% Para los descuentos individuales.
+\DeclareOption{dosfirmas}{\dosfirmastrue}% Pone las dos firmas para firmar.
+\DeclareOption{duc}{\ductrue}% Descripción, luego precio unitario y luego cantidad.
+\DeclareOption{electro}{\electrotrue}% Parche por el Decreto 3085 de Nikolài.
+\DeclareOption{expandecuadro}{\expandecuadrotrue}% Para rellenar con líneas en blanco de manera automática.
+\DeclareOption{filas}{\filastrue}% Estilo de totalización en filas.
+\DeclareOption{G}{\Gtrue}% Con esta opción sale la letra 'G' en los items con IVA general, y sale el porcentaje en la base imponible general.
+\DeclareOption{impdesc}{\impdesctrue}% Para el tipo de impuesto en la descripción y no en el precio unitario y total.
+\DeclareOption{iva}{\ivatrue}% Para la columna del IVA.
+\DeclareOption{linea}{\lineatrue}% Para la línea que protege el espacio en blanco.
+\DeclareOption{nospanish}{\nospanishtrue}% No carga babel en castellano ni la codificación T1 de las letras.
+\DeclareOption{numitem}{\numitemtrue}% Para poner una columna extra al principio con el número del ítem.
+\DeclareOption{prefactura}{\prefacturatrue}% La prefactura; con el diseño de la forma libre... para enviar por correo electrónico, fax o imprimir preliminarmente.
+\DeclareOption{sincantidad}{\sincantidadtrue}% Para no poner el campo de la cantidad.
+\DeclareOption{sinexpandir}{\sinexpandirtrue}% No expande ninguna de las dos partes de la factura.
+\DeclareOption{sinfirmas}{\sinfirmastrue}% No agrega los espacios para firmar.
+\DeclareOption{sinivaexpresado}{\sinivaexpresadotrue}% Cuando no se cobra IVA y tampoco se quiere que aparezca la totalización del IVA.
+\DeclareOption{siniva}{\sinivatrue}% No cobra IVA.
+\DeclareOption{sinlineashe}{\sinlineashetrue}% Estilo 'sinlineashe'.
+\DeclareOption{sinlineashi}{\sinlineashitrue}% Estilo 'sinlineashi'.
+\DeclareOption{sinlineash}{\sinlineashtrue}% Estilo 'sinlineash'.
+\DeclareOption{sinlineasve}{\sinlineasvetrue}% Estilo 'sinlineasve'.
+\DeclareOption{sinlineasvi}{\sinlineasvitrue}% Estilo 'sinlineasvi'.
+\DeclareOption{sinlineasv}{\sinlineasvtrue}% Estilo 'sinlineasv'.
+\DeclareOption{sinmarcas}{\sinmarcastrue}% Para evitar que aparezcan los caracteres especiales cuando la descripción es larga.
+\DeclareOption{sinnumero}{\sinnumerotrue}% Escribir el texto de la denominación del documento pero sin escribir el número.
+\DeclareOption{sinreverso}{\sinreversotrue}% Para no imprimir el reverso de la factura.
+\DeclareOption{sintotales}{\sintotalestrue}% No escribe los totales al final, por ejemplo para cotizaciones de productos similares.
+\DeclareOption{soloreporte}{\soloreportetrue}% Para imprimir sólo el reporte.
+\DeclareOption{subtotal}{\subtotaltrue}% Para la columna extra del subtotal antes del descuento.
+\DeclareOption{todosiva}{\todosivatrue}% Con esta opción salen todos los IVA así valgan cero.
+\DeclareOption{twoside}{\twosidetrue}% Opción 'twoside' de article para los reportes.
+\DeclareOption{unafirma}{\unafirmatrue}% No agrega el espacio para que firme quien recibe.
+\DeclareOption{vencimiento}{\vencimientotrue}% Escribe fecha de vencimiento, aún con facturas sin crédito.
\ProcessOptions\relax
\LoadClass[12pt]{article}
+%% Cargamos algunos paquetes siempre necesarios.
\RequirePackage{xparse}% Algunos comandos los definimos con \NewDocumentCommand.
\RequirePackage[absolute]{textpos}% Es necesario 'textpos' para colocar texto en ubicaciones arbitrarias.
-\RequirePackage{geometry}% 'geometry' para ajustar todos los márgenes.
\RequirePackage{eso-pic}% Para el comando \AddToShipoutPicture.
\RequirePackage{xstring}% Lo usamos sólo para tomar el menos al principio de una longitud.
\RequirePackage{calc}% 'calc' para hacer aritmética con las dimensiones.
@@ -369,83 +321,254 @@ en la República Bolivariana de Venezuela.
\DTMfdef{ddmmyyyy}#1#2#3#4#5#6#7#8&{\DTMs{#5#6#7#8-#3#4-#1#2}}
\DTMfdef{mm-dd-yyyy}#1-#2-#3&{\DTMs{#3-#1-#2}}
-\AtEndPreamble{\DTMsetstyle{\@FormatoFecha}\DTMsetup{datesep=\@FechaSeparadores}\gdef\DTMinformat{\@FormatoFechaEntrada}}
-\def\@Fecha{\DTMusedate{FechaEmision}}
+\AtEndPreamble{
+ % Establecemos los parámetros y macros relativas a la fecha.
+ \DTMsetstyle{\@FormatoFecha}\DTMsetup{datesep=\@FechaSeparadores}\gdef\DTMinformat{\@FormatoFechaEntrada}
-%% Una vez definido todo en el preámbulo los comandos usados para definir campos servirán para mostrar el campo que se definió con ese comando.
-\AtEndPreamble{%
- \def\RazonSocial{\@RazonSocial}
- \let\Nombre\RazonSocial
- \def\RIF{\@RIF}
- \let\CI\RIF
- \def\Direccion{\@Direccion}
- \def\Telefono{\@Telefono}
- \def\Email{\@Email}
- \def\Contacto{\@Contacto}
- \def\Emisor{\@Emisor}
- \def\Conforme{\@Conforme}
- \def\Proveedor{\@Proveedor}
- \def\Credito{\@Credito}
- \def\Num{\@Num}
- \def\NumSerieControl{\@NumSerieControl}
- \def\NumControl{\@NumControl}
- \def\Condiciones{\@Condiciones}
- \def\Resumen{\@Resumen}
- \def\NotaPrevia{\@NotaPrevia}
- \def\NotaInterna{\@NotaInterna}
- \def\NotaExterna{\@NotaExterna}}
-
-\AtBeginDocument{% Efectúa distintos chequeos.
- \if@reporte
- \ifdefvoid{\@Num}{\CLASSWARNING{No se especificó el número de la factura. Puede dar error si el título del reporte no se especifica que aparezca en las cabeceras}}{}%
- \ifdefvoid{\@Proveedor}{%
- \ifdefvoid{\@Emisor}
- {\CLASSERROR{Hay que definir el nombre del proveedor cuando se emite un reporte}}%
- {\CLASSWARNING{Se toma el emisor como el proveedor por no haberse especificado este último}%
- \let\@Proveedor=\@Emisor}}
- {}%
- \fi
- \ifdefvoid{\@RazonSocial}{\CLASSERROR{Hay que definir la razón social}}{}%
- \if@factura
- \ifdefvoid{\@RIF}{\CLASSERROR{Hay que definir el R.I.F}}{}%
- \ifdefvoid{\@Direccion}{\CLASSERROR{Hay que definir la dirección fiscal}}{}%
- \ifdefvoid{\@Telefono}{\CLASSWARNING{Pudiera definirse un número telefónico}}{}%
- \ifdefvoid{\@Email}{\CLASSWARNING{Pudiera definirse una dirección de correo electrónico}}{}%
- \ifdefvoid{\@Condiciones}{\CLASSWARNING{Pudieran definirse las condiciones del documento}}{}%
- \DTMifsaveddate{FechaEmision}{}{%
- \CLASSWARNING{No se especificó fecha. Asumiendo la fecha de hoy}%
- \DTMsavedate{FechaEmision}{\the\year-\the\month-\the\day}}%
- \if@cotizacion
- \ifdefvoid{\@FondoFactura}{\CLASSWARNING{En la opción para cotizacion se recomienda agregar el fondo}}{}%
- \fi
- \if@prefactura
- \ifdefvoid{\@FondoFactura}{\CLASSWARNING{En la opción para prefactura se recomienda agregar el fondo}}{}%
+ % Tomamos las acciones pertinentes dependiendo de las opciones de la clase (o condicionales activados en el preámbulo que cambian las opciones de la clase)
+ \ifprefactura
+ \ifcotizacion
+ \prefacturafalse
+ \cotizacionfalse
+ \CLASSWARNING{Las opciones 'prefactura' y 'cotizacion' no son compatibles. Sin efecto ambas opciones}
+ \else
+ \denomtrue\setcounter{@Firmas}{0}
\fi
- \if@sinnumero
- \if@cotizacion
+ \fi
+ \ifcotizacion\denomtrue\setcounter{@Firmas}{1}\fi
+
+ \ifsinlineasv\booltrue{SinLineasVertExt}\booltrue{SinLineasVertInt}\fi
+ \ifsinlineasvi\booltrue{SinLineasVertInt}\fi
+ \ifsinlineasve\booltrue{SinLineasVertExt}\fi
+ \ifsinlineash\booltrue{SinLineasHoriExt}\booltrue{SinLineasHoriInt}\fi
+ \ifsinlineashi\booltrue{SinLineasHoriInt}\fi
+ \ifsinlineashe\booltrue{SinLineasHoriExt}\fi
+
+ \ifdosfirmas
+ \setcounter{@Firmas}{2}
+ \ifunafirma
+ \unafirmafalse
+ \ifsinfirmas
+ \sinfirmasfalse
+ \CLASSWARNING{Las opciones para las firmas son excluyentes. Permanece activada 'dosfirmas'}
\else
- \CLASSERROR{La opción para no poner el número sólo es compatible con las cotizaciones}%
+ \CLASSWARNING{Las opciones para las firmas son excluyentes. Permanece activada 'dosfirmas'}
\fi
- \fi
- \if@denom
- \if@sinnumero
- \else
- \ifdefvoid{\@Num}{\CLASSERROR{Hay que definir el número de la factura}}{}%
+ \else
+ \ifsinfirmas
+ \sinfirmasfalse
+ \CLASSWARNING{Las opciones para las firmas son excluyentes. Permanece activada 'dosfirmas'}
\fi
\fi
\fi
- \ifdefvoid{\@Contacto}{\if@Nombre\else\CLASSWARNING{Pudiera definirse una persona de contacto}\fi}{}%
-}
+ \ifunafirma
+ \setcounter{@Firmas}{1}
+ \ifsinfirmas
+ \sinfirmasfalse
+ \CLASSWARNING{Las opciones para las firmas son excluyentes. Permanece activada 'unafirma'}
+ \fi
+ \fi
+ \ifsinfirmas\setcounter{@Firmas}{0}\fi
+
+ \ifdcu
+ \@cdufalse\ducfalse
+ \booltrue{DCU}\boolfalse{DUC}
+ \booltrue{PrimeroDescripcion}
+ \fi
+ \ifduc
+ \ifdcu
+ \boolfalse{PrimeroDescripcion}\boolfalse{DCU}\dcufalse\ducfalse\@cdutrue
+ \CLASSWARNING{Las opciones 'duc' y 'dcu' no son compatibles. Sin efecto ambas opciones}
+ \else
+ \ductrue\@cdufalse\dcufalse
+ \booltrue{DUC}\boolfalse{DCU}
+ \booltrue{PrimeroDescripcion}
+ \fi
+ \fi
+ \ifnumitem\booltrue{NumItem}\fi
+ \ifsincantidad
+ \booltrue{SinCantidad}
+ \ifdcu
+ \dcufalse\@cdutrue\boolfalse{DCU}\boolfalse{PrimeroDescripcion}
+ \CLASSWARNING{La opción 'sincantidad' no es compatible con 'dcu'. Sin efecto opción 'dcu'}
+ \fi
+ \ifduc
+ \ducfalse\@cdutrue\boolfalse{DUC}\boolfalse{PrimeroDescripcion}
+ \CLASSWARNING{La opción 'sincantidad' no es compatible con 'duc'. Sin efecto opción 'duc'}
+ \fi
+ \fi
+ \ifdescuentos\booltrue{Descuentos}\fi
+ \ifiva\impdesctrue\booltrue{IVA}\fi
+ \ifsubtotal
+ \ifdescuentos
+ \booltrue{Subtotal}
+ \else
+ \CLASSWARNING{La opción 'subtotal' no aplica sin descuentos individuales. Sin efecto opción 'subtotal'}
+ \fi
+ \fi
+
+ \ifsinnumero\denomtrue\fi
+ \ifsintotales
+ \iffilas
+ \filasfalse
+ \CLASSWARNING{La opción 'sintotales' no aplica para el modo de totalización en filas. Sin efecto opción 'filas'}
+ \fi
+ \ifcotizacion
+ \else
+ \CLASSWARNING{La opción 'sintotales' no debe usarse en facturas sino en cotizaciones. No es válida una factura sin totales}
+ \fi
+ \fi
+
+ \ifcentrado
+ \iffilas
+ \else
+ \centradofalse
+ \CLASSWARNING{La opción 'centrado' no es compatible con el modo de totalización en columnas. Sin efecto opción 'centrado'}
+ \fi
+ \fi
+ \ifagrupado
+ \iffilas
+ \agrupadofalse
+ \CLASSWARNING{La opción 'agrupado' no es compatible con el modo de totalización en filas. Sin efecto opción 'agrupado'}
+ \fi
+ \fi
+
+ \ifelectro
+ \booltrue{Electro}
+ \gdef\@NotaInterna{\@TextoDescuentoPresidencial}
+ \CLASSWARNING{Ya no está vigente el descuento en la alícuota general. Aplicándolo igual como se pidió}
+ \CLASSINFO{Se estableció el texto aclaratorio del descuento presidencial como 'nota interna'}
+ \iffilas
+ \filasfalse
+ \CLASSWARNING{La opción 'electro' no es compatible con la opción 'filas'. Sin efecto la opción 'filas'}
+ \fi
+ \fi
+
+ \iftodosiva \@BIRtrue \@BIAtrue \@Exentotrue \Gtrue \fi
+ \ifsiniva\AtBeginDocument{\gdef\@ImpuestoG{0}\gdef\@ImpuestoR{0}\gdef\@ImpuestoA{0}}\fi
+ \ifsinivaexpresado
+ \iffilas
+ \filasfalse
+ \CLASSWARNING{La opción 'sinivaexpresado' no es compatible con la opción 'filas'. Sin efecto la opción 'filas'}
+ \else
+ \AtBeginDocument{\gdef\@ImpuestoG{0}\gdef\@ImpuestoR{0}\gdef\@ImpuestoA{0}}
+ \fi
+ \fi
+
+ \iflinea
+ \RequirePackage{zref-savepos}
+ \ifexpandecuadro
+ \else
+ \CLASSWARNING{La opción 'linea' requiere la opción 'expandecuadro'. Activando la opción 'expandecuadro'}
+ \fi
+ \fi
+ \ifsinmarcas \def\@CaracterCR{\mbox{}} \def\@CaracterCeldasVacias{\mbox{}} \fi
+ \ifnospanish
+ \else
+ \RequirePackage[spanish]{babel}% Babel en castellano.
+ \RequirePackage[T1]{fontenc}% Codificación T1 para las tipografías.
+ \IfFileExists{lmodern.sty}{\RequirePackage{lmodern}}{}
+ \fi
+
+ \ifexpandecuadro
+ \ifsinexpandir
+ \expandecuadrofalse
+ \sinexpandirfalse
+ \CLASSWARNING{Las opciones 'expandecuadro' y 'sinexpandir' no son compatibles. Sin efecto ambas opciones}
+ \else
+ \boolfalse{ExpAbajo}
+ \RequirePackage{zref-savepos}[2016/05/21]% Para guardar la posición en 'Y'.
+ \fi
+ \fi
+ \ifsinexpandir\boolfalse{ExpAbajo}\expandecuadrofalse\fi
+
+ \ifsinreverso\@reversofalse\fi
+ \ifconreporte
+ \@reportetrue
+ \ifsoloreporte
+ \soloreportefalse
+ \CLASSWARNING{La opción 'soloreporte' no es compatible con 'conreporte'. Sin efecto 'soloreporte'}
+ \fi
+ \fi
+ \ifsoloreporte\@reportetrue\@facturafalse\@reversofalse\fi
+
+ \if@reporte
+ \RequirePackage{zref-savepos}% Para la firma, que debe ser cargado aquí siempre que hay reporte porque \FirmaReporte no se ejecuta desde el preámbulo.
+ \fi
+ \ifcsv
+ \if@factura
+ \newwrite\csv \immediate\openout\csv=\jobname.csv
+ \ifsintotales\else\AtEndDocument{\@EscribeTotalesEnCSV}\fi
+ \else
+ \csvfalse
+ \CLASSWARNING{La opción 'csv' require generar la factura. Sin efecto opción 'csv'}
+ \fi
+ \fi
+
+ \iftwoside
+ \@twosidetrue\@mparswitchtrue
+ \else
+ \@twosidefalse\@mparswitchfalse
+ \fi
+
+ % Escribimos en el .log las opciones cargadas:
+ \ifagrupado \CLASSINFO{Opción cargada: agrupado}\fi
+ \ifcentradesc \CLASSINFO{Opción cargada: centradesc}\fi
+ \ifcentrado \CLASSINFO{Opción cargada: centrado}\fi
+ \ifconlineasha \CLASSINFO{Opción cargada: conlineasha}\fi
+ \ifconreporte \CLASSINFO{Opción cargada: conreporte}\fi
+ \ifcotizacion \CLASSINFO{Opción cargada: cotizacion}\fi
+ \ifcsv \CLASSINFO{Opción cargada: csv}\fi
+ \ifdcu \CLASSINFO{Opción cargada: dcu}\fi
+ \ifdenom \CLASSINFO{Opción cargada: denom}\fi
+ \ifdescuentos \CLASSINFO{Opción cargada: descuentos}\fi
+ \ifdosfirmas \CLASSINFO{Opción cargada: dosfirmas}\fi
+ \ifduc \CLASSINFO{Opción cargada: duc}\fi
+ \ifelectro \CLASSINFO{Opción cargada: electro}\fi
+ \ifexpandecuadro \CLASSINFO{Opción cargada: expandecuadro}\fi
+ \iffilas \CLASSINFO{Opción cargada: filas}\fi
+ \ifG \CLASSINFO{Opción cargada: G}\fi
+ \ifimpdesc \CLASSINFO{Opción cargada: impdesc}\fi
+ \ifiva \CLASSINFO{Opción cargada: iva}\fi
+ \iflinea \CLASSINFO{Opción cargada: linea}\fi
+ \ifnospanish \CLASSINFO{Opción cargada: nospanish}\fi
+ \ifnumitem \CLASSINFO{Opción cargada: numitem}\fi
+ \ifprefactura \CLASSINFO{Opción cargada: prefactura}\fi
+ \ifsincantidad \CLASSINFO{Opción cargada: sincantidad}\fi
+ \ifsinexpandir \CLASSINFO{Opción cargada: sinexpandir}\fi
+ \ifsinfirmas \CLASSINFO{Opción cargada: sinfirmas}\fi
+ \ifsiniva \CLASSINFO{Opción cargada: siniva}\fi
+ \ifsinivaexpresado \CLASSINFO{Opción cargada: sinivaexpresado}\fi
+ \ifsinlineash \CLASSINFO{Opción cargada: sinlineash}\fi
+ \ifsinlineashe \CLASSINFO{Opción cargada: sinlineashe}\fi
+ \ifsinlineashi \CLASSINFO{Opción cargada: sinlineashi}\fi
+ \ifsinlineasv \CLASSINFO{Opción cargada: sinlineasv}\fi
+ \ifsinlineasve \CLASSINFO{Opción cargada: sinlineasve}\fi
+ \ifsinlineasvi \CLASSINFO{Opción cargada: sinlineasvi}\fi
+ \ifsinmarcas \CLASSINFO{Opción cargada: sinmarcas}\fi
+ \ifsinnumero \CLASSINFO{Opción cargada: sinnumero}\fi
+ \ifsinreverso \CLASSINFO{Opción cargada: sinreverso}\fi
+ \ifsintotales \CLASSINFO{Opción cargada: sintotales}\fi
+ \ifsoloreporte \CLASSINFO{Opción cargada: soloreporte}\fi
+ \ifsubtotal \CLASSINFO{Opción cargada: subtotal}\fi
+ \iftodosiva \CLASSINFO{Opción cargada: todosiva}\fi
+ \iftwoside \CLASSINFO{Opción cargada: twoside}\fi
+ \ifunafirma \CLASSINFO{Opción cargada: unafirma}\fi
+ \ifvencimiento \CLASSINFO{Opción cargada: vencimiento}\fi
+
+ % Cargamos aquí 'geometry' para que sea después de haber establecido 'twoside'.
+ \RequirePackage{geometry}}
%% Escribimos el total como comentario en el .log, y avisamos cuando la fecha no sea la de hoy.
\AtEndDocument{%
- \DTMsavenow{Ahora}%
- \DTMsaveddatediff{FechaEmision}{Ahora}{\AuxFecha}%
+ \DTMifsaveddate{FechaEmision}{%
+ \DTMsavenow{Ahora}%
+ \DTMsaveddatediff{FechaEmision}{Ahora}{\AuxFecha}}{}%
\ifnum\AuxFecha=0%
\else
\CLASSWARNING{Fecha del documento \@Fecha\space distinta de la fecha de hoy}%
\fi
- \if@sintotales
+ \ifsintotales
\else
\if@factura\CLASSINFO{\@@Total: \space\space\space \Moneda \Total}\fi
\fi}
@@ -478,9 +601,12 @@ en la República Bolivariana de Venezuela.
\IfBooleanTF{#1}
{\AtEndPreamble{\DTMsavedate{FechaEmision}{#2-#3-#4}}}
{\AtEndPreamble{\DTMsavedatex{FechaEmision}{#2}}}}
+\def\@Fecha{\DTMusedate{FechaEmision}}
+
\NewDocumentCommand{\FormatoFecha}{o g g}{%
\IfValueT{#1}{\gdef\@FormatoFechaEntrada{#1}}\IfValueT{#2}{\gdef\@FormatoFecha{#2}}\IfValueT{#3}{\gdef\@FechaSeparadores{#3}}}
-\def\Credito#1{\gdef\@Credito{#1}\@vencimientotrue}
+
+\def\Credito#1{\gdef\@Credito{#1}\vencimientotrue}
\def\RazonSocial#1{\gdef\@RazonSocial{#1}}
\def\Nombre#1{\gdef\@RazonSocial{#1}\@Nombretrue}
\def\RIF#1{\gdef\@RIF{#1}}
@@ -543,6 +669,47 @@ en la República Bolivariana de Venezuela.
\NewDocumentCommand{\NotaExterna}{+m}{\gdef\@NotaExterna{#1}}
\AtBeginDocument{%
+ % Efectuamos distintos chequeos.
+ \if@reporte
+ \ifdefvoid{\@Num}{\CLASSWARNING{No se especificó el número de la factura. Puede dar error si el título del reporte no se especifica que aparezca en las cabeceras}}{}%
+ \ifdefvoid{\@Proveedor}{%
+ \ifdefvoid{\@Emisor}
+ {\CLASSERROR{Hay que definir el nombre del proveedor cuando se emite un reporte}}%
+ {\CLASSWARNING{Se toma el emisor como el proveedor por no haberse especificado este último}%
+ \let\@Proveedor=\@Emisor}}
+ {}%
+ \fi
+ \ifdefvoid{\@RazonSocial}{\CLASSERROR{Hay que definir la razón social}}{}%
+ \if@factura
+ \ifdefvoid{\@RIF}{\CLASSERROR{Hay que definir el R.I.F}}{}%
+ \ifdefvoid{\@Direccion}{\CLASSERROR{Hay que definir la dirección fiscal}}{}%
+ \ifdefvoid{\@Telefono}{\CLASSWARNING{Pudiera definirse un número telefónico}}{}%
+ \ifdefvoid{\@Email}{\CLASSWARNING{Pudiera definirse una dirección de correo electrónico}}{}%
+ \ifdefvoid{\@Condiciones}{\CLASSWARNING{Pudieran definirse las condiciones del documento}}{}%
+ \DTMifsaveddate{FechaEmision}{}{%
+ \CLASSWARNING{No se especificó fecha. Asumiendo la fecha de hoy}%
+ \DTMsavedate{FechaEmision}{\the\year-\the\month-\the\day}}%
+ \ifcotizacion
+ \ifdefvoid{\@FondoFactura}{\CLASSWARNING{En la opción para cotizacion se recomienda agregar el fondo}}{}%
+ \fi
+ \ifprefactura
+ \ifdefvoid{\@FondoFactura}{\CLASSWARNING{En la opción para prefactura se recomienda agregar el fondo}}{}%
+ \fi
+ \ifsinnumero
+ \ifcotizacion
+ \else
+ \CLASSERROR{La opción para no poner el número sólo es compatible con las cotizaciones}%
+ \fi
+ \fi
+ \ifdenom
+ \ifsinnumero
+ \else
+ \ifdefvoid{\@Num}{\CLASSERROR{Hay que definir el número de la factura}}{}%
+ \fi
+ \fi
+ \fi
+ \ifdefvoid{\@Contacto}{\if@Nombre\else\CLASSWARNING{Pudiera definirse una persona de contacto}\fi}{}%
+
% El cálculo de la fecha de vencimiento para cuando haya crédito o fecha de vencimiento explícita.
\ifdefvoid{\@Credito}
{\gdef\@FechaVencimiento{\DTMusedate{FechaEmision}}}
@@ -563,7 +730,32 @@ en la República Bolivariana de Venezuela.
\FPupn\@DescuentoGfactor{100 \@DescuentoGporc{} /}%
\FPupn\@DescuentoRfactor{100 \@DescuentoRporc{} /}%
\FPupn\@DescuentoAfactor{100 \@DescuentoAporc{} /}%
- \FPupn\@DescuentoEfactor{100 \@DescuentoEporc{} /}}
+ \FPupn\@DescuentoEfactor{100 \@DescuentoEporc{} /}
+
+ % Una vez definido todo en el preámbulo, los comandos usados para definir campos servirán para mostrar el campo que se definió con ese comando.
+ \def\RazonSocial{\@RazonSocial}%
+ \let\Nombre\RazonSocial
+ \def\RIF{\@RIF}%
+ \let\CI\RIF
+ \def\Direccion{\@Direccion}%
+ \def\Telefono{\@Telefono}%
+ \def\Email{\@Email}%
+ \def\Contacto{\@Contacto}%
+ \def\Emisor{\@Emisor}%
+ \def\Conforme{\@Conforme}%
+ \def\Proveedor{\@Proveedor}%
+ \def\Fecha{\@Fecha}%
+ \def\FechaVencimiento{\@FechaVencimiento}%
+ \def\Credito{\@Credito}%
+ \def\Num{\@Num}%
+ \def\NumSerieControl{\@NumSerieControl}%
+ \def\NumControl{\@NumControl}%
+ \def\Condiciones{\@Condiciones}%
+ \def\Resumen{\@Resumen}%
+ \def\NotaPrevia{\@NotaPrevia}%
+ \def\NotaInterna{\@NotaInterna}%
+ \def\NotaExterna{\@NotaExterna}%
+ \def\TituloReporte{\@TituloReporte}}
%% Posiciones (X,Y) de los objetos: i) fecha, ii) denominación, iii) condiciones, iv) número de control, v) firmas.
\NewDocumentCommand{\PosFecha}{s m m}{
@@ -743,17 +935,18 @@ 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}
- \ifx&#2&\else\setlength{\@FirmaFacturaXcorr}{#2}\fi
- \ifx&#3&\else\setlength{\@FirmaFacturaYcorr}{#3}\fi
- \savebox{\@CajaFirmaEmisor}{#1}
- \AtBeginShipoutNext{%
- \begin{textblock*}{\@TamLineaFirmas}%
- (\textwidth+\oddsidemargin+1in-\@TamLineaFirmas/2-\wd\@CajaFirmaEmisor/2-\@PosFirmasXdos+\@FirmaFacturaXcorr,\@PosFirmasY-\ht\@CajaFirmaEmisor-\dp\@CajaFirmaEmisor+\@FirmaFacturaYcorr)%
- \usebox{\@CajaFirmaEmisor}%
- \end{textblock*}}%
- \fi}
+ \AtEndPreamble{
+ \if@factura
+ \RequirePackage{graphicx}
+ \ifx&#2&\else\setlength{\@FirmaFacturaXcorr}{#2}\fi
+ \ifx&#3&\else\setlength{\@FirmaFacturaYcorr}{#3}\fi
+ \savebox{\@CajaFirmaEmisor}{#1}
+ \AtBeginShipoutNext{%
+ \begin{textblock*}{\@TamLineaFirmas}%
+ (\textwidth+\oddsidemargin+1in-\@TamLineaFirmas/2-\wd\@CajaFirmaEmisor/2-\@PosFirmasXdos+\@FirmaFacturaXcorr,\@PosFirmasY-\ht\@CajaFirmaEmisor-\dp\@CajaFirmaEmisor+\@FirmaFacturaYcorr)%
+ \usebox{\@CajaFirmaEmisor}%
+ \end{textblock*}}%
+ \fi}}
\NewDocumentCommand{\FirmaReporte}{O{} O{0pt} O{0pt} G{\@Proveedor} O{\@FirmaReportePosX} O{\@FirmaReporteExcesoLinea}}{% \Firma[imagen][x-corr][y-corr]{texto}[posición en X desde la derecha][tamaño linea]
\renewcommand{\baselinestretch}{1}\selectfont
@@ -802,20 +995,22 @@ en la República Bolivariana de Venezuela.
%% 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}
- \@FondoFacturatrue
- \gdef\@FondoFactura{#1}
- \fi}
+ \AtEndPreamble{
+ \if@factura
+ \RequirePackage{graphicx}
+ \@FondoFacturatrue
+ \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}{
- \if@reporte
- \@FondoReportetrue
- \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}
+ \AtEndPreamble{
+ \if@reporte
+ \@FondoReportetrue
+ \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}{
@@ -837,43 +1032,11 @@ en la República Bolivariana de Venezuela.
\input{factura.def}% Cargamos los valores predeterminados.
-\if@todosiva
- \@BIRtrue
- \@BIAtrue
- \@Exentotrue
- \@Gtrue
-\fi
-
-\if@csv% Abre el archivo csv.
- \newwrite\csv
- \immediate\openout\csv=\jobname.csv
-\fi
-
-\if@nospanish
-\else
- \RequirePackage[spanish]{babel}% Babel en castellano.
- \RequirePackage[T1]{fontenc}% Codificación T1 para las tipografías.
- \IfFileExists{lmodern.sty}{\RequirePackage{lmodern}}{}
-\fi
-
-\if@expandecuadro
- \RequirePackage{zref-savepos}[2016/05/21]% Para guardar la posición en 'Y'.
-\fi
-
-\if@reporte
- \RequirePackage{zref-savepos}% Para la firma, que debe ser cargado aquí porque \FirmaReporte no se ejecuta desde el preámbulo.
-\fi
-
-\if@sinmarcas
- \def\@CaracterCR{\mbox{}}
- \def\@CaracterCeldasVacias{\mbox{}}
-\fi
-
%% Comando para escribir el encabezado en la factura.
\newcommand\@EncabezadoFactura{%
\ifdefvoid{\@Resumen}{\@EscribeDatos}{\@EscribeDatosResumen}%
\vspace*{\@SeparaVertical}%
- \if@expandecuadro\else\vfill\fi}
+ \ifexpandecuadro\else\vfill\fi}
%% Comando para escribir el encabezado en el reporte.
\newcommand\@EncabezadoReporte{%
@@ -910,11 +1073,11 @@ 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]{%
- \if@impdesc\settowidth{\@TempDimen}{\@EscribeTipoDeImpuesto{#2}}\fi
+ \ifimpdesc\settowidth{\@TempDimen}{\@EscribeTipoDeImpuesto{#2}}\fi
\savebox{\@CajaPrueba}{%
\parbox[t]{\linewidth}{%
\David@XStart
- \if@centradesc\centering\arraybackslash\fi
+ \ifcentradesc\centering\arraybackslash\fi
#1%
\David@XEnd
\ifdim\@TempDimen=0pt%
@@ -922,7 +1085,7 @@ en la República Bolivariana de Venezuela.
\hfill\kern\@SeparaFinLineaDesc\@EscribeTipoDeImpuesto{#2}%
\fi
\par\global\count1=\prevgraf}}%
- \if@sinmarcas
+ \ifsinmarcas
\usebox{\@CajaPrueba}%
\else
\ifnum\count1=1%
@@ -934,7 +1097,7 @@ en la República Bolivariana de Venezuela.
\fi
\parbox[t]{\linewidth-\@TempDimen-\@SeparaFinLineaDesc}{%
\David@XStart
- \if@centradesc\centering\arraybackslash\fi
+ \ifcentradesc\centering\arraybackslash\fi
#1%
\David@XEnd
\par
@@ -943,7 +1106,7 @@ en la República Bolivariana de Venezuela.
\count2=\prevgraf
\loop
\ifnum\count0=\count2
- \if@impdesc
+ \ifimpdesc
\vskip-\baselineskip
\mbox{}\hfill
\rlap{%
@@ -1007,11 +1170,11 @@ en la República Bolivariana de Venezuela.
%% Presentación de totales en modo de columnas.
\newcommand{\@EscribeTotalCol}[1]{%
\expandafter\FPifeq\csname Desc#1\endcsname{0}%
- \if@sinivaexpresado\else\@EscribeTotalColBI{#1}\fi
+ \ifsinivaexpresado\else\@EscribeTotalColBI{#1}\fi
\else
\@EscribeTotalColSubt{#1}%
\@EscribeTotalColDesc{#1}%
- \if@sinivaexpresado\else\@EscribeTotalColBI{#1}\fi
+ \ifsinivaexpresado\else\@EscribeTotalColBI{#1}\fi
\fi}
%% Forma agupada para la presentación de totales en modo de columnas.
@@ -1024,7 +1187,7 @@ en la República Bolivariana de Venezuela.
\if@BIR\if@DescR\@EscribeTotalColDesc{R}\fi\fi
\if@DescG\@EscribeTotalColDesc{G}\fi
\if@BIA\if@DescA\@EscribeTotalColDesc{A}\fi\fi
- \if@sinivaexpresado
+ \ifsinivaexpresado
\else
\if@Exento\@EscribeTotalColBI{E}\fi
\if@BIR\@EscribeTotalColBI{R}\fi
@@ -1040,7 +1203,7 @@ en la República Bolivariana de Venezuela.
\@LetraTitTotales \csname @@BI#1\endcsname
\ifx#1E%
\else
- \if@G\ \hfill(\csname @Alicuota#1porc\endcsname\%)\else\mbox{}\fi
+ \ifG\ \hfill(\csname @Alicuota#1porc\endcsname\%)\else\mbox{}\fi
\fi
& \@LetraNumTotales\numprint{\csname BI#1\endcsname} \\}
@@ -1083,7 +1246,7 @@ en la República Bolivariana de Venezuela.
\newcommand{\@EscribeTotalFilasBIizq}[1]{%
\@LetraTitTotales\csname @@BI#1\endcsname
\ifx#1G%
- \if@G \ (\@AlicuotaGporc\%)\fi% Si hay otra B.I. que no sea general, escribimos el porcentaje explícito en la general.
+ \ifG \ (\@AlicuotaGporc\%)\fi% Si hay otra B.I. que no sea general, escribimos el porcentaje explícito en la general.
\else
\ifx#1E%
\else
@@ -1152,14 +1315,14 @@ en la República Bolivariana de Venezuela.
\hspace*{\@SepTotales}\usebox{\@CajaAliG}%
\if@Exento\hspace*{\@SepTotales}\usebox{\@CajaBIE}\fi
\hspace*{\@SepTotales}\usebox{\@CajaTotal}%
- \if@centrado\hspace*{\@SepTotales}\fi}
+ \ifcentrado\hspace*{\@SepTotales}\fi}
\newcommand{\@EscribeTotalesFilasGxET}{%
\if@BIR\hspace*{\@SepTotales}\usebox{\@CajaBIAliR}\fi
\hspace*{\@SepTotales}\usebox{\@CajaBIAliG}%
\if@BIA\hspace*{\@SepTotales}\usebox{\@CajaBIAliA}\fi
\hspace*{\@SepTotales}\if@Exento\usebox{\@CajaBIET}\else\usebox{\@CajaTotal}\fi
- \if@centrado\hspace*{\@SepTotales}\fi}
+ \ifcentrado\hspace*{\@SepTotales}\fi}
\newcommand{\@EscribeTotalesFilasRGA}{%
\hspace*{\@SepTotales}\usebox{\@CajaBIAliR}%
@@ -1170,12 +1333,12 @@ en la República Bolivariana de Venezuela.
\newcommand{\@EscribeTotalesFilasRGAET}{%
\@EscribeTotalesFilasRGA
\if@Exento\usebox{\@CajaBIET}\else\usebox{\@CajaTotal}\fi
- \if@centrado\hspace*{\@SepTotales}\fi}
+ \ifcentrado\hspace*{\@SepTotales}\fi}
%% 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.
- {\if@G
+ {\ifG
\@LetraTipoIVA
\ifx#1G\@DenomAlicuotaG\fi
\ifx#1R\@DenomAlicuotaR\fi
@@ -1278,23 +1441,6 @@ en la República Bolivariana de Venezuela.
% Novena 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{8}{\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 auxiliar para abrir el '\multicolumn' de la nota interna y evalúe la presencia o no de las barras verticales.
-\edef\@ColumnasMultiColumnNotaIntAuxCmd{%
- \noexpand\multicolumn{8}{\ifbool{SinLineasVertExt}{}{|}l\ifbool{SinLineasVertExt}{}{|}}{%
- \noexpand\parbox[t]{\linewidth-2\tabcolsep-2\arrayrulewidth}{\noexpand\@LetraNotaInterna\noexpand\@NotaInterna\noexpand\strut}}%
- \noexpand\\}
-
%% Comando para hacer los cálculos sobre cada ítem y establecer las macros con el contenido de cada ítem introducido.
\NewDocumentCommand{\@CalculaItem}{m m m o m m}{%
\addtocounter{NumItem}{1}%
@@ -1303,7 +1449,7 @@ en la República Bolivariana de Venezuela.
\ifbool{Descuentos}
{\ifx\\#6\\\FPset\Dcto{0}\else\FPupn\Dcto{#6 \@DigitosPorc{} round clip}\fi}% Fijamos en 0 el descuento si no se especifica en \Item***.
{\FPset\Dcto{#6}%
- \FPifeq\Dcto{0}\else\CLASSWARNING{Se pidió un descuento individual sin dar la opción de la clase 'descuentos'. No se tomará en cuenta.}\fi
+ \FPifeq\Dcto{0}\else\CLASSWARNING{Se pidió un descuento individual sin dar la opción de la clase 'descuentos'. No se tomará en cuenta}\fi
\FPset\Dcto{0}}% También fijamos en 0 el descuento por si se especifica en \Item*** pero no se pide la opción 'descuentos'.
\FPupn\PrecioS{#2 \PrecioU{} * \@DigitosMoneda{} round}%
\FPupn\PrecioT{100 \Dcto{} 100 - / \PrecioS{} * \@DigitosMoneda{} round}%
@@ -1359,502 +1505,519 @@ en la República Bolivariana de Venezuela.
\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@expandecuadro
- \setlength{\@EspacioVacioInicial}{\zposy{EspacioVacioInicial}sp}%
- \setlength{\@EspacioVacioFinal}{\zposy{EspacioVacioFinal}sp}%
- \global\@EspacioVacioInicial=\@EspacioVacioInicial% Hay que globalizarlas
- \global\@EspacioVacioFinal=\@EspacioVacioFinal
- \savebox{\@CajaEspacioVacio}{\parbox[b][\@EspacioVacioInicial-\@EspacioVacioFinal]{0pt}{%
- \if@linea
- \if@LineaCompleta
- \zsaveposy{LineaNodoBCoordY}%
- \else
- \if@LineaHastaTotal
+%% Todo esto tiene que estar dentro de \AtEndPreamble que es cuando \if@factura, \if@reverso e \if@reporte fueron ya aplicadas, y para que se evalúen adecuadamente en su momento las definiciones hechas con \edef.
+\AtEndPreamble{
+ % 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' de la nota interna y evalúe la presencia o no de las barras verticales.
+ \edef\@ColumnasMultiColumnNotaIntAuxCmd{%
+ \noexpand\multicolumn{8}{\ifbool{SinLineasVertExt}{}{|}l\ifbool{SinLineasVertExt}{}{|}}{%
+ \noexpand\parbox[t]{\linewidth-2\tabcolsep-2\arrayrulewidth}{\noexpand\@LetraNotaInterna\noexpand\@NotaInterna\noexpand\strut}}%
+ \noexpand\\}
+
+ % 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{8}{\ifbool{SinLineasVertExt}{}{|} r}\begingroup
+ \noexpand\ifdim \noexpand\ht\noexpand\@CajaEspacioVacio=0pt
+ \noexpand\else
+ \noexpand\iflinea\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 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]{%
+ \ifexpandecuadro
+ \setlength{\@EspacioVacioInicial}{\zposy{EspacioVacioInicial}sp}%
+ \setlength{\@EspacioVacioFinal}{\zposy{EspacioVacioFinal}sp}%
+ \global\@EspacioVacioInicial=\@EspacioVacioInicial% Hay que globalizarlas
+ \global\@EspacioVacioFinal=\@EspacioVacioFinal
+ \savebox{\@CajaEspacioVacio}{\parbox[b][\@EspacioVacioInicial-\@EspacioVacioFinal]{0pt}{%
+ \iflinea
+ \if@LineaCompleta
+ \zsaveposy{LineaNodoBCoordY}%
\else
- \zsaveposx{LineaNodoACoordX}\mbox{}\hfill \zsaveposx{LineaNodoBCoordX}\zsaveposy{LineaNodoBCoordY}%
+ \if@LineaHastaTotal
+ \else
+ \zsaveposx{LineaNodoACoordX}\mbox{}\hfill \zsaveposx{LineaNodoBCoordX}\zsaveposy{LineaNodoBCoordY}%
+ \fi
\fi
- \fi
- \fi}}%
- \ifdim \ht\@CajaEspacioVacio=0pt \global\@lineafalse \fi
- \fi
+ \fi}}%
+ \ifdim \ht\@CajaEspacioVacio=0pt \global\lineafalse \fi
+ \fi
- \ifx\undefined\Total\relax\else\CLASSERROR{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.
- % Gracias a David Carlisle (Thanks to David Carlisle).
- % http://tex.stackexchange.com/questions/111203/tabularx-bottom-alignment-on-r-or-l-columns-when-x-column-wraps
- \def\David@SavePos##1{\leavevmode\pdfsavepos\write\@auxout{\gdef\noexpand##1{\the\pdflastypos sp}}}%
- \def\David@XStart{\expandafter\David@SavePos\csname save@start@\romannumeral\value{NumItem}\endcsname}%
- \def\David@XEnd{\expandafter\David@SavePos\csname save@end@\romannumeral\value{NumItem}\endcsname}%
- \def\David@XPad##1##2##3{%
- \vtop{%
- \baselineskip\normalbaselineskip
- ##2%
- \expandafter
- \ifx\csname save@start@##1\endcsname
- \relax
+ \ifx\undefined\Total\relax\else\CLASSERROR{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.
+ % Gracias a David Carlisle (Thanks to David Carlisle).
+ % http://tex.stackexchange.com/questions/111203/tabularx-bottom-alignment-on-r-or-l-columns-when-x-column-wraps
+ \def\David@SavePos##1{\leavevmode\pdfsavepos\write\@auxout{\gdef\noexpand##1{\the\pdflastypos sp}}}%
+ \def\David@XStart{\expandafter\David@SavePos\csname save@start@\romannumeral\value{NumItem}\endcsname}%
+ \def\David@XEnd{\expandafter\David@SavePos\csname save@end@\romannumeral\value{NumItem}\endcsname}%
+ \def\David@XPad##1##2##3{%
+ \vtop{%
+ \baselineskip\normalbaselineskip
+ ##2%
+ \expandafter
+ \ifx\csname save@start@##1\endcsname
+ \relax
+ \else
+ \dimen@\csname save@start@##1\endcsname\relax
+ \loop
+ \ifdim\dimen@>\csname save@end@##1\endcsname
+ \advance\dimen@-\baselineskip
+ \settowidth{\@TempDimen}{##3}%
+ \ifdim\@TempDimen=0pt\settowidth{\@TempDimen}{##2}\fi
+ \hbox{\parbox{\@TempDimen}{\@CaracterCeldasVacias}}%
+ \repeat
+ \fi
+ ##3}}%
+ \def\David@XLeft##1{\David@XPad{\romannumeral\value{NumItem}}{\hbox{##1}}{}}%
+ \def\David@XRight##1{\David@XPad{\romannumeral\value{NumItem}}{}{\hbox{##1}}}%
+ %
+ % 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 para fijar la separación extra final de cada item, lo cual viene dado por la cantidad de líneas de la descripción,
+ % que está alojado en \count1, definido en \@DescripcionAuxCmd.
+ \def\@CalculaSeparaItemsExtraFinal{%
+ \setlength{\@SeparaItemsExtraFinal}{\numexpr\the\count1\normalbaselineskip-\normalbaselineskip+\@SeparaItemsExtra}%
+ \global\@SeparaItemsExtraFinal=\@SeparaItemsExtraFinal}
+ %
+ % Comando interno general para agregar cualquier ítem.
+ \NewDocumentCommand{\@ITEM}{m m m o m m}{%
+ % 1. [R|G|A|E|X]; 2. cantidad; 3. descripción; 4. descripción para el csv (entre corchetes); 5. p/u; 6. dcto.
+ \@CalculaItem{##1}{##2}{##3}{##5}{##6}%
+ % Si no es el primer ítem, entonces hace falta \\ para terminar el ítem anterior.
+ \ifnum\value{NumItem}=1% Aquí, \@CalculaItem aumenta en 1 el contador NumItem, que si vale 1 significa que aún no hemos procesado la línea 1, es decir, no hay que hacer el salto de línea. La última línea se termina en otro lado.
\else
- \dimen@\csname save@start@##1\endcsname\relax
- \loop
- \ifdim\dimen@>\csname save@end@##1\endcsname
- \advance\dimen@-\baselineskip
- \settowidth{\@TempDimen}{##3}%
- \ifdim\@TempDimen=0pt\settowidth{\@TempDimen}{##2}\fi
- \hbox{\parbox{\@TempDimen}{\@CaracterCeldasVacias}}%
- \repeat
+ \@CalculaSeparaItemsExtraFinal
+ \\[\@SeparaItemsExtraFinal]
+ \ifconlineasha\hline\fi% Líneas para separar cada ítem, si hiciera falta.
\fi
- ##3}}%
- \def\David@XLeft##1{\David@XPad{\romannumeral\value{NumItem}}{\hbox{##1}}{}}%
- \def\David@XRight##1{\David@XPad{\romannumeral\value{NumItem}}{}{\hbox{##1}}}%
- %
- % 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 para fijar la separación extra final de cada item, lo cual viene dado por la cantidad de líneas de la descripción,
- % que está alojado en \count1, definido en \@DescripcionAuxCmd.
- \def\@CalculaSeparaItemsExtraFinal{%
- \setlength{\@SeparaItemsExtraFinal}{\numexpr\the\count1\normalbaselineskip-\normalbaselineskip+\@SeparaItemsExtra}%
- \global\@SeparaItemsExtraFinal=\@SeparaItemsExtraFinal}
- %
- % Comando interno general para agregar cualquier ítem.
- \NewDocumentCommand{\@ITEM}{m m m o m m}{%
- % 1. [R|G|A|E|X]; 2. cantidad; 3. descripción; 4. descripción para el csv (entre corchetes); 5. p/u; 6. dcto.
- \@CalculaItem{##1}{##2}{##3}{##5}{##6}%
- % Si no es el primer ítem, entonces hace falta \\ para terminar el ítem anterior.
- \ifnum\value{NumItem}=1% Aquí, \@CalculaItem aumenta en 1 el contador NumItem, que si vale 1 significa que aún no hemos procesado la línea 1, es decir, no hay que hacer el salto de línea. La última línea se termina en otro lado.
- \else
- \@CalculaSeparaItemsExtraFinal
- \\[\@SeparaItemsExtraFinal]
- \if@conlineasha\hline\fi% Líneas para separar cada ítem, si hiciera falta.
- \fi
- % 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{PrimeroDescripcion}
- {\@DescripcionAuxCmd{##3}{##1}}% dcu y duc.
- {\David@XLeft{\@CantidadAuxCmd{\mbox{}\hfill \@LetraNumeros \numprint{##2}\hfill\mbox{}}}}}% cdu.
- &
- % Tercer campo: Acá puede ir la descripción (cdu), la cantidad (dcu), o el precio unitario (duc).
- \ifbool{PrimeroDescripcion}{%
- \if@dcu
- \David@XRight{\@CantidadAuxCmd{\mbox{}\hfill \@LetraNumeros \numprint{##2}\hfill\mbox{}}}% dcu.
- \else
- \David@XRight{\@PrecioUAuxCmd{%
+ % 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{PrimeroDescripcion}
+ {\@DescripcionAuxCmd{##3}{##1}}% dcu y duc.
+ {\David@XLeft{\@CantidadAuxCmd{\mbox{}\hfill \@LetraNumeros \numprint{##2}\hfill\mbox{}}}}}% cdu.
+ &
+ % Tercer campo: Acá puede ir la descripción (cdu), la cantidad (dcu), o el precio unitario (duc).
+ \ifbool{PrimeroDescripcion}{%
+ \ifdcu
+ \David@XRight{\@CantidadAuxCmd{\mbox{}\hfill \@LetraNumeros \numprint{##2}\hfill\mbox{}}}% dcu.
+ \else
+ \David@XRight{\@PrecioUAuxCmd{%
+ \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
+ \else
+ \ifimpdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioU}
+ \fi}}% duc.
+ \fi}
+ {\@DescripcionAuxCmd{##3}{##1}}% cdu.
+ &
+ % Cuarto campo: Acá puede ir el precio unitario (cdu y dcu) o la cantidad (duc).
+ \FPifeq\PrecioU{##5}\else\CLASSWARNING{Se está introduciendo un precio con más de dos decimales: (##3 - ##5. Redondeado a \PrecioU)}{}\fi% Advertimos cuando el precio unitario tiene más de dos decimales.
+ \ifbool{SinCantidad}{}{%
+ \ifduc
+ \David@XRight{\@CantidadAuxCmd{\mbox{}\hfill \@LetraNumeros \numprint{##2}\hfill\mbox{}}}% duc.
+ \else
+ \David@XRight{\@PrecioUAuxCmd{%
+ \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
+ \else
+ \ifimpdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioU}
+ \fi}}% dcu y cdu.
+ \fi}%
+ & % Quinto -opcional- campo: Subtotal (para luego descuentos).
+ \ifbool{Subtotal}{%
+ \David@XRight{\@PrecioSAuxCmd{%
\ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
\else
- \if@impdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioU}
- \fi}}% duc.
- \fi}
- {\@DescripcionAuxCmd{##3}{##1}}% cdu.
- &
- % Cuarto campo: Acá puede ir el precio unitario (cdu y dcu) o la cantidad (duc).
- \FPifeq\PrecioU{##5}\else\CLASSWARNING{Se está introduciendo un precio con más de dos decimales: (##3 - ##5. Redondeado a \PrecioU)}{}\fi% Advertimos cuando el precio unitario tiene más de dos decimales.
- \ifbool{SinCantidad}{}{%
- \if@duc
- \David@XRight{\@CantidadAuxCmd{\mbox{}\hfill \@LetraNumeros \numprint{##2}\hfill\mbox{}}}% duc.
- \else
- \David@XRight{\@PrecioUAuxCmd{%
+ \ifimpdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioS}
+ \fi}}}{}
+ &
+ % Sexto -opcional- campo: Descuento.
+ \ifbool{Descuentos}{%
+ \David@XRight{\@DescuentoAuxCmd{%
\ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
\else
- \if@impdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioU}
- \fi}}% dcu y cdu.
- \fi}%
- & % Quinto -opcional- campo: Subtotal (para luego descuentos).
- \ifbool{Subtotal}{%
- \David@XRight{\@PrecioSAuxCmd{%
- \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
- \else
- \if@impdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioS}
- \fi}}}{}
- &
- % Sexto -opcional- campo: Descuento.
- \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.
- &
- % Séptimo -opcional- campo: IVA.
- \ifbool{IVA}{%
- \David@XRight{\@IVAAuxCmd{%
+ \mbox{}\hfill \@LetraNumeros \numprint{\Dcto}\%\hfill\mbox{}%
+ \fi}}}{}% Tenemos que usar un condicional booleano porque si no da problemas con el condicional \FPifeq.
+ &
+ % Séptimo -opcional- campo: IVA.
+ \ifbool{IVA}{%
+ \David@XRight{\@IVAAuxCmd{%
+ \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
+ \else
+ \mbox{}\hfill \@LetraNumeros \numprint{\csname @Alicuota##1porc\endcsname}\%\hfill\mbox{}%
+ \fi}}}{}% Tenemos que usar un condicional booleano porque si no da problemas con el condicional \FPifeq.
+ &
+ % Octavo campo: El total.
+ \David@XRight{\@PrecioTAuxCmd{%
\ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}%
\else
- \mbox{}\hfill \@LetraNumeros \numprint{\csname @Alicuota##1porc\endcsname}\%\hfill\mbox{}%
- \fi}}}{}% Tenemos que usar un condicional booleano porque si no da problemas con el condicional \FPifeq.
- &
- % Octavo campo: El total.
- \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
- \IfValueTF{##4}{\@EscribeItemsEnCSV{##1}{##2}{##4}}{\@EscribeItemsEnCSV{##1}{##2}{##3}}%
- \fi}%
- %
- % Comando para escribir en el .csv.
- \newcommand{\@EscribeItemsEnCSV}[3]{%
- \ifbool{SinCantidad}
- {\if@descuentos
- \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}","\PrecioU","\Dcto","\PrecioT","##1"}%
+ \ifimpdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioT}
+ \fi}}%
+ % Escribimos al csv.
+ \ifcsv
+ \IfValueTF{##4}{\@EscribeItemsEnCSV{##1}{##2}{##4}}{\@EscribeItemsEnCSV{##1}{##2}{##3}}%
+ \fi}%
+ %
+ % Comando para escribir en el .csv.
+ \newcommand{\@EscribeItemsEnCSV}[3]{%
+ \ifbool{SinCantidad}
+ {\ifdescuentos
+ \immediate\write\csv{"\unexpanded{##3}","\Dcto","\PrecioT","##1"}%
\else
- \immediate\write\csv{"##2","\unexpanded{##3}","\PrecioU","\PrecioT","##1"}%
+ \immediate\write\csv{"\unexpanded{##3}","\PrecioT","##1"}%
+ \fi}
+ {\if@cdu
+ \ifdescuentos
+ \immediate\write\csv{"##2","\unexpanded{##3}","\PrecioU","\Dcto","\PrecioT","##1"}%
+ \else
+ \immediate\write\csv{"##2","\unexpanded{##3}","\PrecioU","\PrecioT","##1"}%
+ \fi
\fi
- \fi
- \if@dcu
- \if@descuentos
- \immediate\write\csv{"\unexpanded{##3}","##2","\PrecioU","\Dcto","\PrecioT","##1"}%
- \else
- \immediate\write\csv{"\unexpanded{##3}","##2","\PrecioU","\PrecioT","##1"}%
+ \ifdcu
+ \ifdescuentos
+ \immediate\write\csv{"\unexpanded{##3}","##2","\PrecioU","\Dcto","\PrecioT","##1"}%
+ \else
+ \immediate\write\csv{"\unexpanded{##3}","##2","\PrecioU","\PrecioT","##1"}%
+ \fi
\fi
- \fi
- \if@duc
- \if@descuentos
- \immediate\write\csv{"\unexpanded{##3}","\PrecioU","##2","\Dcto","\PrecioT","##1"}%
+ \ifduc
+ \ifdescuentos
+ \immediate\write\csv{"\unexpanded{##3}","\PrecioU","##2","\Dcto","\PrecioT","##1"}%
+ \else
+ \immediate\write\csv{"\unexpanded{##3}","\PrecioU","##2","\PrecioT","##1"}%
+ \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 el número del ítem, si aplicara.
+ \if@LineaDesdeInicio \hspace*{-\tabcolsep}\zsaveposx{LineaNodoACoordX}\hspace*{\tabcolsep}\fi
+ \ifbool{NumItem}{\@NumItemAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@NumItem \hfill\mbox{}}}{}%
+ &
+ % Avanzamos a la cantidad, o la descripción.
+ \ifbool{SinCantidad}{}{\ifbool{PrimeroDescripcion}{\@DescripcionAuxCmd{\@LetraTitColumnas \@@Descripcion}{}}{\@CantidadAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@Cantidad \hfill\mbox{}}}}%
+ &% Avanzamos hasta la descripción, la cantidad o el precio unitario.
+ \ifbool{SinCantidad}{\@DescripcionAuxCmd{\@LetraTitColumnas \@@Descripcion}{}}
+ {\if@cdu \@DescripcionAuxCmd{\@LetraTitColumnas \@@Descripcion}{}\fi
+ \ifdcu \@CantidadAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@Cantidad \hfill\mbox{}}\fi
+ \ifduc \@PrecioUAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@PrecioU \space (\Moneda)\hfill\mbox{}}\fi}%
+ &% Avanzamos hasta el precio unitario, o la cantidad, o columna fantasma cuando es 'sincantidad'.
+ \ifbool{SinCantidad}{}
+ {%
+ \mbox{}\hfill
+ \ifduc
+ \@CantidadAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@Cantidad \hfill\mbox{}}%
\else
- \immediate\write\csv{"\unexpanded{##3}","\PrecioU","##2","\PrecioT","##1"}%
- \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 el número del ítem, si aplicara.
- \if@LineaDesdeInicio \hspace*{-\tabcolsep}\zsaveposx{LineaNodoACoordX}\hspace*{\tabcolsep}\fi
- \ifbool{NumItem}{\@NumItemAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@NumItem \hfill\mbox{}}}{}%
- &
- % Avanzamos a la cantidad, o la descripción.
- \ifbool{SinCantidad}{}{\ifbool{PrimeroDescripcion}{\@DescripcionAuxCmd{\@LetraTitColumnas \@@Descripcion}{}}{\@CantidadAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@Cantidad \hfill\mbox{}}}}%
- &% Avanzamos hasta la descripción, la cantidad o el precio unitario.
- \ifbool{SinCantidad}{\@DescripcionAuxCmd{\@LetraTitColumnas \@@Descripcion}{}}
- {\if@cdu \@DescripcionAuxCmd{\@LetraTitColumnas \@@Descripcion}{}\fi
- \if@dcu \@CantidadAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@Cantidad \hfill\mbox{}}\fi
- \if@duc \@PrecioUAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@PrecioU \space (\Moneda)\hfill\mbox{}}\fi}%
- &% Avanzamos hasta el precio unitario, o la cantidad, o columna fantasma cuando es 'sincantidad'.
- \ifbool{SinCantidad}{}
- {%
- \mbox{}\hfill
- \if@duc
- \@CantidadAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@Cantidad \hfill\mbox{}}%
+ \@PrecioUAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@PrecioU \space (\Moneda)\hfill\mbox{}}%
+ \fi}%
+ &% Avanzamos hasta el subtotal, que puede o no existir,
+ \ifbool{Subtotal}{\@PrecioSAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@PrecioS \space (\Moneda)\hfill\mbox{}}}{}%
+ &% Avanzamos hasta el descuento, que puede o no existir.
+ \ifdescuentos \@DescuentoAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@Descuento \hfill\mbox{}}\fi
+ &% Avanzamos hasta el IVA, que puede o no existir.
+ \ifbool{IVA}{\@IVAAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@IVA \hfill\mbox{}}}{}
+ &% Avanzamos hasta el precio total.
+ \@PrecioTAuxCmd{\mbox{}\hfill \@LetraTitColumnas \ifbool{SinCantidad}{\@@Precio}{\@@PrecioT}\space (\Moneda)\hfill\mbox{}}%
+ \if@LineaCompleta \hspace*{\tabcolsep}\zsaveposx{LineaNodoBCoordX}\hspace*{-\tabcolsep}\fi
+ \\
+ \ifbool{SinLineasHoriInt}{}{\hline}%
+ %
+ #1% Aquí entran todos los items que el usuario declara dentro del ambiente.
+ \@CalculaSeparaItemsExtraFinal
+ \\[\@SeparaItemsExtraFinal]% El último fin de línea se hace aquí.
+ \ifconlineasha\hline\fi% Se verifica si hace falta una línea horizontal o no.
+ \iffilas
+ % Esto en lugar de \ifexpandecuadro para que no se haga una linea vacía en la tabla cuando la caja está vacía.
+ \ifdim \ht\@CajaEspacioVacio=0pt
+ \ifdefvoid{\@NotaInterna}{%
+ \ifbool{SinLineasHoriExt}{}{%
+ \ifconlineasha\else\hline\fi}% Verificamos si hay que poner la línea horizontal. Si está 'conlineasha' ya salió debido a esta opción.
+ }{\@ColumnasMultiColumnNotaIntAuxCmd\ifbool{SinLineasHoriExt}{}{\hline}}%
\else
- \@PrecioUAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@PrecioU \space (\Moneda)\hfill\mbox{}}%
- \fi}%
- &% Avanzamos hasta el subtotal, que puede o no existir,
- \ifbool{Subtotal}{\@PrecioSAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@PrecioS \space (\Moneda)\hfill\mbox{}}}{}%
- &% Avanzamos hasta el descuento, que puede o no existir.
- \if@descuentos \@DescuentoAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@Descuento \hfill\mbox{}}\fi
- &% Avanzamos hasta el IVA, que puede o no existir.
- \ifbool{IVA}{\@IVAAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@IVA \hfill\mbox{}}}{}
- &% Avanzamos hasta el precio total.
- \@PrecioTAuxCmd{\mbox{}\hfill \@LetraTitColumnas \ifbool{SinCantidad}{\@@Precio}{\@@PrecioT}\space (\Moneda)\hfill\mbox{}}%
- \if@LineaCompleta \hspace*{\tabcolsep}\zsaveposx{LineaNodoBCoordX}\hspace*{-\tabcolsep}\fi
- \\
- \ifbool{SinLineasHoriInt}{}{\hline}%
- %
- #1% Aquí entran todos los items que el usuario declara dentro del ambiente.
- \@CalculaSeparaItemsExtraFinal
- \\[\@SeparaItemsExtraFinal]% 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@expandecuadro para que no se haga una linea vacía en la tabla cuando la caja está vacía.
- \ifdim \ht\@CajaEspacioVacio=0pt
- \ifdefvoid{\@NotaInterna}{%
- \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.
- }{\@ColumnasMultiColumnNotaIntAuxCmd\ifbool{SinLineasHoriExt}{}{\hline}}%
- \else
- \ifbool{PrimeroDescripcion}{&\usebox{\@CajaEspacioVacio}&&&&&&\\}{&&\usebox{\@CajaEspacioVacio}&&&&&\\}%
- \ifdefvoid{\@NotaInterna}{}{\@ColumnasMultiColumnNotaIntAuxCmd}%
- \ifbool{SinLineasHoriExt}{}{\hline}% Siempre que hay relleno se pone la línea acá.
- \fi
- \else
- \ifbool{SinLineasHoriInt}{}{\if@conlineasha\else\hline\fi}% Línea que cierra los ítems en la tabla.
- % Agregamos el espacio espúreo.
- \ifdim \ht\@CajaEspacioVacio=0pt
- \else
- % Rellenamos la tabla con espacio espúreo, y le agregamos las lineas externas, si aplica.
- \ifbool{SinLineasVertExt}{\multicolumn{8}{c}{\usebox{\@CajaEspacioVacio}}}{\multicolumn{8}{|c|}{\usebox{\@CajaEspacioVacio}}}\\
- \fi
- % Si pedimos sin totalizaciones, entonces cerramos la tabla ya, si no, calculamos los totales y los escribimos
- \if@sintotales
+ \ifbool{PrimeroDescripcion}{&\usebox{\@CajaEspacioVacio}&&&&&&\\}{&&\usebox{\@CajaEspacioVacio}&&&&&\\}%
+ \ifdefvoid{\@NotaInterna}{}{\@ColumnasMultiColumnNotaIntAuxCmd}%
+ \ifbool{SinLineasHoriExt}{}{\hline}% Siempre que hay relleno se pone la línea acá.
+ \fi
\else
- % 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
+ \ifbool{SinLineasHoriInt}{}{\ifconlineasha\else\hline\fi}% Línea que cierra los ítems en la tabla.
+ % Agregamos el espacio espúreo.
+ \ifdim \ht\@CajaEspacioVacio=0pt
\else
- \if@Exento \@EscribeTotalCol{E}\fi
- \if@BIR\@EscribeTotalCol{R}\if@sinivaexpresado\else\@EscribeTotalColAlicuota{R}\fi\fi
- \@EscribeTotalCol{G}\if@sinivaexpresado\else\@EscribeTotalColAlicuota{G}\fi
- \ifbool{Electro}{\@EscribeTotalColAlicuotaGDesc}{}%
- \if@BIA\@EscribeTotalCol{A}\if@sinivaexpresado\else\@EscribeTotalColAlicuota{A}\fi\fi
+ % Rellenamos la tabla con espacio espúreo, y le agregamos las lineas externas, si aplica.
+ \ifbool{SinLineasVertExt}{\multicolumn{8}{c}{\usebox{\@CajaEspacioVacio}}}{\multicolumn{8}{|c|}{\usebox{\@CajaEspacioVacio}}}\\
\fi
- \if@sinivaexpresado\else\cline{2-2}\fi
- \hfill \@LetraTitTotal\@@Total & \@LetraNumTotal\numprint{\Total}\\
- \end{tabular}\endgroup
- \\
- \ifdefvoid{\@NotaInterna}{}{\@ColumnasMultiColumnNotaIntAuxCmd}%
- \ifbool{SinLineasHoriExt}{}{\hline}%
- \fi
- \fi
- \end{tabularx}%
- %
- % Generamos la macro \Total vacía para que no dé error en algún posible uso dentro del documento.
- \if@sintotales\gdef\Total{}\fi
- % Si pedimos no totalizar (sintotales), la opción filas queda desactivada.
- \if@filas
- \@CalculaTotalesI
- \@LetraNumTotales
- \vspace*{\@SeparaVertical}\par
- \if@expandecuadro\else\vfill\fi
- \@GeneraCajasTotalesFilas
- \newbox{\@CajaTotal}%
- \savebox{\@CajaTotal}{{\@LetraTitTotal\@@Total}: \@LetraNumTotal\numprint{\Total}}%
- %
- \ifnum \value{@IVANoGeneral}=0%
- \newbox{\@CajaGET}%
- \savebox{\@CajaGET}{\@EscribeTotalesFilasGET}%
- \ifdim \the\wd\@CajaGET < \textwidth
- \parbox{\textwidth}{\@EscribeTotalesFilasGET}%
+ % Si pedimos sin totalizaciones, entonces cerramos la tabla ya, si no, calculamos los totales y los escribimos
+ \ifsintotales
\else
- \hspace*{\@SepTotales}%
- \usebox{\@CajaBIAliG}\hspace*{\@SepTotales}%
- \if@Exento\usebox{\@CajaBIET}\else\usebox{\@CajaTotal}\fi
- \if@centrado\hspace*{\@SepTotales}\fi
+ % Modo de columnas: Abrimos la tabla para escribir los totales, y le agregamos las líneas verticales externas, si aplica.
+ \@ColumnasMultiColumnTotalesAuxCmd
+ \@CalculaTotalesI
+ \ifagrupado
+ \@EscribeTotalColAgrupado
+ \else
+ \if@Exento \@EscribeTotalCol{E}\fi
+ \if@BIR\@EscribeTotalCol{R}\ifsinivaexpresado\else\@EscribeTotalColAlicuota{R}\fi\fi
+ \@EscribeTotalCol{G}\ifsinivaexpresado\else\@EscribeTotalColAlicuota{G}\fi
+ \ifbool{Electro}{\@EscribeTotalColAlicuotaGDesc}{}%
+ \if@BIA\@EscribeTotalCol{A}\ifsinivaexpresado\else\@EscribeTotalColAlicuota{A}\fi\fi
+ \fi
+ \ifsinivaexpresado\else\cline{2-2}\fi
+ \hfill \@LetraTitTotal\@@Total & \@LetraNumTotal\numprint{\Total}\\
+ \end{tabular}\endgroup
+ \\
+ \ifdefvoid{\@NotaInterna}{}{\@ColumnasMultiColumnNotaIntAuxCmd}%
+ \ifbool{SinLineasHoriExt}{}{\hline}%
\fi
\fi
- \ifnum \value{@IVANoGeneral}=1%
- \newbox{\@CajaGxET}%
- \savebox{\@CajaGxET}{\@EscribeTotalesFilasGxET}%
- \ifdim \the\wd\@CajaGxET < \textwidth
- \@EscribeTotalesFilasGxET
- \else
- \hspace*{\@SepTotales}%
- \if@BIR\usebox{\@CajaBIAliR}\hspace*{\@SepTotales}\fi
- \usebox{\@CajaBIAliG}\hspace*{\@SepTotales}%
- \if@BIA\usebox{\@CajaBIAliA}\hspace*{\@SepTotales}\fi
- \\[\@SeparaFilas]\mbox{}%
- \if@centrado\hspace*{\@SepTotales}\else\hfill\fi
- \if@Exento\usebox{\@CajaBIE}\hspace*{\@SeparaMinTotales}\fi\usebox{\@CajaTotal}%
- \if@centrado\hspace*{\@SepTotales}\fi
+ \end{tabularx}%
+ %
+ % Generamos la macro \Total vacía para que no dé error en algún posible uso dentro del documento.
+ \ifsintotales\gdef\Total{}\fi
+ % Si pedimos no totalizar (sintotales), la opción filas queda desactivada.
+ \iffilas
+ \@CalculaTotalesI
+ \@LetraNumTotales
+ \vspace*{\@SeparaVertical}\par
+ \ifexpandecuadro\else\vfill\fi
+ \@GeneraCajasTotalesFilas
+ \newbox{\@CajaTotal}%
+ \savebox{\@CajaTotal}{{\@LetraTitTotal\@@Total}: \@LetraNumTotal\numprint{\Total}}%
+ %
+ \ifnum \value{@IVANoGeneral}=0%
+ \newbox{\@CajaGET}%
+ \savebox{\@CajaGET}{\@EscribeTotalesFilasGET}%
+ \ifdim \the\wd\@CajaGET < \textwidth
+ \parbox{\textwidth}{\@EscribeTotalesFilasGET}%
+ \else
+ \hspace*{\@SepTotales}%
+ \usebox{\@CajaBIAliG}\hspace*{\@SepTotales}%
+ \if@Exento\usebox{\@CajaBIET}\else\usebox{\@CajaTotal}\fi
+ \ifcentrado\hspace*{\@SepTotales}\fi
+ \fi
\fi
- \fi
- \ifnum \value{@IVANoGeneral}=2%
- \newbox{\@CajaRGAET}%
- \savebox{\@CajaRGAET}{\@EscribeTotalesFilasRGAET}%
- \ifdim \the\wd\@CajaRGAET < \textwidth
- \@EscribeTotalesFilasRGAET
- \else
- \newbox{\@CajaRGA}%
- \savebox{\@CajaRGA}{\@EscribeTotalesFilasRGA}%
- \ifdim \the\wd\@CajaRGA < \textwidth
- \@EscribeTotalesFilasRGA
+ \ifnum \value{@IVANoGeneral}=1%
+ \newbox{\@CajaGxET}%
+ \savebox{\@CajaGxET}{\@EscribeTotalesFilasGxET}%
+ \ifdim \the\wd\@CajaGxET < \textwidth
+ \@EscribeTotalesFilasGxET
+ \else
+ \hspace*{\@SepTotales}%
+ \if@BIR\usebox{\@CajaBIAliR}\hspace*{\@SepTotales}\fi
+ \usebox{\@CajaBIAliG}\hspace*{\@SepTotales}%
+ \if@BIA\usebox{\@CajaBIAliA}\hspace*{\@SepTotales}\fi
\\[\@SeparaFilas]\mbox{}%
- \if@centrado\hspace*{\@SepTotales}\else\hfill\fi
+ \ifcentrado\hspace*{\@SepTotales}\else\hfill\fi
\if@Exento\usebox{\@CajaBIE}\hspace*{\@SeparaMinTotales}\fi\usebox{\@CajaTotal}%
- \if@centrado\hspace*{\@SepTotales}\fi
- \else% Aquí casi cualquier cosa tiene aspecto feo.
- \CLASSWARNING{Es mejor no usar la opción de totalización en filas en este caso, o disminuir los tamaños de los tipos de letra para la totalización}%
- \centering{%
- \begin{tabular}{r@{\hspace*{\@SeparaMinTotales}}l}
- \usebox{\@CajaBIAliR} & \usebox{\@CajaBIAliA} \\[\@SeparaFilas]
- \usebox{\@CajaBIAliG} & \if@Exento\usebox{\@CajaBIET}\else\usebox{\@CajaTotal}\fi
- \end{tabular}}%
+ \ifcentrado\hspace*{\@SepTotales}\fi
\fi
\fi
- \fi
- \fi
- \par
- \if@expandecuadro
- \vspace*{-\@EspacioVacioInicial}%
- \vspace*{\@EspacioVacioFinal}%
- \zsaveposy{EspacioVacioInicial}%
- \fi
- \vfill
- \if@expandecuadro\zsaveposy{EspacioVacioFinal}\fi
- \vspace*{\@SeparaVertical}\par
- \ifdefvoid{\@NotaExterna}{}{\parbox[t]{\linewidth}{\@LetraNotaExterna\@NotaExterna}\vspace*{\@SeparaVertical}\par}}
-
- \ifbool{SinCantidad}
- % Definamos todos los comandos \Item***. El descuento es opcional; por eso usamos G{0} en \NewDocumentCommand.
- {%
- \NewDocumentCommand{\Item}{m o m G{0}}{\@ITEM{G}{1}{#1}[#2]{#3}{#4}}% Ítem normal.
- \NewDocumentCommand{\ItemR}{m o m G{0}}{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{1}{#1}[#2]{#3}{#4}}% Ítem con IVA reducido.
- \NewDocumentCommand{\ItemA}{m o m G{0}}{\global\@BIAtrue\global\@Gtrue\@ITEM{A}{1}{#1}[#2]{#3}{#4}}% Ítem con IVA adicional.
- \NewDocumentCommand{\ItemE}{m o m G{0}}{\global\@Exentotrue\global\@Gtrue\@ITEM{E}{1}{#1}[#2]{#3}{#4}}% Ítem exento de IVA.
- \NewDocumentCommand{\ItemX}{m o}{\@ITEM{X}{1}{#1}[#2]{0}{0}}% Ítem sin precio.
- \let\ItemG\Item
- \if@csv
- \if@descuentos
- \immediate\write\csv{"\@@Descripcion","\@@Descuento","\@@Precio \space (\Moneda)","\@@IVA"}%
- \else
- \immediate\write\csv{"\@@Descripcion","\@@Precio \space (\Moneda)","\@@IVA"}%
- \fi
- \fi}
- {%
- \NewDocumentCommand{\Item}{m m o m G{0}}{\@ITEM{G}{#1}{#2}[#3]{#4}{#5}}% Ítem normal.
- \NewDocumentCommand{\ItemR}{m m o m G{0}}{\global\@BIRtrue\global\@Gtrue\@ITEM{R}{#1}{#2}[#3]{#4}{#5}}% Ítem con IVA reducido.
- \NewDocumentCommand{\ItemA}{m m o m G{0}}{\global\@BIAtrue\global\@Gtrue\@ITEM{A}{#1}{#2}[#3]{#4}{#5}}% Ítem con IVA adicional.
- \NewDocumentCommand{\ItemE}{m m o m G{0}}{\global\@Exentotrue\global\@Gtrue\@ITEM{E}{#1}{#2}[#3]{#4}{#5}}% Ítem exento de IVA.
- \NewDocumentCommand{\ItemX}{m m o}{\@ITEM{X}{#1}{#2}[#3]{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)","\@@IVA"}%
+ \ifnum \value{@IVANoGeneral}=2%
+ \newbox{\@CajaRGAET}%
+ \savebox{\@CajaRGAET}{\@EscribeTotalesFilasRGAET}%
+ \ifdim \the\wd\@CajaRGAET < \textwidth
+ \@EscribeTotalesFilasRGAET
\else
- \immediate\write\csv{"\@@Cantidad","\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@PrecioT \space (\Moneda)","\@@IVA"}%
+ \newbox{\@CajaRGA}%
+ \savebox{\@CajaRGA}{\@EscribeTotalesFilasRGA}%
+ \ifdim \the\wd\@CajaRGA < \textwidth
+ \@EscribeTotalesFilasRGA
+ \\[\@SeparaFilas]\mbox{}%
+ \ifcentrado\hspace*{\@SepTotales}\else\hfill\fi
+ \if@Exento\usebox{\@CajaBIE}\hspace*{\@SeparaMinTotales}\fi\usebox{\@CajaTotal}%
+ \ifcentrado\hspace*{\@SepTotales}\fi
+ \else% Aquí casi cualquier cosa tiene aspecto feo.
+ \CLASSWARNING{Es mejor no usar la opción de totalización en filas en este caso, o disminuir los tamaños de los tipos de letra para la totalización}%
+ \centering{%
+ \begin{tabular}{r@{\hspace*{\@SeparaMinTotales}}l}
+ \usebox{\@CajaBIAliR} & \usebox{\@CajaBIAliA} \\[\@SeparaFilas]
+ \usebox{\@CajaBIAliG} & \if@Exento\usebox{\@CajaBIET}\else\usebox{\@CajaTotal}\fi
+ \end{tabular}}%
+ \fi
\fi
\fi
- \if@dcu
- \if@descuentos
- \immediate\write\csv{"\@@Descripcion","\@@Cantidad","\@@PrecioU \space (\Moneda)","\@@Descuento","\@@PrecioT \space (\Moneda)","\@@IVA"}%
+ \fi
+ \par
+ \ifexpandecuadro
+ \vspace*{-\@EspacioVacioInicial}%
+ \vspace*{\@EspacioVacioFinal}%
+ \zsaveposy{EspacioVacioInicial}%
+ \fi
+ \vfill
+ \ifexpandecuadro\zsaveposy{EspacioVacioFinal}\fi
+ \vspace*{\@SeparaVertical}\par
+ \ifdefvoid{\@NotaExterna}{}{\parbox[t]{\linewidth}{\@LetraNotaExterna\@NotaExterna}\vspace*{\@SeparaVertical}\par}}
+
+ \ifbool{SinCantidad}
+ % Definamos todos los comandos \Item***. El descuento es opcional; por eso usamos G{0} en \NewDocumentCommand.
+ {%
+ \NewDocumentCommand{\Item}{m o m G{0}}{\@ITEM{G}{1}{#1}[#2]{#3}{#4}}% Ítem normal.
+ \NewDocumentCommand{\ItemR}{m o m G{0}}{\global\@BIRtrue\global\Gtrue\@ITEM{R}{1}{#1}[#2]{#3}{#4}}% Ítem con IVA reducido.
+ \NewDocumentCommand{\ItemA}{m o m G{0}}{\global\@BIAtrue\global\Gtrue\@ITEM{A}{1}{#1}[#2]{#3}{#4}}% Ítem con IVA adicional.
+ \NewDocumentCommand{\ItemE}{m o m G{0}}{\global\@Exentotrue\global\Gtrue\@ITEM{E}{1}{#1}[#2]{#3}{#4}}% Ítem exento de IVA.
+ \NewDocumentCommand{\ItemX}{m o}{\@ITEM{X}{1}{#1}[#2]{0}{0}}% Ítem sin precio.
+ \let\ItemG\Item
+ \ifcsv
+ \ifdescuentos
+ \immediate\write\csv{"\@@Descripcion","\@@Descuento","\@@Precio \space (\Moneda)","\@@IVA"}%
\else
- \immediate\write\csv{"\@@Descripcion","\@@Cantidad","\@@PrecioU \space (\Moneda)","\@@PrecioT \space (\Moneda)","\@@IVA"}%
+ \immediate\write\csv{"\@@Descripcion","\@@Precio \space (\Moneda)","\@@IVA"}%
+ \fi
+ \fi}
+ {%
+ \NewDocumentCommand{\Item}{m m o m G{0}}{\@ITEM{G}{#1}{#2}[#3]{#4}{#5}}% Ítem normal.
+ \NewDocumentCommand{\ItemR}{m m o m G{0}}{\global\@BIRtrue\global\Gtrue\@ITEM{R}{#1}{#2}[#3]{#4}{#5}}% Ítem con IVA reducido.
+ \NewDocumentCommand{\ItemA}{m m o m G{0}}{\global\@BIAtrue\global\Gtrue\@ITEM{A}{#1}{#2}[#3]{#4}{#5}}% Ítem con IVA adicional.
+ \NewDocumentCommand{\ItemE}{m m o m G{0}}{\global\@Exentotrue\global\Gtrue\@ITEM{E}{#1}{#2}[#3]{#4}{#5}}% Ítem exento de IVA.
+ \NewDocumentCommand{\ItemX}{m m o}{\@ITEM{X}{#1}{#2}[#3]{0}{0}}% Ítem sin precio.
+ \let\ItemG\Item
+ \ifcsv
+ \if@cdu
+ \ifdescuentos
+ \immediate\write\csv{"\@@Cantidad","\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@Descuento","\@@PrecioT \space (\Moneda)","\@@IVA"}%
+ \else
+ \immediate\write\csv{"\@@Cantidad","\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@PrecioT \space (\Moneda)","\@@IVA"}%
+ \fi
+ \fi
+ \ifdcu
+ \ifdescuentos
+ \immediate\write\csv{"\@@Descripcion","\@@Cantidad","\@@PrecioU \space (\Moneda)","\@@Descuento","\@@PrecioT \space (\Moneda)","\@@IVA"}%
+ \else
+ \immediate\write\csv{"\@@Descripcion","\@@Cantidad","\@@PrecioU \space (\Moneda)","\@@PrecioT \space (\Moneda)","\@@IVA"}%
+ \fi
\fi
+ \ifduc
+ \ifdescuentos
+ \immediate\write\csv{"\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@Cantidad","\@@Descuento","\@@PrecioT \space (\Moneda)","\@@IVA"}%
+ \else
+ \immediate\write\csv{"\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@Cantidad","\@@PrecioT \space (\Moneda)","\@@IVA"}%
+ \fi
+ \fi
+ \fi}
+
+ \if@factura
+ % Los descuentos totales no son compatibles -y no creo que lo vayan a ser- con el modo de totalización en filas.
+ \iffilas
+ \if@DescuentoTotal
+ \CLASSWARNING{La opción 'filas' no es compatible con los descuentos totales; sin efecto opción 'filas'}
+ \filasfalse
\fi
- \if@duc
- \if@descuentos
- \immediate\write\csv{"\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@Cantidad","\@@Descuento","\@@PrecioT \space (\Moneda)","\@@IVA"}%
+ \fi
+ \if@reverso
+ \else
+ \RenewEnviron{reverso}{}
+ \fi
+ \ifcotizacion\def\@Denominacion{\@@DenomCotiza}\else\def\@Denominacion{\@@DenomFactura}\fi% Fijamos la denominación del documento paras las cotizaciones o facturas, que son casos particulares del modo 'factura'.
+ \expandafter\geometry\expandafter{\@GeometriaFactura}% La geometría debe aplicarse aquí.
+ \AfterEndPreamble{%
+ \addtolength{\@PosFechaX}{\oddsidemargin+1in}% Le sumamos el margen izquierdo a las posiciones de las cosas; es importante que se haga en un \AfterEndPreamble antes de que empiecen a escribirse otras cosas en la página.
+ \addtolength{\@PosDenomX}{\oddsidemargin+1in}%
+ \addtolength{\@PosControlX}{\oddsidemargin+1in}%
+ \addtolength{\@PosCondicionesX}{\oddsidemargin+1in}%
+ \addtolength{\@PosFirmasXuno}{\oddsidemargin+1in}%
+ \setlength{\parindent}{0pt}%
+ \setlength{\lineskip}{0pt}%
+ \setlength{\parskip}{0pt plus 1pt}%
+ \expandafter\setlength{\@SepTotales}{\the\@SeparaMinTotales plus 1fill}% \@SeparaMinTotales es el mínimo espacio entre los totales en el modo 'filas', y SepTotales es una dimensión interna, estirable, con ese como su mínimo.
+ \thispagestyle{empty}%
+ \pagenumbering{roman}%
+ \@EncabezadoFactura
+ \@EscribeNotaPrevia}
+ \AtBeginShipoutNext{% Antes abría aquí un \AtBeginShipoutNext cuando había reporte y un \AtEndDocument cuando no. No es necesario eso. También lo modifiqué en \FirmaFactura.
+ \@CargaFondoFactura
+ \@PosicionaFechas
+ \ifdenom\@PosicionaDenom\fi
+ \ifprefactura\@PosicionaNumControl\fi
+ \ifnum\value{@Firmas}=0\else\@PosicionaFirmas\fi
+ \ifdefvoid{\@Condiciones}{}{\@PosicionaCondiciones}}
+ \iflinea
+ % Para determinar las coordenadas de la línea hay que usar \AtBeginShipoutNext porque si no se hace en el 'shipout' de la página se genera un espacio en blanco extra.
+ \AtBeginShipoutNext{\iflinea\@DibujaLinea\fi}
+ \iffilas
+ \ifbool{SinLineasVertInt}{\@LineaCompletatrue}
\else
- \immediate\write\csv{"\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@Cantidad","\@@PrecioT \space (\Moneda)","\@@IVA"}%
+ \@LineaHastaTotaltrue\@LineaDesdeIniciotrue
\fi
- \fi
- \fi}
-
-\if@factura
- % Los descuentos totales no son compatibles -y no creo que lo vayan a ser- con el modo de totalización en filas.
- \if@filas
- \if@DescuentoTotal
- \CLASSWARNING{La opción 'filas' no es compatible con los descuentos totales; sin efecto opción 'filas'}
- \@filasfalse
\fi
- \fi
- \if@reverso
- \else
- \RenewEnviron{reverso}{}
- \fi
- \if@cotizacion\def\@Denominacion{\@@DenomCotiza}\else\def\@Denominacion{\@@DenomFactura}\fi% Fijamos la denominación del documento paras las cotizaciones o facturas, que son casos particulares del modo 'factura'.
- \AtEndPreamble{\expandafter\geometry\expandafter{\@GeometriaFactura}}% La geometría debe aplicarse aquí.
- \AtBeginDocument{%
- \addtolength{\@PosFechaX}{\oddsidemargin+1in}% Le sumamos el margen izquierdo a las posiciones de las cosas; importante que se haga en un \AtBeginDocument antes de que empiecen a escribirse otras cosas que también se agregan a \AtBeginDocument.
- \addtolength{\@PosDenomX}{\oddsidemargin+1in}%
- \addtolength{\@PosControlX}{\oddsidemargin+1in}%
- \addtolength{\@PosCondicionesX}{\oddsidemargin+1in}%
- \addtolength{\@PosFirmasXuno}{\oddsidemargin+1in}%
- \setlength{\parindent}{0pt}%
- \setlength{\lineskip}{0pt}%
- \setlength{\parskip}{0pt plus 1pt}%
- \expandafter\setlength{\@SepTotales}{\the\@SeparaMinTotales plus 1fill}% \@SeparaMinTotales es el mínimo espacio entre los totales en el modo 'filas', y SepTotales es una dimensión interna, estirable, con ese como su mínimo.
- \thispagestyle{empty}%
- \pagenumbering{roman}%
- \@EncabezadoFactura
- \@EscribeNotaPrevia}
- \AtBeginShipoutNext{% Antes abría aquí un \AtBeginShipoutNext cuando había reporte y un \AtEndDocument cuando no. No es necesario eso. También lo modifiqué en \FirmaFactura.
- \@CargaFondoFactura
- \@PosicionaFechas
- \if@denom\@PosicionaDenom\fi
- \if@prefactura\@PosicionaNumControl\fi
- \if@sinfirmas\else\@PosicionaFirmas\fi
- \ifdefvoid{\@Condiciones}{}{\@PosicionaCondiciones}}
- \if@linea
- \RequirePackage{zref-savepos}
- % Para determinar las coordenadas de la línea hay que 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}{\@LineaCompletatrue}
- \else
- \@LineaHastaTotaltrue\@LineaDesdeIniciotrue
- \fi
- \fi
- %% El comando para la descripción del servicio prestado.
- \NewDocumentCommand{\Descripcion}{+m}{%
- {% Abrimos un grupo adicional para que la redefinición del entorno 'tikzpicture' sea local.
- \@LetraDescripcion
- % Cuando la línea tiene grosor cero, hacemos que el entorno 'tikzpicture' sea "fake", y redefinimos \node para que obvie los parámetros que le dimos como argumento opcional.
- \ifdim\@GrosorLineaDescripcion=0pt%
- \setlength{\@SeparaInternaDescripcion}{0pt}\setlength{\@EsquinaLineaDescripcion}{0pt}\setlength{\@SombraDescripcion}{0pt}%
- \renewenvironment{tikzpicture}{\NewDocumentCommand{\node}{o +m}{####2}}{}%
- \fi
- \begin{tikzpicture}
- % Expandimos después para poderle pasar el contenido de la macro como argumento opcional a \node.
- \expandafter\node\expandafter[\@DescripcionTIKZ]{%
- \ifbool{ExpAbajo}
- {\parbox[t][\textheight-\pagetotal-2\@SeparaInternaDescripcion-\@GrosorLineaDescripcion-\@SombraDescripcion]
- {\textwidth-2\@SeparaInternaDescripcion-\@GrosorLineaDescripcion-\@SombraDescripcion}}%
- {\parbox[t]{\textwidth-\@SombraDescripcion-2\@SeparaInternaDescripcion-2\@GrosorLineaDescripcion}}%
- {\setlength{\parindent}{0.5cm}%
- \setlength{\parskip}{2pt plus 8pt}%
- \ifbool{ExpAbajo}{\vfill}{}%
- #1%
- \ifbool{ExpAbajo}{\vfill}{}}}%
- \ifdim\@GrosorLineaDescripcion=0pt\else ;\fi% El fin del nodo va cuando hay el entorno tikzpicture original.
- \end{tikzpicture}
- \par\vspace*{\@SombraDescripcion}}}%
-\else
- \RenewEnviron{factura}{%
- \@ZERO
- \let\label\label@factura
- \let\@ITEM\@CalculaItem
- \BODY
- \@CalculaTotalesI}
- \RenewEnviron{reverso}{}
- \NewDocumentCommand{\Descripcion}{+m}{}
-\fi
-
-\if@reporte
- \ifdefvoid{\@InfoPagina}{\let\@InfoPagina\@InfoPaginaNoTitulo}{}%
- \if@factura
+ %% El comando para la descripción del servicio prestado.
+ \NewDocumentCommand{\Descripcion}{+m}{%
+ {% Abrimos un grupo adicional para que la redefinición del entorno 'tikzpicture' sea local.
+ \@LetraDescripcion
+ % Cuando la línea tiene grosor cero, hacemos que el entorno 'tikzpicture' sea "fake", y redefinimos \node para que obvie los parámetros que le dimos como argumento opcional.
+ \ifdim\@GrosorLineaDescripcion=0pt%
+ \setlength{\@SeparaInternaDescripcion}{0pt}\setlength{\@EsquinaLineaDescripcion}{0pt}\setlength{\@SombraDescripcion}{0pt}%
+ \renewenvironment{tikzpicture}{\NewDocumentCommand{\node}{o +m}{####2}}{}%
+ \fi
+ \begin{tikzpicture}
+ % Expandimos después para poderle pasar el contenido de la macro como argumento opcional a \node.
+ \expandafter\node\expandafter[\@DescripcionTIKZ]{%
+ \ifbool{ExpAbajo}
+ {\parbox[t][\textheight-\pagetotal-2\@SeparaInternaDescripcion-\@GrosorLineaDescripcion-\@SombraDescripcion]
+ {\textwidth-2\@SeparaInternaDescripcion-\@GrosorLineaDescripcion-\@SombraDescripcion}}%
+ {\parbox[t]{\textwidth-\@SombraDescripcion-2\@SeparaInternaDescripcion-2\@GrosorLineaDescripcion}}%
+ {\setlength{\parindent}{0.5cm}%
+ \setlength{\parskip}{2pt plus 8pt}%
+ \ifbool{ExpAbajo}{\vfill}{}%
+ #1%
+ \ifbool{ExpAbajo}{\vfill}{}}}%
+ \ifdim\@GrosorLineaDescripcion=0pt\else ;\fi% El fin del nodo va cuando hay el entorno tikzpicture original.
+ \end{tikzpicture}
+ \par\vspace*{\@SombraDescripcion}}}%
\else
- \AtEndPreamble{%
- \expandafter\geometry\expandafter{\@GeometriaReporte}}% La geometría del reporte debe aplicarse aquí cuando sólo hay reporte, así se puede establecer el tamaño del papel.
+ \RenewEnviron{factura}{%
+ \@ZERO
+ \let\label\label@factura
+ \let\@ITEM\@CalculaItem
+ \BODY
+ \@CalculaTotalesI}
+ \RenewEnviron{reverso}{}
+ \NewDocumentCommand{\Descripcion}{+m}{}
\fi
- \NewEnviron{reporte}{%
+
+ \if@reporte
+ \ifdefvoid{\@InfoPagina}{\let\@InfoPagina\@InfoPaginaNoTitulo}{}%
\if@factura
- \expandafter\newgeometry\expandafter{\@GeometriaReporte}\cleardoublepage% La geometría debe aplicarse aquí cuando también hay factura, pero no se puede cambiar el tamaño del papel.
+ \else
+ \expandafter\geometry\expandafter{\@GeometriaReporte}% La geometría del reporte debe aplicarse aquí cuando sólo hay reporte, así se puede establecer el tamaño del papel.
\fi
- \let\headwidth\textwidth
- \@CargaFondoReporte
- \@EncabezadoReporte
- \ifdefvoid{\@EstiloPagReporteResto}{%
- \if@FondoReporteStar% Si no usamos \EstiloPagReporte entonces se fijará 'soloabajo' cuando se use \FondoReporte* para que sólo use marcas de pie de página, y si no se usó \FondoReporte* entonces se fijará 'plain' que usa cabeceras y pies de página.
- \pagestyle{soloabajo}%
- \else
- \pagestyle{plain}%
- \fi}
- {\pagestyle{\@EstiloPagReporteResto}}% Si usamos \EstiloPagReporte en su argumento obligatorio entonces fijamos ese estilo de página.
- \ifdefvoid{\@EstiloPagReporteUno}{%
- \if@FondoReporte% Si no le damos a \EstiloPagReporte su argumento opcional, entonces se fijará 'solonumpag' como el estilo de página para la primera página, pero solamente si usamos \FondoReporte, ya que el estilo de página predeterminado al usar \FondoReporte* ya se acaba de fijar y no necesita el caso especial de la primera hoja (\thispagestyle).
- \if@FondoReporteStar
+ \NewEnviron{reporte}{%
+ \if@factura
+ \expandafter\newgeometry\expandafter{\@GeometriaReporte}\cleardoublepage% La geometría debe aplicarse aquí cuando también hay factura, pero no se puede cambiar el tamaño del papel.
+ \fi
+ \let\headwidth\textwidth
+ \@CargaFondoReporte
+ \@EncabezadoReporte
+ \ifdefvoid{\@EstiloPagReporteResto}{%
+ \if@FondoReporteStar% Si no usamos \EstiloPagReporte entonces se fijará 'soloabajo' cuando se use \FondoReporte* para que sólo use marcas de pie de página, y si no se usó \FondoReporte* entonces se fijará 'plain' que usa cabeceras y pies de página.
+ \pagestyle{soloabajo}%
\else
- \thispagestyle{solonumpag}%
- \fi
- \fi}
- {\thispagestyle{\@EstiloPagReporteUno}}% Si usamoe el argumento opcional de \EstiloPagReporte establecemos ese estilo de página.
- \pagenumbering{arabic}%
- \setlength{\parindent}{0.666cm}%
- \setlength{\parskip}{4pt plus 6pt minus 2pt}% separación entre párrafos en el reporte.
- \vskip\baselineskip
- \BODY\clearpage}% espacio antes de empezar con el reporte, después del título -si lo hubiera-.
-\else
- \NewEnviron{reporte}{}
-\fi
+ \pagestyle{plain}%
+ \fi}
+ {\pagestyle{\@EstiloPagReporteResto}}% Si usamos \EstiloPagReporte en su argumento obligatorio entonces fijamos ese estilo de página.
+ \ifdefvoid{\@EstiloPagReporteUno}{%
+ \if@FondoReporte% Si no le damos a \EstiloPagReporte su argumento opcional, entonces se fijará 'solonumpag' como el estilo de página para la primera página, pero solamente si usamos \FondoReporte, ya que el estilo de página predeterminado al usar \FondoReporte* ya se acaba de fijar y no necesita el caso especial de la primera hoja (\thispagestyle).
+ \if@FondoReporteStar
+ \else
+ \thispagestyle{solonumpag}%
+ \fi
+ \fi}
+ {\thispagestyle{\@EstiloPagReporteUno}}% Si usamoe el argumento opcional de \EstiloPagReporte establecemos ese estilo de página.
+ \pagenumbering{arabic}%
+ \setlength{\parindent}{0.666cm}%
+ \setlength{\parskip}{4pt plus 6pt minus 2pt}% separación entre párrafos en el reporte.
+ \vskip\baselineskip
+ \BODY\clearpage}% espacio antes de empezar con el reporte, después del título -si lo hubiera-.
+ \else
+ \NewEnviron{reporte}{}
+ \fi}
%% Comando para el diseño de la forma libre.
\newcommand{\@CargaFondoFactura}{%
@@ -1995,7 +2158,7 @@ en la República Bolivariana de Venezuela.
\ifdim\@GrosorLineaNotaPrevia=0pt\else ;\fi
\end{tikzpicture}%
\par\vspace*{\@SombraNotaPrevia}\vspace*{\@SeparaVertical}%
- \if@expandecuadro\else\vfill\fi}}}
+ \ifexpandecuadro\else\vfill\fi}}}
%% Comando que coloca la caja para las condiciones, con la posibilidad de TikZ.
\newcommand{\@EscribeCondiciones}{%
@@ -2040,14 +2203,14 @@ en la República Bolivariana de Venezuela.
\setlength{\@LineaNodoXf}{\zposx{LineaNodoBCoordX} sp}%
\setlength{\@LineaNodoYf}{\zposy{LineaNodoBCoordY} sp}%
\addtolength{\@LineaNodoYo}{\@EspacioVacioInicial-\@EspacioVacioFinal}%
- \if@filas
+ \iffilas
\else
\if@DescG \addtolength{\@LineaNodoYo}{2\baselineskip}\fi
\if@DescR \if@BIR \addtolength{\@LineaNodoYo}{2\baselineskip}\fi\fi
\if@DescA \if@BIA \addtolength{\@LineaNodoYo}{2\baselineskip}\fi\fi
\if@DescE \if@Exento \addtolength{\@LineaNodoYo}{2\baselineskip}\fi\fi
\addtolength{\@LineaNodoYo}{\baselineskip/2}%
- \if@sinivaexpresado
+ \ifsinivaexpresado
\else
\addtolength{\@LineaNodoYo}{2\baselineskip}%
\if@BIR\addtolength{\@LineaNodoYo}{2\baselineskip}\fi
@@ -2055,7 +2218,7 @@ en la República Bolivariana de Venezuela.
\if@Exento\addtolength{\@LineaNodoYo}{\baselineskip}\fi
\fi
\fi
- \if@linea
+ \iflinea
\begin{textblock*}{\paperwidth-\@LineaNodoXo}(\@LineaNodoXo,\paperheight-\@LineaNodoYo)%
\begin{tikzpicture}%
\draw (\@LineaNodoXo,\@LineaNodoYo) -- (\@LineaNodoXf,\@LineaNodoYf);%
@@ -2065,7 +2228,7 @@ en la República Bolivariana de Venezuela.
%% Escribimos los totales al archivo csv.
\newcommand{\@EscribeTotalesEnCSV}{%
- \if@csv
+ \ifcsv
\if@Exento
\if@DescE
\immediate\write\csv{Totales: \@@SubtotalE: \Moneda \SubtE^^JTotales: \@@DescuentoE: \Moneda \DescE}%
diff --git a/Master/texmf-dist/tex/latex/factura/factura.def b/Master/texmf-dist/tex/latex/factura/factura.def
index 87c237dd224..f594b6396b8 100644
--- a/Master/texmf-dist/tex/latex/factura/factura.def
+++ b/Master/texmf-dist/tex/latex/factura/factura.def
@@ -36,7 +36,7 @@
%% factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex.
%%
\ProvidesFile{factura.def}
-[2017/12/11 v3.40
+[2018/03/13 v3.44
Archivo de valores iniciales y condiciones de borde para factura.cls
]
@@ -137,8 +137,8 @@ Archivo de valores iniciales y condiciones de borde para factura.cls
\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}}}
+ \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 el inicio de una columna en la tabla y el inicio del texto.
\tabcolsep=0.15cm
@@ -302,7 +302,7 @@ Archivo de valores iniciales y condiciones de borde para factura.cls
%% El diseño de las distintas partes de la hoja.
\newcommand{\@EstiloFirmas}{
\@LetraFirmas
- \if@unafirma
+ \ifnum \value{@Firmas}=1
\else
\parbox{\@TamLineaFirmas}{
\rule{\@TamLineaFirmas}{\@GrosorLineaFirmas}
@@ -311,7 +311,7 @@ Archivo de valores iniciales y condiciones de borde para factura.cls
\hfill
\parbox{\@TamLineaFirmas}{
\rule{\@TamLineaFirmas}{\@GrosorLineaFirmas}
- \centering \ifdefvoid{\@Emisor}{\if@cotizacion \@@Emisor \else \@@Pagado \fi}{\@Emisor}}}
+ \centering \ifdefvoid{\@Emisor}{\ifcotizacion \@@Emisor \else \@@Pagado \fi}{\@Emisor}}}
\newcommand{\@EstiloNotaPrevia}{\@LetraNotaPrevia \@NotaPrevia}
@@ -326,7 +326,7 @@ Archivo de valores iniciales y condiciones de borde para factura.cls
\newcommand{\@EstiloDenom}{%
\@LetraDenom\@Denominacion
- \if@sinnumero
+ \ifsinnumero
\else
\space\space{\@LetraNumeracion N\textordmasculine\space\@Num}%
\fi}
@@ -336,7 +336,7 @@ Archivo de valores iniciales y condiciones de borde para factura.cls
\setlength{\tabcolsep}{0pt}%
\@LetraFecha\begin{tabular}{r@{\extracolsep{1ex}}l@{\extracolsep{0pt}}}
\@@Fecha & \ttfamily\@Fecha \\[.3em]
- \if@vencimiento \@@FechaVencimiento & \ttfamily\@FechaVencimiento \\ \else \vspace*{-.3em}\fi
+ \ifvencimiento \@@FechaVencimiento & \ttfamily\@FechaVencimiento \\ \else \vspace*{-.3em}\fi
\end{tabular}}
\newcommand{\@InfoPaginaNoTitulo}{\@LetraInfoPagina Reporte correspondiente a la factura n\'umero \@Num \space de fecha \@Fecha}