summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-11-16 22:14:32 +0000
committerKarl Berry <karl@freefriends.org>2020-11-16 22:14:32 +0000
commitb0a10333088aacb507dc2370a5fa57f117417288 (patch)
treea58e68ee3af904dd5c4c5aab0b1bc23a917754ad /Master/texmf-dist/tex
parent95813d4e6ef2d9f8eb6f26893f2dab04ba89c5a1 (diff)
factura (16nov20)
git-svn-id: svn://tug.org/texlive/trunk@56948 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r--Master/texmf-dist/tex/latex/factura/factura.cls313
-rw-r--r--Master/texmf-dist/tex/latex/factura/factura.def158
2 files changed, 332 insertions, 139 deletions
diff --git a/Master/texmf-dist/tex/latex/factura/factura.cls b/Master/texmf-dist/tex/latex/factura/factura.cls
index fec892e43c7..4b6be8a9114 100644
--- a/Master/texmf-dist/tex/latex/factura/factura.cls
+++ b/Master/texmf-dist/tex/latex/factura/factura.cls
@@ -32,16 +32,18 @@
%% 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.
%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{factura}
-[2020/04/18 v3.73
+[2020/11/15 v4.00
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.
@@ -69,6 +71,9 @@ en la Repu'blica Bolivariana de Venezuela.
\newbool{ControlXnegativo}
\newbool{ControlYarriba}
\newbool{ControlYnegativo}
+\newbool{FormalibreXnegativo}
+\newbool{FormalibreYarriba}
+\newbool{FormalibreYnegativo}
\newbool{DenomXnegativo}
\newbool{DenomYarriba}
\newbool{DenomYnegativo}
@@ -86,7 +91,6 @@ en la Repu'blica Bolivariana de Venezuela.
\newif\ifcotizacion
\newif\ifcsv
\newif\ifdcu
-\newif\ifdenom
\newif\ifdescuentos
\newif\ifdosfirmas
\newif\ifduc
@@ -99,9 +103,14 @@ en la Repu'blica Bolivariana de Venezuela.
\newif\ifiva
\newif\iflinea
\newif\ifnospanish
+\newif\ifnotadecredito
+\newif\ifnotadedebito
\newif\ifnumitem
\newif\ifprefactura
\newif\ifsincantidad
+\newif\ifsindenom
+\newif\ifsinencabezadofactura
+\newif\ifsinencabezadoreporte
\newif\ifsinexpandir
\newif\ifsinfirmas
\newif\ifsiniva
@@ -199,6 +208,8 @@ en la Repu'blica Bolivariana de Venezuela.
\newlength{\@PosNotaFinalY}
\newlength{\@PosControlX}
\newlength{\@PosControlY}
+\newlength{\@PosFormalibreX}
+\newlength{\@PosFormalibreY}
\newlength{\@EspacioVacioInicial}
\newlength{\@EspacioVacioFinal}
\newlength{\@EspacioSignoMonetario}
@@ -236,6 +247,7 @@ en la Repu'blica Bolivariana de Venezuela.
\newbox{\@CajaFecha}
\newbox{\@CajaDenom}
\newbox{\@CajaControl}
+\newbox{\@CajaFormalibre}
\newbox{\@CajaNotaFinal}
\newbox{\@CajaEspacioVacio}
\newbox{\@CajaPrueba}
@@ -262,7 +274,7 @@ en la Repu'blica Bolivariana de Venezuela.
\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{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{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.
@@ -274,9 +286,13 @@ en la Repu'blica Bolivariana de Venezuela.
\DeclareOption{iva}{\ivatrue}% Para la columna del IVA.
\DeclareOption{linea}{\lineatrue}% Para la línea que inutiliza el espacio en blanco.
\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{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.
@@ -316,6 +332,10 @@ en la Repu'blica Bolivariana de Venezuela.
\RequirePackage{numprint}% Con 'numprint' expresamos los totales en el formato requerido.
\RequirePackage{tikz}% Para los recuadros del encabezado de la factura,
\usetikzlibrary{shadows}% y para el de la descripción.
+ \tikzset{reuse path/.code={\pgfsyssoftpath@setcurrentpath{#1}}}
+ \tikzset{even odd clip/.code={\pgfseteorule}, protect/.code={
+ \clip[overlay,even odd clip,reuse path=#1]
+ (-2383.99999pt,-2383.99999pt) rectangle (2383.99999pt,2383.99999pt);}}
\RequirePackage{tabularx}% Con 'tabularx' hacemos la tabla.
\RequirePackage{environ}% Con 'environ' podemos usar tabularx dentro del ambiente de la factura y escribir texto en el enddef.
\RequirePackage{fancyhdr}% Las cabeceras fancy; así se use solamente en reporte, hay que cargarlo siempre.
@@ -360,7 +380,7 @@ en la Repu'blica Bolivariana de Venezuela.
\ifxetex
\special{pdf: docinfo << /Subject (\@factura@ver) >>}
\else
- \AtEndDocument{
+ \AfterEndDocument{% AfterEndDocument y no AtEndDocument porque si no hyperref sustituye la metadata.
\ifluatex
\pdfextension info{/Subject (\@factura@ver)}
\else
@@ -368,21 +388,47 @@ en la Repu'blica Bolivariana de Venezuela.
\fi}
\fi
+%% Lo hacemos compatible otra vez con LuaLaTeX
+\ifluatex
+ \let\pdfsavepos\savepos
+ \let\pdflastypos\lastypos
+\fi
+
\def\@EstableceOpciones{%
% Establecemos los parámetros y macros relativas a la fecha.
\DTMsetstyle{\@FormatoFecha}\DTMsetup{datesep=\@FechaSeparadores}\gdef\DTMinformat{\@FormatoFechaEntrada}
% 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)
+ \ifnotadedebito
+ \ifnotadecredito
+ \CLASSERROR{Las opciones 'notadedebito' y 'notadecredito' no son compatibles. Sin efecto ambas opciones}
+ \notadecreditofalse
+ \notadedebitofalse
+ \else
+ \ifcotizacion
+ \CLASSERROR{Las opciones 'notadedebito' y 'cotizacion' no son compatibles. Sin efecto ambas opciones}
+ \notadedebitofalse
+ \cotizacionfalse
+ \fi
+ \fi
+ \fi
+ \ifnotadecredito
+ \ifcotizacion
+ \CLASSERROR{Las opciones 'notadecredito' y 'cotizacion' no son compatibles. Sin efecto ambas opciones}
+ \notadecreditofalse
+ \cotizacionfalse
+ \fi
+ \fi
\ifprefactura
\ifcotizacion
\prefacturafalse
\cotizacionfalse
\CLASSWARNING{Las opciones 'prefactura' y 'cotizacion' no son compatibles. Sin efecto ambas opciones}
\else
- \denomtrue\setcounter{@Firmas}{0}
+ \setcounter{@Firmas}{0}
\fi
\fi
- \ifcotizacion\denomtrue\setcounter{@Firmas}{1}\fi
+ \ifcotizacion\setcounter{@Firmas}{1}\fi
\ifsinlineasv\booltrue{SinLineasVertExt}\booltrue{SinLineasVertInt}\fi
\ifsinlineasvi\booltrue{SinLineasVertInt}\fi
@@ -401,6 +447,17 @@ en la Repu'blica Bolivariana de Venezuela.
\fi
\ifsinlineashe\booltrue{SinLineasHoriExt}\fi
+ \ifsindenom
+ \else
+ \ifcotizacion
+ \else
+ \ifsinnumero
+ \CLASSERROR{La opcio'n para no poner el nu'mero so'lo es compatible con las cotizaciones. Sin efecto opcio'n 'sinnumero'}%
+ \sinnumerofalse
+ \fi
+ \fi
+ \fi
+
\ifdosfirmas
\setcounter{@Firmas}{2}
\ifunafirma
@@ -464,7 +521,6 @@ en la Repu'blica Bolivariana de Venezuela.
\fi
\fi
- \ifsinnumero\denomtrue\fi
\ifsintotales
\iffilas
\filasfalse
@@ -502,6 +558,15 @@ en la Repu'blica Bolivariana de Venezuela.
% \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
@@ -570,11 +635,13 @@ 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.
\NewDocumentCommand{\BeforeEndPreamble}{s s +m}{
\IfBooleanTF{#2}
{\gpreto{\@BeforeEndPreamble}{#3}}
{\IfBooleanTF{#1}{\long\gdef\@BeforeEndPreamble{#3}}{\gappto{\@BeforeEndPreamble}{#3}}}}
+%% Primer \AtEndPreamble: ejecuta \@EstableceOpciones, luego \@BeforeEndPreamble y luego otra vez \@EstableceOpciones.
\AtEndPreamble{
\@EstableceOpciones
\ifx\@undefined\@BeforeEndPreamble\else\@BeforeEndPreamble\@EstableceOpciones\fi
@@ -588,7 +655,6 @@ en la Repu'blica Bolivariana de Venezuela.
\ifcotizacion \CLASSINFO{Opcio'n cargada: cotizacion}\fi
\ifcsv \CLASSINFO{Opcio'n cargada: csv}\fi
\ifdcu \CLASSINFO{Opcio'n cargada: dcu}\fi
- \ifdenom \CLASSINFO{Opcio'n cargada: denom}\fi
\ifdescuentos \CLASSINFO{Opcio'n cargada: descuentos}\fi
\ifdosfirmas \CLASSINFO{Opcio'n cargada: dosfirmas}\fi
\ifduc \CLASSINFO{Opcio'n cargada: duc}\fi
@@ -601,9 +667,14 @@ en la Repu'blica Bolivariana de Venezuela.
\ifiva \CLASSINFO{Opcio'n cargada: iva}\fi
\iflinea \CLASSINFO{Opcio'n cargada: linea}\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
+ \ifsinencabezadofactura \CLASSINFO{Opcio'n cargada: sinencabezadofactura}\fi
+ \ifsinencabezadoreporte \CLASSINFO{Opcio'n cargada: sinencabezadoreporte}\fi
\ifsinexpandir \CLASSINFO{Opcio'n cargada: sinexpandir}\fi
\ifsinfirmas \CLASSINFO{Opcio'n cargada: sinfirmas}\fi
\ifsiniva \CLASSINFO{Opcio'n cargada: siniva}\fi
@@ -634,6 +705,7 @@ en la Repu'blica Bolivariana de Venezuela.
%% Escribimos el total como comentario en el .log.
\AtEndDocument{%
+ \ifx\undefined\Total\else\immediate\write\@auxout{\gdef\noexpand\TotalX{\Total}}\fi
\ifsintotales
\else
\if@factura\CLASSINFO{\@@Total: \space\space\space \Moneda \Total}\fi
@@ -663,13 +735,19 @@ en la Repu'blica Bolivariana de Venezuela.
\def\@DescuentoEnum{0}
\FPset\PrecioUtempx{1}
-%% \Fecha, \FormatoFecha, \Credito, \Moneda, \RazonSocial, \Nombre, \RIF, \CI, \Contacto, \Dirección, \Telefono, \Email, \Conforme, \Emisor, \Proveedor.
+%% \Fecha, \NotaFecha, \FormatoFecha, \Credito, \Moneda, \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}{%
+ \IfBooleanTF{#1}
+ {\AtEndPreamble{\DTMsavedate{NotaFecha}{#2-#3-#4}}}
+ {\AtEndPreamble{\DTMsavedatex{NotaFecha}{#2}}}}
+\def\@NotaFecha{\DTMusedate{NotaFecha}}
+
\NewDocumentCommand{\FormatoFecha}{o g g}{%
\IfValueT{#1}{\gdef\@FormatoFechaEntrada{#1}}\IfValueT{#2}{\gdef\@FormatoFecha{#2}}\IfValueT{#3}{\gdef\@FechaSeparadores{#3}}}
@@ -712,19 +790,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' u otra. Se predetermina una de estas dos según las opciones de la clase.
+\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.
%% Número de la factura con \Num, número de control con \NumControl, y número de serie de control \NumSerieControl.
\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\NotaNum#1{\gdef\@NotaNum{\nplpadding{\@DigitosNumeracion}\npthousandsep{}\numprint{#1}}}
+
%% Información de página: cabeceras de páginas o pies de página.
\def\InfoPagina#1{\gdef\@InfoPagina{#1}}
-%% Advertencia para la migración de cualquier comando de condiciones a nota final.
-\def\@ClassWarningCondiciones{\CLASSWARNING{Ya no son condiciones sino nota final, debe hacerse la migración a los nuevos comandos}}
-
%% Resumen opcional que va a la derecha de los datos del cliente.
\NewDocumentCommand{\Resumen}{+m}{\gdef\@Resumen{#1}}
@@ -748,7 +825,6 @@ en la Repu'blica Bolivariana de Venezuela.
\IfBooleanTF{#2}
{\gpreto{\@NotaFinal}{#3}}
{\IfBooleanTF{#1}{\gappto{\@NotaFinal}{#3}}{\gdef\@NotaFinal{#3}}}}
-\NewDocumentCommand{\Condiciones}{+m}{\gdef\@NotaFinal{#1}\@ClassWarningCondiciones}
\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.
@@ -784,43 +860,75 @@ en la Repu'blica Bolivariana de Venezuela.
% \fi
% \fi
- % Efectuamos distintos chequeos para dar errores o advertencias si faltó algo.
- \ifdefvoid{\@RazonSocial}{\CLASSERROR{Hay que definir la razo'n social}}{}%
+ % Efectuamos distintos chequeos para dar errores o advertencias si faltó algún dato por especificar.
\if@reporte
- \ifdefvoid{\@Num}{\CLASSWARNING{No se especifico' el nu'mero de la factura. Puede dar error si el ti'tulo del reporte no se especifica que aparezca en las cabeceras}}{}%
+ \ifsinencabezadoreporte
+ \ifdefvoid{\@RazonSocial}{\CLASSWARNING{No se especifico' la razo'n social. Puede dar error}}{}%
+ \else
+ \ifdefvoid{\@RazonSocial}{\CLASSERROR{Hay que definir la razo'n social}}{}%
+ \fi
+ \ifdefvoid{\@Num}{\CLASSWARNING{No se especifico' el nu'mero de la factura. Puede dar error}}{}%
\ifdefvoid{\@Proveedor}{%
\ifdefvoid{\@Emisor}
- {\CLASSERROR{Hay que definir el nombre del proveedor cuando se emite un reporte}}%
+ {\ifsinencabezadoreporte
+ \CLASSWARNING{No se especifico' el proveedor. Puede dar error}%
+ \else
+ \CLASSERROR{Hay que definir el nombre del proveedor cuando se emite un reporte}%
+ \fi}%
{\CLASSWARNING{Se toma el emisor como el proveedor por no haberse especificado este u'ltimo}%
\let\@Proveedor=\@Emisor}}
{}%
\fi
\if@factura
- \ifdefvoid{\@RIF}{\CLASSERROR{Hay que definir el R.I.F}}{}%
- \ifdefvoid{\@Direccion}{\CLASSERROR{Hay que definir la direccio'n fiscal}}{}%
- \ifdefvoid{\@Telefono}{\CLASSWARNING{Pudiera definirse un nu'mero telefo'nico}}{}%
+ \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}}
+ \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}}
+ \fi
+ \ifsinencabezadofactura
+ \CLASSWARNING{Se pidio la opcio'n 'sinencabezadofactura'; no se esta' verificando si esta'n definidos algunos datos del cliente}
+ \else
+ \ifdefvoid{\@RazonSocial}{\CLASSERROR{Hay que definir la razo'n social}}{}%
+ \ifdefvoid{\@RIF}{\CLASSERROR{Hay que definir el R.I.F}}{}%
+ \ifdefvoid{\@Direccion}{\CLASSERROR{Hay que definir la direccio'n fiscal}}{}%
+ \ifdefvoid{\@Telefono}{\CLASSWARNING{Pudiera definirse un nu'mero telefo'nico}}{}%
+ \fi
+ \ifdefvoid{\@Contacto}{\if@Nombre\else\CLASSWARNING{Pudiera definirse una persona de contacto}\fi}{}%
\ifdefvoid{\@Email}{\CLASSWARNING{Pudiera definirse una direccio'n de correo electro'nico}}{}%
\ifdefvoid{\@NotaFinal}{\CLASSWARNING{Pudiera definirse una nota final}}{}%
- \ifcotizacion
- \ifdefvoid{\@FondoFactura}{\CLASSWARNING{En la opcio'n para cotizacion se recomienda agregar el fondo}}{}%
- \fi
\ifprefactura
\ifdefvoid{\@FondoFactura}{\CLASSWARNING{En la opcio'n para prefactura se recomienda agregar el fondo}}{}%
\fi
- \ifsinnumero
+ % 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}%
\else
- \CLASSERROR{La opcio'n para no poner el nu'mero so'lo es compatible con las cotizaciones}%
- \fi
- \fi
- \ifdenom
- \ifsinnumero
+ \ifnotadecredito
+ \Denom{\@@DenomNotaDeCredito}%
+ \else
+ \ifnotadedebito
+ \Denom{\@@DenomNotaDeDebito}%
+ \else
+ \Denom{\@@DenomFactura}%
+ \fi
+ \fi
+ \fi}{}%
+ \ifsindenom
+ \else
+ \ifcotizacion
\else
- \ifdefvoid{\@Num}{\CLASSERROR{Hay que definir el nu'mero de la factura}}{}%
+ \ifsinnumero
+ \CLASSERROR{La opcio'n para no poner el nu'mero so'lo es compatible con las cotizaciones}%
+ \else
+ \ifdefvoid{\@Num}{\CLASSERROR{Hay que definir el nu'mero del documento a producir}}{}%
+ \fi
\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}
@@ -860,10 +968,12 @@ en la Repu'blica Bolivariana de Venezuela.
\def\Proveedor{\@Proveedor}%
\def\Fecha{\@Fecha}%
\def\FechaVencimiento{\@FechaVencimiento}%
+ \def\NotaFecha{\@NotaFecha}%
\def\Credito{\@Credito}%
\def\Num{\@Num}%
\def\NumSerieControl{\@NumSerieControl}%
\def\NumControl{\@NumControl}%
+ \def\NotaNum{\@NotaNum}%
\def\NotaFinal{\@NotaFinal}%
\def\Resumen{\@Resumen}%
\def\NotaPrevia{\@NotaPrevia}%
@@ -871,7 +981,7 @@ en la Repu'blica Bolivariana de Venezuela.
\def\NotaExterna{\@NotaExterna}%
\def\TituloReporte{\@TituloReporte}}
-%% Posiciones (X,Y) de los objetos: i) fecha, ii) denominación, iii) nota final, iv) número de control, v) firmas.
+%% Posiciones (X,Y) de los objetos: i) fecha, ii) forma libre, iii) número de control, vi) denominación, v) nota final, vi) firmas.
\NewDocumentCommand{\PosFecha}{s m m}{
\setlength{\@PosFechaX}{#2}
\setlength{\@PosFechaY}{#3}
@@ -879,12 +989,12 @@ en la Repu'blica Bolivariana de Venezuela.
\IfBeginWith{#2}{-}{\booltrue{FechaXnegativo}}{\boolfalse{FechaXnegativo}}
\IfBeginWith{#3}{-}{\booltrue{FechaYnegativo}}{\boolfalse{FechaYnegativo}}}
-\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{\PosFormalibre}{s m m}{
+ \setlength{\@PosFormalibreX}{#2}
+ \setlength{\@PosFormalibreY}{#3}
+ \IfBooleanTF{#1}{\booltrue{FormalibreYarriba}}{\boolfalse{FormalibreYarriba}}
+ \IfBeginWith{#2}{-}{\booltrue{FormalibreXnegativo}}{\boolfalse{FormalibreXnegativo}}
+ \IfBeginWith{#3}{-}{\booltrue{FormalibreYnegativo}}{\boolfalse{FormalibreYnegativo}}}
\NewDocumentCommand{\PosControl}{s m m}{
\setlength{\@PosControlX}{#2}
@@ -893,13 +1003,19 @@ 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{\PosNotaFinal}{s m m m}{
\setlength{\@PosNotaFinalXuno}{#2}
\setlength{\@PosNotaFinalXdos}{#3}
\setlength{\@PosNotaFinalY}{#4}
\IfBooleanTF{#1}{\booltrue{NotaFinalYarriba}}{\boolfalse{NotaFinalYarriba}}
\IfBeginWith{#4}{-}{\booltrue{NotaFinalYnegativo}}{\boolfalse{NotaFinalYnegativo}}}
-\let\PosCondiciones\PosNotaFinal
%% La nota final se define con un X_inicial, un X_final y un Y_inicial (Xo,Xf,Y)
\NewDocumentCommand{\PosFirmas}{m m m}{
@@ -936,7 +1052,6 @@ en la Repu'blica Bolivariana de Venezuela.
\def\SepDescripcion#1{\setlength{\@SeparaInternaDescripcion}{#1}}
\def\SepNotaFinal#1{\setlength{\@SeparaInternaNotaFinal}{#1}}
-\let\SepCondiciones\SepNotaFinal
%% Grosor de la línea de las cajas del encabezado, curvatura de la esquina y sombra.
%% (si pedimos linea de 0pt, todo queda en cero y no se abre el ambiente TikZ).
@@ -965,7 +1080,6 @@ en la Repu'blica Bolivariana de Venezuela.
\setlength{\@GrosorLineaNotaFinal}{#1}
\IfValueT{#2}{\setlength{\@EsquinaLineaNotaFinal}{#2}}
\IfValueT{#3}{\setlength{\@SombraNotaFinal}{#3}}}
-\let\LineaCondiciones\LineaNotaFinal
%% 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*.
\def\InicioReporte#1{\setlength{\@InicioReporte}{#1}}
@@ -1021,11 +1135,13 @@ en la Repu'blica Bolivariana de Venezuela.
%% Tipo de letra para la nota final.
\def\LetraNotaFinal#1{\gdef\@LetraNotaFinal{#1\selectfont}}
-\let\LetraCondiciones\LetraNotaFinal
-%% Letra para la denominación del documento ('FACTURA', 'COTIZACIÓN',...).
+%% 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}}
+%% Letra para el texto 'FORMA LIBRE'
+\def\LetraFormalibre#1{\gdef\@LetraFormalibre{#1\selectfont}}
+
%% Letra para la numeración de la factura.
\def\LetraNumeracion#1{\gdef\@LetraNumeracion{#1\selectfont}}
@@ -1124,9 +1240,10 @@ en la Repu'blica Bolivariana de Venezuela.
\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}{
- \gdef\@EstiloPagReporteResto{#2}
- \IfValueTF{#1}{\gdef\@EstiloPagReporteUno{#1}}{\gdef\@EstiloPagReporteUno{\@EstiloPagReporteResto}}}
+\NewDocumentCommand{\EstiloPagina}{o m}{
+ \gdef\@EstiloPaginaResto{#2}
+ \IfValueTF{#1}{\gdef\@EstiloPaginaUno{#1}}{\gdef\@EstiloPaginaUno{\@EstiloPaginaResto}}}
+\let\EstiloPagReporte\EstiloPagina
%% El título para el reporte.
\NewDocumentCommand{\TituloReporte}{s m}{
@@ -1145,9 +1262,11 @@ en la Repu'blica Bolivariana de Venezuela.
%% Comando para escribir el encabezado en la factura.
\newcommand\@EncabezadoFactura{%
- \ifdefvoid{\@Resumen}{\@EscribeDatos}{\@EscribeDatosResumen}%
- \vspace*{\@SeparaVertical}%
- \ifexpandecuadro\else\vfill\fi}
+ \ifsinencabezadofactura
+ \ifdefvoid{\@Resumen}{}{\CLASSWARNING{La opcio'n 'sinencabezadofactura' no es compatible con escribir un resumen. No aparecera' el resumen.}}
+ \else
+ \ifdefvoid{\@Resumen}{\@EscribeDatos}{\@EscribeDatosResumen}%
+ \fi}
%% Comando para escribir el encabezado en el reporte.
\newcommand\@EncabezadoReporte{%
@@ -1158,13 +1277,16 @@ en la Repu'blica Bolivariana de Venezuela.
\vspace*{\@InicioReporte}%
\fi
\fi
- \@EscribeDatosReporte
+ \ifsinencabezadoreporte\else\@EscribeDatosReporte\vskip\baselineskip\fi
\@LetraReporte}
%% El ambiente '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}{%
+ \vspace*{\@SeparaVertical}%
+ \ifsinexpandir\vfill\fi
+ \@EscribeNotaPrevia
\ifx\undefined\Total
\expandafter\@FacturaAuxCmd\expandafter{\BODY}%
\ifnum\value{page}=1\else\CLASSERROR{La factura ocupa mas que una pagina}\fi
@@ -1932,7 +2054,7 @@ en la Repu'blica Bolivariana de Venezuela.
\iffilas
\@LetraNumTotales
\vspace*{\@SeparaVertical}\par
- \ifexpandecuadro\else\vfill\fi
+ \ifsinexpandir\vfill\fi
\@GeneraCajasTotalesFilas
\newbox{\@CajaTotal}%
\savebox{\@CajaTotal}{{\@LetraTitTotal\@@Total:} \@LetraNumTotal\@SignoMonetarioAux\numprint{\Total}}%
@@ -1999,7 +2121,8 @@ en la Repu'blica Bolivariana de Venezuela.
\vfill
\ifexpandecuadro\zsaveposy{EspacioVacioFinal}\fi
\vspace*{\@SeparaVertical}\par
- \ifdefvoid{\@NotaExterna}{}{\parbox[t]{\linewidth}{\@LetraNotaExterna\@NotaExterna}\vspace*{\@SeparaVertical}\par}}
+ \ifdefvoid{\@NotaExterna}{}{%
+ \parbox[t]{\linewidth}{\@LetraNotaExterna\@NotaExterna}\vspace*{\@SeparaVertical}\ifsinexpandir\vfill\fi}}
\ifbool{SinCantidad}
% Definamos todos los comandos \Item***. El descuento es opcional; por eso usamos G{0} en \NewDocumentCommand.
@@ -2060,11 +2183,11 @@ en la Repu'blica Bolivariana de Venezuela.
\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{\@PosFormalibreX}{\oddsidemargin+1in}%
\addtolength{\@PosControlX}{\oddsidemargin+1in}%
\addtolength{\@PosNotaFinalXuno}{\oddsidemargin+1in}%
\addtolength{\@PosFirmasXuno}{\oddsidemargin+1in}%
@@ -2074,13 +2197,12 @@ en la Repu'blica Bolivariana de Venezuela.
\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}
+ \@EncabezadoFactura}
\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
+ \ifsindenom\else\@PosicionaDenom\fi
+ \ifprefactura\@PosicionaNumControl\@PosicionaFormalibre\fi
\ifnum\value{@Firmas}=0\else\@PosicionaFirmas\fi
\ifdefvoid{\@NotaFinal}{}{\@PosicionaNotaFinal}}
\iflinea
@@ -2105,20 +2227,7 @@ en la Repu'blica Bolivariana de Venezuela.
\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}
+ \@DibujaDescripcion{#1}%
\par\vspace*{\@SombraDescripcion}}}%
\else
\RenewEnviron{factura}{%
@@ -2144,25 +2253,23 @@ en la Repu'blica Bolivariana de Venezuela.
\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.
+ \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}%
\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).
+ {\pagestyle{\@EstiloPaginaResto}}% Si usamos \EstiloPagina en su argumento obligatorio entonces fijamos ese estilo de página.
+ \ifdefvoid{\@EstiloPaginaUno}{%
+ \if@FondoReporte% Si no le damos a \EstiloPagina 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.
+ {\thispagestyle{\@EstiloPaginaUno}}% Si usamoe el argumento opcional de \EstiloPagina 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
+ \@EstiloParrafoReporte
\BODY\clearpage}% espacio antes de empezar con el reporte, después del título -si lo hubiera-.
\else
\NewEnviron{reporte}{}
@@ -2207,6 +2314,16 @@ en la Repu'blica Bolivariana de Venezuela.
\usebox{\@CajaNotaFinal}%
\end{textblock*}}
+%% Comando que coloca el texto 'FORMA LIBRE'.
+\newcommand{\@PosicionaFormalibre}{%
+ \savebox{\@CajaFormalibre}{\@EstiloFormalibre}%
+ \ifbool{FormalibreXnegativo}{\addtolength{\@PosFormalibreX}{\textwidth-\wd\@CajaFormalibre}}{}%
+ \ifbool{FormalibreYnegativo}{\addtolength{\@PosFormalibreY}{\paperheight}}{}%
+ \ifbool{FormalibreYarriba}{\addtolength{\@PosFormalibreY}{-\ht\@CajaFormalibre-\dp\@CajaFormalibre}}{}%
+ \begin{textblock*}{\wd\@CajaFormalibre}(\@PosFormalibreX,\@PosFormalibreY)%
+ \usebox{\@CajaFormalibre}%
+ \end{textblock*}}
+
%% Comando que coloca el número de control.
\newcommand{\@PosicionaNumControl}{%
\savebox{\@CajaControl}{\@EstiloNumControl}%
@@ -2253,11 +2370,7 @@ en la Repu'blica Bolivariana de Venezuela.
\setlength{\@SeparaInternaEncabezado}{0pt}\setlength{\@EsquinaLineaEncabezado}{0pt}\setlength{\@SombraEncabezado}{0pt}%
\renewenvironment{tikzpicture}{\NewDocumentCommand{\node}{o +m}{####2}}{}%
\fi
- \begin{tikzpicture}%
- \expandafter\node\expandafter[\@DatosTIKZ]{%
- \parbox{\textwidth-\@SombraEncabezado-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado}{\@DatosAux}}%
- \ifdim\@GrosorLineaEncabezado=0pt\else ;\fi
- \end{tikzpicture}%
+ \@DibujaDatos
\par\vspace*{\@SombraEncabezado}}}% Para que textblock* esté en modo vertical.
\newcommand{\@EscribeDatosResumen}{%
@@ -2277,19 +2390,7 @@ en la Repu'blica Bolivariana de Venezuela.
\else
\setlength{\@TamFinalEncabezado}{\@TamResumen}%
\fi
- \begin{tikzpicture}%
- \expandafter\node\expandafter[\@DatosTIKZ]{%
- \parbox[t][\@TamFinalEncabezado]{\textwidth/2-\@SeparaDatosResumen/2-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado-\@SombraEncabezado}{%
- \@DatosAux*}}%
- \ifdim\@GrosorLineaEncabezado=0pt\else ;\fi
- \end{tikzpicture}%
- \hspace*{\@SeparaDatosResumen}\hspace*{\@SombraEncabezado}%
- \begin{tikzpicture}%
- \expandafter\node\expandafter[\@ResumenTIKZ]{%
- \parbox[t][\@TamFinalEncabezado]{\textwidth/2-\@SeparaDatosResumen/2-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado-\@SombraEncabezado}{%
- \@ResumenAux}}%
- \ifdim\@GrosorLineaEncabezado=0pt\else ;\fi
- \end{tikzpicture}%
+ \@DibujaDatosResumen
\par\vspace*{\@SombraEncabezado}}}% El \par es para que textblock* esté en modo vertical.
%% Comando que coloca la caja para la nota previa, con la posibilidad de TikZ.
@@ -2301,13 +2402,9 @@ en la Repu'blica Bolivariana de Venezuela.
\setlength{\@SeparaInternaNotaPrevia}{0pt}\setlength{\@EsquinaLineaNotaPrevia}{0pt}\setlength{\@SombraNotaPrevia}{0pt}%
\renewenvironment{tikzpicture}{\NewDocumentCommand{\node}{o +m}{####2}}{}%
\fi
- \begin{tikzpicture}%
- \expandafter\node\expandafter[\@NotaPreviaTIKZ]{%
- \parbox{\textwidth-\@SombraNotaPrevia-2\@SeparaInternaNotaPrevia-\@GrosorLineaNotaPrevia}{\@EstiloNotaPrevia}}%
- \ifdim\@GrosorLineaNotaPrevia=0pt\else ;\fi
- \end{tikzpicture}%
+ \@DibujaNotaPrevia
\par\vspace*{\@SombraNotaPrevia}\vspace*{\@SeparaVertical}%
- \ifexpandecuadro\else\vfill\fi}}}
+ \ifsinexpandir\vfill\fi}}}
%% Comando que coloca la caja para la nota final, con la posibilidad de TikZ.
\newcommand{\@EscribeNotaFinal}{%
@@ -2316,11 +2413,7 @@ en la Repu'blica Bolivariana de Venezuela.
\setlength{\@SeparaInternaNotaFinal}{0pt}\setlength{\@EsquinaLineaNotaFinal}{0pt}\setlength{\@SombraNotaFinal}{0pt}%
\renewenvironment{tikzpicture}{\NewDocumentCommand{\node}{o +m}{####2}}{}%
\fi
- \begin{tikzpicture}%
- \expandafter\node\expandafter[\@NotaFinalTIKZ]{%
- \parbox{\textwidth-\@PosNotaFinalXuno-\@PosNotaFinalXdos+\oddsidemargin+1in-\@SombraNotaFinal-2\@SeparaInternaNotaFinal-\@GrosorLineaNotaFinal}{\@EstiloNotaFinal}}%
- \ifdim\@GrosorLineaNotaFinal=0pt\else ;\fi
- \end{tikzpicture}%
+ \@DibujaNotaFinal
\par\vspace*{\@SombraNotaFinal}}}
%% Comandos auxiliares para los datos y el resumen.
diff --git a/Master/texmf-dist/tex/latex/factura/factura.def b/Master/texmf-dist/tex/latex/factura/factura.def
index 4278c6814e5..837b503b4ca 100644
--- a/Master/texmf-dist/tex/latex/factura/factura.def
+++ b/Master/texmf-dist/tex/latex/factura/factura.def
@@ -32,19 +32,21 @@
%% 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.
%%
\ProvidesFile{factura.def}
-[2020/04/18 v3.73
+[2020/11/15 v4.00
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).
%% Hay elementos que salen fuera de estos márgenes, como las firmas, la nota final, la numeración y la fecha.
-\GeometriaFactura{letterpaper,vmargin={5.2cm,5.5cm},hmargin={1cm,1cm},footskip=0pt, headsep=0pt, headheight=0pt}
+\GeometriaFactura{letterpaper,vmargin={4.7cm,5.5cm},hmargin={1cm,1cm},footskip=0pt, headsep=0pt, headheight=0pt}
\GeometriaReverso{letterpaper,vmargin={1cm,1cm}, hmargin={1cm,1cm},footskip=0cm, headsep=0pt, headheight=0pt}
\GeometriaReporte{letterpaper,vmargin={2.8cm,2.5cm},hmargin={3cm,2cm},footskip=1.2cm,headsep=0.777cm,headheight=1.5cm}
@@ -62,7 +64,7 @@ Archivo de valores iniciales y condiciones de borde para factura.cls
\npdecimalsign{,}
\def\@DigitosMoneda{2}
\def\@DigitosPorc{2}
-\def\@DigitosNumeracion{5}
+\def\@DigitosNumeracion{6}
\def\@FormatoFecha{ddmmyyyy}
\def\@FormatoFechaEntrada{dd-mm-yyyy}
\def\@FechaSeparadores{-}
@@ -86,18 +88,17 @@ Archivo de valores iniciales y condiciones de borde para factura.cls
\def\@DenomAlicuotaA{A}
\def\@DenomAlicuotaE{(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.}
-
%% Macros que guardan textos que corresponden a nombres de campos:
\def\@@Fecha{Fecha de emisi\'on:}
\def\@@FechaVencimiento{Fecha de vencimiento:}
+\def\@@Formalibre{FORMA LIBRE}
\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\@@RazonSocial{Raz\'on social:}
\def\@@Nombre{Nombre:}
\def\@@RIF{R.I.F.:}
@@ -139,6 +140,18 @@ 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 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}
+\def\@InfoPaginaTitulo{\@LetraInfoPagina \@TituloReporte \space - \@Proveedor \space - \@Fecha}
+
%% i) carácter para separar el teléfono del e-mail del cliente,
%% ii) carácter para los campos vacíos cuando se usa \ItemX,
%% iii) carácter para las celdas vacías cuando la descripción del ítem ocupa más que una línea.
@@ -170,10 +183,11 @@ Archivo de valores iniciales y condiciones de borde para factura.cls
\setlength{\@FirmaReportePosX}{2cm}
\setlength{\@FirmaReporteExcesoLinea}{1.5cm}
-%% Posiciones (X,Y) de los objetos: i) fecha, ii) denominación, iii) nota final, iv) número de control, v) firmas.
-\PosFecha*{-0cm}{5cm}
-\PosDenom*{0cm}{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.
+\PosFecha*{-0cm}{4.5cm}
+\PosFormalibre*{0cm}{-3.5cm}
\PosControl*{0cm}{-2.4cm}
+\PosDenom*{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}
@@ -276,9 +290,12 @@ Archivo de valores iniciales y condiciones de borde para factura.cls
%% Tipo de letra para la nota final.
\LetraNotaFinal{\fontsize{12}{12}}
-%% Letra para la denominación del documento ('FACTURA', 'COTIZACIÓN',...).
+%% Letra para la denominación del documento ('FACTURA', 'NOTA DE CRÉDITO', 'NOTA DE DÉBITO', 'COTIZACIÓN',...).
\LetraDenom{\fontsize{14}{14}\bfseries}
+%% Letra para el texto 'FORMA LIBRE'
+\LetraFormalibre{\fontsize{14}{14}\bfseries\color{blue}}
+
%% Letra para la numeración de la factura.
\LetraNumeracion{\fontsize{14}{14}\bfseries\color{red}}
@@ -297,20 +314,105 @@ Archivo de valores iniciales y condiciones de borde para factura.cls
%% Letra para el reporte.
\LetraReporte{\fontsize{12}{20}}
-%% Diseño hecho en TikZ para los datos del cliente, el resumen, la nota previa, la descripción y la nota final.
-\def\@DatosTIKZ{%
- draw=black, fill=white, inner sep=\@SeparaInternaEncabezado, line width=\@GrosorLineaEncabezado, rounded corners=\@EsquinaLineaEncabezado, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraEncabezado, shadow yshift=-\@SombraEncabezado}}
-
-\let\@ResumenTIKZ\@DatosTIKZ
-
-\def\@NotaPreviaTIKZ{%
- draw=black, fill=white, inner sep=\@SeparaInternaNotaPrevia, line width=\@GrosorLineaNotaPrevia, rounded corners=\@EsquinaLineaNotaPrevia, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraNotaPrevia, shadow yshift=-\@SombraNotaPrevia}}
-
-\def\@DescripcionTIKZ{%
- draw=black, fill=white, inner sep=\@SeparaInternaDescripcion, line width=\@GrosorLineaDescripcion, rounded corners=\@EsquinaLineaDescripcion, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraDescripcion, shadow yshift=-\@SombraDescripcion}}
-
-\def\@NotaFinalTIKZ{%
- draw=black, fill=white, inner sep=\@SeparaInternaNotaFinal, line width=\@GrosorLineaNotaFinal, rounded corners=\@EsquinaLineaNotaFinal, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraNotaFinal, shadow yshift=-\@SombraNotaFinal}}
+%% Diseño hecho en TikZ para la descripción, los datos del cliente, el resumen, la nota previa y la nota final.
+\long\def\@DibujaDescripcion#1{%
+ \begin{tikzpicture}
+ \node[draw=black, fill=white, fill opacity=0, text opacity=1, save path=\tmprotect, inner sep=\@SeparaInternaDescripcion, line width=\@GrosorLineaDescripcion, rounded corners=\@EsquinaLineaDescripcion]{%
+ \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
+ ;
+ \tikzset{protect=\tmprotect}%
+ \node[draw=black, fill=white, inner sep=\@SeparaInternaDescripcion, line width=\@GrosorLineaDescripcion, rounded corners=\@EsquinaLineaDescripcion, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraDescripcion, shadow yshift=-\@SombraDescripcion}]{%
+ \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}{}}};%
+ \fi% El fin del nodo va cuando hay el entorno tikzpicture original.
+ \end{tikzpicture}\global\let\tmprotect\undefined}
+
+\def\@DibujaDatos{%
+ \begin{tikzpicture}
+ \node[draw=black, fill=white, fill opacity=0, text opacity=1, save path=\tmprotect, inner sep=\@SeparaInternaEncabezado, line width=\@GrosorLineaEncabezado, rounded corners=\@EsquinaLineaEncabezado]{%
+ \parbox{\textwidth-\@SombraEncabezado-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado}{\@DatosAux}}%
+ \ifdim\@GrosorLineaEncabezado=0pt%
+ \else
+ ;
+ \tikzset{protect=\tmprotect}%
+ \node[draw=black, fill=white, inner sep=\@SeparaInternaEncabezado, line width=\@GrosorLineaEncabezado, rounded corners=\@EsquinaLineaEncabezado, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraEncabezado, shadow yshift=-\@SombraEncabezado}]{%
+ \parbox{\textwidth-\@SombraEncabezado-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado}{\@DatosAux}};%
+ \fi
+ \end{tikzpicture}\global\let\tmprotect\undefined}
+
+\def\@DibujaDatosResumen{%
+ \begin{tikzpicture}%
+ \node[draw=black, fill=white, fill opacity=0, text opacity=1, save path=\tmprotect, inner sep=\@SeparaInternaEncabezado, line width=\@GrosorLineaEncabezado, rounded corners=\@EsquinaLineaEncabezado]{%
+ \parbox[t][\@TamFinalEncabezado]{\textwidth/2-\@SeparaDatosResumen/2-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado-\@SombraEncabezado}{\@DatosAux*}}%
+ \ifdim\@GrosorLineaEncabezado=0pt%
+ \else
+ ;
+ \tikzset{protect=\tmprotect}%
+ \node[draw=black, fill=white, inner sep=\@SeparaInternaEncabezado, line width=\@GrosorLineaEncabezado, rounded corners=\@EsquinaLineaEncabezado, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraEncabezado, shadow yshift=-\@SombraEncabezado}]{%
+ \parbox[t][\@TamFinalEncabezado]{\textwidth/2-\@SeparaDatosResumen/2-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado-\@SombraEncabezado}{\@DatosAux*}};%
+ \fi
+ \end{tikzpicture}%
+ \hspace*{\@SeparaDatosResumen}\hspace*{\@SombraEncabezado}%
+ \begin{tikzpicture}%
+ \node[draw=black, fill=white, fill opacity=0, text opacity=1, save path=\tmprotect, inner sep=\@SeparaInternaEncabezado, line width=\@GrosorLineaEncabezado, rounded corners=\@EsquinaLineaEncabezado]{%
+ \parbox[t][\@TamFinalEncabezado]{\textwidth/2-\@SeparaDatosResumen/2-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado-\@SombraEncabezado}{\@ResumenAux}}%
+ \ifdim\@GrosorLineaEncabezado=0pt%
+ \else
+ ;
+ \tikzset{protect=\tmprotect}%
+ \node[draw=black, fill=white, inner sep=\@SeparaInternaEncabezado, line width=\@GrosorLineaEncabezado, rounded corners=\@EsquinaLineaEncabezado, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraEncabezado, shadow yshift=-\@SombraEncabezado}]{%
+ \parbox[t][\@TamFinalEncabezado]{\textwidth/2-\@SeparaDatosResumen/2-2\@SeparaInternaEncabezado-\@GrosorLineaEncabezado-\@SombraEncabezado}{\@ResumenAux}};%
+ \fi
+ \end{tikzpicture}\global\let\tmprotect\undefined}
+
+\def\@DibujaNotaPrevia{%
+ \begin{tikzpicture}%
+ \node[draw=black, fill=white, fill opacity=0, text opacity=1, save path=\tmprotect, inner sep=\@SeparaInternaNotaPrevia, line width=\@GrosorLineaNotaPrevia, rounded corners=\@EsquinaLineaNotaPrevia]{%
+ \parbox{\textwidth-\@SombraNotaPrevia-2\@SeparaInternaNotaPrevia-\@GrosorLineaNotaPrevia}{\@EstiloNotaPrevia}}%
+ \ifdim\@GrosorLineaNotaPrevia=0pt%
+ \else
+ ;
+ \tikzset{protect=\tmprotect}%
+ \node[draw=black, fill=white, inner sep=\@SeparaInternaNotaPrevia, line width=\@GrosorLineaNotaPrevia, rounded corners=\@EsquinaLineaNotaPrevia, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraNotaPrevia, shadow yshift=-\@SombraNotaPrevia}]{%
+ \parbox{\textwidth-\@SombraNotaPrevia-2\@SeparaInternaNotaPrevia-\@GrosorLineaNotaPrevia}{\@EstiloNotaPrevia}};%
+ \fi
+ \end{tikzpicture}\global\let\tmprotect\undefined}
+
+\def\@DibujaNotaFinal{%
+ \begin{tikzpicture}
+ \node[draw=black, fill=white, fill opacity=0, text opacity=1, save path=\tmprotect, inner sep=\@SeparaInternaNotaFinal, line width=\@GrosorLineaNotaFinal, rounded corners=\@EsquinaLineaNotaFinal]{%
+ \parbox{\textwidth-\@PosNotaFinalXuno-\@PosNotaFinalXdos+\oddsidemargin+1in-\@SombraNotaFinal-2\@SeparaInternaNotaFinal-\@GrosorLineaNotaFinal}{\@EstiloNotaFinal}}%
+ \ifdim\@GrosorLineaNotaFinal=0pt%
+ \else
+ ;
+ \tikzset{protect=\tmprotect}%
+ \node[draw=black, fill=white, inner sep=\@SeparaInternaNotaFinal, line width=\@GrosorLineaNotaFinal, rounded corners=\@EsquinaLineaNotaFinal, copy shadow={top color=black, bottom color=black, shadow xshift=\@SombraNotaFinal, shadow yshift=-\@SombraNotaFinal}]{%
+ \parbox{\textwidth-\@PosNotaFinalXuno-\@PosNotaFinalXdos+\oddsidemargin+1in-\@SombraNotaFinal-2\@SeparaInternaNotaFinal-\@GrosorLineaNotaFinal}{\@EstiloNotaFinal}};%
+ \fi
+ \end{tikzpicture}\global\let\tmprotect\undefined}
+
+%% Macro para el estilo de párrafo del reporte.
+\newcommand{\@EstiloParrafoReporte}{%
+ \setlength{\parindent}{0.666cm}% sangría para el reporte.
+ \setlength{\parskip}{4pt plus 6pt minus 2pt}% separación entre párrafos en el reporte.
+}
%% El diseño de las distintas partes de la hoja.
\newcommand{\@EstiloFirmas}{
@@ -330,6 +432,8 @@ Archivo de valores iniciales y condiciones de borde para factura.cls
\newcommand{\@EstiloNotaFinal}{\@LetraNotaFinal \@NotaFinal}
+\newcommand{\@EstiloFormalibre}{\@LetraFormalibre \@@Formalibre}
+
\newcommand{\@EstiloNumControl}{%
\renewcommand{\baselinestretch}{0}\selectfont
\begin{tabular}{@{\extracolsep{0pt}}l}
@@ -352,10 +456,6 @@ Archivo de valores iniciales y condiciones de borde para factura.cls
\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}
-
-\newcommand{\@InfoPaginaTitulo}{\@LetraInfoPagina \@TituloReporte \space - \@Proveedor \space - \@Fecha}
-
%% Estilos de página: normal, sólo cabeceras, sólo pies de página y sólo número de página al pie.
\fancypagestyle{plain}{%
\expandafter\ps@fancy