nodefact
Version:
Biblioteca para facturación electrónica en Perú con Node.js. Compatible con UBL 2.1 y servicios web de SUNAT.
117 lines (116 loc) • 5.15 kB
JavaScript
;
/**
* 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.
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.templates = exports.voidedTemplate = exports.summaryTemplate = exports.perceptionTemplate = exports.retentionTemplate = exports.dispatchTemplate = exports.debitNoteTemplate = exports.creditNoteTemplate = exports.invoiceTemplate = void 0;
exports.getTemplateByDocumentType = getTemplateByDocumentType;
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
// Función para leer una plantilla
function readTemplate(filename) {
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
exports.invoiceTemplate = readTemplate('invoice.html.twig');
// Plantillas para notas de crédito
exports.creditNoteTemplate = readTemplate('notacr.html.twig');
// Plantillas para notas de débito
exports.debitNoteTemplate = readTemplate('notadb.html.twig');
// Plantillas para guías de remisión
exports.dispatchTemplate = readTemplate('dispatch.html.twig');
// Plantillas para comprobantes de retención
exports.retentionTemplate = readTemplate('retention.html.twig');
// Plantillas para comprobantes de percepción
exports.perceptionTemplate = readTemplate('perception.html.twig');
// Plantillas para resúmenes diarios
exports.summaryTemplate = readTemplate('summary.html.twig');
// Plantillas para comunicaciones de baja
exports.voidedTemplate = readTemplate('voided.html.twig');
// Exportar todas las plantillas en un objeto
exports.templates = {
invoice: exports.invoiceTemplate,
creditNote: exports.creditNoteTemplate,
debitNote: exports.debitNoteTemplate,
dispatch: exports.dispatchTemplate,
retention: exports.retentionTemplate,
perception: exports.perceptionTemplate,
summary: exports.summaryTemplate,
voided: exports.voidedTemplate,
};
// Función para obtener una plantilla por tipo de documento
function getTemplateByDocumentType(documentType) {
switch (documentType) {
case '01': // Factura
case '03': // Boleta
return exports.invoiceTemplate;
case '07': // Nota de crédito
return exports.creditNoteTemplate;
case '08': // Nota de débito
return exports.debitNoteTemplate;
case '09': // Guía de remisión
return exports.dispatchTemplate;
case '20': // Comprobante de retención
return exports.retentionTemplate;
case '40': // Comprobante de percepción
return exports.perceptionTemplate;
case 'RC': // Resumen diario
return exports.summaryTemplate;
case 'RA': // Comunicación de baja
return exports.voidedTemplate;
default:
throw new Error(`No se encontró una plantilla para el tipo de documento: ${documentType}`);
}
}