From dfabadeb6af4e2694015c4cca00220f2160f9fe5 Mon Sep 17 00:00:00 2001 From: david Date: Tue, 15 Oct 2019 12:56:17 +0200 Subject: [PATCH 1/7] a --- modules/events/event.routes.js | 15 ++- .../events/events_reservations.controller.js | 108 +++++++++++++++++- modules/events/events_reservations.service.js | 39 +++++-- 3 files changed, 150 insertions(+), 12 deletions(-) diff --git a/modules/events/event.routes.js b/modules/events/event.routes.js index cc4cd89..01afe2a 100644 --- a/modules/events/event.routes.js +++ b/modules/events/event.routes.js @@ -835,12 +835,12 @@ routes.get('/admin/events/:id/colleges', routes.get('/admin/events/:id/reservations/excel', isAdministratorUser, - eventController.getReservationsExcel, + eventReservationController.getReservationsExcel, ); routes.get('/admin/events/:id/reservations/:type/excel', isAdministratorUser, - eventController.getReservationsExcel, + eventReservationController.getReservationsExcel, ); routes.get('/admin/events/:id/inscriptions/excel', @@ -848,6 +848,12 @@ routes.get('/admin/events/:id/inscriptions/excel', eventController.getInscripcionsExcel, ); +routes.get('/admin/events/:id/reservations/:type/mail', + isAdministratorUser, + eventReservationController.sendMailReservationsEvent, +); + + routes.get('/admin/events/:eventId/partners/:entityId/reservations', isAdministratorUser, eventReservationController.find(), @@ -880,6 +886,11 @@ routes.get('/admin/inscriptions/:id/mail', eventController.sendMailTicket, ); +routes.get('/admin/reservations/:id/mail', + isAdministratorUser, + eventReservationController.sendMailReservation, +); + routes.post('/admin/reservations', isAdministratorUser, diff --git a/modules/events/events_reservations.controller.js b/modules/events/events_reservations.controller.js index 1b7b408..7907201 100644 --- a/modules/events/events_reservations.controller.js +++ b/modules/events/events_reservations.controller.js @@ -1,14 +1,120 @@ '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'); // Module Name const MODULE_NAME = '[eventReservation.controller]'; const controllerOptions = { MODULE_NAME }; -const extraControllers = {}; + +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._getReservaWithEntityAndEventById(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 user = req.user; + try { + const reservations = await eventReservationService._getReservaByEvent(eventId); + if (!reservations) + return handleResultResponse("Reservas no encontradas", null, params, res, httpStatus.NOT_FOUND); + + try { + reservations.forEach(function (reservation) { +// console.log(reservation.reservation_code); + 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); + } + }, + +}; module.exports = generateControllers(eventReservationService, extraControllers, controllerOptions); diff --git a/modules/events/events_reservations.service.js b/modules/events/events_reservations.service.js index 835bcbd..1246e99 100644 --- a/modules/events/events_reservations.service.js +++ b/modules/events/events_reservations.service.js @@ -10,6 +10,15 @@ const xlsx = require("node-xlsx"); const fs = require("fs"); const cdnHelper = require('../../helpers/cdn.helper'); +function getWhereTypeEntity(type) { + var whereType = {}; + if (type == 'partners') + whereType = { alias: 'partner' } + else if (type == 'colleges') + whereType = { alias: 'college' }; + return whereType; +} + const extraMethods = { @@ -19,6 +28,26 @@ const extraMethods = { }) }, + _getReservaWithEntityAndEventById: (Id) => { + return models.EventReservation.findOne({ + where: { id: Id }, + include: [{ model: models.Event }, { model: models.Entity }] + }) + }, + + _getReservaByEvent: (eventId, type) => { + return models.EventReservation.findAll({ + where: { eventId: eventId }, + include: [{ + model: models.Event, + }, + { + model: models.Entity, + include: [{ model: models.EntityType, as: 'types', where: getWhereTypeEntity(type) }] + }], + }) + }, + _getReservaByCode: (eventId, code) => { return models.EventReservation.findOne({ where: { reservation_code: code, eventId: eventId }, @@ -88,12 +117,6 @@ const extraMethods = { _getReservationsExcel: (user, eventId, partnerId, type, callback) => { console.log('>>>>>>>>>>>>>>>>>>>> Date: Tue, 15 Oct 2019 12:56:29 +0200 Subject: [PATCH 2/7] a --- modules/events/event.controller.js | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/modules/events/event.controller.js b/modules/events/event.controller.js index 02d82f9..cc11e0e 100644 --- a/modules/events/event.controller.js +++ b/modules/events/event.controller.js @@ -737,24 +737,6 @@ console.log('Mandamos mail con entrada>>>>>>>>>>>>>>>>>>>>>>>>>>>'); } }, - 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); - } - }) - }, getInscripcionsExcel: async (req, res, next) => { const params = extractParamsFromRequest(req, res, {}); From 61488977e6e549afa4daf1f676cff3494e237c65 Mon Sep 17 00:00:00 2001 From: david Date: Tue, 15 Oct 2019 13:01:25 +0200 Subject: [PATCH 3/7] a --- modules/events/events_reservations.controller.js | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/events/events_reservations.controller.js b/modules/events/events_reservations.controller.js index 7907201..d464496 100644 --- a/modules/events/events_reservations.controller.js +++ b/modules/events/events_reservations.controller.js @@ -6,6 +6,7 @@ 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 From b912abe399097a81a48673f47a42e6455b571b9d Mon Sep 17 00:00:00 2001 From: david Date: Tue, 15 Oct 2019 13:26:05 +0200 Subject: [PATCH 4/7] a --- helpers/mail.helper.js | 34 ++++++++++++++++++- .../events/events_reservations.controller.js | 9 ++--- modules/events/events_reservations.service.js | 7 ++-- 3 files changed, 42 insertions(+), 8 deletions(-) diff --git a/helpers/mail.helper.js b/helpers/mail.helper.js index 9ef5996..73cd18b 100644 --- a/helpers/mail.helper.js +++ b/helpers/mail.helper.js @@ -28,9 +28,18 @@ function send(header, body) { }], "Subject": header.subject, }, - body + + (!header.bcc) ? {} : { + "Bcc": [{ + "Email": header.bcc, + "Name": header.bccName + }] + }, + + body, ); +//console.log('PARAAAAAAAAAAAAAAAAAAAAMSSS MAILLL>', params); const mailjet = require('node-mailjet') .connect(mailjet_public, mailjet_private) const request = mailjet @@ -112,6 +121,28 @@ function sendListaEspera(header, values) { return send(header, body); }; +function sendReservationCode(header, values) { + + const body = { + "TemplateID": 1041673, + "TemplateLanguage": true, + "TemplateErrorDeliver": true, + "TemplateErrorReporting": { + "Email": "info@rodax-software.com", + "Name": "Air traffic control" + }, + "Variables": { + "entityName": values.entityName, + "eventName": values.eventName, + "dateEvent": values.dateEvent, + "reservationCode": values.reservationCode, + "reservationDescription": (values.reservationDescription) ? values.reservationDescription : '-', + } + }; + + return send(header, body); +}; + function sendCancelacion(header, values) { const body = { @@ -165,5 +196,6 @@ module.exports = { sendTicket, sendListaEspera, sendCancelacion, + sendReservationCode, }; \ No newline at end of file diff --git a/modules/events/events_reservations.controller.js b/modules/events/events_reservations.controller.js index d464496..3a277c1 100644 --- a/modules/events/events_reservations.controller.js +++ b/modules/events/events_reservations.controller.js @@ -69,7 +69,7 @@ const extraControllers = { const reservationId = params.params.id; const user = req.user; try { - const reservation = await eventReservationService._getReservaWithEntityAndEventById(reservationId); + const reservation = await eventReservationService._getReservaByIdWithEntityAndEvent(reservationId); if (!reservation) return handleResultResponse("Reserva no encontrada", null, params, res, httpStatus.NOT_FOUND); @@ -91,15 +91,16 @@ const extraControllers = { sendMailReservationsEvent: async (req, res, next) => { const params = extractParamsFromRequest(req, res, {}); const eventId = params.params.id; + const type = params.params.type; const user = req.user; try { - const reservations = await eventReservationService._getReservaByEvent(eventId); + const reservations = await eventReservationService._getReservasByEventAndType(eventId, type); if (!reservations) return handleResultResponse("Reservas no encontradas", null, params, res, httpStatus.NOT_FOUND); try { reservations.forEach(function (reservation) { -// console.log(reservation.reservation_code); +// console.log('mando correo: ', reservation.Entity.name); if (reservation.Entity.contact_email) emailHelper.sendReservationCode(generateHeaderMail(reservation), generateBodyMail(reservation)); }); @@ -111,7 +112,7 @@ const extraControllers = { return handleResultResponse(null, null, params, res, httpStatus.OK); } catch (error) { - return handleResultResponse("Error al buscar la reserva", null, params, res, httpStatus.NOT_FOUND); + return handleResultResponse("Error al buscar las reservas", null, params, res, httpStatus.NOT_FOUND); } }, diff --git a/modules/events/events_reservations.service.js b/modules/events/events_reservations.service.js index 1246e99..3f7d1f4 100644 --- a/modules/events/events_reservations.service.js +++ b/modules/events/events_reservations.service.js @@ -28,14 +28,14 @@ const extraMethods = { }) }, - _getReservaWithEntityAndEventById: (Id) => { + _getReservaByIdWithEntityAndEvent: (Id) => { return models.EventReservation.findOne({ where: { id: Id }, include: [{ model: models.Event }, { model: models.Entity }] }) - }, + }, - _getReservaByEvent: (eventId, type) => { + _getReservasByEventAndType: (eventId, type) => { return models.EventReservation.findAll({ where: { eventId: eventId }, include: [{ @@ -45,6 +45,7 @@ const extraMethods = { model: models.Entity, include: [{ model: models.EntityType, as: 'types', where: getWhereTypeEntity(type) }] }], + order: [['entityId', 'asc']], }) }, From f9f272917a1198e91196eb8eba147a1ed1c01541 Mon Sep 17 00:00:00 2001 From: david Date: Tue, 15 Oct 2019 16:18:17 +0200 Subject: [PATCH 5/7] a --- modules/events/event.routes.js | 5 +++++ .../events/events_reservations.controller.js | 18 ++++++++++++++---- modules/events/events_reservations.service.js | 7 +++++++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/modules/events/event.routes.js b/modules/events/event.routes.js index 01afe2a..673ece5 100644 --- a/modules/events/event.routes.js +++ b/modules/events/event.routes.js @@ -853,6 +853,11 @@ routes.get('/admin/events/:id/reservations/:type/mail', eventReservationController.sendMailReservationsEvent, ); +routes.get('/admin/events/:id/entity/:entityId/reservations/mail', + isAdministratorUser, + eventReservationController.sendMailReservationsEvent, +); + routes.get('/admin/events/:eventId/partners/:entityId/reservations', isAdministratorUser, diff --git a/modules/events/events_reservations.controller.js b/modules/events/events_reservations.controller.js index 3a277c1..c7b9621 100644 --- a/modules/events/events_reservations.controller.js +++ b/modules/events/events_reservations.controller.js @@ -91,25 +91,35 @@ const extraControllers = { sendMailReservationsEvent: async (req, res, next) => { const params = extractParamsFromRequest(req, res, {}); const eventId = params.params.id; - const type = params.params.type; + const entityId = params.params.entityId; + const type = params.params.type; const user = req.user; + let reservations = null; + let result = ""; + try { - const reservations = await eventReservationService._getReservasByEventAndType(eventId, type); + 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) + 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(null, null, params, res, httpStatus.OK); + return handleResultResponse(result, null, params, res, httpStatus.OK); } catch (error) { return handleResultResponse("Error al buscar las reservas", null, params, res, httpStatus.NOT_FOUND); diff --git a/modules/events/events_reservations.service.js b/modules/events/events_reservations.service.js index 3f7d1f4..d235a40 100644 --- a/modules/events/events_reservations.service.js +++ b/modules/events/events_reservations.service.js @@ -35,6 +35,13 @@ const extraMethods = { }) }, + _getReservasByEventAndEntity: (eventId, entityId) => { + return models.EventReservation.findAll({ + where: { eventId: eventId, entityId: entityId }, + include: [{ model: models.Event }, { model: models.Entity }] + }) + }, + _getReservasByEventAndType: (eventId, type) => { return models.EventReservation.findAll({ where: { eventId: eventId }, From 32b00386fbf8046767d763012a6d4d73527c24bc Mon Sep 17 00:00:00 2001 From: david Date: Tue, 15 Oct 2019 16:23:20 +0200 Subject: [PATCH 6/7] a --- modules/events/events_reservations.controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/events/events_reservations.controller.js b/modules/events/events_reservations.controller.js index c7b9621..7f50083 100644 --- a/modules/events/events_reservations.controller.js +++ b/modules/events/events_reservations.controller.js @@ -108,7 +108,7 @@ const extraControllers = { try { reservations.forEach(function (reservation) { -// console.log('mando correo: ', reservation.Entity.name); + 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' From c3ef5160e780907e27c4b7eaa3ac0b0031e6e6d0 Mon Sep 17 00:00:00 2001 From: david Date: Tue, 15 Oct 2019 16:28:21 +0200 Subject: [PATCH 7/7] a --- modules/events/events_reservations.controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/events/events_reservations.controller.js b/modules/events/events_reservations.controller.js index 7f50083..71edc1d 100644 --- a/modules/events/events_reservations.controller.js +++ b/modules/events/events_reservations.controller.js @@ -111,7 +111,7 @@ const extraControllers = { 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' + result = result + 'Invitación con código ' + reservation.reservation_code + ' enviada a ' + reservation.Entity.name + ' al destinatario ' + reservation.Entity.contact_email + '\n' } }); } catch (error) {