Cambio para controlar aforo y no se descuadre
This commit is contained in:
parent
ea432ac720
commit
3ee5562f8f
@ -535,7 +535,8 @@ routes.put(
|
||||
"/admin/reservations/:id",
|
||||
isAdministratorUser,
|
||||
//SchemaValidator(eventValidation.ReservationInputType, true),
|
||||
eventReservationController.update()
|
||||
eventReservationController.checkAssitantsUpdate,
|
||||
eventReservationController.update()
|
||||
);
|
||||
|
||||
routes.put(
|
||||
@ -554,7 +555,7 @@ routes.put(
|
||||
);
|
||||
|
||||
// Borrar reserva
|
||||
routes.delete("/admin/reservations/:id", isAdministratorUser, eventReservationController.delete());
|
||||
routes.delete("/admin/reservations/:id", isAdministratorUser, eventReservationController.deleteReservationById);
|
||||
|
||||
/********************************************************************************************************
|
||||
* LIVE
|
||||
|
||||
@ -237,6 +237,16 @@ const extraMethods = {
|
||||
});
|
||||
},
|
||||
|
||||
//Elimina todas las inscripciones de una determinada reserva/invitacion
|
||||
_deleteInscriptionsByReservation: (reservationId) => {
|
||||
|
||||
return models.EventInscription.destroy({
|
||||
where: {
|
||||
reservationId: reservationId,
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
//Validamos la inscripcion la quitamos de las lista de espera y asignamos el usuario que la ha validado
|
||||
_validateInscription: (inscriptionId, userId) => {
|
||||
return models.EventInscription.update(
|
||||
|
||||
@ -17,7 +17,7 @@ const {
|
||||
} = require("../../helpers/controller.helper");
|
||||
const emailHelper = require("../../helpers/mail.helper");
|
||||
const path = require("path");
|
||||
const responseTime = require("response-time");
|
||||
const responseTime = require("response-time");
|
||||
|
||||
// Module Name
|
||||
const MODULE_NAME = "[eventReservation.controller]";
|
||||
@ -44,6 +44,33 @@ async function _addConfirmedToEvent(confirmed, event) {
|
||||
}
|
||||
*/
|
||||
|
||||
async function updateAsisstantsOfEventReservation(reservation, cantidad) {
|
||||
try {
|
||||
//Cogemos el evento del que tenemos que aumentar o disminuir aforo, en funcion de la cantidad si es negativa o positiva
|
||||
const eventToUpdateAssistants = reservation.overflow_reservationId
|
||||
? await eventService._getEvent(reservation.overflow_reservationId)
|
||||
: (reservation.Event ? reservation.Event : reservation.event);
|
||||
|
||||
console.log('actualizarAforoOf Evento >>>>>>>>>>>>>>>', eventToUpdateAssistants.name);
|
||||
console.log('actualizarAforoOf Asistentes >>>>>>>>>>>>>>>', eventToUpdateAssistants.assistants);
|
||||
console.log('actualizarAforoOf Aumento en >>>>>>>>>>>>>>>', cantidad);
|
||||
|
||||
//Modificamos los asistentes de evento (AFORO)
|
||||
const newAforo = eventToUpdateAssistants.assistants + cantidad;
|
||||
if (!(await eventService._updateAssistantsEvent(eventToUpdateAssistants.id, newAforo))) {
|
||||
console.log("actualizarAforoOf >>>> No se ha podido actualizar el aforo del evento, antes de eliminar la reserva");
|
||||
return false;
|
||||
}
|
||||
|
||||
console.log('actualizarAforoOf Número de asistentes actualizado >>>>>>>>>>>>>>>', newAforo);
|
||||
return true;
|
||||
|
||||
} catch (error) {
|
||||
console.log('actualizarAforoOf Error >>>>>>>>>>>>>>>', error);
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
/**** Activa una reserva que está en borrador (Draft), descontando asistentes del aforo total del evento
|
||||
* Devuelve la reserva pasada por parametro publicada (publish) o null en el caso de error
|
||||
*/
|
||||
@ -424,6 +451,70 @@ const extraControllers = {
|
||||
}
|
||||
},
|
||||
|
||||
deleteReservationById: async (req, res, next) => {
|
||||
const params = extractParamsFromRequest(req, res, {});
|
||||
const idResevation = params.params.id;
|
||||
if (!idResevation)
|
||||
return handleResultResponse("Error id de reservation necesario", null, params, res, httpStatus.NOT_FOUND);
|
||||
|
||||
const eventReservation = await eventReservationService._getReservaByIdWithEntityAndEvent(idResevation);
|
||||
if (!eventReservation)
|
||||
return handleResultResponse("Error reserva no existente", null, params, res, httpStatus.NOT_FOUND);
|
||||
|
||||
try {
|
||||
|
||||
//Antes de borrar una reserva debemos borrar todas las inscripciones asociadas.
|
||||
eventInscriptionService._deleteInscriptionsByReservation(eventReservation.id);
|
||||
if (eventReservation.state === 'publish'){
|
||||
if (!updateAsisstantsOfEventReservation(eventReservation, eventReservation.assistants)) {
|
||||
return handleResultResponse("Error actualizando aforo del evento en deleteReservationById", null, params, res, httpStatus.NOT_FOUND);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
let result = eventReservationService._deleteReservation(eventReservation.id);
|
||||
return handleResultResponse(result, null, params, res, httpStatus.OK);
|
||||
|
||||
} catch (error) {
|
||||
return handleResultResponse("Error al eliminar la reserva", null, params, res, httpStatus.NOT_FOUND);
|
||||
}
|
||||
},
|
||||
|
||||
/**** Modifica una reserva, si está publicada, actualiza la diferenecia de los asistentes, en el caso de ser modificado, en el aforo del evento (assitants).
|
||||
*/
|
||||
checkAssitantsUpdate: async (req, res, next) => {
|
||||
const params = extractParamsFromRequest(req, res, {});
|
||||
const idResevation = params.params.id;
|
||||
const NewReservarionAssistants = req.body.assistants;
|
||||
|
||||
if (!idResevation)
|
||||
return handleResultResponse("Error id de reservation necesario", null, params, res, httpStatus.NOT_FOUND);
|
||||
|
||||
const eventReservation = await eventReservationService._getReservaByIdWithEntityAndEvent(idResevation);
|
||||
if (!eventReservation)
|
||||
return handleResultResponse("Error reserva no existente", null, params, res, httpStatus.NOT_FOUND);
|
||||
|
||||
try {
|
||||
if (eventReservation.state === 'publish' && eventReservation.assistants != NewReservarionAssistants)
|
||||
if (NewReservarionAssistants < eventReservation.confirmed)
|
||||
return handleResultResponse("Error el número de asistentes no puede ser menor que el de confirmados", null, params, res, httpStatus.NOT_FOUND);
|
||||
else {
|
||||
const value = -1 * (NewReservarionAssistants - eventReservation.assistants);
|
||||
if (!updateAsisstantsOfEventReservation(eventReservation, value)){
|
||||
return handleResultResponse("Error el número de asistentes no puede ser menor que el de confirmados", null, params, res, httpStatus.NOT_FOUND);
|
||||
}
|
||||
console.log('checkAssitantsUpdate>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> CAMBIO DE ASISTENTES DEL EVENTO Y HAGO CAMBIO');
|
||||
}
|
||||
else
|
||||
console.log('checkAssitantsUpdate>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SE QUEDA TAL CUAL');
|
||||
|
||||
next();
|
||||
|
||||
} catch (error) {
|
||||
return handleResultResponse("Error al checkAssitantsUpdate de la reserva", null, params, res, httpStatus.NOT_FOUND);
|
||||
}
|
||||
},
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
//Esta función se llama desde APP y desde WEB
|
||||
//Inscripción con CODIGO DE RESERVA, SE MODIFICA EL CONFIRMED DE LA RESERVA, YA QUE SE DESCONTARA DEL AFORO DE LA RESERVA
|
||||
|
||||
Loading…
Reference in New Issue
Block a user