Commit 50e0a9c3 authored by Wendy Fuertes's avatar Wendy Fuertes

Crear cliente, registrar evento al adicionar punto de venta, aumento de rol Factura

parent a7979ca5
......@@ -74,10 +74,28 @@ module.exports = (app) => {
}
}
async function post(req, res) {
const t = await app.db.sequelize.transaction();
try {
var cliente = await app.dao.cliente.getCodigoCliente(req.body, req.query.tipoDoc, t);
await t.commit();
res.json({
finalizado: true,
mensaje: 'Datos encontrados',
datos: cliente
});
} 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 {
index,
put,
buscaCliente,
buscaClienteCI
buscaClienteCI,
post
};
};
......@@ -16,29 +16,34 @@ module.exports = (app) => {
transaction: t
});
if (!clienteRes) {
clienteRes = await models.cliente.create({
tipo_documento: factura.codigoTipoDocumentoIdentidad.toString(),
complemento_visible: (factura.complemento && factura.complemento !== '') ? true : false,
numero_documento: factura.numeroDocumento.toString(),
complemento: (factura.complemento && factura.complemento !== '') ? factura.complemento.toUpperCase() : undefined,
razon_social: factura.nombreRazonSocial.toUpperCase(),
pais: factura.pais,
_usuario_creacion: factura.audit_usuario.usuario
}, {
transaction: t,
});
if (factura.codigoTipoDocumentoIdentidad != 2) {
factura.pais = "BOLIVIA (ESTADO PLURINACIONAL DE)";
}
clienteRes = await models.cliente.create({
tipo_documento: factura.codigoTipoDocumentoIdentidad.toString(),
complemento_visible: (factura.complemento && factura.complemento !== '') ? true : false,
numero_documento: factura.numeroDocumento.toString(),
complemento: (factura.complemento && factura.complemento !== '') ? factura.complemento.toUpperCase() : undefined,
razon_social: factura.nombreRazonSocial.toUpperCase(),
pais: factura.pais,
fecha_nacimiento: (factura.fechaNacimiento)? factura.fechaNacimiento: undefined,
correo: (factura.correo)? factura.correo: undefined,
_usuario_creacion: factura.audit_usuario.usuario
}, {
transaction: t,
});
}
return clienteRes.id_cliente;
}
async function editarCliente(idCliente,datos,usuario, t){
return await models.cliente.update({
razon_social: datos.razon_social.toUpperCase(),
numero_documento:datos.numero_documento,
tipo_documento:datos.tipo_documento,
razon_social: datos.nombreRazonSocial.toUpperCase(),
numero_documento:datos.numeroDocumento,
tipo_documento:datos.codigoTipoDocumentoIdentidad,
complemento: (datos.complemento && datos.complemento !== '' )? datos.complemento.toUpperCase() : null,
complemento_visible: (datos.complemento) ? true : false,
fecha_nacimiento: datos.fecha_nacimiento,
fecha_nacimiento: datos.fechaNacimiento,
estado: datos.estado,
correo: datos.correo,
_usuario_modificacion:usuario
......
......@@ -176,28 +176,42 @@ module.exports = (app) => {
}
async function post(eventoC, usuario, t) {
return await models.evento_significativo.create({
tipo: eventoC.tipo,
fecha_inicio: eventoC.fecha_inicio,
descripcion: eventoC.descripcion.toUpperCase(),
fid_punto_venta: eventoC.idPuntoVenta,
codigo_evento: eventoC.codigoEvento,
_usuario_creacion: usuario.usuario
}, {
let eventoRes = await models.evento_significativo.findOne({
attributes: ['id_evento'],
where: {
codigo_evento: eventoC.codigoEvento,
tipo: eventoC.tipo,
estado:{
$in:['PENDIENTE', 'ENVIADO']
}
},
transaction: t
}).then(async resp =>{
try{
const conn = await impuestos.verificarComunicacion();
if (conn === 66) {
await enviarEvento(resp.id_evento, usuario, t);
} else {
throw Error(await app.dao.catalogo.getError(1, conn.toString(), t));
});
if (!eventoRes) {
return await models.evento_significativo.create({
tipo: eventoC.tipo,
fecha_inicio: eventoC.fecha_inicio,
descripcion: eventoC.descripcion.toUpperCase(),
fid_punto_venta: eventoC.idPuntoVenta,
codigo_evento: eventoC.codigoEvento,
_usuario_creacion: usuario.usuario
}, {
transaction: t
}).then(async resp =>{
try{
const conn = await impuestos.verificarComunicacion();
if (conn === 66) {
await enviarEvento(resp.id_evento, usuario, t);
} else {
throw Error(await app.dao.catalogo.getError(1, conn.toString(), t));
}
} catch (e) {
return resp.id_evento;
}
} catch (e) {
return resp.id_evento;
}
})
});
} else {
throw Error('El Evento Significativo ya fue creado')
}
}
//registro de inicio de evento
......
const Sequelize = require('sequelize');
const logs = require('../lib/logs');
const Op = Sequelize.Op;
const moment = require('moment');
module.exports = (app) => {
const impuestos = require('../services/impuestos/operaciones')(app);
const models = app.db.models;
......@@ -140,7 +140,7 @@ module.exports = (app) => {
puntoVenta.tipoEmision = 1;
puntoVenta.codigo = null;
puntoVenta.estado = 'PENDIENTE';
puntoVenta.cuis = '';
puntoVenta.cuis = app.config.impuestos.cuis;
puntoVenta.vigenciaCuis = certificado.hasta
}
......@@ -159,18 +159,17 @@ module.exports = (app) => {
transaction: t
}).then(async resp => {
if (puntoVenta.codigo != '0') {
/* try {
//registrar punto de venta con Impuestos
try {
//registrar punto de venta con Impuestos Nacionales
const conn = await impuestos.verificarComunicacion();
if (conn === 66) {
// await registrarPuntoEvento(resp.id_punto_venta, t);
await registrarPuntoEvento(resp.id_punto_venta, usuario, t);
} else {
throw Error(await app.dao.catalogo.getError(1, conn.toString(), t));
//si no se conecta registrar evento significativo
}
} catch (e) {
throw e;
} */
}
}
}).catch(error => {
throw error;
......@@ -255,7 +254,7 @@ module.exports = (app) => {
}
//registro de punto de venta con Impuestos
async function registrarPuntoEvento(idPunto, t) {
async function registrarPuntoEvento(idPunto, usuario, t) {
const puntoVenta = await models.punto_venta.findByPk(idPunto, {
attributes:['nombre','estado','descripcion','fid_sucursal','tipo', 'codigo', 'cuis'],
include:[
......@@ -298,6 +297,14 @@ module.exports = (app) => {
//throw Error('ERROR EN SERVICO DE IMPUESTOS '+registro.listaCodigosRespuestas[0].codigoMensaje);
}
await setCodigoPunto(idPunto, registro.codigoPuntoVenta, t);
var eventoNuevo = {
tipo: 'INFORMATIVO',
fecha_inicio: moment().format('YYYY-MM-DDTHH:mm:ss.SSS'),
descripcion: "REGISTRO DE NUEVO PUNTO DE VENTA",
idPuntoVenta: resp.id_punto_venta,
codigoEvento: 3054
};
await app.dao.evento_significativo.post(eventoNuevo, usuario, t);
//await solicitarCuisPunto(idPunto, t);----> aun no solicitamos CUIS para pruebas
}
......
......@@ -52,4 +52,37 @@ module.exports = {
}
}
},
post: {
type: 'object',
properties: {
codigoTipoDocumentoIdentidad: {
type: 'string',
required: true
},
complemento: {
type: 'string',
required: false
},
numeroDocumento: {
type: 'string',
required: true
},
nombreRazonSocial: {
type: 'string',
required: true
},
pais: {
type: 'string',
required: false
},
correo: {
type: 'string',
required: false
},
fechaNacimiento: {
type: 'string',
required: false
},
}
},
};
......@@ -101,7 +101,7 @@ module.exports = (app) => {
* @apiParamExample Ejemplo
* {
* "complemento": ""
* "tipoDoc": "5"
* "tipoDoc": "5"
* }
*
* @apiSuccessExample Success-Response:
......@@ -128,5 +128,30 @@ module.exports = (app) => {
* }
*/
app.api.get('/cliente/buscar/:ci', validate({params: clienteVal.search}), asyncHandler(app.controllers.cliente.buscaClienteCI));
/**
* @api {post} /api/v1/cliente Crear datos de cliente
* @apiGroup Cliente
* @apiDescription Crear datos de cliente
*
* @apiParam {String} codigoTipoDocumentoIdentidad Tipo de documento
* @apiParam {String} numeroDocumento Numero del documento
* @apiParam {String} complemento Complemento del documento
* @apiParam {String} nombreRazonSocial Nombre del cliente o razón social
*
* @apiParamExample Ejemplo de emisión de factura
* {
* "codigoTipoDocumentoIdentidad": 5,
* "numeroDocumento": 1234567,
* "complemento": "1E",
* "nombreRazonSocial": "Juan Perez",
* }
* @apiSuccessExample Success-Response:
* HTTP/1.1 200 OK
* {
* "finalizado":true,
* "mensaje":"Cliente creado correctamente"
* }
*/
app.api.post('/cliente', validate({body: clienteVal.post}), asyncHandler(app.controllers.cliente.post));
};
......@@ -22,6 +22,16 @@ module.exports = {
_usuario_creacion: '1',
_fecha_creacion: new Date(),
_fecha_modificacion: new Date()
},
{
// 3
grupo: 'FACTURA',
descripcion: 'Rol para facturar',
peso: 0,
estado: 'ACTIVO',
_usuario_creacion: '1',
_fecha_creacion: new Date(),
_fecha_modificacion: new Date()
}
], {});
},
......
......@@ -92,7 +92,7 @@ module.exports = {
ruta: '/api/v1/cliente',
descripcion: 'Ruta para la gestión de clientes',
method_get: true,
method_post: false,
method_post: true,
method_put: true,
method_delete: false,
estado: 'ACTIVO',
......@@ -112,7 +112,7 @@ module.exports = {
_fecha_creacion: new Date(),
_fecha_modificacion: new Date()
}, {
// 9
// 10
ruta: '/api/v1/codigoEspecial',
descripcion: 'Ruta para la administración de codigos especiales',
method_get: true,
......@@ -124,7 +124,7 @@ module.exports = {
_fecha_creacion: new Date(),
_fecha_modificacion: new Date()
}, {
// 10
// 11
ruta: '/api/v1/usuario',
descripcion: 'Ruta para la administración de usuarios',
method_get: true,
......
......@@ -53,6 +53,26 @@ module.exports = {
fid_grupo: 1,
_fecha_creacion: new Date(),
_fecha_modificacion: new Date()
}, {
fid_ruta: 1,
fid_grupo: 3,
_fecha_creacion: new Date(),
_fecha_modificacion: new Date()
}, {
fid_ruta: 2,
fid_grupo: 3,
_fecha_creacion: new Date(),
_fecha_modificacion: new Date()
}, {
fid_ruta: 5,
fid_grupo: 3,
_fecha_creacion: new Date(),
_fecha_modificacion: new Date()
}, {
fid_ruta: 8,
fid_grupo: 3,
_fecha_creacion: new Date(),
_fecha_modificacion: new Date()
}
], {});
},
......
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