app2-api/modules/events/events_reservations.controller.js

133 lines
5.2 KiB
JavaScript
Raw Normal View History

2019-08-14 17:49:38 +00:00
'use strict';
2019-10-15 10:56:17 +00:00
const moment = require('moment');
const httpStatus = require('http-status');
2019-08-14 17:49:38 +00:00
const generateControllers = require('../../core/controllers');
const eventReservationService = require('./events_reservations.service');
2019-10-15 10:56:17 +00:00
const { extractParamsFromRequest, handleErrorResponse, handleResultResponse } = require('../../helpers/controller.helper');
const emailHelper = require('../../helpers/mail.helper');
2019-10-15 11:01:25 +00:00
const path = require("path");
2019-08-14 17:49:38 +00:00
// Module Name
const MODULE_NAME = '[eventReservation.controller]';
const controllerOptions = { MODULE_NAME };
2019-10-15 10:56:17 +00:00
function generateHeaderMail(reservation) {
let headerMail = null;
if (reservation) {
headerMail = {
to: reservation.Entity.contact_email,
name: reservation.Entity.name,
2019-10-16 07:23:12 +00:00
bcc: "cbarrantes@loquedeverdadimporta.org",
2019-10-15 10:56:17 +00:00
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 {
2019-10-15 11:26:05 +00:00
const reservation = await eventReservationService._getReservaByIdWithEntityAndEvent(reservationId);
2019-10-15 10:56:17 +00:00
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;
2019-10-15 14:18:17 +00:00
const entityId = params.params.entityId;
const type = params.params.type;
2019-10-15 10:56:17 +00:00
const user = req.user;
2019-10-15 14:18:17 +00:00
let reservations = null;
let result = "";
2019-10-15 10:56:17 +00:00
try {
2019-10-15 14:18:17 +00:00
if (!entityId)
reservations = await eventReservationService._getReservasByEventAndType(eventId, type);
else
reservations = await eventReservationService._getReservasByEventAndEntity(eventId, entityId);
2019-10-15 10:56:17 +00:00
if (!reservations)
return handleResultResponse("Reservas no encontradas", null, params, res, httpStatus.NOT_FOUND);
try {
reservations.forEach(function (reservation) {
2019-10-15 14:23:20 +00:00
console.log('mando correo: ', reservation.Entity.name);
2019-10-15 14:18:17 +00:00
if (reservation.Entity.contact_email) {
2019-10-15 10:56:17 +00:00
emailHelper.sendReservationCode(generateHeaderMail(reservation), generateBodyMail(reservation));
2019-10-15 14:28:21 +00:00
result = result + 'Invitación con código ' + reservation.reservation_code + ' enviada a ' + reservation.Entity.name + ' al destinatario ' + reservation.Entity.contact_email + '\n'
2019-10-15 14:18:17 +00:00
}
2019-10-15 10:56:17 +00:00
});
} catch (error) {
// console.log(error);
console.log('No se ha podido mandar email con los códigos de invitación');
};
2019-10-15 14:18:17 +00:00
return handleResultResponse(result, null, params, res, httpStatus.OK);
2019-10-15 10:56:17 +00:00
} catch (error) {
2019-10-15 11:26:05 +00:00
return handleResultResponse("Error al buscar las reservas", null, params, res, httpStatus.NOT_FOUND);
2019-10-15 10:56:17 +00:00
}
},
};
2019-08-14 17:49:38 +00:00
module.exports = generateControllers(eventReservationService, extraControllers, controllerOptions);