145 lines
5.1 KiB
JavaScript
145 lines
5.1 KiB
JavaScript
"use strict";
|
|
|
|
const eventInscriptionService = require("./events_inscriptions.service");
|
|
const marketing = require("../../helpers/sendinblue.helper");
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// dataInscription {incription:{...}, {..., event:{...}, reservation:{...}, user:{...}}
|
|
////////////////////////////////////////////////////////////////////
|
|
/*AHORA SE ALMACENA TODO EN UNA ÚNICA LISTA DE MAILCHIMP, QUE ES LA DEL EVENTO
|
|
(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;
|
|
*/
|
|
function _generateMarketingDTO(dataInscription) {
|
|
let inscriptionDTO = {};
|
|
|
|
let inscription = dataInscription.inscription ? dataInscription.inscription : dataInscription;
|
|
|
|
console.log('entro>>>', inscription);
|
|
if (inscription) {
|
|
inscriptionDTO.id = inscription.id;
|
|
inscriptionDTO.source = inscription.source;
|
|
inscriptionDTO.event_name = inscription.event ? inscription.event.name : "N/A";
|
|
inscriptionDTO.event_date = inscription.event ? inscription.event.init_date : "N/A";
|
|
inscriptionDTO.event_marketing_list = inscription.event ? inscription.event.marketing_list : null;
|
|
inscriptionDTO.date_inscription = inscription.date;
|
|
inscriptionDTO.code_ticket = inscription.code_ticket;
|
|
inscriptionDTO.validated = inscription.validated;
|
|
|
|
inscriptionDTO.reservation_code = inscription.reservation ? inscription.reservation.reservation_code : null;
|
|
inscriptionDTO.color = inscription.reservation ? inscription.reservation.color : null;
|
|
inscriptionDTO.description = (inscription.reservation ? inscription.reservation.description : "Entrada").toUpperCase();
|
|
inscriptionDTO.qrConfig= null;
|
|
inscriptionDTO.qrCode= null;
|
|
|
|
if (inscription.user) {
|
|
//Era para mailchimp
|
|
/// inscriptionDTO.marketing_memberId = inscription.marketing_memberId ? inscription.marketing_memberId : null;
|
|
inscriptionDTO.email = inscription.user.email;
|
|
inscriptionDTO.name = inscription.user.name;
|
|
inscriptionDTO.surname = inscription.user.surname;
|
|
inscriptionDTO.userId = inscription.user.id;
|
|
inscriptionDTO.entity = inscription.reservation && inscription.reservation.Entity ? inscription.reservation.Entity.name : (inscription.user.Entity ? inscription.user.Entity.name : inscription.user.entityId);
|
|
};
|
|
|
|
}
|
|
console.log('salgo>>>', inscriptionDTO);
|
|
return inscriptionDTO;
|
|
}
|
|
|
|
function sleep(time) {
|
|
return new Promise((resolve) => setTimeout(resolve, time));
|
|
}
|
|
|
|
|
|
async function _addMember (inscriptionDTO) {
|
|
console.debug('>>>> _addMember', inscriptionDTO.email);
|
|
console.debug('>>>> event_marketing_list', inscriptionDTO.event_marketing_list);
|
|
// console.debug(member);
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
if (!inscriptionDTO.event_marketing_list) {
|
|
// || !member.validated) {
|
|
resolve(inscriptionDTO);
|
|
} else {
|
|
marketing
|
|
.addMember(inscriptionDTO.event_marketing_list, inscriptionDTO)
|
|
.then(function (result) {
|
|
resolve(result.ID);
|
|
})
|
|
.catch(function (error) {
|
|
reject(error);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
async function _deleteMember (idLista, email) {
|
|
console.debug(
|
|
"Elimino miembro de la lista de marketing>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<",
|
|
email,
|
|
idLista,
|
|
);
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
if (!idLista || !email) {
|
|
resolve();
|
|
} else {
|
|
resolve(marketing.deleteMember(idLista, email));
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
async function addMarketingList(dataUser, dataInscription) {
|
|
dataInscription.user = dataUser.userResult.user;
|
|
return _addMember(_generateMarketingDTO(dataInscription));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function syncronizeEventWithMarketingList (eventId) {
|
|
let result = false;
|
|
try {
|
|
let inscriptionsToSync = await eventInscriptionService._getInscriptionsWithoutMemberId(eventId);
|
|
|
|
|
|
for (var i = 0; i < inscriptionsToSync.length; i++) {
|
|
const item = inscriptionsToSync[i].get({
|
|
plain: true
|
|
});
|
|
|
|
sleep(1000 * i).then(function () {
|
|
let inscriptionDTO = _addMember(_generateMarketingDTO(item));
|
|
// let marketingDTO = _generateMarketingDTO(item);
|
|
// console.log(marketingDTO)
|
|
// _deleteMember(marketingDTO.event_marketing_list, marketingDTO.email)
|
|
});
|
|
|
|
};
|
|
|
|
result = true;
|
|
return result;
|
|
} catch (error) {
|
|
console.log("No se ha podido _syncronizeEventWithMarketingList", error);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
syncronizeEventWithMarketingList,
|
|
addMarketingList,
|
|
_deleteMember,
|
|
_generateMarketingDTO,
|
|
|
|
};
|