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 ) ;