app2-api/modules/events/mail.service.js

235 lines
9.0 KiB
JavaScript
Raw Normal View History

2022-02-23 18:27:58 +00:00
"use strict";
2022-03-11 11:37:03 +00:00
const lodash = require("lodash");
2022-02-23 18:27:58 +00:00
const moment = require("moment");
const QRHelper = require("../../helpers/qr.helper");
const emailHelper = require("../../helpers/mail.helper");
2022-03-11 11:37:03 +00:00
////////////////////////////////////////////////////////////////////
// dataInscription {incription:{...}, {..., event:{...}, reservation:{...}, user:{...}}
////////////////////////////////////////////////////////////////////
/*AHORA SE ALMACENA TODO EN UNA ÚNICA LISTA DE MAILCHIMP, QUE ES LA DEL EVENTO
2022-03-11 11:37:03 +00:00
(si en un futuro se quiere tener listas independientes, bastaría con tratarlo aqui los campos de marketinglist de la reserva ...)
if (dataInscription.inscription.reservationId)
marketingListOfInscription = dataInscription.reservation.marketingList
else if (dataInscription.inscription.overflowEventId)
marketingListOfInscription = (await _getEvent(dataInscription.inscription.overflowEventId)).marketingList;
else
marketingListOfInscription = dataInscription.event.marketingList;
2022-03-11 11:37:03 +00:00
*/
function _generateMailDTO(dataInscription) {
let inscriptionDTO = {};
//console.log('*******ENTRO****', dataInscription);
2022-03-11 11:37:03 +00:00
const inscription = dataInscription.inscription ? dataInscription.inscription : dataInscription;
const event = dataInscription.event ? dataInscription.event : dataInscription.inscription.event;
const reservation = dataInscription.reservation ? dataInscription.reservation : null;
const user = dataInscription.user ? dataInscription.user : dataInscription.inscription.user;
2022-03-11 11:37:03 +00:00
if (inscription) {
inscriptionDTO.id = inscription.id;
inscriptionDTO.source = inscription.source;
inscriptionDTO.event_name = event ? event.name : "N/A";
inscriptionDTO.event_date = event ? event.init_date : "N/A";
inscriptionDTO.event_marketing_list = event ? event.marketing_list : null;
inscriptionDTO.date_inscription = inscription.date;
inscriptionDTO.code_ticket = inscription.code_ticket;
inscriptionDTO.validated = inscription.validated;
inscriptionDTO.type = inscription.type; // inscription.tipoEntrada ? inscription.tipoEntrada : inscription.type;
2022-03-11 11:37:03 +00:00
inscriptionDTO.reservation_code = reservation ? reservation.reservation_code : null;
inscriptionDTO.color = reservation ? reservation.color : null;
inscriptionDTO.description = ((reservation ? reservation.description : "Entrada").toUpperCase() + (lodash.words(inscription.type).includes("online") ? " online" : ""));
inscriptionDTO.qrConfig = null;
inscriptionDTO.qrCode = null;
2022-03-11 11:37:03 +00:00
if (user) {
//Era para mailchimp
/// inscriptionDTO.marketing_memberId = inscription.marketing_memberId ? inscription.marketing_memberId : null;
inscriptionDTO.email = user.email;
inscriptionDTO.name = user.name;
inscriptionDTO.surname = user.surname;
inscriptionDTO.userId = user.id;
inscriptionDTO.entity = reservation && reservation.Entity ? reservation.Entity.name : (user.Entity ? user.Entity.name : user.entityId);
2022-03-11 11:37:03 +00:00
};
}
console.log('*******SALGO****', inscriptionDTO);
2022-03-11 11:37:03 +00:00
return inscriptionDTO;
}
2022-02-23 18:27:58 +00:00
function generateHeaderMail(member) {
let headerMail = null;
let AsuntoOnline = lodash.words(member.type).includes("online") ? "Inscripción online" : "";
let AsuntoOnsite = member.validated ? "Entrada" : "Lista de espera";
2022-03-11 11:37:03 +00:00
2022-02-23 18:27:58 +00:00
if (member) {
headerMail = {
to: member.email,
name: member.name + " " + member.surname,
subject:
((AsuntoOnline === "") ? AsuntoOnsite : AsuntoOnline) + " para el congreso " + member.event_name + " confirmada",
2022-02-23 18:27:58 +00:00
};
}
return headerMail;
}
2022-03-11 11:37:03 +00:00
function generateHeaderMailReservation(reservation) {
2022-06-07 10:03:40 +00:00
function _getDestinationMail() {
if (lodash.isNull(reservation.Entity)) {
return reservation.contact_email;
} else {
return reservation.Entity.contact_email ? reservation.Entity.contact_email : reservation.contact_email;
}
}
2022-03-11 11:37:03 +00:00
let headerMail = null;
2022-06-07 10:03:40 +00:00
2022-03-11 11:37:03 +00:00
if (reservation) {
2022-06-07 10:03:40 +00:00
let toMail = _getDestinationMail();
if (!lodash.isNull(toMail)) {
headerMail = {
to: toMail,
name: reservation.Entity ? reservation.Entity.name : reservation.contact_name,
bcc: "cbarrantes@loquedeverdadimporta.org",
bccName: "Carolina Barrantes",
subject: "Códigos de invitación para congreso LQDVI",
};
}
2022-03-11 11:37:03 +00:00
}
console.log('generateHeaderMailReservation>>>>>>>', headerMail);
return headerMail;
}
function generateBodyMailReservation(reservation) {
console.log('generateBodyMailReservation>>>>>>>', reservation);
2022-03-11 11:37:03 +00:00
const event = reservation.Event ? reservation.Event : reservation.event;
let bodyMail = null;
if (reservation) {
bodyMail = {
entityName: reservation.Entity ? reservation.Entity.name : reservation.contact_name,
2022-03-11 11:37:03 +00:00
eventName: event.name,
dateEvent: moment(event.init_date).format("D [de] MMMM [de] YYYY"),
reservationCode: reservation.reservation_code,
reservationDescription: reservation.description,
};
}
console.log('generateBodyMailReservation>>>>>>>', bodyMail);
2022-03-11 11:37:03 +00:00
return bodyMail;
}
2022-02-23 18:27:58 +00:00
function generateBodyMail(member) {
2022-03-11 11:37:03 +00:00
//console.log('>>>generateBodyMail>>>>> ', member);
2022-02-23 18:27:58 +00:00
let bodyMail = null;
2022-03-11 11:37:03 +00:00
let tipoEntrada = lodash.words(member.type).includes("online") ? "Inscripción online confirmada" : (member.validated ? "Entrada" : "Lista de espera");
2022-02-23 18:27:58 +00:00
if (member) {
bodyMail = {
tipoEntrada: tipoEntrada,
2022-02-23 18:27:58 +00:00
descriptionEntrada: member.description,
qrCode: member.qrCode,
qrCodeUrl: member.qrCodeUrl,
color: member.qrConfig.color,
codeTicket: member.code_ticket,
eventName: member.event_name,
dateEvent: moment(member.event_date).format("D [de] MMMM [de] YYYY"),
dateInscription: moment(member.date_inscription).format("DD/MM/YY HH:mm "),
};
}
2022-03-11 11:37:03 +00:00
//console.log('>>>retunr>>>>> ', bodyMail);
2022-02-23 18:27:58 +00:00
return bodyMail;
}
2022-03-11 11:37:03 +00:00
async function sendEmailConfirm(dataUser, dataInscription) {
dataInscription.user = dataUser.userResult.user;
const isOnline = lodash.words(dataInscription.type).includes("online");
let mailDTO = _generateMailDTO(dataInscription);
mailDTO.qrConfig = QRHelper.generateQRConfig(mailDTO);
mailDTO.qrCode = await QRHelper.getInscriptionQRCode(mailDTO.qrConfig);
mailDTO.qrCodeUrl = QRHelper.getInscriptionQRCodeUrl(dataInscription.inscription.id);
console.log("Mandamos mail con entrada>>>>>>>>>>>>>>>>>>>>>>>>>>>");
//console.log(headerMail, bodyMail);
2022-03-11 11:37:03 +00:00
try {
if (isOnline)
emailHelper.sendTicketOnline(generateHeaderMail(mailDTO), generateBodyMail(mailDTO))
else
if (dataInscription.inscription.validated)
emailHelper.sendTicket(generateHeaderMail(mailDTO), generateBodyMail(mailDTO));
2022-03-11 11:37:03 +00:00
else
emailHelper.sendListaEspera(generateHeaderMail(mailDTO), generateBodyMail(mailDTO));
} catch (error) {
console.log("No se ha podido mandar email con entrada");
}
2022-03-11 11:37:03 +00:00
return true;
}
async function sendEmailCancelate(inscription) {
let mailDTO = _generateMailDTO(inscription);
mailDTO.qrConfig = QRHelper.generateQRConfig(mailDTO);
mailDTO.qrCode = await QRHelper.getInscriptionQRCode(mailDTO.qrConfig);
mailDTO.qrCodeUrl = QRHelper.getInscriptionQRCodeUrl(inscription.id);
let headerMail = generateHeaderMail(mailDTO);
headerMail.subject = "Cancelación de " + headerMail.subject;
console.log("Mandamos mail con la cancelacion>>>>>>>>>>>>>>>>>>>>>>>>>>>");
try {
emailHelper.sendCancelacion(headerMail, generateBodyMail(mailDTO));
} catch (error) { console.log("No se ha podido mandar email con cancelación") };
2022-03-11 11:37:03 +00:00
return true;
}
2022-06-07 10:03:40 +00:00
/*async function _sendInscriptionEmail(dataInscription, member) {
let mailDTO = _generateMailDTO(inscription);
2022-02-23 18:27:58 +00:00
member.qrConfig = QRHelper.generateQRConfig(member);
member.qrCode = await QRHelper.getInscriptionQRCode(member.qrConfig);
member.qrCodeUrl = QRHelper.getInscriptionQRCodeUrl(dataInscription.inscription.id);
console.log("Mandamos mail con entrada>>>>>>>>>>>>>>>>>>>>>>>>>>>");
//console.log(headerMail, bodyMail);
try {
if (member.validated) emailHelper.sendTicket(generateHeaderMail(member), generateBodyMail(member));
else emailHelper.sendListaEspera(generateHeaderMail(member), generateBodyMail(member));
} catch (error) {
console.log("No se ha podido mandar email con entrada");
}
2022-06-07 10:03:40 +00:00
}*/
2022-03-11 11:37:03 +00:00
async function sendReservationEmail(reservation) {
try {
emailHelper.sendReservationCode(generateHeaderMailReservation(reservation), generateBodyMailReservation(reservation));
} catch (error) {
console.log("No se ha podido mandar email _sendReservationEmail", error);
}
}
async function sendReservationCollegeEmail(reservation) {
try {
emailHelper.sendReservationCodeCollege(generateHeaderMailReservation(reservation), generateBodyMailReservation(reservation));
} catch (error) {
console.log("No se ha podido mandar email _sendReservationCodeCollege", error);
}
}
2022-03-11 11:37:03 +00:00
module.exports = {
sendEmailConfirm,
sendEmailCancelate,
sendReservationEmail,
sendReservationCollegeEmail,
2022-03-11 11:37:03 +00:00
generateHeaderMail,
generateHeaderMailReservation,
generateBodyMail,
generateBodyMailReservation,
2022-03-11 11:37:03 +00:00
};