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

166 lines
6.4 KiB
JavaScript
Raw Normal View History

2022-02-23 18:27:58 +00:00
"use strict";
const eventInscriptionService = require("./events_inscriptions.service");
2024-05-31 10:06:36 +00:00
const marketing = require("../../helpers/hubspot.helper"); // <--- HUBSPOT
2022-02-23 18:27:58 +00:00
2022-03-11 11:37:03 +00:00
////////////////////////////////////////////////////////////////////
2022-09-12 08:56:52 +00:00
// dataInscription {incription:{...}, event:{...}, reservation:{...}, user:{...}}
2022-03-11 11:37:03 +00:00
////////////////////////////////////////////////////////////////////
2022-09-12 08:56:52 +00:00
/*AHORA SE ALMACENA TODO EN UNA ÚNICA LISTA DE MAILCHIMP, QUE ES LA DEL EVENTO
2022-02-23 18:27:58 +00:00
(si en un futuro se quiere tener listas independientes, bastaría con tratarlo aqui los campos de marketinglist de la reserva ...)
2022-09-12 08:56:52 +00:00
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-02-23 18:27:58 +00:00
*/
2022-03-11 11:37:03 +00:00
function _generateMarketingDTO(dataInscription) {
2024-05-31 10:06:36 +00:00
console.log("entro _generateMarketingDTO >>> ", dataInscription);
let { event, inscription, user, reservation } = dataInscription;
2022-03-11 11:37:03 +00:00
let inscriptionDTO = {};
2023-10-24 16:26:09 +00:00
2023-10-24 16:35:36 +00:00
//En el caso de generar el MarketingDTO para el ticket de la APP, fallaba porque el propio dataInscription, es la inscription y de el cuelgan user, event y reservation
//Sin embargo cuando se llama desde addMarketingList la inscription cualga de dataInscripcion como el resto de elementos
2024-05-31 10:06:36 +00:00
if (dataInscription) if (!inscription) inscription = dataInscription;
if (!event) {
2024-05-31 10:06:36 +00:00
throw new Error("Falta datos del evento en la inscripción (_generateMarketingDTO)");
}
2024-05-31 10:06:36 +00:00
/*if (!event.marketing_list) { <-- YA NO HACE FALTA CON HUBSPOT
console.warn("Falta rellenar la lista de Sendinblue en el evento (_generateMarketingDTO)", event.name);
}*/
2022-03-11 11:37:03 +00:00
if (inscription) {
inscriptionDTO.id = inscription.id;
inscriptionDTO.source = inscription.source;
inscriptionDTO.event_name = event.name ? event.name : "N/A";
inscriptionDTO.event_date = event.init_date ? event.init_date : "N/A";
inscriptionDTO.event_marketing_list = event ? event.marketing_list : null;
2024-05-31 10:06:36 +00:00
inscriptionDTO.event_country = event ? event.location.country : null;
inscriptionDTO.event_city = event ? event.location.city : null;
2022-03-11 11:37:03 +00:00
inscriptionDTO.date_inscription = inscription.date;
inscriptionDTO.code_ticket = inscription.code_ticket;
inscriptionDTO.validated = inscription.validated;
2022-09-12 08:56:52 +00:00
inscriptionDTO.reservation_code = reservation ? reservation.reservation_code : null;
2022-09-15 11:29:18 +00:00
inscriptionDTO.color = reservation ? reservation.color : "darkgreen";
inscriptionDTO.description = (reservation ? reservation.description : "Entrada").toUpperCase();
2022-09-12 08:56:52 +00:00
inscriptionDTO.qrConfig = null;
inscriptionDTO.qrCode = null;
2022-03-11 11:37:03 +00:00
2024-05-31 10:06:36 +00:00
/** HUBSPOT */
// inscriptionDTO.event_city = event.venue ? event.venue.city : null;
// inscriptionDTO.event_country = event.venue ? event.venue.country : null;
if (user) {
2024-05-31 10:06:36 +00:00
//Era para mailchimp
2022-09-12 08:56:52 +00:00
/// inscriptionDTO.marketing_memberId = inscription.marketing_memberId ? inscription.marketing_memberId : null;
inscriptionDTO.email = user.email;
inscriptionDTO.name = user.name;
inscriptionDTO.surname = user.surname;
2024-05-31 10:06:36 +00:00
inscriptionDTO.phone = user.phone; // <-- HUBSPOT
inscriptionDTO.profile = user.profile; // <-- HUBSPOT
inscriptionDTO.userId = user.id;
2024-05-31 10:06:36 +00:00
inscriptionDTO.entity =
reservation && reservation.Entity ? reservation.Entity.name : user.Entity ? user.Entity.name : user.entityId;
}
2022-03-11 11:37:03 +00:00
}
2024-05-31 10:06:36 +00:00
console.log("salgo>>>", inscriptionDTO);
2022-03-11 11:37:03 +00:00
return inscriptionDTO;
}
function sleep(time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
2022-09-12 08:56:52 +00:00
async function _addMember(inscriptionDTO) {
2024-05-31 10:06:36 +00:00
console.debug(">>>> _addMember", inscriptionDTO.email);
console.debug(">>>> event_marketing_list", inscriptionDTO.event_marketing_list);
2022-09-12 08:56:52 +00:00
// console.debug(member);
return new Promise(function (resolve, reject) {
2024-05-31 10:06:36 +00:00
//if (!inscriptionDTO.event_marketing_list) {
// || !member.validated) {
//resolve(inscriptionDTO);
//} else {
/**
* HUBSPOT
*/
marketing
.addMemberToList(inscriptionDTO.event_marketing_list, inscriptionDTO)
.then(function (result) {
resolve(result.ID);
})
.catch(function (error) {
reject(error);
});
//}
2022-09-12 08:56:52 +00:00
});
}
2022-03-11 11:37:03 +00:00
2024-05-31 10:06:36 +00:00
async function _deleteMember(idLista, email, inscription = undefined) {
console.debug("Elimino miembro de la lista de marketing>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<", email, idLista);
2022-09-12 08:56:52 +00:00
return new Promise(function (resolve, reject) {
2024-05-31 10:06:36 +00:00
resolve(marketing.deleteMemberFromList(idLista, email, inscription));
2022-09-12 08:56:52 +00:00
});
}
2022-03-11 11:37:03 +00:00
async function addMarketingList(dataUser, dataInscription) {
dataInscription.user = dataUser.userResult.user;
return _addMember(_generateMarketingDTO(dataInscription));
}
2022-09-12 08:56:52 +00:00
async function syncronizeEventWithMarketingList(eventId) {
2022-03-11 11:37:03 +00:00
let result = false;
try {
let inscriptionsToSync = await eventInscriptionService._getInscriptionsWithoutMemberId(eventId);
for (var i = 0; i < inscriptionsToSync.length; i++) {
2022-09-12 08:56:52 +00:00
const item = inscriptionsToSync[i].get({
2024-05-31 10:06:36 +00:00
plain: true,
2022-09-12 08:56:52 +00:00
});
//Adaptamos el objeto a lo que espera _generateMarketingDTO
// dataInscription {incription:{...}, event:{...}, reservation:{...}, user:{...}}
// en _getInscriptionsWithoutMemberId devuelve la inscripcion en el raiz
item.inscription = item;
2022-09-12 08:56:52 +00:00
sleep(1000 * i).then(function () {
let inscriptionDTO = _addMember(_generateMarketingDTO(item));
// let marketingDTO = _generateMarketingDTO(item);
// console.log(marketingDTO)
// _deleteMember(marketingDTO.event_marketing_list, marketingDTO.email)
});
2024-05-31 10:06:36 +00:00
}
2022-09-12 08:56:52 +00:00
2022-03-11 11:37:03 +00:00
result = true;
return result;
2022-02-23 18:27:58 +00:00
} catch (error) {
2022-03-11 11:37:03 +00:00
console.log("No se ha podido _syncronizeEventWithMarketingList", error);
2022-02-23 18:27:58 +00:00
}
}
2022-12-12 11:28:37 +00:00
function userToMarketingDTO(user) {
2022-12-05 14:47:52 +00:00
const result = {};
2024-05-31 10:06:36 +00:00
result.email = user.email ? user.email : "";
result.name = user.name ? user.name : "";
result.surname = user.surname ? user.surname : "";
result.phone = user.phone ? user.phone : "";
result.userId = user.id ? user.id : "";
result.profile = user.profile ? user.profile : "";
result.entity = user.Entity ? user.Entity.name : "";
2022-12-05 14:47:52 +00:00
return result;
}
2022-03-11 11:37:03 +00:00
2022-02-23 18:27:58 +00:00
module.exports = {
2022-03-11 11:37:03 +00:00
syncronizeEventWithMarketingList,
addMarketingList,
_deleteMember,
_generateMarketingDTO,
2022-12-12 11:28:37 +00:00
userToMarketingDTO,
2022-02-23 18:27:58 +00:00
};