Plantilla de impresión de facturas
Las dos piezas de la factura de DemoUp: el documento API que produce el JSON y la plantilla Vue que lo muestra, con cada clave del JSON y su condición.
La factura de DemoUp son dos documentos dinámicos sobre Ventas / Ingresos, los dos con la pregunta v.Factura: Factura JSON (tipo API) construye los datos y Factura - Moderna (tipo impresión) los incluye y los muestra con Vue. Para la segunda, crea el documento con la plantilla JSON + Vue.
Cómo se unen
La plantilla incluye el documento API con F.Include y le pasa su pregunta. F.Include(id, ...) admite tras el ID las preguntas del documento incluido, en su orden. Su salida es el objeto data de Vue:
<script>
const data = <!--: F.Include(S.DynamicDocuments.API.FacturaJSON.ID, v.Factura) :-->;
const app = Vue.createApp({
data() { return { data }; },
computed: {
resumen() { return this.data?.Resumen?.[0] || null; },
conceptos() { return this.data?.Conceptos || []; },
baseImponible() { return this.data?.BaseImponible || []; },
totales() { return this.data?.Totales || []; },
hayRE() { return this.baseImponible.some(x => Number(x?.CuotaRE || 0) > 0); },
totalesFiltrados() { return this.totales.filter(t => t.Concepto !== 'Total'); },
totalAbsoluto() { return this.totales.filter(t => t.Concepto === 'Total'); }
},
methods: {
euro(v) { return new Intl.NumberFormat('es-ES', { style: 'currency', currency: 'EUR' }).format(Number(v || 0)); }
}
});
app.mount('#app');
</script>El JSON
Factura JSON crea cuatro tablas con F.DataTable_New y las escribe en JSON con F.DataTable_Build(tabla, 'jsonarrayf'). Las funciones de tablas están en Documentos y gráficos.
{
"Resumen": <!--: F.Write(v.JSONResumen) :-->,
"Conceptos": <!--: F.Write(v.JSONConceptos) :-->,
"BaseImponible": <!--: F.Write(v.JSONBaseImponible) :-->,
"Totales": <!--: F.Write(v.JSONTotales) :-->
}Resumen
Una sola fila. En Vue se lee como resumen.<Clave>.
| Clave | Origen |
|---|---|
NumeroFactura, Fecha, FechaVencimiento, FacturaRectificada | Campos de la factura. Las fechas pasan por F.Cast_DateToText(fecha, S.Enums.formatofecha.diamesaño). |
ClienteNombre, ClienteNIF, ClienteDireccion, ClienteEmail, ClienteTelefono, ClienteCodigoPostal, ClientePoblacion, ClienteProvincia | Datos del cliente copiados en la factura. |
EmpresaRazonSocial, EmpresaNIF, EmpresaDireccion, EmpresaEmail, EmpresaTelefono, EmpresaCodigoPostal, EmpresaPoblacion, EmpresaProvincia, EmpresaWeb | Datos fiscales de la empresa emisora. |
LogoURL | D.EmpresaActual.URLLogoFactura. |
DatosFiscales, CondicionesPago, Notas, EnlacePago, DireccionEnvio | Textos opcionales de la factura. |
Conceptos
Una fila por línea de Lista - Ventas / Ingresos, filtrada con F.DataListLoadAddFilter por RelacionElementoContenedorListador igual a v.Factura.
| Clave | Campo de I.VentasIngresosLista |
|---|---|
Concepto | TextoPrincipal |
PrecioUnidad | ImportePrecioUnidad |
Unidades | CantidadUnidades |
Dtos | ImporteDescuentoFijoUnidad y SumaDescuentosPorcientoPorciento, formateados con F.FormatMoney y F.FormatPercentage |
Descuentos | ImporteTotalDescuentos |
Total | ImporteTotalConcepto |
BaseImponible
Una fila por base con importe distinto de cero: ImporteBaseImponible1, 2, 3 y ImporteBaseImponibleExenta.
| Clave | Origen |
|---|---|
BaseImponible | v.Factura.ImporteBaseImponibleN |
IVAPorciento | v.Factura.ReferenciaImpuestoN.ValorPorciento |
CuotaIVA | v.Factura.ImporteBaseImponibleNCuotaIVA |
REPorciento | v.Factura.ReferenciaImpuestoN.RecargoEquivalenciaPorciento |
CuotaRE | v.Factura.ImporteBaseImponibleNCuotaRE |
Totales
Filas Concepto / Importe: Subtotal, IVA, Suplidos y Total. totalAbsoluto separa la fila Total para mostrarla aparte.
Qué se muestra y cuándo
La plantilla muestra siempre el número, la fecha y los datos de la empresa. El logo, la factura rectificada, el vencimiento, la dirección de envío, las condiciones, las notas, el enlace de pago y las tablas solo salen si traen dato (v-if), y el bloque del cliente, si hay resumen.ClienteNIF. hayRE elige la tabla de bases con recargo (cinco columnas) o sin él (tres).
Metadatos de la plantilla
Factura - Moderna fija titulo, email_subject, email_to, email_to_name y email_body con el ID de Factura - Plantilla de Email. Ver Envío de emails.