Commit b396ad9c authored by Wendy Fuertes's avatar Wendy Fuertes

ajustes, reporte resumen de ventas

parent 50e0a9c3
......@@ -46,7 +46,6 @@ module.exports = () => {
codigoSistema: '',
codigoAmbiente: 2,
codigoModalidad: 1,
codigoEmision: 1,
cuis: '',
cufd: 'https://presiatservicios.impuestos.gob.bo:39268/FacturacionSolicitudCufd?wsdl',
operaciones: 'https://presiatservicios.impuestos.gob.bo:39117/FacturacionOperaciones?wsdl',
......
......@@ -76,13 +76,30 @@ module.exports = (app) => {
throw error;
}
}
}
async function get(req, res) {
const t = await app.db.sequelize.transaction();
try {
const datos = await app.dao.usuario.get(req.params.id, t);
t.commit();
res.json({
finalizado: true,
mensaje: 'Usuario obtenido',
datos: datos
});
} catch (error) {
t.rollback();
throw error;
}
}
return {
post,
index,
grupos,
update
update,
get
}
};
\ No newline at end of file
......@@ -292,6 +292,23 @@ module.exports = (app) => {
}
}
async function getVentasporPeriodo(req, res) {
const t = await app.db.sequelize.transaction();
try {
const venta = await app.dao.venta.ventasPorPeriodo(req.body.desde, req.body.hasta, t);
await t.commit();
res.json({
finalizado: true,
mensaje: 'Datos obtenidos.',
datos: venta,
});
} catch (error) {
await logs(app.db.models.logs).error(error.message, error.name, error, req.body.audit_usuario.usuario);
await t.rollback();
throw error;
}
}
return {
anular,
get,
......@@ -303,6 +320,7 @@ module.exports = (app) => {
buscaVentaI,
indexContingencia,
RepEmitidos,
getRepEstadoEnvio
getRepEstadoEnvio,
getVentasporPeriodo
};
};
......@@ -166,6 +166,7 @@ module.exports = (app) => {
if (validation) {
throw Error('La estructura XML no cumple las especificaciones XSD de Impuestos Nacionales.');
}
console.log(facturaFirmada);
const idCliente = facturas[key][tipoFac].cabecera.codigoCliente;
const venta = await app.dao.venta.post(facturas[key][tipoFac].cabecera.numeroFactura, facturas[key][tipoFac].cabecera.numeroDocumento, facturas[key][tipoFac].cabecera.nombreRazonSocial, facturas[key][tipoFac].cabecera.montoTotal, factura.tipoEmision, 1, facturaFirmada, facturas[key][tipoFac].cabecera.cuf, cufd, key, puntoVenta.idPuntoVenta, factura.audit_usuario.usuario, facturas[key][tipoFac].cabecera.fechaEmision, idCliente, null, null, t);
//crear detalle
......@@ -219,7 +220,11 @@ module.exports = (app) => {
factura[root].cabecera.fechaEmision = moment().format('YYYY-MM-DDTHH:mm:ss.SSS');
factura[root].cabecera.cufd = cufd;
factura[root].cabecera.cuf = await app.dao.cuf(factura[root].cabecera.nitEmisor, factura[root].cabecera.fechaEmision, factura[root].cabecera.codigoSucursal, app.config.impuestos.codigoModalidad, puntoVenta.tipoEmision, tipoDoc.codigoDocumentoFiscal, factura[root].cabecera.codigoDocumentoSector, factura[root].cabecera.numeroFactura, factura[root].cabecera.codigoPuntoVenta._attributes && factura[root].cabecera.codigoPuntoVenta._attributes['xsi:nil'] ? '0' : factura[root].cabecera.codigoPuntoVenta);
if (datos.codigoExcepcionDocumento) {
factura[root].cabecera.codigoExcepcionDocumento = datos.codigoExcepcionDocumento;
}
const facturaFirmada = await firmar(setNill(factura));
console.log(facturaFirmada)
const schema = xsd.parse(fs.readFileSync(`${_path}/xml/${tipoDoc.archivo}.xsd`).toString('utf8').replace('http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd', `${_path}/xml/xmldsig-core-schema.xsd`));
const validation = schema.validate(facturaFirmada);
if (validation) {
......@@ -228,6 +233,16 @@ module.exports = (app) => {
await app.dao.cliente.put(ventaRecuperada.fid_cliente, datos.codigoTipoDocumentoIdentidad, datos.numeroDocumento, datos.complemento, datos.nombreRazonSocial, t);
await app.dao.venta.setEstado(idVenta, 'REGENERADO', null, t);
const venta = await app.dao.venta.post(factura[root].cabecera.numeroFactura, factura[root].cabecera.numeroDocumento, factura[root].cabecera.nombreRazonSocial, factura[root].cabecera.montoTotal, puntoVenta.tipoEmision, 1, facturaFirmada, factura[root].cabecera.cuf, factura[root].cabecera.cufd, 1, ventaRecuperada.fid_punto_venta, usuario, factura[root].cabecera.fechaEmision, ventaRecuperada.fid_cliente, null, idVenta, t);
if (venta) {
if(factura[root].detalle.length){
for (let i = factura.detalle.length - 1; i >= 0; i--) {
await app.dao.detalle.post(venta.id_venta,datos.detalle[i].idItem,factura[root].detalle[i].cantidad, factura[root].detalle[i].precioUnitario,factura[root].detalle.montoDescuento._attributes && factura[root].detalle[i].montoDescuento._attributes['xsi:nil'] ? 0 : factura[root].detalle[i].montoDescuento,factura[root].detalle[i].subTotal, usuario, t);
}
} else {
await app.dao.detalle.post(venta.id_venta,datos.detalle[0].idItem,factura[root].detalle.cantidad, factura[root].detalle.precioUnitario,factura[root].detalle.montoDescuento._attributes && factura[root].detalle.montoDescuento._attributes['xsi:nil'] ? 0 : factura[root].detalle.montoDescuento,factura[root].detalle.subTotal, usuario, t);
}
}
return { datos: { '1': facturaFirmada } };
} else {
......
......@@ -270,12 +270,43 @@ module.exports = (app) => {
});
}
async function get(id,t){
const usuarioRes = await models.usuario.findOne({
attributes: ['id_usuario', 'fid_persona', 'fid_punto_venta', 'usuario', 'estado'],
include: [
{
attributes: ['nombres', 'primer_apellido', 'segundo_apellido'],
model: models.persona,
as: 'persona',
}, {
attributes: ['id_grupo', 'grupo'],
model: models.grupo,
as: 'grupos',
where: {
estado: 'ACTIVO'
}
}
],
where: {
id_usuario: id,
},
transaction: t
});
if (!usuarioRes) {
throw Error("No se encontro al usuario");
}
return usuarioRes;
}
return {
autenticar,
ldap,
postUsuarioGrupo,
index,
grupos,
update
update,
get
};
};
......@@ -34,6 +34,7 @@ module.exports = (app) => {
}
async function post(numeroFactura, numeroDocumento, nombreRazonSocial, montoTotal, tipoEmision, tipoFactura, factura, cuf, cufd, codigoDocumentoSector, idPuntoVenta, usuario, fechaEmision, idCliente, caed, fIdVenta, t) {
console.log()
return await models.venta.create({
numero_factura: numeroFactura,
numero_documento: numeroDocumento,
......@@ -371,11 +372,11 @@ module.exports = (app) => {
options.estado= {
$like: req.query.buscarEstado
}
}else {
}/* else {
options.estado= {
$in:['PENDIENTE', 'ENVIADO', 'FINALIZADO','OBSERVADO', 'RECHAZADO','VALIDADO', 'ANULADO']
}
}
} */
//filtro por tipo de NRO de factura
if(req.query.buscarNroF != "0"){
options.numero_factura = nroF
......@@ -820,6 +821,28 @@ module.exports = (app) => {
return res.map(e => e.id_venta);
}
async function ventasPorPeriodo(desde, hasta, t){
const res = await app.db.sequelize.query(`SELECT EXTRACT(MONTH FROM fecha_emision) as mes, EXTRACT(YEAR FROM fecha_emision) as anio, count(*) as ventas, sum(monto) as monto_total
FROM venta
WHERE estado like 'VALIDADO'
and fecha_emision between :desde and :hasta
group by (mes, anio)`, {
replacements: {
desde: desde,
hasta: hasta
},
type: Sequelize.QueryTypes.SELECT,
transaccion: t,
});
if (res) {
return res;
} else {
throw Error('No existe ventas en ese rango de fechas')
}
}
return {
getId,
getPendiente,
......@@ -847,6 +870,7 @@ module.exports = (app) => {
setValidadoPaquete,
listar_contingencia,
registrarObs,
buscarIdsVal
buscarIdsVal,
ventasPorPeriodo
};
};
......@@ -221,8 +221,9 @@ module.exports = (app) => {
await logs(models.logs).error(error.message, error.name, error, 'system');
await t.rollback();
}
if (runValidarPaquete) {
setTimeout(validarFacturaPaquete, 3000);
if (runEnviarPaquete) {
setTimeout(enviarFacturaPaquete, 3000);
} else {
cola.dispatchEvent('stopEnviarFacturaPaquete');
}
......@@ -524,7 +525,7 @@ module.exports = (app) => {
//await logs(models.logs).error(error.message, error.name, error, 'system');
}
//mensaje, tipo = '', referencia, usuario, ip
console.log(msg);
//console.log(msg);
});
});
......
......@@ -176,6 +176,39 @@ module.exports = (app) => {
* "mensaje": "Edición realizada correctamente.",
* }
*/
app.api.put('/usuario/:id', validate({params: usuarioVal.params, body: usuarioVal.put}), asyncHandler(app.controllers.usuario_grupo.update));
app.api.put('/usuario/:id', validate({params: usuarioVal.params, body: usuarioVal.put}), asyncHandler(app.controllers.usuario_grupo.update));
/**
* @api {get} /api/v1/usuario/2 Obtiene los datos del usuario mediante id
* @apiGroup Usuario
* @apiDescription Obtiene los datos del usuario mediante id
*
* @apiHeader {String} Authorization Token de acceso generado para facturación
*
* @apiParam {Number} id Identificador del usuario
* @apiBodyExample
* {
* "finalizado": true,
* "mensaje": "Usuario obtenido",
* "datos": {
* "id_usuario": 1,
* "fid_persona": 1,
* "fid_sucursal": 1,
* "usuario": "admin",
* "estado": "ACTIVO",
* "persona": {
* "nombres": "admin",
* "primer_apellido": "admin",
* "segundo_apellido": "admin"
* },
* "grupos": [
* {
* "id_grupo": 1,
* "grupo": "ADMIN",
* }
* ]
* }
* }
*/
app.api.get('/usuario/:id', asyncHandler(app.controllers.usuario_grupo.get));
};
......@@ -26,5 +26,18 @@ module.exports = {
required: false
}
}
},
reporte: {
type:'object',
properties: {
desde: {
type: 'string',
required: true
},
hasta: {
type: 'string',
required: true
}
}
}
};
......@@ -146,6 +146,64 @@ module.exports = (app) => {
*/
app.api.get('/ventaReporte', asyncHandler(app.controllers.venta.getRepEmitidos));
/**
/**
* @api {get} /api/v1/ventasReporte Reporte de lista de ventas remitidas
* @apiGroup Evento
* @apiDescription lista de ventas remitidas
*
* @apiParamExample Ejemplo
* {
* limit: 1000000
* desde: 2019-10-1
* hasta: 2019-10-7 23:59:59
* buscarEstado: VALIDADO
* buscarNroCliente:
* buscarTipoDoc: 1
* }
*
* @apiSuccessExample Success-Response:
* HTTP/1.1 200 OK
* {
* "finalizado":true,
* "mensaje":"Datos obtenidos.",
* "datos":
* [
* {
* "id_venta":82,
* "numero_factura":"62",
* "numero_documento":"99002",
* "nombre_razon_social":"CONSUMIDOR FINAL",
* "monto":"55.00",
* "cufd":"BQUFBQ2ZFTUUE0NDVENTdGQjNPTEJLVFVFBMDAwMDRFR",
* "fecha_emision":"2019-09-30T15:14:54.130Z",
* "estado":"VALIDADO",
* "fecha_anulacion":null,
* "fid_cliente":8,
* "caed":null
* },
* {
* "id_venta":83,
* "numero_factura":"63",
* "numero_documento":"99003",
* "nombre_razon_social":"VENTAS MENORES DEL DIA",
* "monto":"55.00",
* "cufd":"BQUFBQ2ZFTUUE0NDVENTdGQk5jTEJLVFVFBMDAwMDRFR",
* "fecha_emision":"2019-09-30T15:28:13.662Z",
* "estado":"VALIDADO",
* "fecha_anulacion":null,
* "fid_cliente":10,
* "caed":null
* }
* ],
* "paginacion":{
* "totalRegistros":2,
* "paginas":1,
* "cantidad":2
* }
* }
*/
app.api.put('/ventaPorPeriodo', validate({body: ventaVal.reporte}), asyncHandler(app.controllers.venta.getVentasporPeriodo));
/**
* @api {get} /api/v1/ventasReportes lista ventas sin paginación
* @apiGroup Evento
* @apiDescription lista ventas sin paginación
......
......@@ -54,6 +54,11 @@ module.exports = {
_fecha_creacion: new Date(),
_fecha_modificacion: new Date()
}, {
fid_ruta: 11,
fid_grupo: 1,
_fecha_creacion: new Date(),
_fecha_modificacion: new Date()
},{
fid_ruta: 1,
fid_grupo: 3,
_fecha_creacion: new Date(),
......
......@@ -84,8 +84,7 @@ module.exports = {
metodo: 'sincronizarListaLeyendasFactura'
}, {
codigo: 'CODIGOS_ESPECIALES',
descripcion: 'Lista de tipos de codigos especiales',
metodo: ''
descripcion: 'Lista de tipos de codigos especiales'
}
], {});
},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment