diff --git a/debo/cuerpoDebo.js b/debo/cuerpoDebo.js index e7039b4..eb444e7 100644 --- a/debo/cuerpoDebo.js +++ b/debo/cuerpoDebo.js @@ -1,22 +1,22 @@ -module.exports = function(comprobante, afipTablas, entities) { +module.exports = function(comprobante, afipTablas, entities, item) { return { TIP: afipTablas(comprobante.identificaxComprobante.tipo).letraComprobante, // [char](1) NOT NULL, LETRA DEL COMPROBANTE (A,B,C,M) TCO: afipTablas(comprobante.identificaxComprobante.tipo).tipoComprobante, // [char](2) NOT NULL, TIPO DE COMPROBANTE (FT,NC,ND) SUC: parseInt(comprobante.identificaxComprobante.puntoVenta), // [int] NOT NULL, PUNTO DE VENTA DE LA FACTURA NCO: parseInt(comprobante.identificaxComprobante.numero), // [bigint] NOT NULL, NUMERO DE COMPROBANTE - PRO: entities.proveedor.COD, // [int] NOT NULL, CODIGO DEL PROVEEDOR NECESITAS RELACION -- BUSCAR SI ENVIAN EL CUIT DEL PROVEEDOR SELECT COD FROM PROVEED WHERE CUIT= '30-54775125-2' - ORD: parseInt(comprobante.itemsFactura.numeroLinea), // [int] NOT NULL, ORDEN DEL ITEM, EMPIEZA EN 1 Y SUMA DE A 1 POR CADA REGISTRO DE MOVIMIENTO - COD: null, // [int] NOT NULL, SECTOR DEBO DEL PRODUCTO - ART: null, // [int] NOT NULL, ARTICULO DEBO DEL PRODUCTO ESTOS 2 SE OBTIENEN A PARTIR DEL CODIGO DE BARRAS: SELECT CodSec AS SECTOR,CodArt AS ARTICULO FROM CODBAR WHERE CODBAR='03239210540' - RUB: null, // [int] NOT NULL, CODIGO DE RUBRO SE OBTIENE DE LA TABLA ARTICULOS SELECT DET_LAR,CODRUB FROM ARTICULOS WHERE CODSEC=SECTOR AND CODART=ARTICULO (DATOS OBTENIDOS EN NOTA ANTERIOR - TIO: null, // [varchar](60) NOT NULL DESCRIPCION DEL PRODUCTO DEL PUNTO ANTERIOR DET_LAR - LI0: comprobante.itemsFactura.descripcion, // [varchar](60) NOT NULL, DESCRIPCION ENVIADA POR EL PROVEEDOR - CAN: comprobante.itemsFactura.cantidad, // [money] NOT NULL, CANTIDAD DEL ITEM - PUN: comprobante.itemsFactura.precioUnitario, // [decimal](20, 8) NOT NULL PRECIO UNITARIO DEL PRODUCTO ITEM - IMI: comprobante.detalleImpuestosItemFactura.importeImpuesto, // [money] NOT NULL, IMPORTE IMPUESTOS INTERNOS DEL ITEM - IVA: comprobante.itemsFactura.importeIVA, // [money] NOT NULL, IMPORTE IVA DEL ITEM - PUT: comprobante.itemsFactura.precioUnitario, // [money] NOT NULL, IGUAL AL PUN + PRO: entities.proveedores.COD, // [int] NOT NULL, CODIGO DEL PROVEEDOR NECESITAS RELACION -- BUSCAR SI ENVIAN EL CUIT DEL PROVEEDOR SELECT COD FROM PROVEED WHERE CUIT= '30-54775125-2' + ORD: parseInt(item.numeroLinea), // [int] NOT NULL, ORDEN DEL ITEM, EMPIEZA EN 1 Y SUMA DE A 1 POR CADA REGISTRO DE MOVIMIENTO + COD: item.CodSec, // [int] NOT NULL, SECTOR DEBO DEL PRODUCTO + ART: item.CodArt, // [int] NOT NULL, ARTICULO DEBO DEL PRODUCTO ESTOS 2 SE OBTIENEN A PARTIR DEL CODIGO DE BARRAS: SELECT CodSec AS SECTOR,CodArt AS ARTICULO FROM CODBAR WHERE CODBAR='03239210540' + RUB: item.CodRub, // [int] NOT NULL, CODIGO DE RUBRO SE OBTIENE DE LA TABLA ARTICULOS SELECT DET_LAR,CODRUB FROM ARTICULOS WHERE CODSEC=SECTOR AND CODART=ARTICULO (DATOS OBTENIDOS EN NOTA ANTERIOR + TIO: item.DET_LAR, // [varchar](60) NOT NULL DESCRIPCION DEL PRODUCTO DEL PUNTO ANTERIOR DET_LAR + LI0: item.descripcion, // [varchar](60) NOT NULL, DESCRIPCION ENVIADA POR EL PROVEEDOR + CAN: item.cantidad, // [money] NOT NULL, CANTIDAD DEL ITEM + PUN: item.precioUnitario, // [decimal](20, 8) NOT NULL PRECIO UNITARIO DEL PRODUCTO ITEM + IMI: item.impuestoInterno ? item.impuestoInterno.importeImpuesto : 0, // [money] NOT NULL, IMPORTE IMPUESTOS INTERNOS DEL ITEM + IVA: item.importeIVA, // [money] NOT NULL, IMPORTE IVA DEL ITEM + PUT: item.precioUnitario, // [money] NOT NULL, IGUAL AL PUN LEG: 0, // [int] NOT NULL, FIJO 0 CMF: 0, // [int] NOT NULL, FIJO 0 TUR: 0, // [int] NOT NULL, FIJO 0 diff --git a/debo/index.js b/debo/index.js index c4315ab..3502f4e 100644 --- a/debo/index.js +++ b/debo/index.js @@ -2,8 +2,15 @@ module.exports = function(comprobante, entities) { var afipTablas = require('../afip/index'); - return { + var objReturn = { cabecera: require('./cabeceraDebo')(comprobante, afipTablas, entities), - cuerpo: require('./cuerpoDebo')(comprobante, afipTablas) - }; + cuerpo: [] + } + + comprobante.itemsFactura.forEach((item, index) => { + + objReturn.cuerpo.push(require('./cuerpoDebo')(comprobante, afipTablas, entities, item)); + }); + + return objReturn; } diff --git a/index.js b/index.js index 7942d36..f59ad74 100644 --- a/index.js +++ b/index.js @@ -20,15 +20,36 @@ function onGetFile(event, fileString) { var promiseProveedores = wsServer.getEntidad('7790968003283', 'PROVEED', {CUIT: cuitToDebo}); var promiseEmp = wsServer.getEntidad('7790968003283', 'APAREMP'); - Promise.all([promiseProveedores, promiseEmp]).then(function(data) { + var promesasArticulo = []; - entities.proveedores = data[0]; - entities.empresa = data[1]; + planex.itemsFactura.forEach(item => { - var debo = require('./debo/index')(planex, entities); + var queryString = 'select cb.*, art.CodRub, art.DET_LAR from CODBAR cb ' + + 'join ARTICULOS art on cb.CodArt = art.CodArt and cb.CodSec = art.CodSec where cb.CodBar = \'' + + item.codigoUPCEAN13 + '\''; + + promesasArticulo.push(wsServer.getEntidad('7790968003283', null, {}, queryString)); }); - console.log(planex); + Promise.all(promesasArticulo).then(function(values) { + + planex.itemsFactura.forEach((item, index) => { + item.CodArt = values[index].CodArt; + item.CodSec = values[index].CodSec; + item.CodRub = values[index].CodRub; + item.DET_LAR = values[index].DET_LAR; + }); + + Promise.all([promiseProveedores, promiseEmp]).then(function(data) { + + entities.proveedores = data[0]; + entities.empresa = data[1]; + + var debo = require('./debo/index')(planex, entities); + + console.log(debo); + }); + }); } console.log('listen websocket port ' + config.port); diff --git a/planex/index.js b/planex/index.js index b592b3a..e95ebf7 100644 --- a/planex/index.js +++ b/planex/index.js @@ -67,5 +67,35 @@ module.exports = function(comprobante) { } }); + objReturn.itemsFactura.array.forEach(item => { + + var detalleDescuentos = planex.detalleImpuestosItemFactura.filter(function(descuento) { + return descuento.numeroLinea == item.numeroLinea; + })[0]; + + switch (detalleDescuentos.descripcionImpuesto) { + case 'c05': + item.percepcionIVA = detalleDescuentos; + break; + case 'c06': + item.percepcionIIBB = detalleDescuentos; + break; + case 'c07': + item.impuestoInterno = detalleDescuentos; + break; + case 'c08': + item.impuestoAbasto = detalleDescuentos; + break; + case 'ITC': + item.impuestoTransferenciaCombustibles = detalleDescuentos; + break; + case 'c10': + item.percepcionImpuestosMunicipales = detalleDescuentos; + break; + default: + break; + } + }); + return objReturn; } diff --git a/webSocketServer/index.js b/webSocketServer/index.js index 2337f91..2b0501d 100644 --- a/webSocketServer/index.js +++ b/webSocketServer/index.js @@ -2,7 +2,6 @@ module.exports = function() { const webSocketServer = require('ws').Server; var clients = []; -var idsSolicitud = []; const objWs = {}; @@ -28,7 +27,7 @@ objWs.wsServer.on('connection', function connection(ws) { }); }); -objWs.getEntidad = function(gln, tableName, where) { +objWs.getEntidad = function(gln, tableName, where, queryString) { return new Promise(function(resolve, reject) { @@ -36,16 +35,24 @@ objWs.getEntidad = function(gln, tableName, where) { return client.gln == gln })[0]; + if (!client) { + reject('No se encuentra el webSocket client'); + } + var idSolicitud = Math.round(Math.random() * 1000); var enviar = { action: 'getEntity', - tableName: tableName, - where: where || {}, idSolicitud: idSolicitud - } + }; - idsSolicitud.push(idSolicitud); + if (queryString) { + + enviar.queryString = queryString; + } else { + enviar.tableName = tableName; + enviar.where = where || {}; + } client.ws.send(JSON.stringify(enviar));