Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions Cuotas/Controladores/actualizarSetCuotas.controller.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const repositorio = require('@altertex/cuota/repos/actualizarSetCuotasRepositorio');

/**
* Controlador que gestiona la actualización de un set de cuotas.
*
* @param {object} req - Objeto de solicitud HTTP de Express.
* @param {object} res - Objeto de respuesta HTTP de Express.
* @returns {object} Respuesta JSON con el resultado de la operación.
*/
exports.actualizarSetCuotas = async (req, res) => {
try {
const { idCuotaSet, cambios } = req.body;

if (!idCuotaSet || !cambios) {
return res.status(400).json({ mensaje: 'Datos incompletos' });
}

await repositorio.actualizarSetCuotas(idCuotaSet, cambios);
return res.status(200).json({ mensaje: 'Set de cuotas actualizado correctamente' });

} catch (error) {
return res.status(500).json({ mensaje: error.message });
}
};
44 changes: 44 additions & 0 deletions Cuotas/Datos/Repositorios/actualizarSetCuotasRepositorio.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
const CONSULTAS_CUOTAS = require('@altertex/util/const/consultasCuotas');
const correrQuery = require('@altertex/util/ser/correrQuery');

/**
* Actualiza un set de cuotas en la base de datos.
*
* @async
* @param {number} idCuotaSet - ID del set de cuotas a actualizar.
* @param {object} cambios - Objeto con los cambios a aplicar.
* @param {string} cambios.nombre - Nombre actualizado del set de cuotas.
* @param {string} cambios.descripcion - Descripción del set de cuotas.
* @param {number} cambios.periodoRenovacion - Periodo de renovación en meses.
* @param {boolean} cambios.renovacionHabilitada - Si la renovación está habilitada.
* @param {Array<object>} [cambios.productos=[]] - Lista de productos con límites.
* @param {number} cambios.productos[].idProducto - ID del producto asociado.
* @param {number} cambios.productos[].limite - Límite asignado al producto.
* @param {number} cambios.productos[].limiteActual - Límite actual del producto.
* @throws {Error} Si ocurre un error en la consulta a la base de datos.
*/
exports.actualizarSetCuotas = async (idCuotaSet, cambios) => {
const { nombre, descripcion, periodoRenovacion, renovacionHabilitada, productos = [] } = cambios;

await correrQuery(CONSULTAS_CUOTAS.ACTUALIZAR_CUOTA_SET, [
nombre,
descripcion,
periodoRenovacion,
renovacionHabilitada,
new Date(),
idCuotaSet
]);

await correrQuery(CONSULTAS_CUOTAS.ELIMINAR_PRODUCTOS_CUOTA_SET, [idCuotaSet]);

for (const producto of productos) {
if (producto.idProducto && producto.idProducto > 0) {
await correrQuery(CONSULTAS_CUOTAS.INSERTAR_CUOTA_PRODUCTO_ACTUALIZAR, [
idCuotaSet,
producto.idProducto,
producto.limite || 0,
producto.limiteActual || 0
]);
}
}
};
20 changes: 19 additions & 1 deletion Cuotas/Datos/Repositorios/leerSetCuotasRepositorio.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,45 @@ const CONSULTAS_CUOTAS = require('@altertex/util/const/consultasCuotas');
* @throws {Error} Si ocurre un error al ejecutar la consulta.
*/
exports.obtenerSetCuotaPorId = async (idSetCuota) => {

const query = CONSULTAS_CUOTAS.LEER_CUOTA_SET;
const queryCuotas = CONSULTAS_CUOTAS.LEER_CUOTA_SET_PRODUCTOS;

const resultado = await correrQuery(query, [idSetCuota]);

if (resultado.length === 0) return null;

const productosCuota = await correrQuery(queryCuotas, [idSetCuota]);

const productos = productosCuota.map((producto) => ({
idProducto: producto.idProducto,
nombre: producto.nombreComun,
nombreComun: producto.nombreComun,
cuota_valor: producto.cuota_valor,
limite_actual: producto.limite_actual,
valor: producto.cuota_valor,
limite: producto.cuota_valor,
limiteActual: producto.limite_actual
}));

const cuotas = productosCuota.map((producto) => ({
valor: producto.cuota_valor,
}));

const setCuota = {
idSetCuota: resultado[0].idCuotaSet,
idCuotaSet: resultado[0].idCuotaSet,

nombre: resultado[0].nombre,
descripcion: resultado[0].descripcion,

periodoRenovacion: resultado[0].periodoRenovacion,
renovacionHabilitada: resultado[0].renovacionHabilitada,
ultimaActualizacion: resultado[0].ultimaActualizacion,
productos,
cuotas,
};


return setCuota;
};
};
37 changes: 37 additions & 0 deletions Cuotas/Rutas/RutasIndividuales/actualizarSetCuotas.routes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/**
* Ruta para actualizar un set de cuotas.
*
* Método: PUT
* Ruta: /api/cuotas/actualizar-set-cuotas (o la que defina `RUTAS.CUOTAS.ACTUALIZAR_SET_CUOTAS`)
*
* Middleware aplicados:
* - revisión de API Key
* - autorización por token JWT
* - verificación de permisos de usuario
*
* Permiso requerido: PERMISOS.ACTUALIZAR_SET_CUOTAS
*
* @module actualizarSetCuotas.routes
*/



const express = require('express');
const controlador = require('@altertex/cuota/ctrl/actualizarSetCuotas.controller');
const autorizarToken = require('@altertex/util/inter/autorizarToken');
const revisarApiKey = require('@altertex/util/inter/revisarApiKey');
const verificarPermisos = require('@altertex/util/inter/verificarPermisos');
const RUTAS = require('@altertex/util/const/rutas');
const PERMISOS = require('@altertex/util/const/permisos');

const ruteador = express.Router();

ruteador.put(
RUTAS.CUOTAS.ACTUALIZAR_SET_CUOTAS,
revisarApiKey(),
autorizarToken,
verificarPermisos(PERMISOS.ACTUALIZAR_SET_CUOTAS),
controlador.actualizarSetCuotas
);

module.exports = ruteador;
4 changes: 4 additions & 0 deletions Cuotas/Rutas/indexCuotas.routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const rutaObtenerOpcionesCuota = require('@altertex/cuota/rutasInd/obtenerOpcion
const rutasConsultarListaCuotas = require('@altertex/cuota/rutasInd/consultarCuotas.routes');
const rutaEliminarSetCuotas = require('@altertex/cuota/rutasInd/eliminarSetCuotas.routes');
const rutaLeerCuota = require('@altertex/cuota/rutasInd/leerSetCuotas.routes');
const rutaActualizarSetCuotas = require('@altertex/cuota/rutasInd/actualizarSetCuotas.routes');


const RUTAS = require('@altertex/util/const/rutas');

Expand All @@ -13,5 +15,7 @@ ruteador.use(RUTAS.CUOTAS.BASE, rutaObtenerOpcionesCuota);
ruteador.use(RUTAS.CUOTAS.BASE, rutasConsultarListaCuotas);
ruteador.use(RUTAS.CUOTAS.BASE, rutaEliminarSetCuotas);
ruteador.use(RUTAS.CUOTAS.BASE, rutaLeerCuota);
ruteador.use(RUTAS.CUOTAS.BASE, rutaActualizarSetCuotas);


module.exports = ruteador;
39 changes: 28 additions & 11 deletions Utilidades/Constantes/consultasCuotas.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,32 @@ module.exports = {
WHERE cs.idCuotaSet = ?;
`,

LEER_CUOTA_SET_PRODUCTOS: `
SELECT
p.nombreComun,
csp.limite AS cuota_valor
FROM cuota_set cs
JOIN cuota_set_producto csp
ON cs.idCuotaSet = csp.idCuotaSet
JOIN producto p
ON p.idProducto = csp.idProducto
WHERE cs.idCuotaSet = ?;
`,
LEER_CUOTA_SET_PRODUCTOS:
`SELECT
p.idProducto,
p.nombreComun,
csp.limite AS cuota_valor,
csp.limite_actual
FROM cuota_set cs
JOIN cuota_set_producto csp
ON cs.idCuotaSet = csp.idCuotaSet
JOIN producto p
ON p.idProducto = csp.idProducto
WHERE cs.idCuotaSet = ?`,

ACTUALIZAR_CUOTA_SET: `
UPDATE cuota_set
SET nombre = ?, descripcion = ?, periodoRenovacion = ?, renovacionHabilitada = ?, ultimaActualizacion = ?
WHERE idCuotaSet = ?;
`,

INSERTAR_CUOTA_PRODUCTO_ACTUALIZAR: `
INSERT INTO cuota_set_producto (idCuotaSet, idProducto, limite, limite_actual)
VALUES (?, ?, ?, ?)
`,

ELIMINAR_PRODUCTOS_CUOTA_SET: `
DELETE FROM cuota_set_producto WHERE idCuotaSet = ?;
`,

};
11 changes: 11 additions & 0 deletions Utilidades/Constantes/mensajesCuotas.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,15 @@ module.exports = {
codigo: 500,
mensaje: 'Error interno al obtener el set de cuotas.',
},

ACTUALIZACION_EXITOSA: {
codigo: 200,
mensaje: 'Set de cuotas actualizado correctamente.'
},

ERROR_ACTUALIZACION: {
codigo: 500,
mensaje: 'No se pudo actualizar el set de cuotas.'
},

};
1 change: 1 addition & 0 deletions Utilidades/Constantes/rutas.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ module.exports = {
CONSULTAR_LISTA: '/consultar-lista',
ELIMINAR_SET_CUOTAS: '/eliminar-set-cuotas',
LEER_SET_CUOTAS: '/leer-set-cuotas',
ACTUALIZAR_SET_CUOTAS: '/actualizar-set-cuotas',
},
ROLES: {
BASE: '/roles',
Expand Down