133 lines
5.2 KiB
JavaScript
133 lines
5.2 KiB
JavaScript
'use strict';
|
|
|
|
const moment = require('moment');
|
|
const httpStatus = require('http-status');
|
|
const generateControllers = require('../../core/controllers');
|
|
const eventReservationService = require('./events_reservations.service');
|
|
const { extractParamsFromRequest, handleErrorResponse, handleResultResponse } = require('../../helpers/controller.helper');
|
|
const emailHelper = require('../../helpers/mail.helper');
|
|
const path = require("path");
|
|
|
|
|
|
// Module Name
|
|
const MODULE_NAME = '[eventReservation.controller]';
|
|
|
|
const controllerOptions = { MODULE_NAME };
|
|
|
|
function generateHeaderMail(reservation) {
|
|
let headerMail = null;
|
|
if (reservation) {
|
|
headerMail = {
|
|
to: reservation.Entity.contact_email,
|
|
name: reservation.Entity.name,
|
|
bcc: "rbrrbr2000@gmail.com",
|
|
bccName: "Carolina Barrantes",
|
|
subject: 'Códigos de invitación para congreso LQDVI'
|
|
}
|
|
};
|
|
return headerMail;
|
|
}
|
|
|
|
function generateBodyMail(reservation) {
|
|
let bodyMail = null;
|
|
if (reservation) {
|
|
bodyMail = {
|
|
entityName: reservation.Entity.name,
|
|
eventName: reservation.Event.name,
|
|
dateEvent: moment(reservation.Event.init_date).format('D [de] MMMM [de] YYYY'),
|
|
reservationCode: reservation.reservation_code,
|
|
reservationDescription: reservation.description,
|
|
}
|
|
};
|
|
return bodyMail;
|
|
}
|
|
|
|
const extraControllers = {
|
|
|
|
getReservationsExcel: async (req, res, next) => {
|
|
const params = extractParamsFromRequest(req, res, {});
|
|
const eventId = params.params.id;
|
|
const type = params.params.type;
|
|
const userId = req.user.id;
|
|
|
|
const reservations = await eventReservationService._getReservationsExcel(req.user, eventId, null, type, function (result, status) {
|
|
if (result.messenger.code == "S99001") {
|
|
console.log(result);
|
|
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
|
res.setHeader('Content-Disposition', 'attachment; filename=' + result.data.name);
|
|
res.attachment(result.data.name);
|
|
res.download(path.resolve(result.data.path), result.data.name);
|
|
} else {
|
|
res.status(status).json(result);
|
|
}
|
|
})
|
|
},
|
|
|
|
|
|
sendMailReservation: async (req, res, next) => {
|
|
const params = extractParamsFromRequest(req, res, {});
|
|
const reservationId = params.params.id;
|
|
const user = req.user;
|
|
try {
|
|
const reservation = await eventReservationService._getReservaByIdWithEntityAndEvent(reservationId);
|
|
if (!reservation)
|
|
return handleResultResponse("Reserva no encontrada", null, params, res, httpStatus.NOT_FOUND);
|
|
|
|
try {
|
|
if (reservation.Entity.contact_email)
|
|
emailHelper.sendReservationCode(generateHeaderMail(reservation), generateBodyMail(reservation));
|
|
} catch (error) {
|
|
// console.log(error);
|
|
console.log('No se ha podido mandar email con los códigos de invitación');
|
|
};
|
|
|
|
return handleResultResponse(null, null, params, res, httpStatus.OK);
|
|
|
|
} catch (error) {
|
|
return handleResultResponse("Error al buscar la reserva", null, params, res, httpStatus.NOT_FOUND);
|
|
}
|
|
},
|
|
|
|
sendMailReservationsEvent: async (req, res, next) => {
|
|
const params = extractParamsFromRequest(req, res, {});
|
|
const eventId = params.params.id;
|
|
const entityId = params.params.entityId;
|
|
const type = params.params.type;
|
|
const user = req.user;
|
|
let reservations = null;
|
|
let result = "";
|
|
|
|
try {
|
|
if (!entityId)
|
|
reservations = await eventReservationService._getReservasByEventAndType(eventId, type);
|
|
else
|
|
reservations = await eventReservationService._getReservasByEventAndEntity(eventId, entityId);
|
|
|
|
if (!reservations)
|
|
return handleResultResponse("Reservas no encontradas", null, params, res, httpStatus.NOT_FOUND);
|
|
|
|
try {
|
|
reservations.forEach(function (reservation) {
|
|
console.log('mando correo: ', reservation.Entity.name);
|
|
if (reservation.Entity.contact_email) {
|
|
emailHelper.sendReservationCode(generateHeaderMail(reservation), generateBodyMail(reservation));
|
|
result = result + 'Invitación con código ' + reservation.reservation_code + ' enviada a ' + reservation.Entity.Name + ' al destinatario ' + reservation.Entity.contact_mail + '/n'
|
|
}
|
|
});
|
|
} catch (error) {
|
|
// console.log(error);
|
|
console.log('No se ha podido mandar email con los códigos de invitación');
|
|
};
|
|
|
|
return handleResultResponse(result, null, params, res, httpStatus.OK);
|
|
|
|
} catch (error) {
|
|
return handleResultResponse("Error al buscar las reservas", null, params, res, httpStatus.NOT_FOUND);
|
|
}
|
|
},
|
|
|
|
};
|
|
|
|
module.exports = generateControllers(eventReservationService, extraControllers, controllerOptions);
|
|
|