diff --git a/server/controller/Admin/restarCredito.js b/server/controller/Admin/restarCredito.js new file mode 100644 index 0000000..951f6dd --- /dev/null +++ b/server/controller/Admin/restarCredito.js @@ -0,0 +1,31 @@ +const dbPath = '../../db/tablas'; +const Usuario = require(`${dbPath}/Usuario`); +const Inscripcion = require(`${dbPath}/Inscripcion`); +const Impresion = require(`${dbPath}/Impresion`); +const { validarNumeroCuenta, validarNumero } = require('../../helper/validar'); + +const restarCredito = async (body) => { + const creditoUsado = validarNumero(body.monto, 'monto', true); + const numeroCuenta = validarNumeroCuenta( + body.numeroCuenta, + 'número de cuenta', + true + ); + + return Usuario.findOne({ + where: { numeroCuenta }, + }).then(() => { + if (!res) throw new Error('No encontramos este número de cuenta'); + return Usuario.update( + { + credito: res.credito - creditoUsado, + }, + { + where: { numeroCuenta }, + } + ).then((res) => ({ + message: '¡La transaccion se realizo con éxito!', + })); + }); +}; +module.exports = restarCredito; diff --git a/server/controller/Admin/ticketsImpresion.js b/server/controller/Admin/ticketsImpresion.js new file mode 100644 index 0000000..e387992 --- /dev/null +++ b/server/controller/Admin/ticketsImpresion.js @@ -0,0 +1,21 @@ +const { Op } = require('sequelize'); +const dbPath = '../../db/tablas'; +const Usuario = require(`${dbPath}/Usuario`); +const Impresion = require(`${dbPath}/Impresion`); +const { validarNumeroEntero } = require('../../helper/validar'); + +const ticketsImpresion = async (body) => { + const validacion = validarNumeroEntero(body.validacion, 'validacion', true); + return Impresion.findAll({ + where: { validacion }, + include: [ + { + model: Usuario, + where: { numeroCuenta: { [Op.like]: `%${body.numeroCuenta}%` } }, + attributes: ['idUsuario', 'numeroCuenta'], + }, + ], + }); +}; + +module.exports = ticketsImpresion; diff --git a/server/controller/Usuario/agregarCredito.js b/server/controller/Usuario/agregarCredito.js new file mode 100644 index 0000000..e691183 --- /dev/null +++ b/server/controller/Usuario/agregarCredito.js @@ -0,0 +1,64 @@ +const dbPath = '../../db/tablas'; +const Usuario = require(`${dbPath}/Usuario`); +const Inscripcion = require(`${dbPath}/Inscripcion`); +const Impresion = require(`${dbPath}/Impresion`); +const { + validarNumeroEntero, + validarNumeroCuenta, + validarNumero, +} = require('../../helper/validar'); + +const agregarCredito = async (body) => { + const fechaTicket = body.fechaTicket; + const idUsuario = validarNumeroEntero(body.idUsuario, 'usuario', true); + const monto = validarNumero(body.monto, 'monto', true); + const folio = validarNumero(body.folio, 'folio', true, 6); + const numeroCuenta = validarNumeroCuenta( + body.numeroCuenta, + 'número de cuenta', + true + ); + + return Inscripcion.findOne({ + where: { folio, cancelacion: 0 }, + }).then((res) => { + if (res) + throw new Error('Este folio ya fue utilizado en alguna inscripción'); + return Impresion.findOne({ + where: { folio }, + }) + .then((res) => { + if (res) + throw new Error('Este folio ya fue utilizado para impresiones'); + return Usuario.findOne({ where: { numeroCuenta } }).then(() => { + if (!res) + throw new Error( + 'Lo sentimos no pudimos encontrar este número cuenta' + ); + return Usuario.update( + { + credito: res.credito + creditoNuevo, + }, + { + where: { numeroCuenta }, + } + ).then((res) => { + return Impresion.create({ + idUsuario, + folio, + monto, + fechaTicket, + }); + }); + }); + }) + .then((res) => ({ + message: '¡Tu crédito se agrego correctamente!', + })) + .catch((err) => { + throw new Error('¡ No fue posible agregar tu crédito !. '); + }); + }); +}; + +module.exports = agregarCredito; diff --git a/server/controller/Usuario/credito.js b/server/controller/Usuario/credito.js new file mode 100644 index 0000000..bda771e --- /dev/null +++ b/server/controller/Usuario/credito.js @@ -0,0 +1,20 @@ +const dbPath = '../../db/tablas'; +const Usuario = require(`${dbPath}/Usuario`); +const { validarNumeroCuenta } = require('../../helper/validar'); + +const credito = async (body) => { + const numeroCuenta = validarNumeroCuenta( + body.numeroCuenta, + 'número de cuenta', + true + ); + return Usuario.findOne({ + where: { numeroCuenta }, + }).then(() => { + return Usuario.findOne({ + attributes: ['credito', 'nombre', 'numeroCuenta'], + }); + }); +}; + +module.exports = credito; diff --git a/server/controller/Usuario/impresiones.js b/server/controller/Usuario/impresiones.js deleted file mode 100644 index 8dfbb17..0000000 --- a/server/controller/Usuario/impresiones.js +++ /dev/null @@ -1,41 +0,0 @@ -const { validarNumeroEntero, validarNumero } = require('../../helper/validar'); -const dbPath = '../../db/tablas'; -const Impresion = require(`${dbPath}/Impresion`); -const Inscripcion = require(`${dbPath}/Inscripcion`); - -const impresiones = async (body) => { - const idUsuario = validarNumeroEntero(body.idUsuario, 'id Usuario', true); - const folio = validarNumero(body.folio, 'folio', true, 6); - const monto = validarNumero(body.monto, 'monto', true); - const fechaTicket = body.fechaTicket; - - return Inscripcion.findOne({ - where: { folio, cancelacion: 0 }, - }) - .then((res) => { - if (res) - throw new Error('Este folio ya fue utilizado en alguna inscripción'); - return Impresion.findOne({ - where: { folio }, - }).then((res) => { - if (res) - throw new Error('Este folio ya fue utilizado para impresiones'); - }); - }) - .then((res) => { - return Impresion.create({ - idUsuario, - folio, - monto, - fechaTicket, - }); - }) - .then((res) => ({ - message: `Se a registrado correctamente tu ticket, se agregaron $${monto} a tu cuenta, ahora puedes hacer uso del servicio de impresiones.`, - })) - .catch((err) => { - throw new Error('No es posible realizar esta operación. ' + err); - }); -}; - -module.exports = impresiones; diff --git a/server/db/install.js b/server/db/install.js index 47f11da..c55d141 100644 --- a/server/db/install.js +++ b/server/db/install.js @@ -24,14 +24,14 @@ const drop = async () => { await FechaInscripcion.drop(); console.log('La tabla FechaInscripcion se desinstalo correctamente.'.magenta); - await Usuario.drop(); - console.log('La tabla Usuario se desinstalo correctamente.'.magenta); - await Carrera.drop(); console.log('La tabla Carrera se desinstalo correctamente.'.magenta); await Impresion.drop(); - console.log('La tabla Carrera se desinstalo correctamente.'.magenta); + console.log('La tabla Impresion se desinstalo correctamente.'.magenta); + + await Usuario.drop(); + console.log('La tabla Usuario se desinstalo correctamente.'.magenta); }; const sync = async () => { @@ -46,6 +46,9 @@ const sync = async () => { await Usuario.sync(); console.log('La tabla Usuario se instalo correctamente.'.magenta); + await Impresion.sync(); + console.log('La tabla Impresion se instalo correctamente.'.magenta); + await Area.sync(); console.log('La tabla Area se instalo correctamente.'.magenta); @@ -54,9 +57,6 @@ const sync = async () => { await Inscripcion.sync(); console.log('La tabla Inscripcion se instalo correctamente.'.magenta); - - await Impresion.sync(); - console.log('La tabla Inscripcion se instalo correctamente.'.magenta); }; const dataArea = async () => { diff --git a/server/db/tablas/Usuario.js b/server/db/tablas/Usuario.js index e148432..202dc3c 100644 --- a/server/db/tablas/Usuario.js +++ b/server/db/tablas/Usuario.js @@ -34,6 +34,11 @@ Usuario.init( type: DataTypes.STRING(60), allowNull: false, }, + credito: { + type: DataTypes.INTEGER, + allowNull: false, + defaultValue: 0, + }, }, { sequelize, @@ -43,12 +48,12 @@ Usuario.init( } ); -// Usuario.belongsTo(Carrera, { -// foreignKey: { -// name: 'idCarrera', -// type: DataTypes.INTEGER, -// allowNull: false, -// }, -// }); +Usuario.belongsTo(Carrera, { + foreignKey: { + name: 'idCarrera', + type: DataTypes.INTEGER, + allowNull: false, + }, +}); module.exports = Usuario; diff --git a/server/routes/Admin.js b/server/routes/Admin.js index c91ccd4..b5e18a0 100644 --- a/server/routes/Admin.js +++ b/server/routes/Admin.js @@ -13,6 +13,8 @@ const motivo = require(`${controllerPath}/motivo`); const validarSinTicket = require(`${controllerPath}/validarSinTicket`); const validarTicket = require(`${controllerPath}/validarTicket`); const reporte = require(`${controllerPath}/reporte`); +const restarCredito = require(`${controllerPath}/restarCredito`); +const ticketsImpresion = require(`${controllerPath}/ticketsImpresion`); app.post(`${route}/login`, (req, res) => { return login(req.body) @@ -107,4 +109,23 @@ app.get(`${route}/reporte`, verificaToken, (req, res) => { }); }); +app.put(`${route}/restar_credito`, (req, res) => { + return restarCredito(req.body) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + +app.get(`${route}/tickets_impresion`, (req, res) => { + return ticketsImpresion(req.query) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); module.exports = app; diff --git a/server/routes/Usuario.js b/server/routes/Usuario.js index 56d9f45..b7ab269 100644 --- a/server/routes/Usuario.js +++ b/server/routes/Usuario.js @@ -9,7 +9,8 @@ const controllerPath = '../controller/Usuario'; const login = require(`${controllerPath}/login`); const inscripciones = require(`${controllerPath}/inscripciones`); const inscripcionUsuario = require(`${controllerPath}/inscripcionUsuario`); -const impresiones = require(`${controllerPath}/impresiones`); +const credito = require(`${controllerPath}/credito`); +const agregarCredito = require(`${controllerPath}/agregarCredito`); app.post(`${route}/login`, (req, res) => { return login(req.body) @@ -31,16 +32,6 @@ app.get(`${route}/inscripciones`, verificaToken, (req, res) => { }); }); -app.post(`${route}/impresiones`, (req, res) => { - return impresiones(req.body) - .then((data) => { - res.status(200).json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - app.post( `${route}/inscripcionUsuario`, verificaToken, @@ -56,4 +47,23 @@ app.post( } ); +app.get(`${route}/credito`, (req, res) => { + return credito(req.query) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + +app.put(`${route}/agregar_credito`, (req, res) => { + return agregarCredito(req.body) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); module.exports = app;