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>.

ClaveOrigen
NumeroFactura, Fecha, FechaVencimiento, FacturaRectificadaCampos de la factura. Las fechas pasan por F.Cast_DateToText(fecha, S.Enums.formatofecha.diamesaño).
ClienteNombre, ClienteNIF, ClienteDireccion, ClienteEmail, ClienteTelefono, ClienteCodigoPostal, ClientePoblacion, ClienteProvinciaDatos del cliente copiados en la factura.
EmpresaRazonSocial, EmpresaNIF, EmpresaDireccion, EmpresaEmail, EmpresaTelefono, EmpresaCodigoPostal, EmpresaPoblacion, EmpresaProvincia, EmpresaWebDatos fiscales de la empresa emisora.
LogoURLD.EmpresaActual.URLLogoFactura.
DatosFiscales, CondicionesPago, Notas, EnlacePago, DireccionEnvioTextos opcionales de la factura.

Conceptos

Una fila por línea de Lista - Ventas / Ingresos, filtrada con F.DataListLoadAddFilter por RelacionElementoContenedorListador igual a v.Factura.

ClaveCampo de I.VentasIngresosLista
ConceptoTextoPrincipal
PrecioUnidadImportePrecioUnidad
UnidadesCantidadUnidades
DtosImporteDescuentoFijoUnidad y SumaDescuentosPorcientoPorciento, formateados con F.FormatMoney y F.FormatPercentage
DescuentosImporteTotalDescuentos
TotalImporteTotalConcepto

BaseImponible

Una fila por base con importe distinto de cero: ImporteBaseImponible1, 2, 3 y ImporteBaseImponibleExenta.

ClaveOrigen
BaseImponiblev.Factura.ImporteBaseImponibleN
IVAPorcientov.Factura.ReferenciaImpuestoN.ValorPorciento
CuotaIVAv.Factura.ImporteBaseImponibleNCuotaIVA
REPorcientov.Factura.ReferenciaImpuestoN.RecargoEquivalenciaPorciento
CuotaREv.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.

En esta página