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
/ * 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 ) {
2024-05-31 10:06:36 +00:00
console . log ( "entro _generateMarketingDTO >>> " , dataInscription ) ;
2022-09-12 09:30:20 +00:00
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 ;
2022-09-12 09:30:20 +00:00
if ( ! event ) {
2024-05-31 10:06:36 +00:00
throw new Error ( "Falta datos del evento en la inscripción (_generateMarketingDTO)" ) ;
2022-09-12 09:30:20 +00:00
}
2024-05-31 10:06:36 +00:00
/ * i f ( ! e v e n t . m a r k e t i n g _ l i s t ) { < - - Y A N O H A C E F A L T A C O N H U B S P O T
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 ;
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 ;
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
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
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;
2022-09-12 09:30:20 +00:00
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;
2022-09-12 09:30:20 +00:00
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
2022-09-12 09:30:20 +00:00
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
} ) ;
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)
} ) ;
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
} ;