From 6710c93dc042eba6c6b4ab39511d83a737fbc66b Mon Sep 17 00:00:00 2001 From: Eric Fernandez Date: Mon, 1 Jul 2019 10:41:59 -0300 Subject: [PATCH] RECADV --- db/index.js | 43 ++++++++++++++++++----------- debo/cabeceraDebo.js | 2 +- knexfile.js | 47 +++++++++++++++++++++++++++++++ migrations/20190626112130_v0.0.1.js | 37 +++++++++++++++++++++++++ package.json | 2 +- recadv/datosArticulos.js | 10 +++++++ recadv/datosCabecera.js | 8 ++++++ recadv/datosCantidadArticulos.js | 11 ++++++++ recadv/datosComprador.js | 5 ++++ recadv/datosIndentificacionMensaje.js | 7 +++++ recadv/datosProveedor.js | 5 ++++ recadv/index.js | 41 +++++++++++++++++++++++++++ recadv/todos.js | 52 +++++++++++++++++++++++++++++++++++ recadv/totalControl.js | 4 +++ rutas/comprobantes.js | 16 +++++++---- 15 files changed, 267 insertions(+), 23 deletions(-) create mode 100644 knexfile.js create mode 100644 migrations/20190626112130_v0.0.1.js create mode 100644 recadv/datosArticulos.js create mode 100644 recadv/datosCabecera.js create mode 100644 recadv/datosCantidadArticulos.js create mode 100644 recadv/datosComprador.js create mode 100644 recadv/datosIndentificacionMensaje.js create mode 100644 recadv/datosProveedor.js create mode 100644 recadv/index.js create mode 100644 recadv/todos.js create mode 100644 recadv/totalControl.js diff --git a/db/index.js b/db/index.js index 50627bb..1f1c6fa 100644 --- a/db/index.js +++ b/db/index.js @@ -1,25 +1,36 @@ module.exports = function(comprobante, nameFile) { - var promesas = []; - - promesas.push(knex('PMAEFACT_TEMP').insert(comprobante.cabecera)); + var nameFileDest = nameFile.split('\\')[nameFile.split('\\').length - 1]; + + knex('planex_transacciones') + .insert({ + archivoRecibido: nameFileDest, + estado: 0, // Ingresada + GLN: comprobante.cabecera.GLN + }) + .returning('id') + .then(saveDebo); + + function saveDebo(id) { + comprobante.cabecera.idTransaccion = id; + var promesas = [knex('PMAEFACT_TEMP').insert(comprobante.cabecera)]; + + comprobante.cuerpo.forEach(cuerpo => { + promesas.push(knex('PMOVFACT_TEMP').insert(cuerpo)); + }); - comprobante.cuerpo.forEach(cuerpo => { - promesas.push(knex('PMOVFACT_TEMP').insert(cuerpo)); - }); + Promise.all(promesas).then(function() { - Promise.all(promesas).then(function() { + var pathDest = config.dirDestino + '/' + nameFileDest; - nameFileDest = nameFile.split('\\')[nameFile.split('\\').length - 1]; - var pathDest = config.dirDestino + '/' + nameFileDest; + fs.rename(nameFile, pathDest, function(err) { - fs.rename(nameFile, pathDest, function(err) { + if(err) console.log(err); + console.log('COMPROBANTE GUARDADO CON ÉXITO'); + }); + }).catch(function() { - if(err) console.log(err); - console.log('COMPROBANTE GUARDADO CON ÉXITO'); + console.log('ERROR AL GUARDAR EL COMPROBANTE'); }); - }).catch(function() { - - console.log('ERROR AL GUARDAR EL COMPROBANTE'); - }); + } } diff --git a/debo/cabeceraDebo.js b/debo/cabeceraDebo.js index 79c9720..eda9158 100644 --- a/debo/cabeceraDebo.js +++ b/debo/cabeceraDebo.js @@ -87,6 +87,6 @@ module.exports = function(comprobante, afipTablas, entities) { CABA_PER: 0, // [money] NOT NULL, IMPORTE PERCEPCION CABA PERMUN: comprobante.importesTotales.importeImpuestosMunicipales, // [money] NOT NULL, IMPORTE PERCEPCIONES MUNICIPALES IMI2: 0, // [money] NOT NULL, FIJO 0 - gln: comprobante.identificaxSucursalReceptorFactura.glnSucursal + GLN: comprobante.identificaxSucursalReceptorFactura.glnSucursal }; } diff --git a/knexfile.js b/knexfile.js new file mode 100644 index 0000000..f5f2fcb --- /dev/null +++ b/knexfile.js @@ -0,0 +1,47 @@ +// Update with your config settings. + +module.exports = { + + development: { + client: 'mssql', + connection: { + host: '10.231.45.211', + user: 'sa', + password: 'xxzza', + database: 'UNITYOIL_28082017' + } + }, + + staging: { + client: 'postgresql', + connection: { + database: 'my_db', + user: 'username', + password: 'password' + }, + pool: { + min: 2, + max: 10 + }, + migrations: { + tableName: 'knex_migrations' + } + }, + + production: { + client: 'postgresql', + connection: { + database: 'my_db', + user: 'username', + password: 'password' + }, + pool: { + min: 2, + max: 10 + }, + migrations: { + tableName: 'knex_migrations' + } + } + +}; diff --git a/migrations/20190626112130_v0.0.1.js b/migrations/20190626112130_v0.0.1.js new file mode 100644 index 0000000..0cc6634 --- /dev/null +++ b/migrations/20190626112130_v0.0.1.js @@ -0,0 +1,37 @@ + +exports.up = function(knex, Promise) { + return Promise.all([ + knex.schema + .createTable('planex_transacciones', function(table) { + + table.increments(); + table.string('archivoRecibido', 1024); + table.string('archivoEnviado', 1024); + // 0: insertado, 1 enviado + table.integer('estado'); + table.string('apies'); + table.string('GLN'); + }) + .table('PMAEFACT_TEMP', function(table) { + + table.string('GLN'); + table.bigInteger('idTransaccion'); + }) + .table('PMOVFACT_TEMP', function(table) { + + table.string('GLN'); + table.bigInteger('codigoBarras'); + }) + ]); +}; + +exports.down = function(knex, Promise) { + return Promise.all([ + knex.schema + .dropTable('planex_transacciones') + .table('PMAEFACT_TEMP', function(table) { + + table.dropColumns('GLN', 'idTransaccion'); + }) + ]); +}; diff --git a/package.json b/package.json index 310d5bb..c7f464f 100644 --- a/package.json +++ b/package.json @@ -8,10 +8,10 @@ "express": "^4.17.1", "knex": "^0.16.5", "moment": "^2.24.0", - "mssql": "^5.1.0", "ws": "^7.0.0" }, "devDependencies": { + "mssql": "^5.1.0", "nodemon": "^1.19.1" }, "scripts": { diff --git a/recadv/datosArticulos.js b/recadv/datosArticulos.js new file mode 100644 index 0000000..ecf8bbf --- /dev/null +++ b/recadv/datosArticulos.js @@ -0,0 +1,10 @@ +module.exports = function(cuerpo, index, parseToFijo) { + + return '110;' + + index + ';' + + cuerpo.codigoBarras + ';' + + cuerpo.COD + '-' + cuerpo.ART + ';;' + + cuerpo.TIO + ';' + + parseToFijo(cuerpo.PUN, 4, 15) + ';' + + moment().format('YYYYMMDD') + ';;'; +} diff --git a/recadv/datosCabecera.js b/recadv/datosCabecera.js new file mode 100644 index 0000000..f355cec --- /dev/null +++ b/recadv/datosCabecera.js @@ -0,0 +1,8 @@ +module.exports = function(comprobante, idTransaccion) { + + return '010;' + + idTransaccion + ';' + + 9 + ';' + + moment().format('YYYYMMDD') + ';' + + moment().format('YYYYMMDD') + ';'; +} diff --git a/recadv/datosCantidadArticulos.js b/recadv/datosCantidadArticulos.js new file mode 100644 index 0000000..25d6b75 --- /dev/null +++ b/recadv/datosCantidadArticulos.js @@ -0,0 +1,11 @@ +module.exports = function(cuerpo, index) { + + cuerpo.estado == 'rechazado' ? cuerpo.CAN = 0 : false; + + var cantidadRecibida = cuerpo.recibido ? cuerpo.recibido : cuerpo.CAN; + + return '111;' + + index + ';' + + 45 + ';' + + cantidadRecibida + ';'; +} diff --git a/recadv/datosComprador.js b/recadv/datosComprador.js new file mode 100644 index 0000000..2fefd8c --- /dev/null +++ b/recadv/datosComprador.js @@ -0,0 +1,5 @@ +module.exports = function(comprobante) { + + return '030;' + comprobante.identificaxSucursalReceptorFactura.glnSucursal + ';' + + comprobante.identificaxSucursalReceptorFactura.numeroDocumento + ';;;;;;;;;;;';//TODO si se requieren mas datos +} diff --git a/recadv/datosIndentificacionMensaje.js b/recadv/datosIndentificacionMensaje.js new file mode 100644 index 0000000..bd36e30 --- /dev/null +++ b/recadv/datosIndentificacionMensaje.js @@ -0,0 +1,7 @@ +module.exports = function(comprobante) { + + return '000;RECADV;' + + comprobante.identificaxEmisor.glnEmisor + ';' + + comprobante.identificaxReceptorFactura.glnReceptor + ';' + + comprobante.identificaxMensaje.idMensaje; +} diff --git a/recadv/datosProveedor.js b/recadv/datosProveedor.js new file mode 100644 index 0000000..6264d86 --- /dev/null +++ b/recadv/datosProveedor.js @@ -0,0 +1,5 @@ +module.exports = function(comprobante) { + + return '040;' + comprobante.identificaxEmisor.glnEmisor + ';' + + comprobante.identificaxEmisor.glnEmisor + ';;;;;;;;;;;;' +} diff --git a/recadv/index.js b/recadv/index.js new file mode 100644 index 0000000..00642ef --- /dev/null +++ b/recadv/index.js @@ -0,0 +1,41 @@ +module.exports = function(comprobante, cuerpos) { + + var idTransaccion = comprobante.idTransaccion; + + knex('planex_transacciones') + .where({ id: idTransaccion } ) + .then(function(transax) { + + transax = transax[0]; + + fs.readFile(config.dirDestino + '\\' + transax.archivoRecibido, 'utf8', function(err, fileString) { + + if (err) { + console.log(err); + return; + } + + var planex = require('../planex')(fileString); + + var result = require('./todos')(planex, cuerpos, fileString, idTransaccion); + + var nombreRecadv = 'RECADV_' + planex.identificaxMensaje.idMensaje + '.txt'; + + fs.writeFile(config.dirRecadv + '/' + nombreRecadv, result, function(err) { + + if (err) return console.log(err); + + knex('planex_transacciones') + .where({ id: idTransaccion }) + .update({ archivoEnviado: nombreRecadv, estado: 1 }) + .then(function() { + + console.log('Archivo Pruebas guardado'); + }); + + }); + + }); + + }); +} diff --git a/recadv/todos.js b/recadv/todos.js new file mode 100644 index 0000000..c32cc73 --- /dev/null +++ b/recadv/todos.js @@ -0,0 +1,52 @@ +module.exports = function(planex, cuerpos, fileString, idTransaccion) { + + var result = require('./datosIndentificacionMensaje')(planex) + '\r\n'; + + result += require('./datosCabecera')(planex, idTransaccion) + '\r\n'; + + fileString = fileString.split(/\r?\n/); + + fileString.forEach(bloque => { + + if (bloque.slice(0, 3) == '020') { + result += bloque + '\r\n'; + } + + }); + + result += require('./datosComprador')(planex); + result += require('./datosProveedor')(planex); + + cuerpos.forEach((cuerpo, index) => { + result += require('./datosArticulos')(cuerpo, index, decimalToFijo) + '\r\n'; + }); + + cuerpos.forEach((cuerpo, index) => { + result += require('./datosCantidadArticulos')(cuerpo, index) + '\r\n'; + }); + + result += require('./totalControl')(cuerpos.length); + + return result; +}; + +function decimalToFijo(decimal, cantidadDecimales, fijo) { + + decimal = decimal.toString().split('.'); + + decimal[1] = rellenar(decimal[1] || '0', cantidadDecimales, false); + + decimal = rellenar(decimal[0] + decimal[1], fijo, true); + + function rellenar(aRellenar, cantidad, left) { + + for (let i = 0; i <= cantidad - aRellenar.length; i++) { + left ? aRellenar = '0' + aRellenar : aRellenar = aRellenar + '0'; + } + + return aRellenar; + } + + return decimal; +} + diff --git a/recadv/totalControl.js b/recadv/totalControl.js new file mode 100644 index 0000000..dc7596e --- /dev/null +++ b/recadv/totalControl.js @@ -0,0 +1,4 @@ +module.exports = function(totalLineas) { + + return '140;' + totalLineas; +} diff --git a/rutas/comprobantes.js b/rutas/comprobantes.js index 6fe895a..c8b13d3 100644 --- a/rutas/comprobantes.js +++ b/rutas/comprobantes.js @@ -5,7 +5,7 @@ router.get('/comprobantes/:gln*?', function(req, res) { var cabecera = knex('PMAEFACT_TEMP') .where(function(qb) { if (req.params.gln) { - qb.where({gln: req.params.gln}); + qb.where({GLN: req.params.gln}); } }) .select('*'); @@ -13,7 +13,7 @@ router.get('/comprobantes/:gln*?', function(req, res) { var cuerpo = knex('PMOVFACT_TEMP') .where(function(qb) { if (req.params.gln) { - qb.where({gln: req.params.gln}); + qb.where({GLN: req.params.gln}); } }) .select('*'); @@ -40,10 +40,16 @@ router.get('/comprobantes/:gln*?', function(req, res) { }); }); -router.post('/comprobante', function(req, res) { +router.post('/comprobante', function(req, res) { console.log(req.body); - delete req.body.cabecera.gln; + + require('../recadv')( + JSON.parse(JSON.stringify(req.body.cabecera)), + JSON.parse(JSON.stringify(req.body.cuerpo))); + + delete req.body.cabecera.idTransaccion; + delete req.body.cabecera.GLN; delete req.body.cabecera.C_HD2; delete req.body.cabecera.E_HD2; @@ -124,7 +130,7 @@ router.post('/comprobante', function(req, res) { cuerpo.estado == 'rechazado' ? cuerpo.CAN = 0 : false; - delete cuerpo.gln; + delete cuerpo.GLN; delete cuerpo.C_HD2; delete cuerpo.E_HD2; delete cuerpo.codigoBarras; -- 1.9.1