UNPKG

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
"use strict"; /** * 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}`); } }