nodefact
Version:
Biblioteca para facturación electrónica en Perú con Node.js. Compatible con UBL 2.1 y servicios web de SUNAT.
90 lines (77 loc) • 3.24 kB
text/typescript
/**
* Módulo de Plantillas PDF - Exportación de plantillas para representaciones imprimibles
*
* Este módulo exporta todas las plantillas HTML para la generación de representaciones
* imprimibles (PDF) de los documentos electrónicos.
*/
import * as fs from 'fs';
import * as path from 'path';
// Función para leer una plantilla
function readTemplate(filename: string): string {
try {
// Primero intentamos leer desde el directorio actual (para desarrollo)
const templatePath = path.join(__dirname, filename);
return fs.readFileSync(templatePath, 'utf8');
} catch (err) {
try {
// Si falla, intentamos leer desde el directorio src/pdf/templates (para npm)
const srcPath = path.join(process.cwd(), 'src', 'pdf', 'templates', filename);
return fs.readFileSync(srcPath, 'utf8');
} catch (err2) {
// Si ambos fallan, intentamos leer desde node_modules (para npm)
const nodeModulesPath = path.join(process.cwd(), 'node_modules', 'nodefact', 'src', 'pdf', 'templates', filename);
return fs.readFileSync(nodeModulesPath, 'utf8');
}
}
}
// Plantillas para facturas y boletas
export const invoiceTemplate = readTemplate('invoice.html.twig');
// Plantillas para notas de crédito
export const creditNoteTemplate = readTemplate('notacr.html.twig');
// Plantillas para notas de débito
export const debitNoteTemplate = readTemplate('notadb.html.twig');
// Plantillas para guías de remisión
export const dispatchTemplate = readTemplate('dispatch.html.twig');
// Plantillas para comprobantes de retención
export const retentionTemplate = readTemplate('retention.html.twig');
// Plantillas para comprobantes de percepción
export const perceptionTemplate = readTemplate('perception.html.twig');
// Plantillas para resúmenes diarios
export const summaryTemplate = readTemplate('summary.html.twig');
// Plantillas para comunicaciones de baja
export const voidedTemplate = readTemplate('voided.html.twig');
// Exportar todas las plantillas en un objeto
export const templates = {
invoice: invoiceTemplate,
creditNote: creditNoteTemplate,
debitNote: debitNoteTemplate,
dispatch: dispatchTemplate,
retention: retentionTemplate,
perception: perceptionTemplate,
summary: summaryTemplate,
voided: voidedTemplate,
};
// Función para obtener una plantilla por tipo de documento
export function getTemplateByDocumentType(documentType: string): string {
switch (documentType) {
case '01': // Factura
case '03': // Boleta
return invoiceTemplate;
case '07': // Nota de crédito
return creditNoteTemplate;
case '08': // Nota de débito
return debitNoteTemplate;
case '09': // Guía de remisión
return dispatchTemplate;
case '20': // Comprobante de retención
return retentionTemplate;
case '40': // Comprobante de percepción
return perceptionTemplate;
case 'RC': // Resumen diario
return summaryTemplate;
case 'RA': // Comunicación de baja
return voidedTemplate;
default:
throw new Error(`No se encontró una plantilla para el tipo de documento: ${documentType}`);
}
}