@disruptive-learning/cfdi-to-pdf
Version:
Librería para crear un pdf basado en un XML CFDI o Retenciones
440 lines (439 loc) • 16.7 kB
JavaScript
import { formatCurrency } from '#src/utils/currency';
const impuestosTrasladadosPlataformasComplementTable = (servicio, primaryColor, bgGrayColor) => {
const impuestosTableBody = [];
const impuestosTrasladadosDelServicio = servicio.searchNode('plataformasTecnologicas:ImpuestosTrasladadosdelServicio');
const contribucionGubernamental = servicio.searchNode('plataformasTecnologicas:ContribucionGubernamental');
const comisionDelServicio = servicio.searchNode('plataformasTecnologicas:ComisionDelServicio');
if (impuestosTrasladadosDelServicio) {
impuestosTableBody.push([
{
table: {
widths: ['auto', 'auto', 'auto', 'auto', 'auto', 'auto', 'auto', 'auto', 'auto', '*'],
body: [
[
{
text: 'Impuestos Trasladados del Servicio',
colSpan: 10,
alignment: 'left',
color: primaryColor,
},
{},
{},
{},
{},
{},
{},
{},
{},
{},
],
[
{
text: 'Impuesto base:',
color: primaryColor,
},
{
text: formatCurrency(impuestosTrasladadosDelServicio.getAttribute('Base')),
alignment: 'left',
},
{
text: 'Impuesto',
color: primaryColor,
},
{
text: impuestosTrasladadosDelServicio.getAttribute('Impuesto'),
alignment: 'left',
},
{
text: 'Tipo factor:',
color: primaryColor,
},
{
text: impuestosTrasladadosDelServicio.getAttribute('TipoFactor'),
alignment: 'left',
},
{
text: 'Tasa o cuota:',
color: primaryColor,
},
{
text: impuestosTrasladadosDelServicio.getAttribute('TasaCuota'),
alignment: 'left',
},
{
text: 'Importe',
color: primaryColor,
},
{
text: formatCurrency(impuestosTrasladadosDelServicio.getAttribute('Importe')),
alignment: 'left',
},
],
],
},
layout: 'conceptosLayout',
colSpan: 10,
fillColor: bgGrayColor,
},
]);
}
if (comisionDelServicio !== undefined || contribucionGubernamental !== undefined) {
impuestosTableBody.push([
{
table: {
widths: ['auto', 'auto', 'auto', 'auto', 'auto', 'auto', '*', 'auto', 'auto', 'auto'],
body: [
[
{
text: comisionDelServicio === undefined ? '' : 'Comisión del Servicio',
colSpan: 6,
alignment: 'left',
color: primaryColor,
},
{},
{},
{},
{},
{},
{
text: contribucionGubernamental === undefined ? '' : 'Contribución Gubernamental',
colSpan: 4,
alignment: 'right',
color: primaryColor,
},
{},
{},
{},
],
[
{
text: comisionDelServicio === undefined ? '' : 'Base:',
color: primaryColor,
alignment: 'right',
},
{
text: comisionDelServicio === undefined
? ''
: formatCurrency(comisionDelServicio.getAttribute('Base')) || '---',
alignment: 'left',
},
{
text: comisionDelServicio === undefined ? '' : 'Porcentaje:',
color: primaryColor,
alignment: 'right',
},
{
text: comisionDelServicio === undefined
? ''
: comisionDelServicio.getAttribute('Porcentaje') || '---',
alignment: 'left',
},
{
text: comisionDelServicio === undefined ? '' : 'Importe:',
color: primaryColor,
alignment: 'right',
},
{
text: comisionDelServicio === undefined
? ''
: formatCurrency(comisionDelServicio.getAttribute('Importe')),
alignment: 'left',
},
{
text: contribucionGubernamental === undefined ? '' : 'Estado:',
color: primaryColor,
alignment: 'right',
},
{
text: contribucionGubernamental === undefined
? ''
: contribucionGubernamental.getAttribute('EntidadDondePagaLaContribucion'),
alignment: 'left',
},
{
text: contribucionGubernamental === undefined ? '' : 'Importe:',
color: primaryColor,
alignment: 'right',
},
{
text: contribucionGubernamental === undefined
? ''
: formatCurrency(contribucionGubernamental.getAttribute('ImpContrib')),
alignment: 'left',
},
],
],
},
layout: 'conceptosLayout',
colSpan: 10,
fillColor: bgGrayColor,
},
]);
}
if (impuestosTrasladadosDelServicio !== undefined ||
contribucionGubernamental !== undefined ||
comisionDelServicio !== undefined) {
impuestosTableBody.push([
{
text: '',
color: primaryColor,
colSpan: 10,
border: [false, true, false, false],
},
'',
'',
'',
'',
'',
'',
'',
'',
'',
]);
}
if (impuestosTableBody.length === 0) {
return null;
}
return {
table: {
widths: ['*', '*', '*', '*', '*', '*', '*', '*', '*', '*'],
body: impuestosTableBody,
},
layout: 'conceptosLayout',
};
};
const usePlataformasTecnologicas10Complement = (plataformasTecnologicas, primaryColor, bgGrayColor) => {
const bodyPlataformasTecnologicas = [];
bodyPlataformasTecnologicas.push([
{
text: 'Servicio Mediante Plataformas Tecnológicas',
style: 'tableSubtitleHeader',
colSpan: 10,
alignment: 'left',
color: primaryColor,
},
{},
{},
{},
{},
{},
{},
{},
{},
{},
], [
{
text: 'Versión',
style: 'tableHeader',
fontSize: 6,
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
},
{
text: 'Periodicidad',
style: 'tableHeader',
fontSize: 6,
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
},
{
text: 'Número Servicios',
fontSize: 5.5,
style: 'tableHeader',
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
},
{
text: 'Subtotal Operaciones',
style: 'tableHeader',
fontSize: 5.4,
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
},
{
text: 'Total IVA',
style: 'tableHeader',
fontSize: 6,
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
},
{
text: 'Total IVA Retenido',
style: 'tableHeader',
fontSize: 5.4,
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
},
{
text: 'Total ISR Retenido',
style: 'tableHeader',
fontSize: 5.4,
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
},
{
text: 'Diferencia IVA',
style: 'tableHeader',
fontSize: 6,
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
},
{
text: 'Total Uso de Plataforma',
style: 'tableHeader',
fontSize: 5.2,
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
},
{
text: 'Total Contribución Gubernamental',
style: 'tableHeader',
fontSize: 5.2,
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
},
], [
{ text: plataformasTecnologicas.getAttribute('Version'), alignment: 'center' },
{ text: plataformasTecnologicas.getAttribute('Periodicidad'), alignment: 'center' },
{ text: plataformasTecnologicas.getAttribute('NumServ'), alignment: 'center' },
{
text: formatCurrency(plataformasTecnologicas.getAttribute('MonTotServSIVA')),
alignment: 'center',
},
{
text: formatCurrency(plataformasTecnologicas.getAttribute('TotalIVATrasladado')),
alignment: 'center',
},
{
text: formatCurrency(plataformasTecnologicas.getAttribute('TotalIVARetenido')),
alignment: 'center',
},
{
text: formatCurrency(plataformasTecnologicas.getAttribute('TotalISRRetenido')),
alignment: 'center',
},
{
text: formatCurrency(plataformasTecnologicas.getAttribute('DifIVAEntregadoPrestServ')),
alignment: 'center',
},
{
text: formatCurrency(plataformasTecnologicas.getAttribute('MonTotalporUsoPlataforma')),
alignment: 'center',
},
{
text: plataformasTecnologicas.getAttribute('MonTotalContribucionGubernamental') === ''
? '---'
: formatCurrency(plataformasTecnologicas.getAttribute('MonTotalContribucionGubernamental')),
alignment: 'center',
},
]);
const servicios = plataformasTecnologicas.searchNodes('plataformasTecnologicas:Servicios', 'plataformasTecnologicas:DetallesDelServicio');
if (servicios.length > 0) {
bodyPlataformasTecnologicas.push([
{
text: 'Detalles del Servicio',
style: 'tableSubtitleHeader',
fontSize: 8,
colSpan: 10,
alignment: 'left',
color: primaryColor,
},
{},
{},
{},
{},
{},
{},
{},
{},
{},
], [
{
text: 'Forma de Pago',
style: 'tableHeader',
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
},
{
text: 'Tipo de Servicio',
style: 'tableHeader',
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
},
{
text: 'Subtipo de Servicio',
style: 'tableHeader',
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
colSpan: 2,
},
{},
{
text: 'RFC Tercero Autorizado',
style: 'tableHeader',
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
colSpan: 2,
},
{},
{
text: 'Fecha del Servicio',
style: 'tableHeader',
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
colSpan: 2,
},
{},
{
text: 'Precio Sin IVA',
style: 'tableHeader',
alignment: 'center',
fillColor: primaryColor,
margin: [0, 3, 0, 3],
colSpan: 2,
},
{},
]);
for (const servicio of servicios) {
const impuestosTable = impuestosTrasladadosPlataformasComplementTable(servicio, primaryColor, bgGrayColor);
const impuestosContent = impuestosTable
? [{ ...impuestosTable, colSpan: 10 }]
: [{ text: '', colSpan: 10 }];
const formaPago = servicio.getAttribute('FormaPagoServ');
const tipoServicio = servicio.getAttribute('TipoDeServ');
const subTipServicio = servicio.getAttribute('SubTipServ');
const rfcTerceroAut = servicio.getAttribute('RFCTerceroAutorizado');
const fechaServicio = servicio.getAttribute('FechaServ');
const precioSinIVA = servicio.getAttribute('PrecioServSinIVA');
bodyPlataformasTecnologicas.push([
{ text: formaPago, alignment: 'center' },
{ text: tipoServicio, alignment: 'center' },
{ text: subTipServicio || '---', alignment: 'center', colSpan: 2 },
{},
{ text: rfcTerceroAut || '---', alignment: 'center', colSpan: 2 },
{},
{ text: fechaServicio, alignment: 'center', colSpan: 2 },
{},
{ text: formatCurrency(precioSinIVA), alignment: 'center', colSpan: 2 },
{},
], [...impuestosContent]);
}
}
return bodyPlataformasTecnologicas;
};
export default usePlataformasTecnologicas10Complement;