diff options
author | Karl Berry <karl@freefriends.org> | 2022-01-22 21:03:55 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-01-22 21:03:55 +0000 |
commit | 56079a7502f8094ffb831d1ea3564312a8ff3049 (patch) | |
tree | 9bda2ea94bc5730445fb982de13fe10d9fc0c0d5 /Master/texmf-dist/tex/latex | |
parent | cdf946a4c2d4105eba2a5bec9a9608a3c2e178c3 (diff) |
factura (22jan22)
git-svn-id: svn://tug.org/texlive/trunk@61697 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r-- | Master/texmf-dist/tex/latex/factura/factura.cls | 466 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/factura/factura.def | 81 |
2 files changed, 289 insertions, 258 deletions
diff --git a/Master/texmf-dist/tex/latex/factura/factura.cls b/Master/texmf-dist/tex/latex/factura/factura.cls index 4b6be8a9114..f507fda67c9 100644 --- a/Master/texmf-dist/tex/latex/factura/factura.cls +++ b/Master/texmf-dist/tex/latex/factura/factura.cls @@ -6,7 +6,7 @@ %% %% factura.dtx (with options: `class') %% -%% Copyright 2020 Emilio Augusto Lazo Zaia <emiliolazozaia@gmail.com> +%% Copyright 2022 Emilio Augusto Lazo Zaia <emiliolazozaia@gmail.com> %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either @@ -26,32 +26,30 @@ %% with its derived files factura.ins, factura.cls, factura.def, %% factura-ejemplo-aux.tex, factura-ejemplo-firma.tex, %% factura-ejemplo-fondo.tex, factura-ejemplo-membrete.tex, +%% factura-ejemplo-notadecredito.tex, factura-ejemplo-notadedebito.tex, %% factura-ejemplo-cotizacion.tex, factura-ejemplo-prefactura.tex, %% factura-ejemplo-factura01.tex, factura-ejemplo-factura02.tex, %% factura-ejemplo-factura03.tex, factura-ejemplo-factura04.tex, %% factura-ejemplo-factura05.tex, factura-ejemplo-factura06.tex, %% factura-ejemplo-factura07.tex, factura-ejemplo-factura08.tex, %% factura-ejemplo-factura09.tex, factura-ejemplo-factura10.tex, -%% factura-ejemplo-notadecredito.tex, factura-ejemplo-notadedebito.tex, %% factura-ejemplo-reporte1.tex, factura-ejemplo-reporte2.tex, -%% factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. +%% factura-ejemplo-reporte3.tex, factura-ejemplo-reporte4.tex +%% and factura-beispiel-rechnung.tex. %% \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesClass{factura} -[2020/11/15 v4.00 +[2022/01/22 v4.32 Clase para elaborar facturas legales en la Repu'blica Bolivariana de Venezuela. ] -%% En las notas de crédito y débito, la leyenda aclaratoria de a cuál factura se hace referencia está alojada en estas macros, definidas en |factura.def|. Estas macros |\TextoNotaDeCredito| y |\TextoNotaDeDebito| están definidas de la siguiente forma: \RequirePackage{etoolbox}% 'etoolbox' para los condicionales binarios y para \AtEndPreamble. %% Condicionales auxiliares que sólo pueden ser usados dentro de un grupo. \newbool{DCU} \newbool{DUC} \newbool{Descuentos} -%% (quitado por no vigente) - % \newbool{Electro} \newbool{ExpAbajo}\booltrue{ExpAbajo} \newbool{IVA} \newbool{NumItem} @@ -74,41 +72,42 @@ en la Repu'blica Bolivariana de Venezuela. \newbool{FormalibreXnegativo} \newbool{FormalibreYarriba} \newbool{FormalibreYnegativo} -\newbool{DenomXnegativo} -\newbool{DenomYarriba} -\newbool{DenomYnegativo} +\newbool{DenominacionXnegativo} +\newbool{DenominacionYarriba} +\newbool{DenominacionYnegativo} \newbool{FechaXnegativo} \newbool{FechaYarriba} \newbool{FechaYnegativo} \newbool{FirmasYnegativo}% no hay FirmasXnegativo; hay X_inicial y X_final para las firmas. %% Condicionales relativos a opciones de la clase. -\newif\ifagrupado -\newif\ifcentradesc -\newif\ifcentrado +\newif\ifagrupatotales +\newif\ifdescripcioncentrada +\newif\iffilascentradas \newif\ifconlineasha \newif\ifconreporte \newif\ifcotizacion \newif\ifcsv \newif\ifdcu \newif\ifdescuentos +\newif\ifdivisa \newif\ifdosfirmas \newif\ifduc -%% (quitado por no vigente) - % \newif\ifelectro \newif\ifexpandecuadro \newif\iffilas \newif\ifG -\newif\ifimpdesc +\newif\ifivadescripcion \newif\ifiva \newif\iflinea +\newif\ifmonedaceldas +\newif\ifmonedadespues \newif\ifnospanish \newif\ifnotadecredito \newif\ifnotadedebito \newif\ifnumitem \newif\ifprefactura \newif\ifsincantidad -\newif\ifsindenom +\newif\ifsindenominacion \newif\ifsinencabezadofactura \newif\ifsinencabezadoreporte \newif\ifsinexpandir @@ -124,7 +123,7 @@ en la Repu'blica Bolivariana de Venezuela. \newif\ifsinlineasv \newif\ifsinlineasve \newif\ifsinlineasvi -\newif\ifsinmarcas +\newif\ifsinmarcasfactura \newif\ifsinmonedatotales \newif\ifsinnumero \newif\ifsinreverso @@ -141,6 +140,7 @@ en la Repu'blica Bolivariana de Venezuela. \newif\if@factura \@facturatrue \newif\if@reverso \@reversotrue \newif\if@reporte +\newif\if@TasaCambio \newif\if@FondoFactura \newif\if@FondoReporte \newif\if@FondoReporteStar @@ -163,6 +163,7 @@ en la Repu'blica Bolivariana de Venezuela. \newif\if@DescAnum \newif\if@DescEnum \newif\if@DescuentoTotal +\newif\if@EscribeMoneda %% Longitudes para uso interno. \newlength{\@TamDatos} @@ -198,8 +199,8 @@ en la Repu'blica Bolivariana de Venezuela. \newlength{\@SepTotales} \newlength{\@PosFechaX} \newlength{\@PosFechaY} -\newlength{\@PosDenomX} -\newlength{\@PosDenomY} +\newlength{\@PosDenominacionX} +\newlength{\@PosDenominacionY} \newlength{\@PosFirmasXuno} \newlength{\@PosFirmasXdos} \newlength{\@PosFirmasY} @@ -245,7 +246,7 @@ en la Repu'blica Bolivariana de Venezuela. \newbox{\@CajaFirmaEmisor} \newbox{\@CajaFirmas} \newbox{\@CajaFecha} -\newbox{\@CajaDenom} +\newbox{\@CajaDenominacion} \newbox{\@CajaControl} \newbox{\@CajaFormalibre} \newbox{\@CajaNotaFinal} @@ -265,38 +266,46 @@ en la Repu'blica Bolivariana de Venezuela. \newcommand{\CLASSWARNING}[1]{\ClassWarning{factura}{** #1. **}{}} \newcommand{\CLASSINFO}[1]{\ClassInfo{factura}{** #1. **}{}} + %% 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{agrupatotales}{\agrupatotalestrue}% Agrupados los totalizadores en el modo en columnas. +\DeclareOption{agrupado}{\agrupatotalestrue}% TODO: Quitar en el futuro. \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{sindenom}{\sindenomtrue}% No agrega el texto con la denominación del documento, para las formas libres que tienen el número de la factura ya impreso. +\DeclareOption{descripcioncentrada}{\descripcioncentradatrue}% Para centrar la descripción de cada ítem en la factura. +\DeclareOption{centradesc}{\descripcioncentradatrue}% TODO: Quitar en el futuro. \DeclareOption{descuentos}{\descuentostrue}% Para los descuentos individuales. +\DeclareOption{divisa}{\divisatrue}% Para cambiar la moneda por la divisa y aceptar entrada de montos en divisas. \DeclareOption{dosfirmas}{\dosfirmastrue}% Pone las dos firmas para firmar. \DeclareOption{duc}{\ductrue}% Descripción, luego precio unitario y luego cantidad. -\DeclareOption{electro}{\CLASSERROR{Ya no esta' vigente el descuento en la ali'cuota general por pagos electro'nicos}}% Parche por el Decreto 3.085 de Nikolái, ya no vigente. \DeclareOption{expandecuadro}{\expandecuadrotrue}% Para rellenar con líneas en blanco de manera automática. \DeclareOption{filas}{\filastrue}% Estilo de totalización en filas. +\DeclareOption{filascentradas}{\filascentradastrue}% Centra los totales en en modo de 'filas'. +\DeclareOption{centrado}{\filascentradastrue}% TODO: Quitar en el futuro. \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{ivadescripcion}{\ivadescripciontrue}% Para el tipo de impuesto en la descripción y no en el precio unitario y total. +\DeclareOption{impdesc}{\ivadescripciontrue}% TODO: Quitar en el futuro. \DeclareOption{linea}{\lineatrue}% Para la línea que inutiliza el espacio en blanco. +\DeclareOption{monedadespues}{\monedadespuestrue}% Para que el signo monetario salga después del monto y no antes. +\DeclareOption{monedaceldas}{\monedaceldastrue}% Para poner el signo monetario en cada celda con montos. \DeclareOption{nospanish}{\nospanishtrue}% No carga babel en castellano ni la codificación T1 de las letras. \DeclareOption{notadecredito}{\notadecreditotrue}% Produce una nota de crédito. \DeclareOption{notadedebito}{\notadedebitotrue}% Produce una nota de débito. \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{sindenominacion}{\sindenominaciontrue}% No agrega el texto con la denominación del documento, para las formas libres que tienen el número de la factura ya impreso. +\DeclareOption{sindenom}{\sindenominaciontrue}% TODO: Quitar en el futuro. \DeclareOption{sinencabezadofactura}{\sinencabezadofacturatrue}% Para no poner los datos del cliente y que el emisor haga ese diseño. \DeclareOption{sinencabezadoreporte}{\sinencabezadoreportetrue}% Para no poner el encabezado del reporte. \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{sinivaexpresado}{\sinivaexpresadotrue}% Cuando no se cobra IVA y tampoco se quiere que aparezca la totalización del IVA. \DeclareOption{sinlineahni}{\sinlineahnitrue}% Estilo 'sinlineahni'. \DeclareOption{sinlineahtot}{\sinlineahtottrue}% Estilo 'sinlineahtot'. \DeclareOption{sinlineahtit}{\sinlineahtittrue}% Estilo 'sinlineahtit'. @@ -306,7 +315,8 @@ en la Repu'blica Bolivariana de Venezuela. \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{sinmarcasfactura}{\sinmarcasfacturatrue}% Para evitar que aparezcan los caracteres especiales cuando la descripción es larga. +\DeclareOption{sinmarcas}{\sinmarcasfacturatrue}% TODO: Quitar en el futuro. \DeclareOption{sinmonedatotales}{\sinmonedatotalestrue}% Para que no ponga el signo monetario en los totales. \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. @@ -326,6 +336,7 @@ en la Repu'blica Bolivariana de Venezuela. \RequirePackage{xparse}% Algunos comandos los definimos con \NewDocumentCommand. \RequirePackage[absolute]{textpos}% Es necesario 'textpos' para colocar texto en ubicaciones arbitrarias. \RequirePackage{eso-pic}% Para el comando \AddToShipoutPicture. +\RequirePackage{atbegshi}% Para \AtBeginShipoutNext; ya 'eso-pic' no incluye a 'atbegshi'. \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. \RequirePackage{fp-upn}% Fundamental el paquete 'fp-upn' para todos los cálculos. @@ -343,7 +354,7 @@ en la Repu'blica Bolivariana de Venezuela. \RequirePackage{anyfontsize}% Para las tipografías en tamaños arbitrarios. \RequirePackage{ifxetex}% Para poder modificar correctamente la metadata del PDF y agregar la versión de la clase. \RequirePackage{ifluatex}% Ditto. -\RequirePackage{zref-savepos}[2016/05/21]% Para guardar la posición en 'Y' expandiendo el cuadro, para la línea y para la firma en el reporte si la hubiera. +\RequirePackage{zref-savepos}% Para guardar la posición en 'Y' expandiendo el cuadro, para la línea y para la firma en el reporte si la hubiera. %% Hay que cargar siempre zref-savepos para poder compilar con LuaLaTeX porque este motor no tiene \pdfsavepos, \pdflastypos y zref-savepos las provee cuando no existen (motor LuaLaTex). %% Gracias a Alan Munn y a wipet (Thanks to Alan Munn and wipet). @@ -388,12 +399,13 @@ en la Repu'blica Bolivariana de Venezuela. \fi} \fi -%% Lo hacemos compatible otra vez con LuaLaTeX +%% Lo hacemos otra vez compatible con LuaLaTeX. \ifluatex \let\pdfsavepos\savepos \let\pdflastypos\lastypos \fi +%% Macro que se va a ejecutar para establecer opciones; se ejecuta en el primer \AtEndPreamble. \def\@EstableceOpciones{% % Establecemos los parámetros y macros relativas a la fecha. \DTMsetstyle{\@FormatoFecha}\DTMsetup{datesep=\@FechaSeparadores}\gdef\DTMinformat{\@FormatoFechaEntrada} @@ -419,6 +431,7 @@ en la Repu'blica Bolivariana de Venezuela. \cotizacionfalse \fi \fi + \ifcotizacion\ifdefvoid{\@Credito}{}{\vencimientofalse}\fi \ifprefactura \ifcotizacion \prefacturafalse @@ -447,7 +460,7 @@ en la Repu'blica Bolivariana de Venezuela. \fi \ifsinlineashe\booltrue{SinLineasHoriExt}\fi - \ifsindenom + \ifsindenominacion \else \ifcotizacion \else @@ -512,7 +525,7 @@ en la Repu'blica Bolivariana de Venezuela. \fi \fi \ifdescuentos\booltrue{Descuentos}\fi - \ifiva\impdesctrue\booltrue{IVA}\fi + \ifiva\ivadescripciontrue\booltrue{IVA}\fi \ifsubtotal \ifdescuentos \booltrue{Subtotal} @@ -532,41 +545,20 @@ en la Repu'blica Bolivariana de Venezuela. \fi \fi - \ifcentrado + \iffilascentradas \iffilas \else - \centradofalse - \CLASSWARNING{La opcio'n 'centrado' no es compatible con el modo de totalizacio'n en columnas. Sin efecto opcio'n 'centrado'} + \filascentradasfalse + \CLASSWARNING{La opcio'n 'filascentradas' no es compatible con el modo de totalizacio'n en columnas. Sin efecto opcio'n 'filascentradas'} \fi \fi - \ifagrupado + \ifagrupatotales \iffilas - \agrupadofalse - \CLASSWARNING{La opcio'n 'agrupado' no es compatible con el modo de totalizacio'n en filas. Sin efecto opcio'n 'agrupado'} + \agrupatotalesfalse + \CLASSWARNING{La opcio'n 'agrupatotales' no es compatible con el modo de totalizacio'n en filas. Sin efecto opcio'n 'agrupatotales'} \fi \fi -%% (quitado por no vigente) - % \ifelectro - % \boolfalse{Electro} - % \electrofalse - % \gdef\@NotaInterna{\@TextoDescuentoPresidencial} - % \CLASSWARNING{Se establecio' el texto aclaratorio del descuento presidencial como 'nota interna'} - % \iffilas - % \filasfalse - % \CLASSWARNING{La opcio'n 'electro' no es compatible con la opcio'n 'filas'. Sin efecto la opcio'n 'filas'} - % \fi - % \fi - - % Se establece el texto de la nota de crédito o débito como nota interna. Para cambiarlo hay que anular el texto con \AtEndPreamble{\NotaInterna{}} - \ifnotadecredito - \NotaInterna{\TextoNotaDeCredito} - \CLASSINFO{Se establecio' el texto aclaratorio de la nota de cre'dito como 'nota interna'} - \fi - \ifnotadedebito - \NotaInterna{\TextoNotaDeDebito} - \CLASSINFO{Se establecio' el texto aclaratorio de la nota de de'bito como 'nota interna'} - \fi \iftodosiva \@BIRtrue \@BIAtrue \@Exentotrue \Gtrue \fi \ifsiniva\AtBeginDocument{\gdef\@ImpuestoG{0}\gdef\@ImpuestoR{0}\gdef\@ImpuestoA{0}}\fi \ifsinivaexpresado @@ -585,7 +577,7 @@ en la Repu'blica Bolivariana de Venezuela. \expandecuadrotrue \fi \fi - \ifsinmarcas \def\@CaracterCR{\mbox{}} \def\@CaracterCeldasVacias{\mbox{}} \fi + \ifsinmarcasfactura \def\@CaracterCR{\mbox{}} \def\@CaracterCeldasVacias{\mbox{}} \fi \ifnospanish \else \RequirePackage[spanish]{babel}% Babel en castellano. @@ -635,44 +627,67 @@ en la Repu'blica Bolivariana de Venezuela. \@twosidefalse\@mparswitchfalse \fi} -%% Antes de que se acabe el preámbulo. Sin *, hace append, con un * sustituye, con **, hace prepend. +%% Antes de que se acabe el preámbulo, para agregar aquí cosas como cambios de opciones y que después puedan ser verificadas y validadas en el primer \AtEndPreamble. +%% Sin * hace append; con un * sustituye; con ** hace prepend. \NewDocumentCommand{\BeforeEndPreamble}{s s +m}{ \IfBooleanTF{#2} {\gpreto{\@BeforeEndPreamble}{#3}} {\IfBooleanTF{#1}{\long\gdef\@BeforeEndPreamble{#3}}{\gappto{\@BeforeEndPreamble}{#3}}}} +\BeforeEndPreamble{ + % Si hay una tasa de cambio especificada, pone la nota externa aclaratoria. + % Si se está usando divisas, cambia la moneda. + \ifdivisa + \if@TasaCambio + \NotaExterna{\TextoTasaCambio} + \else + \Moneda{\@Divisa} + \fi + \fi + + % Se establece el texto de la nota de crédito o débito como nota interna. Para cambiarlo hay que anular el texto con \AtEndPreamble{\NotaInterna{}} + \ifnotadecredito + \NotaInterna{\TextoNotaDeCredito} + \CLASSINFO{Se establecio' el texto aclaratorio de la nota de cre'dito como 'nota interna'} + \fi + \ifnotadedebito + \NotaInterna{\TextoNotaDeDebito} + \CLASSINFO{Se establecio' el texto aclaratorio de la nota de de'bito como 'nota interna'} + \fi} + %% Primer \AtEndPreamble: ejecuta \@EstableceOpciones, luego \@BeforeEndPreamble y luego otra vez \@EstableceOpciones. \AtEndPreamble{ \@EstableceOpciones \ifx\@undefined\@BeforeEndPreamble\else\@BeforeEndPreamble\@EstableceOpciones\fi % Escribimos en el .log las opciones cargadas: - \ifagrupado \CLASSINFO{Opcio'n cargada: agrupado}\fi - \ifcentradesc \CLASSINFO{Opcio'n cargada: centradesc}\fi - \ifcentrado \CLASSINFO{Opcio'n cargada: centrado}\fi + \ifagrupatotales \CLASSINFO{Opcio'n cargada: agrupatotales}\fi + \ifdescripcioncentrada \CLASSINFO{Opcio'n cargada: descripcioncentrada}\fi + \iffilascentradas \CLASSINFO{Opcio'n cargada: filascentradas}\fi \ifconlineasha \CLASSINFO{Opcio'n cargada: conlineasha}\fi \ifconreporte \CLASSINFO{Opcio'n cargada: conreporte}\fi \ifcotizacion \CLASSINFO{Opcio'n cargada: cotizacion}\fi \ifcsv \CLASSINFO{Opcio'n cargada: csv}\fi \ifdcu \CLASSINFO{Opcio'n cargada: dcu}\fi \ifdescuentos \CLASSINFO{Opcio'n cargada: descuentos}\fi + \ifdivisa \CLASSINFO{Opcio'n cargada: divisa}\fi \ifdosfirmas \CLASSINFO{Opcio'n cargada: dosfirmas}\fi \ifduc \CLASSINFO{Opcio'n cargada: duc}\fi - %% (quitado por no vigente) - % \ifelectro \CLASSINFO{Opcio'n cargada: electro}\fi \ifexpandecuadro \CLASSINFO{Opcio'n cargada: expandecuadro}\fi \iffilas \CLASSINFO{Opcio'n cargada: filas}\fi \ifG \CLASSINFO{Opcio'n cargada: G}\fi - \ifimpdesc \CLASSINFO{Opcio'n cargada: impdesc}\fi + \ifivadescripcion \CLASSINFO{Opcio'n cargada: ivadescripcion}\fi \ifiva \CLASSINFO{Opcio'n cargada: iva}\fi \iflinea \CLASSINFO{Opcio'n cargada: linea}\fi + \ifmonedaceldas \CLASSINFO{Opcio'n cargada: monedaceldas}\fi + \ifmonedadespues \CLASSINFO{Opcio'n cargada: monedadespues}\fi \ifnospanish \CLASSINFO{Opcio'n cargada: nospanish}\fi \ifnotadecredito \CLASSINFO{Opcio'n cargada: notadecredito}\fi \ifnotadedebito \CLASSINFO{Opcio'n cargada: notadedebito}\fi \ifnumitem \CLASSINFO{Opcio'n cargada: numitem}\fi \ifprefactura \CLASSINFO{Opcio'n cargada: prefactura}\fi \ifsincantidad \CLASSINFO{Opcio'n cargada: sincantidad}\fi - \ifsindenom \CLASSINFO{Opcio'n cargada: sindenom}\fi + \ifsindenominacion \CLASSINFO{Opcio'n cargada: sindenominacion}\fi \ifsinencabezadofactura \CLASSINFO{Opcio'n cargada: sinencabezadofactura}\fi \ifsinencabezadoreporte \CLASSINFO{Opcio'n cargada: sinencabezadoreporte}\fi \ifsinexpandir \CLASSINFO{Opcio'n cargada: sinexpandir}\fi @@ -688,7 +703,7 @@ en la Repu'blica Bolivariana de Venezuela. \ifsinlineasv \CLASSINFO{Opcio'n cargada: sinlineasv}\fi \ifsinlineasve \CLASSINFO{Opcio'n cargada: sinlineasve}\fi \ifsinlineasvi \CLASSINFO{Opcio'n cargada: sinlineasvi}\fi - \ifsinmarcas \CLASSINFO{Opcio'n cargada: sinmarcas}\fi + \ifsinmarcasfactura \CLASSINFO{Opcio'n cargada: sinmarcasfactura}\fi \ifsinmonedatotales \CLASSINFO{Opcio'n cargada: sinmonedatotales}\fi \ifsinnumero \CLASSINFO{Opcio'n cargada: sinnumero}\fi \ifsinreverso \CLASSINFO{Opcio'n cargada: sinreverso}\fi @@ -703,9 +718,8 @@ en la Repu'blica Bolivariana de Venezuela. % Cargamos aquí 'geometry' para que sea después de haber establecido 'twoside'. \RequirePackage{geometry}} -%% Escribimos el total como comentario en el .log. -\AtEndDocument{% - \ifx\undefined\Total\else\immediate\write\@auxout{\gdef\noexpand\TotalX{\Total}}\fi +%% Escribimos el total como comentario en el .log, en un gancho \AtEndDocument. +\AtEndDocument{ \ifsintotales \else \if@factura\CLASSINFO{\@@Total: \space\space\space \Moneda \Total}\fi @@ -724,7 +738,7 @@ en la Repu'blica Bolivariana de Venezuela. \def\@ImpuestoR{\@AlicuotaR} \def\@ImpuestoA{\@AlicuotaA} -%% Fijamos en cero los descuentos totales (necesario). +%% Fijamos en cero los descuentos totales (necesario), y en 1 el factor de cambio divisa-moneda. \def\@DescuentoGporc{0} \def\@DescuentoRporc{0} \def\@DescuentoAporc{0} @@ -733,26 +747,29 @@ en la Repu'blica Bolivariana de Venezuela. \def\@DescuentoRnum{0} \def\@DescuentoAnum{0} \def\@DescuentoEnum{0} -\FPset\PrecioUtempx{1} +\FPset\@TasaCambio{1} -%% \Fecha, \NotaFecha, \FormatoFecha, \Credito, \Moneda, \RazonSocial, \Nombre, \RIF, \CI, \Contacto, \Dirección, \Telefono, \Email, \Conforme, \Emisor, \Proveedor. +%% \Fecha, \FechaNota, \FormatoFecha, \Credito, \Moneda, \Divisa, \TasaCambio, \RazonSocial, \Nombre, \RIF, \CI, \Contacto, \Dirección, \Telefono, \Email, \Conforme, \Emisor, \Proveedor. \NewDocumentCommand{\Fecha}{s m g g}{% \IfBooleanTF{#1} {\AtEndPreamble{\DTMsavedate{FechaEmision}{#2-#3-#4}}} {\AtEndPreamble{\DTMsavedatex{FechaEmision}{#2}}}} \def\@Fecha{\DTMusedate{FechaEmision}} -\NewDocumentCommand{\NotaFecha}{s m g g}{% +\NewDocumentCommand{\FechaNota}{s m g g}{% \IfBooleanTF{#1} - {\AtEndPreamble{\DTMsavedate{NotaFecha}{#2-#3-#4}}} - {\AtEndPreamble{\DTMsavedatex{NotaFecha}{#2}}}} -\def\@NotaFecha{\DTMusedate{NotaFecha}} + {\AtEndPreamble{\DTMsavedate{FechaNota}{#2-#3-#4}}} + {\AtEndPreamble{\DTMsavedatex{FechaNota}{#2}}}} +\def\@FechaNota{\DTMusedate{FechaNota}} +\let\NotaFecha\FechaNota% TODO: Quitar en el futuro. \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\Moneda#1{\gdef\@Moneda{#1}} +\def\Divisa#1{\gdef\@Divisa{#1}} +\def\TasaCambio#1{\FPset\@TasaCambio{#1}\@TasaCambiotrue} \def\RazonSocial#1{\gdef\@RazonSocial{#1}} \def\Nombre#1{\gdef\@RazonSocial{#1}\@Nombretrue} \def\RIF#1{\gdef\@RIF{#1}} @@ -765,6 +782,11 @@ en la Repu'blica Bolivariana de Venezuela. \def\Emisor#1{\gdef\@Emisor{#1}} \def\Proveedor#1{\gdef\@Proveedor{#1}} +%% \Membrete, \EncabezadoFactura, \EncabezadoReporte. +\NewDocumentCommand{\Membrete}{+m}{\gdef\@Membrete{#1}} +\NewDocumentCommand{\EncabezadoFactura}{+m}{\gdef\@EncabezadoFactura{#1}} +\NewDocumentCommand{\EncabezadoReporte}{+m}{\gdef\@EncabezadoReporte{#1}} + %% Los descuentos totales. \NewDocumentCommand{\Descuento}{s m}{% \IfBooleanTF{#1} @@ -790,14 +812,18 @@ en la Repu'blica Bolivariana de Venezuela. \IfBooleanTF{#1}{\@DescEnumtrue\gdef\@DescuentoEnum{#2}}{\@DescEnumfalse\gdef\@DescuentoEporc{#2}}% \@DescEtrue\@DescuentoTotaltrue} -\def\Denom#1{\gdef\@Denominacion{#1}}% La denominación puede ser 'FACTURA', 'COTIZACIÓN', 'NOTA DE CRÉDITO', 'NOTA DE DÉBITO' u otra. Se predetermina alguna de estas opciones según las opciones con las que se carga la clase. +\def\Denominacion#1{\gdef\@Denominacion{#1}}% La denominación puede ser 'FACTURA', 'COTIZACIÓN', 'NOTA DE CRÉDITO', 'NOTA DE DÉBITO' u otra. Se predetermina alguna de estas opciones según las opciones con las que se carga la clase. +\let\Denom\Denominacion% TODO: Quitar en el futuro. %% Número de la factura con \Num, número de control con \NumControl, y número de serie de control \NumSerieControl. +%% Si el número de control no se especifica, toma el mismo que el de la factura. +%% Si el número de serie de control no se especifica, toma '00'. \def\Num#1{\gdef\@Num{\nplpadding{\@DigitosNumeracion}\npthousandsep{}\numprint{#1}}} -\def\NumControl#1{\gdef\@NumControl{\nplpadding{\@DigitosNumeracion}\npthousandsep{}\numprint{#1}}}% Si el número de control no se especifica, toma el mismo que el de la factura -\def\NumSerieControl#1{\gdef\@NumSerieControl{#1}}% Si el número de serie de control no se especifica, toma '00'. +\def\NumControl#1{\gdef\@NumControl{\nplpadding{\@DigitosNumeracion}\npthousandsep{}\numprint{#1}}} +\def\NumSerieControl#1{\gdef\@NumSerieControl{#1}} -\def\NotaNum#1{\gdef\@NotaNum{\nplpadding{\@DigitosNumeracion}\npthousandsep{}\numprint{#1}}} +\def\NumNota#1{\gdef\@NumNota{\nplpadding{\@DigitosNumeracion}\npthousandsep{}\numprint{#1}}} +\let\NotaNum\NumNota% TODO: Quitar en el futuro. %% Información de página: cabeceras de páginas o pies de página. \def\InfoPagina#1{\gdef\@InfoPagina{#1}} @@ -806,6 +832,7 @@ en la Repu'blica Bolivariana de Venezuela. \NewDocumentCommand{\Resumen}{+m}{\gdef\@Resumen{#1}} %% Nota previa (al cuadro), nota interna (del cuadro), nota externa (luego del cuadro) y nota final (luego de la descripción). +%% %% Sin *, sustituye; con un * hace append; con ** hace prepend. \NewDocumentCommand{\NotaPrevia}{s s +m}{% \IfBooleanTF{#2} {\gpreto{\@NotaPrevia}{#3}} @@ -826,6 +853,7 @@ en la Repu'blica Bolivariana de Venezuela. {\gpreto{\@NotaFinal}{#3}} {\IfBooleanTF{#1}{\gappto{\@NotaFinal}{#3}}{\gdef\@NotaFinal{#3}}}} +%% Primer \AtBeginDocument para hacer chequeos. Los demás se ejecutan todos después de este. \AtBeginDocument{% % Si no se especificó fecha, tomamos la de hoy. Además, advertimos cuando el documento se está compilando en una fecha distinta de la fecha establecida en el encabezado. \DTMifsaveddate{FechaEmision}{}{% @@ -861,6 +889,13 @@ en la Repu'blica Bolivariana de Venezuela. % \fi % Efectuamos distintos chequeos para dar errores o advertencias si faltó algún dato por especificar. + \ifdivisa + \else + \if@TasaCambio + \CLASSWARNING{Se pidio' tasa de cambio sin pedir opcio'n divisa. Ignorando tasa de cambio} + \FPset\@TasaCambio{1}\@TasaCambiofalse + \fi + \fi \if@reporte \ifsinencabezadoreporte \ifdefvoid{\@RazonSocial}{\CLASSWARNING{No se especifico' la razo'n social. Puede dar error}}{}% @@ -881,12 +916,12 @@ en la Repu'blica Bolivariana de Venezuela. \fi \if@factura \ifnotadecredito - \ifdefvoid{\@NotaNum}{\CLASSERROR{Debe definirse el nu'mero de la factura a corregir con una nota de cre'dito}}{} - \DTMifsaveddate{NotaFecha}{}{\CLASSERROR{Debe definirse la fecha de la factura a corregir con una nota de cre'dito}} + \ifdefvoid{\@NumNota}{\CLASSERROR{Debe definirse el nu'mero de la factura a corregir con una nota de cre'dito}}{} + \DTMifsaveddate{FechaNota}{}{\CLASSERROR{Debe definirse la fecha de la factura a corregir con una nota de cre'dito}} \fi \ifnotadedebito - \ifdefvoid{\@NotaNum}{\CLASSERROR{Debe definirse el nu'mero de la factura a corregir con una nota de de'bito}}{} - \DTMifsaveddate{NotaFecha}{}{\CLASSERROR{Debe definirse la fecha de la factura a corregir con una nota de de'bito}} + \ifdefvoid{\@NumNota}{\CLASSERROR{Debe definirse el nu'mero de la factura a corregir con una nota de de'bito}}{} + \DTMifsaveddate{FechaNota}{}{\CLASSERROR{Debe definirse la fecha de la factura a corregir con una nota de de'bito}} \fi \ifsinencabezadofactura \CLASSWARNING{Se pidio la opcio'n 'sinencabezadofactura'; no se esta' verificando si esta'n definidos algunos datos del cliente} @@ -905,19 +940,19 @@ en la Repu'blica Bolivariana de Venezuela. % Fijamos la denominación del documento paras las cotizaciones, facturas o notas de crédito o débito, que son casos particulares del modo 'factura'. \ifdefvoid{\@Denominacion}{% \ifcotizacion - \Denom{\@@DenomCotiza}% + \Denominacion{\@@DenominacionCotizacion}% \else \ifnotadecredito - \Denom{\@@DenomNotaDeCredito}% + \Denominacion{\@@DenominacionNotaDeCredito}% \else \ifnotadedebito - \Denom{\@@DenomNotaDeDebito}% + \Denominacion{\@@DenominacionNotaDeDebito}% \else - \Denom{\@@DenomFactura}% + \Denominacion{\@@DenominacionFactura}% \fi \fi \fi}{}% - \ifsindenom + \ifsindenominacion \else \ifcotizacion \else @@ -955,6 +990,8 @@ en la Repu'blica Bolivariana de Venezuela. % 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\Moneda{\@Moneda}% + \def\Divisa{\@Divisa}% + \def\TasaCambio{\@TasaCambio}% \def\RazonSocial{\@RazonSocial}% \let\Nombre\RazonSocial \def\RIF{\@RIF}% @@ -968,12 +1005,12 @@ en la Repu'blica Bolivariana de Venezuela. \def\Proveedor{\@Proveedor}% \def\Fecha{\@Fecha}% \def\FechaVencimiento{\@FechaVencimiento}% - \def\NotaFecha{\@NotaFecha}% + \def\FechaNota{\@FechaNota}% \def\Credito{\@Credito}% \def\Num{\@Num}% \def\NumSerieControl{\@NumSerieControl}% \def\NumControl{\@NumControl}% - \def\NotaNum{\@NotaNum}% + \def\NumNota{\@NumNota}% \def\NotaFinal{\@NotaFinal}% \def\Resumen{\@Resumen}% \def\NotaPrevia{\@NotaPrevia}% @@ -981,7 +1018,11 @@ en la Repu'blica Bolivariana de Venezuela. \def\NotaExterna{\@NotaExterna}% \def\TituloReporte{\@TituloReporte}} +\setlength{\parindent}{0pt} +\setlength{\lineskip}{0pt}% + %% Posiciones (X,Y) de los objetos: i) fecha, ii) forma libre, iii) número de control, vi) denominación, v) nota final, vi) firmas. +%% Con * abren hacia arriba las cajas. Los valores negativos se aceptan. \NewDocumentCommand{\PosFecha}{s m m}{ \setlength{\@PosFechaX}{#2} \setlength{\@PosFechaY}{#3} @@ -1003,12 +1044,13 @@ en la Repu'blica Bolivariana de Venezuela. \IfBeginWith{#2}{-}{\booltrue{ControlXnegativo}}{\boolfalse{ControlXnegativo}} \IfBeginWith{#3}{-}{\booltrue{ControlYnegativo}}{\boolfalse{ControlYnegativo}}} -\NewDocumentCommand{\PosDenom}{s m m}{ - \setlength{\@PosDenomX}{#2} - \setlength{\@PosDenomY}{#3} - \IfBooleanTF{#1}{\booltrue{DenomYarriba}}{\boolfalse{DenomYarriba}} - \IfBeginWith{#2}{-}{\booltrue{DenomXnegativo}}{\boolfalse{DenomXnegativo}} - \IfBeginWith{#3}{-}{\booltrue{DenomYnegativo}}{\boolfalse{DenomYnegativo}}} +\NewDocumentCommand{\PosDenominacion}{s m m}{ + \setlength{\@PosDenominacionX}{#2} + \setlength{\@PosDenominacionY}{#3} + \IfBooleanTF{#1}{\booltrue{DenominacionYarriba}}{\boolfalse{DenominacionYarriba}} + \IfBeginWith{#2}{-}{\booltrue{DenominacionXnegativo}}{\boolfalse{DenominacionXnegativo}} + \IfBeginWith{#3}{-}{\booltrue{DenominacionYnegativo}}{\boolfalse{DenominacionYnegativo}}} +\let\PosDenom\PosDenominacion% TODO: Quitar en el futuro. \NewDocumentCommand{\PosNotaFinal}{s m m m}{ \setlength{\@PosNotaFinalXuno}{#2} @@ -1048,34 +1090,27 @@ en la Repu'blica Bolivariana de Venezuela. %% Separación extra entre los elementos en la factura. \def\SepItemsExtra#1{\setlength{\@SeparaItemsExtra}{#1}} -%% Separación interna entre la línea y el texto de la descripción. +%% Separación interna entre la línea y el texto de la descripción, y de la nota final. \def\SepDescripcion#1{\setlength{\@SeparaInternaDescripcion}{#1}} - \def\SepNotaFinal#1{\setlength{\@SeparaInternaNotaFinal}{#1}} -%% Grosor de la línea de las cajas del encabezado, curvatura de la esquina y sombra. +%% Para i) encabezado, ii) nota previa, iii) description, iv) nota final: grosor de la línea de las cajas, curvatura de la esquina y sombra. %% (si pedimos linea de 0pt, todo queda en cero y no se abre el ambiente TikZ). \NewDocumentCommand{\LineaEncabezado}{m g g}{ \setlength{\@GrosorLineaEncabezado}{#1} \IfValueT{#2}{\setlength{\@EsquinaLineaEncabezado}{#2}} \IfValueT{#3}{\setlength{\@SombraEncabezado}{#3}}} -%% Grosor de la línea de la nota previa, curvatura de la esquina y sombra. -%% (si pedimos linea de 0pt, todo queda en cero y no se abre el ambiente TikZ). \NewDocumentCommand{\LineaNotaPrevia}{m g g}{ \setlength{\@GrosorLineaNotaPrevia}{#1} \IfValueT{#2}{\setlength{\@EsquinaLineaNotaPrevia}{#2}} \IfValueT{#3}{\setlength{\@SombraNotaPrevia}{#3}}} -%% Grosor de la línea de la descripción, curvatura de la esquina y sombra. -%% (si pedimos linea de 0pt, todo queda en cero y no se abre el ambiente TikZ). \NewDocumentCommand{\LineaDescripcion}{m g g}{ \setlength{\@GrosorLineaDescripcion}{#1} \IfValueT{#2}{\setlength{\@EsquinaLineaDescripcion}{#2}} \IfValueT{#3}{\setlength{\@SombraDescripcion}{#3}}} -%% Grosor de la línea de la nota final, curvatura de la esquina y sombra. -%% (si pedimos linea de 0pt, todo queda en cero y no se abre el ambiente TikZ). \NewDocumentCommand{\LineaNotaFinal}{m g g}{ \setlength{\@GrosorLineaNotaFinal}{#1} \IfValueT{#2}{\setlength{\@EsquinaLineaNotaFinal}{#2}} @@ -1115,6 +1150,9 @@ en la Repu'blica Bolivariana de Venezuela. %% Tipo de letra para el texto en el encabezado de la factura. \def\LetraEncFactura#1{\gdef\@LetraEncFactura{#1\selectfont}} +%% Tipo de letra para el texto del membrete de la factura. +\def\LetraMembrete#1{\gdef\@LetraMembrete{#1\selectfont}} + %% Tipo de letra para el texto en el encabezado del reporte. \def\LetraEncReporte#1{\gdef\@LetraEncReporte{#1\selectfont}} @@ -1137,7 +1175,8 @@ en la Repu'blica Bolivariana de Venezuela. \def\LetraNotaFinal#1{\gdef\@LetraNotaFinal{#1\selectfont}} %% Letra para la denominación del documento ('FACTURA', 'NOTA DE CRÉDITO', 'NOTA DE DÉBITO', 'COTIZACIÓN',...). -\def\LetraDenom#1{\gdef\@LetraDenom{#1\selectfont}} +\def\LetraDenominacion#1{\gdef\@LetraDenominacion{#1\selectfont}} +\let\LetraDenom\LetraDenominacion% TODO: Quitar en el futuro. %% Letra para el texto 'FORMA LIBRE' \def\LetraFormalibre#1{\gdef\@LetraFormalibre{#1\selectfont}} @@ -1175,6 +1214,7 @@ en la Repu'blica Bolivariana de Venezuela. \end{textblock*}}% \fi}} +%% Comando para la firma del reporte. No es un comando del preámbulo. \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 \newif\if@Firma@Dibujo @@ -1229,14 +1269,15 @@ en la Repu'blica Bolivariana de Venezuela. \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. +%% 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. +%% Con * sale en todas las páginas; sin * sale sólo en la primera página. \NewDocumentCommand{\FondoReporte}{s m}{ \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. + \IfBooleanT{#1}{\@FondoReporteStartrue} \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. @@ -1246,11 +1287,10 @@ en la Repu'blica Bolivariana de Venezuela. \let\EstiloPagReporte\EstiloPagina %% El título para el reporte. +%% Con * sale el título en las cabeceras o pies. Sin *, no. \NewDocumentCommand{\TituloReporte}{s m}{ \gdef\@TituloReporte{#2}% - \IfBooleanTF{#1}{% Con '*' sale el título en las cabeceras o pies. Sin '*' no. - \gdef\@InfoPagina{\let\\\relax\@InfoPaginaTitulo}}% - {\let\@InfoPagina\@InfoPaginaNoTitulo}} + \IfBooleanTF{#1}{\gdef\@InfoPagina{\let\\\relax\@InfoPaginaTitulo}}{\let\@InfoPagina\@InfoPaginaNoTitulo}} %% Para cada cliente o para cada personalización se puede tener un archivo .def o .tex con su nombre y ciertas macros cargadas. Ese archivo lo ponemos incluir con '\Cliente' en lugar de usar \input, y la extensión deberá ser .def o .tex. \newcommand{\Cliente}[1]{% @@ -1258,18 +1298,19 @@ en la Repu'blica Bolivariana de Venezuela. \IfFileExists{#1.tex}{\input{#1.tex}}{ \CLASSERROR{No existe #1.def ni #1.tex}}}} -\input{factura.def}% Cargamos los valores predeterminados. +\input{factura.def} %% Comando para escribir el encabezado en la factura. -\newcommand\@EncabezadoFactura{% +\newcommand{\@EscribeEncFactura}{% \ifsinencabezadofactura \ifdefvoid{\@Resumen}{}{\CLASSWARNING{La opcio'n 'sinencabezadofactura' no es compatible con escribir un resumen. No aparecera' el resumen.}} + \ifdefvoid{\@EncabezadoFactura}{}{{\@LetraEncFactura\@EncabezadoFactura\par}}% \else \ifdefvoid{\@Resumen}{\@EscribeDatos}{\@EscribeDatosResumen}% \fi} %% Comando para escribir el encabezado en el reporte. -\newcommand\@EncabezadoReporte{% +\newcommand{\@EscribeEncReporte}{% \vspace*{-\topskip}% \if@FondoReporte \if@FondoReporteStar @@ -1277,10 +1318,22 @@ en la Repu'blica Bolivariana de Venezuela. \vspace*{\@InicioReporte}% \fi \fi - \ifsinencabezadoreporte\else\@EscribeDatosReporte\vskip\baselineskip\fi + \ifsinencabezadoreporte + \ifdefvoid{\@EncabezadoReporte}{}{{\setlength{\parindent}{0pt}\@LetraEncReporte\@EncabezadoReporte\vskip\baselineskip}}% + \else + \@EscribeDatosReporte\vskip\baselineskip + \fi \@LetraReporte} -%% El ambiente 'factura', usando el paquete 'environ' para su definición, y el comando auxiliar \@FacturaAuxCmd. +%% Comando \@EscribeMembrete para que el emisor pueda agregar su información de membrete de la factura (no usable en Venezuela para facturas fiscales que ya vienen membretadas). +\newcommand{\@EscribeMembrete}{% + \begin{textblock*}{\paperwidth}(0pt,0pt) + \begin{minipage}[t][\topmargin+1in]{\paperwidth} + \@LetraMembrete\@Membrete + \end{minipage} + \end{textblock*}} + +%% El entorno 'factura', usando el paquete 'environ' para su definición, y el comando auxiliar \@FacturaAuxCmd. %% Gracias a Heiko Oberdiek y a David Carlisle (Thanks to Heiko Oberdiek and David Carlisle). %% http://tex.stackexchange.com/questions/108565/know-the-cell-width-with-tabular-or-include-a-paragraph-box-without-specifying \NewEnviron{factura}{% @@ -1295,11 +1348,12 @@ en la Repu'blica Bolivariana de Venezuela. \NewEnviron{reverso}{% \if@factura - \expandafter\newgeometry\expandafter{\@GeometriaReverso}% - \topskip1sp% ¡¡No puedo poner 0 porque se genera una página en blanco extra!! + \expandafter\newgeometry\expandafter{\@GeometriaReverso}% + \topskip1sp% ¡¡No puedo poner 0 porque se genera una página en blanco extra!! \begin{minipage}[t][\textheight-\pagetotal]{\linewidth}% \thispagestyle{empty}% - \@LetraReverso\BODY + \@LetraReverso + \BODY \end{minipage} \clearpage \fi} @@ -1310,11 +1364,11 @@ en la Repu'blica Bolivariana de Venezuela. %% http://tex.stackexchange.com/questions/248944/how-to-put-before-lines \newcommand{\@DescripcionAuxCmd}[2]{% \immediate\write\@auxout{\gdef\noexpand\@TamDescripcion{\the\linewidth}}% Para poder establecer la línea diagonal hay que saber el tamaño del campo de la descripción. - \ifimpdesc\settowidth{\@TempDimen}{\@EscribeTipoDeImpuesto{#2}}\fi + \ifivadescripcion\settowidth{\@TempDimen}{\@EscribeTipoDeImpuesto{#2}}\fi \savebox{\@CajaPrueba}{% \parbox[t]{\linewidth}{% \David@XStart - \ifcentradesc\centering\arraybackslash\fi + \ifdescripcioncentrada\centering\arraybackslash\fi #1% \David@XEnd \ifdim\@TempDimen=0pt% @@ -1322,7 +1376,7 @@ en la Repu'blica Bolivariana de Venezuela. \hfill\kern\@SeparaFinLineaDesc\@EscribeTipoDeImpuesto{#2}% \fi \par\global\count1=\prevgraf}}% - \ifsinmarcas + \ifsinmarcasfactura \usebox{\@CajaPrueba}% \else \ifnum\count1=1% @@ -1334,7 +1388,7 @@ en la Repu'blica Bolivariana de Venezuela. \fi \parbox[t]{\linewidth-\@TempDimen-\@SeparaFinLineaDesc}{% \David@XStart - \ifcentradesc\centering\arraybackslash\fi + \ifdescripcioncentrada\centering\arraybackslash\fi #1% \David@XEnd \par @@ -1343,7 +1397,7 @@ en la Repu'blica Bolivariana de Venezuela. \count2=\prevgraf \loop \ifnum\count0=\count2 - \ifimpdesc + \ifivadescripcion \vskip-\baselineskip \mbox{}\hfill \rlap{% @@ -1433,8 +1487,6 @@ en la Repu'blica Bolivariana de Venezuela. \if@BIR\@EscribeTotalColAlicuota{R}\fi \@EscribeTotalColAlicuota{G}% \if@BIA\@EscribeTotalColAlicuota{A}\fi - %% (quitado por no vigente) - % \ifbool{Electro}{\@EscribeTotalColAlicuotaGDesc}{}% \fi} \newcommand{\@EscribeTotalColBI}[1]{% @@ -1443,25 +1495,20 @@ en la Repu'blica Bolivariana de Venezuela. \else \ifG\ \hfill(\csname @Alicuota#1porc\endcsname\%)\else\mbox{}\fi \fi - & \@LetraNumTotales\@SignoMonetarioAux\numprint{\csname BI#1\endcsname} \\} + & \@LetraNumTotales\@SignoMonetarioAux{\csname BI#1\endcsname} \\} \newcommand{\@EscribeTotalColAlicuota}[1]{% {\@LetraTitTotales \csname @@Alicuota#1\endcsname\ \hfill (\csname @Alicuota#1porc\endcsname\%)} - & \@LetraNumTotales\@SignoMonetarioAux\numprint{\csname Alicuota#1\endcsname} \\} - -%% (quitado por no vigente) - % \newcommand{\@EscribeTotalColAlicuotaGDesc}{% - % {\@LetraTitTotales \@@AlicuotaGDesc\ \hfill (\@AlicuotaGDescPorc\%)} - % & \@LetraNumTotales\@SignoMonetarioAux\numprint{\AlicuotaGDesc} \\} + & \@LetraNumTotales\@SignoMonetarioAux{\csname Alicuota#1\endcsname} \\} \newcommand{\@EscribeTotalColSubt}[1]{% {\@LetraTitTotales \csname @@Subtotal#1\endcsname} - & \@LetraNumTotales\@SignoMonetarioAux\numprint{\csname Subt#1\endcsname} \\} + & \@LetraNumTotales\@SignoMonetarioAux{\csname Subt#1\endcsname} \\} \newcommand{\@EscribeTotalColDesc}[1]{% {\@LetraTitTotales \csname @@Descuento#1\endcsname \csname if@Desc#1num\endcsname \else \ \hfill (\csname @Descuento#1porc\endcsname\%)\fi} - & \@LetraNumTotales\@SignoMonetarioAux\numprint{\csname Desc#1\endcsname} \\} + & \@LetraNumTotales\@SignoMonetarioAux{\csname Desc#1\endcsname} \\} %% Presentación de los totales en modo filas. \newcommand{\@EscribeTotalFilasBI}[1]{% @@ -1496,22 +1543,22 @@ en la Repu'blica Bolivariana de Venezuela. \fi} \newcommand{\@EscribeTotalFilasBIder}[1]{% - \@LetraNumTotales\@SignoMonetarioAux\numprint{\csname BI#1\endcsname}} + \@LetraNumTotales\@SignoMonetarioAux{\csname BI#1\endcsname}} \newcommand{\@EscribeTotalFilasAlicuotaizq}[1]{% \@LetraTitTotales\csname @@Alicuota#1\endcsname \ (\csname @Alicuota#1porc\endcsname\%)} \newcommand{\@EscribeTotalFilasAlicuotader}[1]{% - \@LetraNumTotales\@SignoMonetarioAux\numprint{\csname Alicuota#1\endcsname}} + \@LetraNumTotales\@SignoMonetarioAux{\csname Alicuota#1\endcsname}} %% (no implementado) % \newcommand{\@EscribeTotalFilasDescizq}[1]{% % \@LetraTitTotales\csname @@Descuento#1\endcsname \ (\csname @Descuento#1porc\endcsname\%)} % \newcommand{\@EscribeTotalFilasDescder}[1]{% - % \@LetraNumTotales\@SignoMonetarioAux\numprint{\csname Desc#1\endcsname}} + % \@LetraNumTotales\@SignoMonetarioAux{\csname Desc#1\endcsname}} -\newcommand{\@EscribeTotalFilasAuxTotal}{\@LetraTitTotal\@@Total: & \@LetraNumTotal\@SignoMonetarioAux\numprint{\Total}} +\newcommand{\@EscribeTotalFilasAuxTotal}{\@LetraTitTotal\@@Total: & \@LetraNumTotal\@SignoMonetarioAux{\Total}} \newcommand{\@EscribeTotalFilas}[2][]{% \begin{tabular}[b]{@{}l@{\extracolsep{1ex}}r@{}}% ¡Esta tabla tiene que abrir hacia abajo para que la separación entre las filas se pueda colocar con \@SeparaFilas! @@ -1528,8 +1575,19 @@ en la Repu'blica Bolivariana de Venezuela. \end{tabular}} %% Comando auxiliar para escribir el signo monetario cuando aplica -\newcommand{\@SignoMonetarioAux}{% - \ifsinmonedatotales\else\@Moneda\hspace*{\@EspacioSignoMonetario}\fi} +\NewDocumentCommand{\@SignoMonetarioAux}{s s m G{\@Moneda}}{% + \IfBooleanTF{#2} + {\global\@EscribeMonedatrue} + {\IfBooleanTF{#1}{\ifmonedaceldas\global\global\@EscribeMonedatrue\fi}{\ifsinmonedatotales\else\global\@EscribeMonedatrue\fi}}% + \ifmonedadespues + \else + \if@EscribeMoneda #4\hspace*{\@EspacioSignoMonetario}\fi + \fi + \numprint{#3}% + \ifmonedadespues + \if@EscribeMoneda \hspace*{\@EspacioSignoMonetario}#4\fi + \fi + \global\@EscribeMonedafalse} \newcommand{\@GeneraCajasTotalesFilas}{% \if@Exento @@ -1561,14 +1619,14 @@ en la Repu'blica Bolivariana de Venezuela. \hspace*{\@SepTotales}\usebox{\@CajaAliG}% \if@Exento\hspace*{\@SepTotales}\usebox{\@CajaBIE}\fi \hspace*{\@SepTotales}\usebox{\@CajaTotal}% - \ifcentrado\hspace*{\@SepTotales}\fi} + \iffilascentradas\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 - \ifcentrado\hspace*{\@SepTotales}\fi} + \iffilascentradas\hspace*{\@SepTotales}\fi} \newcommand{\@EscribeTotalesFilasRGA}{% \hspace*{\@SepTotales}\usebox{\@CajaBIAliR}% @@ -1579,17 +1637,17 @@ en la Repu'blica Bolivariana de Venezuela. \newcommand{\@EscribeTotalesFilasRGAET}{% \@EscribeTotalesFilasRGA \if@Exento\usebox{\@CajaBIET}\else\usebox{\@CajaTotal}\fi - \ifcentrado\hspace*{\@SepTotales}\fi} + \iffilascentradas\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. {\ifG \@LetraTipoIVA - \ifx#1G\@DenomAlicuotaG\fi - \ifx#1R\@DenomAlicuotaR\fi - \ifx#1A\@DenomAlicuotaA\fi - \ifx#1E\@DenomAlicuotaE\fi + \ifx#1G\@SimboloAlicuotaG\fi + \ifx#1R\@SimboloAlicuotaR\fi + \ifx#1A\@SimboloAlicuotaA\fi + \ifx#1E\@SimboloAlicuotaE\fi \fi}} %% Comando para poner en cero los contadores de los totales porque el ambiente de la factura se evalúa tres veces y los totales se sumarían todos tres veces. @@ -1609,36 +1667,23 @@ en la Repu'blica Bolivariana de Venezuela. \FPset\DescA{0}\global\let\DescA\DescA \FPset\DescX{0}\global\let\DescX\DescX \FPset\AlicuotaG{0}\global\let\AlicuotaG\AlicuotaG - %% (quitado por no vigente) - % \FPset\AlicuotaGDesc{0}\global\let\AlicuotaGDesc\AlicuotaGDesc \FPset\AlicuotaR{0}\global\let\AlicuotaR\AlicuotaR \FPset\AlicuotaA{0}\global\let\AlicuotaA\AlicuotaA} -%% Comandos para calcular todos los totales parciales y el total general. +%% Comandos para calcular todos los totales parciales y los totales generales. \newcommand{\@CalculaTotalesI}{% \FPifeq\SubtG{0}\else\@CalculaTotalesII{G}\fi \FPifeq\SubtR{0}\else\@CalculaTotalesII{R}\fi \FPifeq\SubtA{0}\else\@CalculaTotalesII{A}\fi \FPifeq\SubtE{0}\else\@CalculaTotalesII{E}\fi - %% (quitado por no vigente) - % \ifbool{Electro}{% - % \FPiflt\BIG\@AlicuotaGDescLimite - % \let\@AlicuotaGDesc\@AlicuotaGDescBajo - % \else - % \let\@AlicuotaGDesc\@AlicuotaGDescAlto - % \fi - % \FPupn\@AlicuotaGDescPorc{\@AlicuotaGDesc{} 100 * \@DigitosPorc{} round clip}% - % \FPupn\AlicuotaGDesc{\BIG{} \@AlicuotaGDesc{} * \@DigitosMoneda{} round}% - % \global\let\AlicuotaGDesc\AlicuotaGDesc - % \global\let\@AlicuotaGDescPorc\@AlicuotaGDescPorc - % \global\let\@AlicuotaGDesc\@AlicuotaGDesc}{}% \FPupn\Total{\BIE{} \BIR{} + \BIG{} + \BIA{} + \AlicuotaR{} + \AlicuotaG{} + \AlicuotaA{} + \@DigitosMoneda{} round}% - %% (quitado por no vigente) arriba se sumaba también \AlicuotaGDesc{}. - \global\let\Total\Total} + \FPupn\TotalDivisa{\Total{} \@TasaCambio{} div \@DigitosMoneda{} round}% + \global\let\Total\Total + \global\let\TotalDivisa\TotalDivisa} \newcommand{\@CalculaTotalesII}[1]{% % Sumamos al descuento. - \expandafter\FPupn\csname Desc#1\endcsname{\csname @Descuento#1factor\endcsname{} \csname Subt#1\endcsname{} * \csname @Descuento#1num\endcsname{} + \@DigitosMoneda{} round}% + \expandafter\FPupn\csname Desc#1\endcsname{\csname @Descuento#1factor\endcsname{} \csname Subt#1\endcsname{} * \csname @Descuento#1num\endcsname{} \@TasaCambio{} * + \@DigitosMoneda{} round}% \global\expandafter\let\csname Desc#1\expandafter\endcsname\csname Desc#1\endcsname % Sumamos a la base imponible. \expandafter\FPupn\csname BI#1\endcsname{\csname Desc#1\endcsname{} \csname Subt#1\endcsname{} - \@DigitosMoneda{} round}% @@ -1694,7 +1739,7 @@ en la Repu'blica Bolivariana de Venezuela. %% Aquí tenemos que hacer coincidir los parámetros de \@CalculaItem con los de \@ITEM para poder hacer %% \let\@CalculaItem\@ITEM cuando no hay factura sino solamente reporte. \NewDocumentCommand{\@CalculaItem}{m m m o m m +o}{% - \gdef\@PrecioUtemp##1{\FPupn\PrecioUtemp{##1 \PrecioUtempx{} * clip}}% + \gdef\@PrecioUtemp##1{\FPupn\PrecioUtemp{##1 \@TasaCambio{} * clip}}% \addtocounter{NumItem}{1}% % Calculamos. \@PrecioUtemp{#5}% @@ -1761,6 +1806,7 @@ en la Repu'blica Bolivariana de Venezuela. \fi \fi} +%% Segundo \AtEndPreamble. %% 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. @@ -1864,7 +1910,7 @@ en la Repu'blica Bolivariana de Venezuela. \David@XRight{\@PrecioUAuxCmd{% \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}% \else - \ifimpdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioU} + \ifivadescripcion\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \@SignoMonetarioAux*{\PrecioU}% \fi}}% duc. \fi} {\@DescripcionAuxCmd{##3}{##1}}% cdu. @@ -1877,7 +1923,7 @@ en la Repu'blica Bolivariana de Venezuela. \David@XRight{\@PrecioUAuxCmd{% \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}% \else - \ifimpdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioU} + \ifivadescripcion\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \@SignoMonetarioAux*{\PrecioU}% \fi}}% dcu y cdu. \fi}% & % Quinto -opcional- campo: Subtotal (para luego descuentos). @@ -1885,7 +1931,7 @@ en la Repu'blica Bolivariana de Venezuela. \David@XRight{\@PrecioSAuxCmd{% \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}% \else - \ifimpdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioS} + \ifivadescripcion\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \@SignoMonetarioAux*{\PrecioS}% \fi}}}{} & % Sexto -opcional- campo: Descuento. @@ -1908,7 +1954,7 @@ en la Repu'blica Bolivariana de Venezuela. \David@XRight{\@PrecioTAuxCmd{% \ifx##1X \hfill \@CaracterItemXVacio \hfill\mbox{}% \else - \ifimpdesc\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \numprint{\PrecioT} + \ifivadescripcion\else\@EscribeTipoDeImpuesto{##1}\fi \hfill \@LetraNumeros \@SignoMonetarioAux*{\PrecioT}% \fi}}% % Escribimos al csv. \ifcsv @@ -1965,7 +2011,7 @@ en la Repu'blica Bolivariana de Venezuela. \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}% + \ifduc \@PrecioUAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@PrecioU \ifmonedaceldas\else\space (\Moneda)\fi \hfill\mbox{}}\fi}% &% Avanzamos hasta el precio unitario, o la cantidad, o columna fantasma cuando es 'sincantidad'. \ifbool{SinCantidad}{} {% @@ -1973,16 +2019,16 @@ en la Repu'blica Bolivariana de Venezuela. \ifduc \@CantidadAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@Cantidad \hfill\mbox{}}% \else - \@PrecioUAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@PrecioU \space (\Moneda)\hfill\mbox{}}% + \@PrecioUAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@PrecioU \ifmonedaceldas\else\space (\Moneda)\fi \hfill\mbox{}}% \fi}% &% Avanzamos hasta el subtotal, que puede o no existir, - \ifbool{Subtotal}{\@PrecioSAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@PrecioS \space (\Moneda)\hfill\mbox{}}}{}% + \ifbool{Subtotal}{\@PrecioSAuxCmd{\mbox{}\hfill \@LetraTitColumnas \@@PrecioS \ifmonedaceldas\else\space (\Moneda)\fi \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{}}% + \@PrecioTAuxCmd{\mbox{}\hfill \@LetraTitColumnas \ifbool{SinCantidad}{\@@Precio}{\@@PrecioT}\ifmonedaceldas\else\space (\Moneda)\fi \hfill\mbox{}}% \if@LineaHastaFinal \zsaveposx{LineaNodoBCoordX}\fi \\ \ifbool{SinLineaHoriTit}{}{\hline}% @@ -2028,18 +2074,16 @@ en la Repu'blica Bolivariana de Venezuela. \else % Modo de columnas: Abrimos la tabla para escribir los totales y le agregamos las líneas verticales externas, si aplica. \@ColumnasMultiColumnTotalesAuxCmd - \ifagrupado + \ifagrupatotales \@EscribeTotalColAgrupado \else \if@Exento \@EscribeTotalCol{E}\fi \if@BIR\@EscribeTotalCol{R}\ifsinivaexpresado\else\@EscribeTotalColAlicuota{R}\fi\fi \@EscribeTotalCol{G}\ifsinivaexpresado\else\@EscribeTotalColAlicuota{G}\fi - %% (quitado por no vigente) - % \ifbool{Electro}{\@EscribeTotalColAlicuotaGDesc}{}% \if@BIA\@EscribeTotalCol{A}\ifsinivaexpresado\else\@EscribeTotalColAlicuota{A}\fi\fi \fi \ifsinivaexpresado\else\cline{2-2}\fi - \hfill \@LetraTitTotal\@@Total & \@LetraNumTotal\@SignoMonetarioAux\numprint{\Total}\\ + \hfill \@LetraTitTotal\@@Total & \@LetraNumTotal\@SignoMonetarioAux{\Total}\\ \end{tabular}\endgroup \\ \ifdefvoid{\@NotaInterna}{}{\ifbool{SinLineaHoriNI}{}{\hline}\@ColumnasMultiColumnNotaIntAuxCmd}% @@ -2057,7 +2101,7 @@ en la Repu'blica Bolivariana de Venezuela. \ifsinexpandir\vfill\fi \@GeneraCajasTotalesFilas \newbox{\@CajaTotal}% - \savebox{\@CajaTotal}{{\@LetraTitTotal\@@Total:} \@LetraNumTotal\@SignoMonetarioAux\numprint{\Total}}% + \savebox{\@CajaTotal}{{\@LetraTitTotal\@@Total:} \@LetraNumTotal\@SignoMonetarioAux{\Total}}% % \ifnum \value{@IVANoGeneral}=0% \newbox{\@CajaGET}% @@ -2068,7 +2112,7 @@ en la Repu'blica Bolivariana de Venezuela. \hspace*{\@SepTotales}% \usebox{\@CajaBIAliG}\hspace*{\@SepTotales}% \if@Exento\usebox{\@CajaBIET}\else\usebox{\@CajaTotal}\fi - \ifcentrado\hspace*{\@SepTotales}\fi + \iffilascentradas\hspace*{\@SepTotales}\fi \fi \fi \ifnum \value{@IVANoGeneral}=1% @@ -2082,9 +2126,9 @@ en la Repu'blica Bolivariana de Venezuela. \usebox{\@CajaBIAliG}\hspace*{\@SepTotales}% \if@BIA\usebox{\@CajaBIAliA}\hspace*{\@SepTotales}\fi \\[\@SeparaFilas]\mbox{}% - \ifcentrado\hspace*{\@SepTotales}\else\hfill\fi + \iffilascentradas\hspace*{\@SepTotales}\else\hfill\fi \if@Exento\usebox{\@CajaBIE}\hspace*{\@SeparaMinTotales}\fi\usebox{\@CajaTotal}% - \ifcentrado\hspace*{\@SepTotales}\fi + \iffilascentradas\hspace*{\@SepTotales}\fi \fi \fi \ifnum \value{@IVANoGeneral}=2% @@ -2098,9 +2142,9 @@ en la Repu'blica Bolivariana de Venezuela. \ifdim \the\wd\@CajaRGA < \textwidth \@EscribeTotalesFilasRGA \\[\@SeparaFilas]\mbox{}% - \ifcentrado\hspace*{\@SepTotales}\else\hfill\fi + \iffilascentradas\hspace*{\@SepTotales}\else\hfill\fi \if@Exento\usebox{\@CajaBIE}\hspace*{\@SeparaMinTotales}\fi\usebox{\@CajaTotal}% - \ifcentrado\hspace*{\@SepTotales}\fi + \iffilascentradas\hspace*{\@SepTotales}\fi \else% Aquí casi cualquier cosa tiene aspecto feo. \CLASSWARNING{Es mejor no usar la opcio'n de totalizacio'n en filas en este caso, o disminuir los tama~nos de los tipos de letra para la totalizacio'n}% \centering{% @@ -2122,7 +2166,7 @@ en la Repu'blica Bolivariana de Venezuela. \ifexpandecuadro\zsaveposy{EspacioVacioFinal}\fi \vspace*{\@SeparaVertical}\par \ifdefvoid{\@NotaExterna}{}{% - \parbox[t]{\linewidth}{\@LetraNotaExterna\@NotaExterna}\vspace*{\@SeparaVertical}\ifsinexpandir\vfill\fi}} + \parbox[t]{\linewidth}{\@LetraNotaExterna\@NotaExterna}\vspace*{\@SeparaVertical}\ifsinexpandir\vfill\fi}\par} \ifbool{SinCantidad} % Definamos todos los comandos \Item***. El descuento es opcional; por eso usamos G{0} en \NewDocumentCommand. @@ -2186,25 +2230,24 @@ en la Repu'blica Bolivariana de Venezuela. \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{\@PosDenominacionX}{\oddsidemargin+1in}% \addtolength{\@PosFormalibreX}{\oddsidemargin+1in}% \addtolength{\@PosControlX}{\oddsidemargin+1in}% \addtolength{\@PosNotaFinalXuno}{\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} + \@EscribeEncFactura} \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 - \ifsindenom\else\@PosicionaDenom\fi + \ifsindenominacion\else\@PosicionaDenominacion\fi \ifprefactura\@PosicionaNumControl\@PosicionaFormalibre\fi \ifnum\value{@Firmas}=0\else\@PosicionaFirmas\fi - \ifdefvoid{\@NotaFinal}{}{\@PosicionaNotaFinal}} + \ifdefvoid{\@NotaFinal}{}{\@PosicionaNotaFinal} + \ifdefvoid{\@Membrete}{}{\@EscribeMembrete}} \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} @@ -2236,8 +2279,9 @@ en la Repu'blica Bolivariana de Venezuela. \let\@ITEM\@CalculaItem \BODY \@CalculaTotalesI} - \RenewEnviron{reverso}{} - \NewDocumentCommand{\Descripcion}{+m}{} + \RenewEnviron{reverso}{}% + \gdef\@EncabezadoFactura{}% + \NewDocumentCommand{\Descripcion}{+m}{}% \fi \if@reporte @@ -2252,7 +2296,7 @@ en la Repu'blica Bolivariana de Venezuela. \fi \let\headwidth\textwidth \@CargaFondoReporte - \@EncabezadoReporte + \@EscribeEncReporte \ifdefvoid{\@EstiloPaginaResto}{% \if@FondoReporteStar% Si no usamos \EstiloPagina 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}% @@ -2285,7 +2329,7 @@ en la Repu'blica Bolivariana de Venezuela. %% Comando para el fondo del reporte. \newcommand{\@CargaFondoReporte}{% - \begin{textblock*}{\paperwidth}(0pt,0pt)% Tuve que abrir el textblock* aquí para que aplique siempre; de esta manera se corrige un defecto que se produce cuando se usa \vspace* al inicio de la página (dentro de \@EncabezadoReporte). + \begin{textblock*}{\paperwidth}(0pt,0pt)% Tuve que abrir el textblock* aquí para que aplique siempre; de esta manera se corrige un defecto que se produce cuando se usa \vspace* al inicio de la página (dentro de \@EscribeEncReporte). \if@FondoReporte \if@FondoReporteStar \AddToShipoutPictureBG{\includegraphics{\@FondoReporte}}% @@ -2335,13 +2379,13 @@ en la Repu'blica Bolivariana de Venezuela. \end{textblock*}} %% Comando que coloca la denominación del documento. -\newcommand{\@PosicionaDenom}{% - \savebox{\@CajaDenom}{\@EstiloDenom}% - \ifbool{DenomXnegativo}{\addtolength{\@PosDenomX}{\textwidth-\wd\@CajaDenom}}{}% - \ifbool{DenomYnegativo}{\addtolength{\@PosDenomY}{\paperheight}}{}% - \ifbool{DenomYarriba}{\addtolength{\@PosDenomY}{-\ht\@CajaDenom-\dp\@CajaDenom}}{}% - \begin{textblock*}{\wd\@CajaDenom}(\@PosDenomX,\@PosDenomY)% - \usebox{\@CajaDenom}% +\newcommand{\@PosicionaDenominacion}{% + \savebox{\@CajaDenominacion}{\@EstiloDenominacion}% + \ifbool{DenominacionXnegativo}{\addtolength{\@PosDenominacionX}{\textwidth-\wd\@CajaDenominacion}}{}% + \ifbool{DenominacionYnegativo}{\addtolength{\@PosDenominacionY}{\paperheight}}{}% + \ifbool{DenominacionYarriba}{\addtolength{\@PosDenominacionY}{-\ht\@CajaDenominacion-\dp\@CajaDenominacion}}{}% + \begin{textblock*}{\wd\@CajaDenominacion}(\@PosDenominacionX,\@PosDenominacionY)% + \usebox{\@CajaDenominacion}% \end{textblock*}} %% Comando que coloca la(s) fecha(s). @@ -2363,7 +2407,7 @@ en la Repu'blica Bolivariana de Venezuela. \ifdefvoid{\@Contacto}{}{{\bfseries \@@Contacto} \@Contacto \par}% \ifdefvoid{\@TituloReporte}{}{\vspace*{\baselineskip}{\@LetraTitReporte \centering \@TituloReporte \par}}}} -%% Comando que coloca las dos cajas del encabezado: la de los datos del cliente y la del resumen. +%% Comando que coloca las dos cajas del encabezado: la de los datos del cliente y la del -opcional- resumen. \newcommand{\@EscribeDatos}{% {\@LetraEncFactura% Abrimos un nuevo grupo para que el cambio de tipografía y la redefinición del entorno 'tikzpicture' sean locales. \ifdim\@GrosorLineaEncabezado=0pt% @@ -2396,8 +2440,8 @@ en la Repu'blica Bolivariana de Venezuela. %% Comando que coloca la caja para la nota previa, con la posibilidad de TikZ. \newcommand{\@EscribeNotaPrevia}{% {% Abrimos un nuevo grupo para que la redefinición del entorno 'tikzpicture' sea local. - \baselineskip0pt \ifdefvoid{\@NotaPrevia}{}{% + \baselineskip0pt \ifdim\@GrosorLineaNotaPrevia=0pt% \setlength{\@SeparaInternaNotaPrevia}{0pt}\setlength{\@EsquinaLineaNotaPrevia}{0pt}\setlength{\@SombraNotaPrevia}{0pt}% \renewenvironment{tikzpicture}{\NewDocumentCommand{\node}{o +m}{####2}}{}% @@ -2502,8 +2546,6 @@ en la Repu'blica Bolivariana de Venezuela. \immediate\write\csv{Totales: \@@SubtotalG: \Moneda \SubtG^^JTotales: \@@DescuentoG: \Moneda \DescG}% \fi \immediate\write\csv{Totales: \@@BIG: \Moneda \BIG^^JTotales: \@@AlicuotaG: \Moneda \AlicuotaG}% - %% (quitado por no vigente) - % \FPifeq\AlicuotaGDesc{0}\else\immediate\write\csv{Totales: \@@AlicuotaGDesc: \Moneda \AlicuotaGDesc}\fi \if@BIA \if@DescA \immediate\write\csv{Totales: \@@SubtotalA: \Moneda \SubtA^^JTotales: \@@DescuentoA: \Moneda \DescA}% diff --git a/Master/texmf-dist/tex/latex/factura/factura.def b/Master/texmf-dist/tex/latex/factura/factura.def index 837b503b4ca..ccfe2f88cfb 100644 --- a/Master/texmf-dist/tex/latex/factura/factura.def +++ b/Master/texmf-dist/tex/latex/factura/factura.def @@ -6,7 +6,7 @@ %% %% factura.dtx (with options: `def') %% -%% Copyright 2020 Emilio Augusto Lazo Zaia <emiliolazozaia@gmail.com> +%% Copyright 2022 Emilio Augusto Lazo Zaia <emiliolazozaia@gmail.com> %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either @@ -26,22 +26,22 @@ %% with its derived files factura.ins, factura.cls, factura.def, %% factura-ejemplo-aux.tex, factura-ejemplo-firma.tex, %% factura-ejemplo-fondo.tex, factura-ejemplo-membrete.tex, +%% factura-ejemplo-notadecredito.tex, factura-ejemplo-notadedebito.tex, %% factura-ejemplo-cotizacion.tex, factura-ejemplo-prefactura.tex, %% factura-ejemplo-factura01.tex, factura-ejemplo-factura02.tex, %% factura-ejemplo-factura03.tex, factura-ejemplo-factura04.tex, %% factura-ejemplo-factura05.tex, factura-ejemplo-factura06.tex, %% factura-ejemplo-factura07.tex, factura-ejemplo-factura08.tex, %% factura-ejemplo-factura09.tex, factura-ejemplo-factura10.tex, -%% factura-ejemplo-notadecredito.tex, factura-ejemplo-notadedebito.tex, %% factura-ejemplo-reporte1.tex, factura-ejemplo-reporte2.tex, -%% factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. +%% factura-ejemplo-reporte3.tex, factura-ejemplo-reporte4.tex +%% and factura-beispiel-rechnung.tex. %% \ProvidesFile{factura.def} -[2020/11/15 v4.00 +[2022/01/22 v4.32 Archivo de valores iniciales y condiciones de borde para factura.cls ] -%% En las notas de crédito y débito, la leyenda aclaratoria de a cuál factura se hace referencia está alojada en estas macros, definidas en |factura.def|. Estas macros |\TextoNotaDeCredito| y |\TextoNotaDeDebito| están definidas de la siguiente forma: %% La geometría para la factura, su reverso, y el reporte. %% Para la factura, el margen superior está definido desde el encabezado con los datos del cliente; %% el margen inferior está definido hasta el final de la descripción (o del cuadro de la factura si no hay descripción). @@ -52,10 +52,6 @@ Archivo de valores iniciales y condiciones de borde para factura.cls %% Factores para los distintos IVA: \def\@AlicuotaG{0.16} -%% (quitado por no vigente) - % \def\@AlicuotaGDescBajo{0.03} - % \def\@AlicuotaGDescAlto{0.05} - % \def\@AlicuotaGDescLimite{2000000} \def\@AlicuotaR{0.08} \def\@AlicuotaA{0.31} @@ -69,13 +65,14 @@ Archivo de valores iniciales y condiciones de borde para factura.cls \def\@FormatoFechaEntrada{dd-mm-yyyy} \def\@FechaSeparadores{-} -%% La moneda: +%% La moneda y la divisa: \def\@Moneda{Bs.} +\def\@Divisa{\$} %% (quitado por no vigente) % \def\@MonedaBs{Bs.} % \def\@MonedaBsS{Bs.S} % \def\@MonedaBsF{Bs.F} -\setlength\@EspacioSignoMonetario{.666ex} +\setlength{\@EspacioSignoMonetario}{1.5pt} %% (quitado por no vigente) %% Las fechas de la entrada de la reconversión monetaria: @@ -83,10 +80,10 @@ Archivo de valores iniciales y condiciones de borde para factura.cls % \DTMsavedate{FechaBs}{2019-02-15} %% Al lado de cada ítem va la letra que designa el gravamen que aplica sobre él: -\def\@DenomAlicuotaG{G} -\def\@DenomAlicuotaR{R} -\def\@DenomAlicuotaA{A} -\def\@DenomAlicuotaE{(E)} +\def\@SimboloAlicuotaG{G} +\def\@SimboloAlicuotaR{R} +\def\@SimboloAlicuotaA{A} +\def\@SimboloAlicuotaE{(E)} %% Macros que guardan textos que corresponden a nombres de campos: \def\@@Fecha{Fecha de emisi\'on:} @@ -95,10 +92,10 @@ Archivo de valores iniciales y condiciones de borde para factura.cls \def\@@Control{N\textordmasculine\space CONTROL} \def\@@Datos{Datos del cliente} \def\@@Resumen{Resumen del servicio} -\def\@@DenomFactura{FACTURA} -\def\@@DenomCotiza{COTIZACI\'ON} -\def\@@DenomNotaDeCredito{NOTA DE CR\'EDITO} -\def\@@DenomNotaDeDebito{NOTA DE D\'EBITO} +\def\@@DenominacionFactura{FACTURA} +\def\@@DenominacionCotizacion{COTIZACI\'ON} +\def\@@DenominacionNotaDeCredito{NOTA DE CR\'EDITO} +\def\@@DenominacionNotaDeDebito{NOTA DE D\'EBITO} \def\@@RazonSocial{Raz\'on social:} \def\@@Nombre{Nombre:} \def\@@RIF{R.I.F.:} @@ -122,8 +119,6 @@ Archivo de valores iniciales y condiciones de borde para factura.cls \def\@@IVA{IVA} \def\@@PrecioT{Precio T.} \def\@@AlicuotaG{IVA G} -%% (quitado por no vigente) - % \def\@@AlicuotaGDesc{Descuento IVA G} \def\@@AlicuotaR{IVA R} \def\@@AlicuotaA{IVA A} \def\@@BIG{BI G} @@ -140,13 +135,13 @@ Archivo de valores iniciales y condiciones de borde para factura.cls \def\@@SubtotalA{Subtotal A} \def\@@SubtotalE{Subtotal E} -%% (quitado por no vigente) -%% Texto predeterminado para la nota interna por el descuento presidencial. - % \def\@TextoDescuentoPresidencial{Se aplica un descuento del \@AlicuotaGDescPorc\% al IVA General seg\'un Decreto Presidencial 3.085 en Gaceta Oficial 41.239.} - %% Texto a mostrar en la nota de crédito o débito referenciando la factura a corregir. -\def\TextoNotaDeCredito{Nota de cr\'edito sobre la factura \NotaNum \space de fecha \NotaFecha.} -\def\TextoNotaDeDebito{Nota de d\'ebito sobre la factura \NotaNum \space de fecha \NotaFecha.} +%% Texto a mostrar por la conversión moneda/divisa. +\def\TextoNotaDeCredito{\slshape Nota de cr\'edito sobre la factura \NumNota \space de fecha \FechaNota.} +\def\TextoNotaDeDebito{\slshape Nota de d\'ebito sobre la factura \NumNota \space de fecha \FechaNota.} +\def\TextoTasaCambio{\slshape Tasa de cambio utilizada:\space + {\bfseries \@SignoMonetarioAux**{\@TasaCambio}/\Divisa.} + Total {\bfseries \@SignoMonetarioAux**{\TotalDivisa}{\@Divisa}.}} %% Texto a mostrar como cabecera o pie de página en los reportes, dependiente de si el reporte no tiene título declarado o sí lo tiene. \def\@InfoPaginaNoTitulo{\@LetraInfoPagina Reporte correspondiente a la factura n\'umero \@Num \space de fecha \@Fecha} @@ -174,7 +169,7 @@ Archivo de valores iniciales y condiciones de borde para factura.cls %% Separación entre el teléfono y el carácter \@CaracterSeparaTelefonoEmail, y luego desde ese carácter hasta el email, %% para cuando no hay resumen. -\setlength{\@SeparaTelefonoEmail}{0.666em} +\setlength{\@SeparaTelefonoEmail}{0.3cm} %% Grosor de la línea de 'fancyhdr' para las cabeceras, en aquellas donde haya línea. \setlength{\@GrosorLineaInfoPag}{0.4pt} @@ -184,10 +179,11 @@ Archivo de valores iniciales y condiciones de borde para factura.cls \setlength{\@FirmaReporteExcesoLinea}{1.5cm} %% Posiciones (X,Y) de los objetos: i) fecha, ii) forma libre, iii) número de control, vi) denominación, v) nota final, vi) firmas. +%% Con * abren hacia arriba las cajas. Los valores negativos se aceptan. \PosFecha*{-0cm}{4.5cm} \PosFormalibre*{0cm}{-3.5cm} \PosControl*{0cm}{-2.4cm} -\PosDenom*{0cm}{4.5cm} +\PosDenominacion*{0cm}{4.5cm} \PosNotaFinal{0cm}{0cm}{-5.3cm} %% La nota final se define con un X_inicial, un X_final y un Y_inicial (Xo,Xf,Y) \PosFirmas{5cm}{1cm}{-2.4cm} @@ -214,25 +210,15 @@ Archivo de valores iniciales y condiciones de borde para factura.cls %% Separación extra entre los elementos en la factura. \SepItemsExtra{0pt} -%% Separación interna entre la línea y el texto de la descripción. +%% Separación interna entre la línea y el texto de la descripción, y de la nota final. \SepDescripcion{6pt} - \SepNotaFinal{5pt} -%% Grosor de la línea de las cajas del encabezado, curvatura de la esquina y sombra. +%% Para i) encabezado, ii) nota previa, iii) description, iv) nota final: grosor de la línea de las cajas, curvatura de la esquina y sombra. %% (si pedimos linea de 0pt, todo queda en cero y no se abre el ambiente TikZ). \LineaEncabezado{0.4pt}{10pt}{0pt} - -%% Grosor de la línea de la nota previa, curvatura de la esquina y sombra. -%% (si pedimos linea de 0pt, todo queda en cero y no se abre el ambiente TikZ). \LineaNotaPrevia{0.4pt}{7pt}{0pt} - -%% Grosor de la línea de la descripción, curvatura de la esquina y sombra. -%% (si pedimos linea de 0pt, todo queda en cero y no se abre el ambiente TikZ). \LineaDescripcion{0.4pt}{0pt}{4pt} - -%% Grosor de la línea de la nota final, curvatura de la esquina y sombra. -%% (si pedimos linea de 0pt, todo queda en cero y no se abre el ambiente TikZ). \LineaNotaFinal{0pt}{0pt}{0pt} %% El espacio vertical que hay que avanzar sólo en la primera página del reporte antes de empezar a escribir sobre él. Usable cuando la primera página tiene un membrete y las demás no, es decir, cuando se usa \FondoReporte y no \FondoReporte*. @@ -269,6 +255,9 @@ Archivo de valores iniciales y condiciones de borde para factura.cls %% Tipo de letra para el texto en el encabezado de la factura. \LetraEncFactura{\fontsize{11}{12.5}} +%% Tipo de letra para el texto del membrete de la factura. +\LetraMembrete{\fontsize{13}{14}} + %% Tipo de letra para el texto en el encabezado del reporte. \LetraEncReporte{\fontsize{13}{16}} @@ -291,7 +280,7 @@ Archivo de valores iniciales y condiciones de borde para factura.cls \LetraNotaFinal{\fontsize{12}{12}} %% Letra para la denominación del documento ('FACTURA', 'NOTA DE CRÉDITO', 'NOTA DE DÉBITO', 'COTIZACIÓN',...). -\LetraDenom{\fontsize{14}{14}\bfseries} +\LetraDenominacion{\fontsize{14}{14}\bfseries} %% Letra para el texto 'FORMA LIBRE' \LetraFormalibre{\fontsize{14}{14}\bfseries\color{blue}} @@ -437,12 +426,12 @@ Archivo de valores iniciales y condiciones de borde para factura.cls \newcommand{\@EstiloNumControl}{% \renewcommand{\baselinestretch}{0}\selectfont \begin{tabular}{@{\extracolsep{0pt}}l} - \@LetraDenom \@@Control \\[.4em] - {\@LetraDenom\@NumSerieControl-}\space\@LetraNumeracion\@NumControl \\ + \@LetraDenominacion \@@Control \\[.4em] + {\@LetraDenominacion\@NumSerieControl-}\space\@LetraNumeracion\@NumControl \\ \end{tabular}} -\newcommand{\@EstiloDenom}{% - \@LetraDenom\@Denominacion +\newcommand{\@EstiloDenominacion}{% + \@LetraDenominacion\@Denominacion \ifsinnumero \else \space\space{\@LetraNumeracion N\textordmasculine\space\@Num}% |