2022-02-23 18:27:58 +00:00
"use strict" ;
const eventInscriptionService = require ( "./events_inscriptions.service" ) ;
2022-03-11 11:37:03 +00:00
const marketing = require ( "../../helpers/sendinblue.helper" ) ;
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
/ * A H O R A S E A L M A C E N A T O D O E N U N A Ú N I C A L I S T A D E M A I L C H I M P , Q U E E S L A D E L E V E N T O
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 ) {
2022-09-12 09:30:20 +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
2023-10-24 16:26:09 +00:00
if ( dataInscription )
if ( ! inscription )
inscription = dataInscription ;
2022-09-12 09:30:20 +00:00
if ( ! event ) {
throw new Error ( 'Falta datos del evento en la inscripción (_generateMarketingDTO)' ) ;
}
if ( ! event . marketing _list ) {
2022-09-29 11:26:14 +00:00
console . warn ( 'Falta rellenar la lista de Sendinblue en el evento (_generateMarketingDTO)' , event . name ) ;
2022-09-12 09:30:20 +00:00
}
2022-03-11 11:37:03 +00:00
if ( inscription ) {
inscriptionDTO . id = inscription . id ;
inscriptionDTO . source = inscription . source ;
2022-09-12 09:30:20 +00:00
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 ;
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
2022-09-12 09:30:20 +00:00
inscriptionDTO . reservation _code = reservation ? reservation . reservation _code : null ;
2022-09-15 11:29:18 +00:00
inscriptionDTO . color = reservation ? reservation . color : "darkgreen" ;
2022-09-12 09:30:20 +00:00
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
2022-09-12 09:30:20 +00:00
if ( user ) {
2022-09-12 08:56:52 +00:00
//Era para mailchimp
/// inscriptionDTO.marketing_memberId = inscription.marketing_memberId ? inscription.marketing_memberId : null;
2022-09-12 09:30:20 +00:00
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
} ;
}
2022-09-12 08:56:52 +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 ) {
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
2022-12-05 14:29:14 +00:00
. addMemberToList ( inscriptionDTO . event _marketing _list , inscriptionDTO )
2022-09-12 08:56:52 +00:00
. then ( function ( result ) {
resolve ( result . ID ) ;
} )
. catch ( function ( error ) {
reject ( error ) ;
} ) ;
}
} ) ;
}
2022-03-11 11:37:03 +00:00
2022-09-12 08:56:52 +00:00
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 {
2022-12-05 14:29:14 +00:00
resolve ( marketing . deleteMemberFromList ( idLista , email ) ) ;
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 ( {
plain : true
} ) ;
2022-09-23 08:44:39 +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)
} ) ;
2022-03-11 11:37:03 +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-03-11 11:37:03 +00:00
2022-12-12 11:28:37 +00:00
function userToMarketingDTO ( user ) {
2022-12-05 14:47:52 +00:00
const result = { } ;
2022-12-05 17:34:22 +00:00
result . email = user . email ? user . email : '' ;
result . name = user . name ? user . name : '' ;
result . surname = user . surname ? user . surname : '' ;
result . userId = user . id ? user . id : '' ;
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-03-11 11:37:03 +00:00
2022-02-23 18:27:58 +00:00
} ;