From a43715bc47c69e872b2b52a7ec02beef9e75fc30 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 1 May 2018 17:47:50 +0000 Subject: factura (17apr17) git-svn-id: svn://tug.org/texlive/trunk@47538 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/factura/factura.cls | 110 ++++++++++++++++-------- Master/texmf-dist/tex/latex/factura/factura.def | 11 ++- 2 files changed, 81 insertions(+), 40 deletions(-) (limited to 'Master/texmf-dist/tex/latex/factura') diff --git a/Master/texmf-dist/tex/latex/factura/factura.cls b/Master/texmf-dist/tex/latex/factura/factura.cls index 467826fcdaa..54cc1b74aa1 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 2017 Emilio Lazo Zaia +%% Copyright 2018 Emilio Lazo Zaia %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either @@ -37,7 +37,7 @@ %% \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesClass{factura} -[2018/03/13 v3.44 +[2018/04/17 v3.47 Clase para elaborar facturas legales en la República Bolivariana de Venezuela. ] @@ -301,6 +301,10 @@ en la República Bolivariana de Venezuela. \RequirePackage{environ}% Con 'environ' podemos usar tabularx dentro del ambiente de la factura y escribir texto en el enddef. \RequirePackage{fancyhdr}% Las cabeceras fancy; así se use solamente en reporte, hay que cargarlo siempre. \RequirePackage[calc]{datetime2}% Para calcular la fecha del vencimiento del crédito. +\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. +%% 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). %% (https://tex.stackexchange.com/questions/396363/input-a-date-to-datetime2-in-a-format-different-than-iso) @@ -321,6 +325,23 @@ en la República Bolivariana de Venezuela. \DTMfdef{ddmmyyyy}#1#2#3#4#5#6#7#8&{\DTMs{#5#6#7#8-#3#4-#1#2}} \DTMfdef{mm-dd-yyyy}#1-#2-#3&{\DTMs{#3-#1-#2}} +%% Macros internas para el texto de la metadata que se va a escribir con la versión de la clase. +\def\@factura@ver{\expandafter\csname ver@factura.cls\endcsname} +\StrBefore*{\@factura@ver}{ }[\@factura@fecha] +\StrBetween*[1,2]{\@factura@ver}{ }{ }[\@factura@vernum] +\def\@factura@version{Hecho con la clase factura-\@factura@vernum\ (\@factura@fecha)} + +%% Escribimos la versión de la clase en la metadata del PDF. +\ifxetex + \special{pdf: docinfo << /Subject (\@factura@version) >>} +\else + \ifluatex + \pdfextension info{/Subject (\@factura@version)} + \else + \pdfinfo{/Subject (\@factura@version)} + \fi +\fi + \AtEndPreamble{ % Establecemos los parámetros y macros relativas a la fecha. \DTMsetstyle{\@FormatoFecha}\DTMsetup{datesep=\@FechaSeparadores}\gdef\DTMinformat{\@FormatoFechaEntrada} @@ -456,10 +477,10 @@ en la República Bolivariana de Venezuela. \fi \iflinea - \RequirePackage{zref-savepos} \ifexpandecuadro \else \CLASSWARNING{La opción 'linea' requiere la opción 'expandecuadro'. Activando la opción 'expandecuadro'} + \expandecuadrotrue \fi \fi \ifsinmarcas \def\@CaracterCR{\mbox{}} \def\@CaracterCeldasVacias{\mbox{}} \fi @@ -477,7 +498,6 @@ en la República Bolivariana de Venezuela. \CLASSWARNING{Las opciones 'expandecuadro' y 'sinexpandir' no son compatibles. Sin efecto ambas opciones} \else \boolfalse{ExpAbajo} - \RequirePackage{zref-savepos}[2016/05/21]% Para guardar la posición en 'Y'. \fi \fi \ifsinexpandir\boolfalse{ExpAbajo}\expandecuadrofalse\fi @@ -492,9 +512,6 @@ en la República Bolivariana de Venezuela. \fi \ifsoloreporte\@reportetrue\@facturafalse\@reversofalse\fi - \if@reporte - \RequirePackage{zref-savepos}% Para la firma, que debe ser cargado aquí siempre que hay reporte porque \FirmaReporte no se ejecuta desde el preámbulo. - \fi \ifcsv \if@factura \newwrite\csv \immediate\openout\csv=\jobname.csv @@ -559,15 +576,8 @@ en la Repú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, y avisamos cuando la fecha no sea la de hoy. +%% Escribimos el total como comentario en el .log. \AtEndDocument{% - \DTMifsaveddate{FechaEmision}{% - \DTMsavenow{Ahora}% - \DTMsaveddatediff{FechaEmision}{Ahora}{\AuxFecha}}{}% - \ifnum\AuxFecha=0% - \else - \CLASSWARNING{Fecha del documento \@Fecha\space distinta de la fecha de hoy}% - \fi \ifsintotales \else \if@factura\CLASSINFO{\@@Total: \space\space\space \Moneda \Total}\fi @@ -596,7 +606,7 @@ en la República Bolivariana de Venezuela. \def\@DescuentoAnum{0} \def\@DescuentoEnum{0} -%% \Fecha, \FormatoFecha, \Credito, \RazonSocial, \Nombre, \RIF, \CI, \Contacto, \Dirección, \Telefono, \Email, \Conforme, \Emisor, \Proveedor. +%% \Fecha, \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}}} @@ -607,6 +617,7 @@ en la República Bolivariana de Venezuela. \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\RazonSocial#1{\gdef\@RazonSocial{#1}} \def\Nombre#1{\gdef\@RazonSocial{#1}\@Nombretrue} \def\RIF#1{\gdef\@RIF{#1}} @@ -669,7 +680,34 @@ en la República Bolivariana de Venezuela. \NewDocumentCommand{\NotaExterna}{+m}{\gdef\@NotaExterna{#1}} \AtBeginDocument{% - % Efectuamos distintos chequeos. + % 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}{}{% + \CLASSWARNING{No se especificó fecha. Asumiendo la fecha de hoy}% + \DTMsavedate{FechaEmision}{\the\year-\the\month-\the\day}}% + \DTMsavenow{Ahora}% + \DTMsaveddatediff{FechaEmision}{Ahora}{\AuxFecha}% + \ifnum\AuxFecha=0% + \else + \CLASSWARNING{Fecha del documento \@Fecha\space distinta de la fecha de hoy}% + \fi + + % Establecemos el signo monetario dependiendo de la fecha de emisión de la factura, para efectos de la reconversión monetaria: + \ifx\@undefined\@Moneda + \DTMsaveddatediff{FechaEmision}{FechaBsS}{\AuxFecha}% + \ifnum\AuxFecha>-1% + \DTMsaveddatediff{FechaEmision}{FechaBs}{\AuxFecha}% + \ifnum\AuxFecha>-1% + \Moneda{\@MonedaBs}% + \else + \Moneda{\@MonedaBsS}% + \fi + \else + \Moneda{\@MonedaBs}% + \fi + \fi + + % Efectuamos distintos chequeos para dar errores o advertencias si faltó algo. + \ifdefvoid{\@RazonSocial}{\CLASSERROR{Hay que definir la razón social}}{}% \if@reporte \ifdefvoid{\@Num}{\CLASSWARNING{No se especificó el número de la factura. Puede dar error si el título del reporte no se especifica que aparezca en las cabeceras}}{}% \ifdefvoid{\@Proveedor}{% @@ -679,16 +717,12 @@ en la República Bolivariana de Venezuela. \let\@Proveedor=\@Emisor}} {}% \fi - \ifdefvoid{\@RazonSocial}{\CLASSERROR{Hay que definir la razón social}}{}% \if@factura \ifdefvoid{\@RIF}{\CLASSERROR{Hay que definir el R.I.F}}{}% \ifdefvoid{\@Direccion}{\CLASSERROR{Hay que definir la dirección fiscal}}{}% \ifdefvoid{\@Telefono}{\CLASSWARNING{Pudiera definirse un número telefónico}}{}% \ifdefvoid{\@Email}{\CLASSWARNING{Pudiera definirse una dirección de correo electrónico}}{}% \ifdefvoid{\@Condiciones}{\CLASSWARNING{Pudieran definirse las condiciones del documento}}{}% - \DTMifsaveddate{FechaEmision}{}{% - \CLASSWARNING{No se especificó fecha. Asumiendo la fecha de hoy}% - \DTMsavedate{FechaEmision}{\the\year-\the\month-\the\day}}% \ifcotizacion \ifdefvoid{\@FondoFactura}{\CLASSWARNING{En la opción para cotizacion se recomienda agregar el fondo}}{}% \fi @@ -718,6 +752,7 @@ en la República Bolivariana de Venezuela. \gdef\@FechaVencimiento{\DTMusedate{FechaVencimiento}}}% \ifx\@undefined\@NumControl\let\@NumControl\@Num\fi \ifx\@undefined\@NumSerieControl\gdef\@NumSerieControl{00}\fi + % Establecemos los porcentajes de las alícuotas, y redondeamos los descuentos. \FPupn\@AlicuotaGporc{\@AlicuotaG{} 100 * \@DigitosPorc{} round clip}% \FPupn\@AlicuotaRporc{\@AlicuotaR{} 100 * \@DigitosPorc{} round clip}% @@ -733,6 +768,7 @@ en la República Bolivariana de Venezuela. \FPupn\@DescuentoEfactor{100 \@DescuentoEporc{} /} % Una vez definido todo en el preámbulo, los comandos usados para definir campos servirán para mostrar el campo que se definió con ese comando. + \def\Moneda{\@Moneda}% \def\RazonSocial{\@RazonSocial}% \let\Nombre\RazonSocial \def\RIF{\@RIF}% @@ -1667,29 +1703,29 @@ en la República Bolivariana de Venezuela. \newcommand{\@EscribeItemsEnCSV}[3]{% \ifbool{SinCantidad} {\ifdescuentos - \immediate\write\csv{"\unexpanded{##3}","\Dcto","\PrecioT","##1"}% + \write\csv{"\unexpanded{##3}","\Dcto","\PrecioT","##1"}% \else - \immediate\write\csv{"\unexpanded{##3}","\PrecioT","##1"}% + \write\csv{"\unexpanded{##3}","\PrecioT","##1"}% \fi} {\if@cdu \ifdescuentos - \immediate\write\csv{"##2","\unexpanded{##3}","\PrecioU","\Dcto","\PrecioT","##1"}% + \write\csv{"##2","\unexpanded{##3}","\PrecioU","\Dcto","\PrecioT","##1"}% \else - \immediate\write\csv{"##2","\unexpanded{##3}","\PrecioU","\PrecioT","##1"}% + \write\csv{"##2","\unexpanded{##3}","\PrecioU","\PrecioT","##1"}% \fi \fi \ifdcu \ifdescuentos - \immediate\write\csv{"\unexpanded{##3}","##2","\PrecioU","\Dcto","\PrecioT","##1"}% + \write\csv{"\unexpanded{##3}","##2","\PrecioU","\Dcto","\PrecioT","##1"}% \else - \immediate\write\csv{"\unexpanded{##3}","##2","\PrecioU","\PrecioT","##1"}% + \write\csv{"\unexpanded{##3}","##2","\PrecioU","\PrecioT","##1"}% \fi \fi \ifduc \ifdescuentos - \immediate\write\csv{"\unexpanded{##3}","\PrecioU","##2","\Dcto","\PrecioT","##1"}% + \write\csv{"\unexpanded{##3}","\PrecioU","##2","\Dcto","\PrecioT","##1"}% \else - \immediate\write\csv{"\unexpanded{##3}","\PrecioU","##2","\PrecioT","##1"}% + \write\csv{"\unexpanded{##3}","\PrecioU","##2","\PrecioT","##1"}% \fi \fi}}% % @@ -1867,9 +1903,9 @@ en la República Bolivariana de Venezuela. \let\ItemG\Item \ifcsv \ifdescuentos - \immediate\write\csv{"\@@Descripcion","\@@Descuento","\@@Precio \space (\Moneda)","\@@IVA"}% + \write\csv{"\@@Descripcion","\@@Descuento","\@@Precio \space (\Moneda)","\@@IVA"}% \else - \immediate\write\csv{"\@@Descripcion","\@@Precio \space (\Moneda)","\@@IVA"}% + \write\csv{"\@@Descripcion","\@@Precio \space (\Moneda)","\@@IVA"}% \fi \fi} {% @@ -1882,23 +1918,23 @@ en la República Bolivariana de Venezuela. \ifcsv \if@cdu \ifdescuentos - \immediate\write\csv{"\@@Cantidad","\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@Descuento","\@@PrecioT \space (\Moneda)","\@@IVA"}% + \write\csv{"\@@Cantidad","\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@Descuento","\@@PrecioT \space (\Moneda)","\@@IVA"}% \else - \immediate\write\csv{"\@@Cantidad","\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@PrecioT \space (\Moneda)","\@@IVA"}% + \write\csv{"\@@Cantidad","\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@PrecioT \space (\Moneda)","\@@IVA"}% \fi \fi \ifdcu \ifdescuentos - \immediate\write\csv{"\@@Descripcion","\@@Cantidad","\@@PrecioU \space (\Moneda)","\@@Descuento","\@@PrecioT \space (\Moneda)","\@@IVA"}% + \write\csv{"\@@Descripcion","\@@Cantidad","\@@PrecioU \space (\Moneda)","\@@Descuento","\@@PrecioT \space (\Moneda)","\@@IVA"}% \else - \immediate\write\csv{"\@@Descripcion","\@@Cantidad","\@@PrecioU \space (\Moneda)","\@@PrecioT \space (\Moneda)","\@@IVA"}% + \write\csv{"\@@Descripcion","\@@Cantidad","\@@PrecioU \space (\Moneda)","\@@PrecioT \space (\Moneda)","\@@IVA"}% \fi \fi \ifduc \ifdescuentos - \immediate\write\csv{"\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@Cantidad","\@@Descuento","\@@PrecioT \space (\Moneda)","\@@IVA"}% + \write\csv{"\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@Cantidad","\@@Descuento","\@@PrecioT \space (\Moneda)","\@@IVA"}% \else - \immediate\write\csv{"\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@Cantidad","\@@PrecioT \space (\Moneda)","\@@IVA"}% + \write\csv{"\@@Descripcion","\@@PrecioU \space (\Moneda)","\@@Cantidad","\@@PrecioT \space (\Moneda)","\@@IVA"}% \fi \fi \fi} diff --git a/Master/texmf-dist/tex/latex/factura/factura.def b/Master/texmf-dist/tex/latex/factura/factura.def index f594b6396b8..fae09b821ba 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 2017 Emilio Lazo Zaia +%% Copyright 2018 Emilio Lazo Zaia %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either @@ -36,7 +36,7 @@ %% factura-ejemplo-reporte3.tex and factura-beispiel-rechnung.tex. %% \ProvidesFile{factura.def} -[2018/03/13 v3.44 +[2018/04/17 v3.47 Archivo de valores iniciales y condiciones de borde para factura.cls ] @@ -67,7 +67,12 @@ Archivo de valores iniciales y condiciones de borde para factura.cls \def\@FechaSeparadores{-} %% La moneda: -\def\Moneda{Bs.} +\def\@MonedaBs{Bs.} +\def\@MonedaBsS{BsS.} + +%% Las fechas de la entrada de la reconversión monetaria: +\DTMsavedate{FechaBsS}{2018-05-01} +\DTMsavedate{FechaBs}{2018-06-04} %% Al lado de cada ítem va la letra que designa el gravamen que aplica sobre él: \def\@DenomAlicuotaG{G} -- cgit v1.2.3