Repaso para control de aforo al modificar reservas
This commit is contained in:
parent
3ee5562f8f
commit
3143242210
@ -102,6 +102,38 @@ const extraMethods = {
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
_updateAforoOfEventReservation: async (reservation, cantidad) => {
|
||||
|
||||
//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 extraMethods._getEvent(reservation.overflow_reservationId)
|
||||
: await extraMethods._getEvent(reservation.eventId);
|
||||
|
||||
console.log('_updateAforoOfEventReservation Evento >>>>>>>>>>>>>>>', eventToUpdateAssistants.name);
|
||||
console.log('_updateAforoOfEventReservation Asistentes >>>>>>>>>>>>>>>', eventToUpdateAssistants.assistants);
|
||||
console.log('_updateAforoOfEventReservation Aumento en >>>>>>>>>>>>>>>', cantidad);
|
||||
|
||||
const plazasDisponibles = eventToUpdateAssistants.assistants - eventToUpdateAssistants.confirmed;
|
||||
console.log('_updateAforoOfEventReservation Plazas disponibles >>>>>>>>>>>>>>>', plazasDisponibles);
|
||||
if (plazasDisponibles < cantidad) {
|
||||
console.log ('_updateAforoOfEventReservation >>>> Aforo lleno no es posible efectuar la invitacion');
|
||||
throw new Error ('Aforo lleno no es posible efectuar la invitacion');
|
||||
};
|
||||
|
||||
//Modificamos los asistentes de evento (AFORO)
|
||||
const newAforo = eventToUpdateAssistants.assistants - cantidad;
|
||||
if (!(await extraMethods._updateAssistantsEvent(eventToUpdateAssistants.id, newAforo))) {
|
||||
console.log("_updateAforoOfEventReservation >>>> No se ha podido actualizar el aforo del evento");
|
||||
throw new Error ('No se ha podido actualizar el aforo del evento');
|
||||
};
|
||||
|
||||
//Si se ha llenado ponemos el evento en SOLD_OUT
|
||||
if (eventToUpdateAssistants.confirmed >= newAforo)
|
||||
await extraMethods._updateSoldOutEvent(eventToUpdateAssistants.id, true);
|
||||
|
||||
reservation.event = eventToUpdateAssistants;
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = generateService(models.Event, extraMethods);
|
||||
|
||||
@ -24,87 +24,18 @@ const MODULE_NAME = "[eventReservation.controller]";
|
||||
|
||||
const controllerOptions = { MODULE_NAME };
|
||||
|
||||
/*BORRAR TRAS COMPROBAR TODO
|
||||
async function _addConfirmedToEvent(confirmed, event) {
|
||||
const newConfirmed = event.confirmed + confirmed;
|
||||
if (event.assistants < newConfirmed) {
|
||||
console.log("El aforo solicitado es superior a las plazas disponibles");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(await eventService._updateConfirmedEvent(event.id, newConfirmed))) {
|
||||
console.log("No se ha podido actualizar el aforo del evento");
|
||||
return false;
|
||||
}
|
||||
|
||||
//Si se ha llenado ponemos el evento en SOLD_OUT
|
||||
if (event.assistants == newConfirmed) await eventService._updateSoldOutEvent(event.id, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
|
||||
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
|
||||
*/
|
||||
async function activeReservation(reservation) {
|
||||
if (!reservation)
|
||||
throw new Error("activeReservation: reservation should be an object");
|
||||
const eventToDiscountAssistants = reservation.overflow_reservationId
|
||||
? await eventService._getEvent(reservation.overflow_reservationId)
|
||||
: (reservation.Event ? reservation.Event : reservation.event);
|
||||
|
||||
console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>0', reservation.overflowEventId);
|
||||
console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>1', reservation.Event);
|
||||
console.log(' >>>>>>>>>>>>>>>>>>>>>>>>>>2', reservation.event);
|
||||
|
||||
//En el caso de ya estar publicada no hacemos nada se devuelve tal cual
|
||||
//En el caso de ya estar publicada no hacemos nada se devuelve tal cual
|
||||
if (reservation.state === 'publish')
|
||||
return reservation;
|
||||
|
||||
const plazasDisponibles = eventToDiscountAssistants.assistants - eventToDiscountAssistants.confirmed;
|
||||
if (plazasDisponibles < reservation.assistants) {
|
||||
console.log("Aforo lleno no es posible efectuar la reserva");
|
||||
return null;
|
||||
}
|
||||
|
||||
const newAforo = eventToDiscountAssistants.assistants - reservation.assistants;
|
||||
//Modificamos los asistentes de evento (AFORO) para quitar los de la reserva
|
||||
if (!(await eventService._updateAssistantsEvent(eventToDiscountAssistants.id, newAforo))) {
|
||||
console.log("No se ha podido actualizar el aforo del evento, para reservar las plazas solicitadas");
|
||||
return null;
|
||||
}
|
||||
|
||||
//Si se ha llenado ponemos el evento en SOLD_OUT
|
||||
if (eventToDiscountAssistants.confirmed >= newAforo)
|
||||
await eventService._updateSoldOutEvent(eventToDiscountAssistants.id, true);
|
||||
eventService._updateAforoOfEventReservation(reservation, reservation.assistants);
|
||||
|
||||
//REvisar confirmados en lista de espera
|
||||
//Finalmente publicamos la reserva solo si no está asociada a la lista de espera
|
||||
@ -126,7 +57,6 @@ async function activeReservation(reservation) {
|
||||
const user = await userService._getUserById(reservation.userId);
|
||||
reservation.contact_email = user.email;
|
||||
reservation.contact_name = user.name;
|
||||
reservation.event = eventToDiscountAssistants;
|
||||
console.log('reservation.userId>>>>>> ', user.email);
|
||||
console.log('reservation.userId>>>>>> ', user.email);
|
||||
|
||||
@ -457,20 +387,17 @@ const extraControllers = {
|
||||
if (!idResevation)
|
||||
return handleResultResponse("Error id de reservation necesario", null, params, res, httpStatus.NOT_FOUND);
|
||||
|
||||
const eventReservation = await eventReservationService._getReservaByIdWithEntityAndEvent(idResevation);
|
||||
const eventReservation = await eventReservationService._getReservaById(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);
|
||||
}
|
||||
const cantidad = -1 * eventReservation.assistants;
|
||||
eventService._updateAforoOfEventReservation(eventReservation, cantidad);
|
||||
}
|
||||
|
||||
|
||||
let result = eventReservationService._deleteReservation(eventReservation.id);
|
||||
return handleResultResponse(result, null, params, res, httpStatus.OK);
|
||||
@ -490,23 +417,19 @@ const extraControllers = {
|
||||
if (!idResevation)
|
||||
return handleResultResponse("Error id de reservation necesario", null, params, res, httpStatus.NOT_FOUND);
|
||||
|
||||
const eventReservation = await eventReservationService._getReservaByIdWithEntityAndEvent(idResevation);
|
||||
const eventReservation = await eventReservationService._getReservaById(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)
|
||||
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');
|
||||
};
|
||||
|
||||
const cantidad = (NewReservarionAssistants - eventReservation.assistants);
|
||||
eventService._updateAforoOfEventReservation(eventReservation, cantidad);
|
||||
}
|
||||
|
||||
next();
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@ const models = require("../../core/models");
|
||||
const xlsx = require("node-xlsx");
|
||||
const fs = require("fs");
|
||||
const cdnHelper = require("../../helpers/cdn.helper");
|
||||
const eventService = require("./event.service");
|
||||
|
||||
function getWhereTypeEntity(entityType) {
|
||||
var whereType = {};
|
||||
@ -18,6 +19,14 @@ function getWhereTypeEntity(entityType) {
|
||||
}
|
||||
|
||||
const extraMethods = {
|
||||
beforeCreate(values, context){
|
||||
//En el caso de ser una reserva publicada debe descontar del aforo del evento asociado
|
||||
if (values.state === 'publish') {
|
||||
eventService._updateAforoOfEventReservation(values, values.assistants);
|
||||
};
|
||||
return values;
|
||||
},
|
||||
|
||||
_getReservaById: (Id) => {
|
||||
return models.EventReservation.findOne({
|
||||
where: { id: Id },
|
||||
|
||||
Loading…
Reference in New Issue
Block a user