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

253 lines
9.4 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 = {};
2024-10-30 11:02:17 +00:00
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";
2024-10-30 11:02:17 +00:00
inscriptionDTO.event_venue = event && event.venue ? event.venue.name : null;
2022-03-11 11:37:03 +00:00
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"
: lodash.words(member.type).includes("group")
? "Pendiente de confirmación"
: "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);
2022-03-11 11:37:03 +00:00
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) {
2025-02-20 17:29:14 +00:00
console.log('>>>generateBodyMail>>>>> ', member);
2022-02-23 18:27:58 +00:00
let bodyMail = null;
let tipoEntrada = lodash.words(member.type).includes("online")
? "Inscripción online confirmada"
: member.validated
? "Entrada"
: "Lista de espera";
2022-03-11 11:37:03 +00:00
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,
2025-03-11 18:29:26 +00:00
idTicket: String(member.id_ticket? member.id_ticket : member.id),
2022-02-23 18:27:58 +00:00
eventName: member.event_name,
venueName: member.venue_name,
dateEvent: moment(member.event_date).format("D [de] MMMM [de] YYYY, [a las] HH:mm"),
2022-02-23 18:27:58 +00:00
dateInscription: moment(member.date_inscription).format("DD/MM/YY HH:mm "),
};
}
2025-02-20 17:29:14 +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) {
2025-03-11 18:01:55 +00:00
2022-03-11 11:37:03 +00:00
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);
2025-02-20 17:22:32 +00:00
console.log("Mandamos mail con entrada , mailDTO>>>>>>>>>>>>>>>>>>>>>>>>>>>");
console.log(mailDTO);
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));
else {
if (lodash.words(mailDTO.type).includes("group"))
emailHelper.sendPendienteConfirmacion(generateHeaderMail(mailDTO), generateBodyMail(mailDTO));
else emailHelper.sendListaEspera(generateHeaderMail(mailDTO), generateBodyMail(mailDTO));
}
} catch (error) {
2023-10-24 13:56:00 +00:00
console.log("No se ha podido mandar email con entrada>>> ", error);
}
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)
);
2022-03-11 11:37:03 +00:00
} 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
};