This commit is contained in:
David Arranz 2019-08-29 20:08:22 +02:00
parent 06fd628922
commit ff1d371897
5 changed files with 141 additions and 59 deletions

View File

@ -13,27 +13,31 @@ const mailjet_from_name = "Fundación Lo Que De Verdad Importa";
* @return {Promise}
*
*/
function send(data) {
function send(header, body) {
const params = Object.assign(
{
"From": {
"Email": mailjet_from_email,
"Name": mailjet_from_name
},
"To": [{
"Email": header.to,
"Name": header.name
}],
"Subject": header.subject,
},
body
);
const mailjet = require('node-mailjet')
.connect(mailjet_public, mailjet_private)
const request = mailjet
.post("send", { 'version': 'v3.1' })
.request({
"Messages": [{
"From": {
"Email": mailjet_from_email,
"Name": mailjet_from_name
},
"To": [{
"Email": data.to,
"Name": data.name
}],
"Subject": data.subject,
"TextPart": data.text,
"HTMLPart": data.html
}]
"Messages": [params]
})
request
.then((result) => {
console.log(result.body)
@ -43,6 +47,68 @@ function send(data) {
console.log(error.statusCode)
return error;
})
}
};
module.exports.send = send;
/**
* Enviar un email con entrada
* @header
* @param {number} data.to - Email destino
* @param {number} data.name - Nombre del contacto destino
* @param {number} data.subject - Asunto
* @values
* @param {number} data.tipoEntrada
* @param {number} data.qrCode
* @return {Promise}
*
*/
function sendTicket(header, values) {
const body = {
"TemplateID": 978886,
"TemplateLanguage": true,
"TemplateErrorDeliver": true,
"TemplateErrorReporting": {
"Email": "info@rodax-software.com",
"Name": "Air traffic control"
},
"Variables": {
"tipoEntrada": values.tipoEntrada,
"descriptionEntrada": values.descriptionEntrada,
"qrCode": values.qrCode,
"codeTicket": values.codeTicket,
"eventName": values.eventName,
"dateInscription": values.dateInscription,
"color": values.color,
}
};
return send(header, body);
};
/**
* Enviar un email
* @header
* @param {number} data.to - Email destino
* @param {number} data.name - Nombre del contacto destino
* @param {number} data.subject - Asunto
* @subjectAnBody
* @param {number} data.text - Cuerpo del mensaje en texto plano
* @param {number} data.html - Cuerpo del mensaje en HTML
* @return {Promise}
*
*/
function sendMail(header, values) {
const body = {
"TextPart": values.text,
"HTMLPart": values.html,
};
return send(header, body);
};
module.exports = {
sendMail,
sendTicket
};

View File

@ -67,6 +67,7 @@ function getMember(listId, member) {
});
};
function addMember(listId, member) {
return new Promise(function (resolve, reject) {
// logger.debug('addMember => ', '/lists/' + listId + '/members', ' email: ' + member.email);

View File

@ -1,17 +1,19 @@
var _ = require('lodash');
var QRCode = require('qrcode');
const moment = require('moment');
/* params = {
code: 'xxxx',
date: 'date-time',
name: 'xxxx',
surname: 'xxxx',
color: '#ff',
} */
} */
module.exports.getInscriptionQRCode = function (params) {
return new Promise(function (resolve, reject) {
var texto = _.padStart(params.code, 4, '0') + '\n' + params.name + ' ' + params.surname;
var texto = _.padStart(params.code, 4, '0') + '\n' + moment(params.date).format('DD/MM/YY HH:mm ') + params.name + ' ' + params.surname;
var options = {
errorCorrectionLevel: 'M',
}
@ -27,7 +29,7 @@ module.exports.getInscriptionQRCode = function (params) {
QRCode.toDataURL(texto, options, function (err, qrcode) {
if (err) resolve('');
//console.log(qrcode);
// console.log('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' + qrcode);
resolve(qrcode);
});
})

View File

@ -1,4 +1,5 @@
'use strict';
const moment = require('moment');
const httpStatus = require('http-status');
const generateControllers = require('../../core/controllers');
const QRHelper = require('../../helpers/qr.helper');
@ -413,32 +414,60 @@ console.log('actualizo confirmados de la nueva reserva');
else
marketingListOfInscription = dataInscription.event.marketingList;
*/
const member = await eventInscriptionService._addMember(marketingListOfInscription, dataUser.userResult.user, dataInscription.inscription, dataInscription.reservation);
//Creamos objeto member para facilitar inserción en mailchimp y envio de correo
var member = {
marketing_memberId: null,
email: dataUser.userResult.user.email,
name: dataUser.userResult.user.name,
surname: dataUser.userResult.user.surname,
source: dataInscription.inscription.source,
reservation_code: (dataInscription.reservation) ? dataInscription.reservation.reservation_code : null,
date: dataInscription.inscription.date,
code_ticket: dataInscription.inscription.code_ticket,
validated: dataInscription.inscription.validated,
color: (dataInscription.reservation) ? dataInscription.reservation.color : null,
description: ((dataInscription.reservation) ? dataInscription.reservation.description : 'Entrada Normal').toUpperCase(),
entity: (dataInscription.reservation) ? dataInscription.reservation.Entity.name : dataUser.userResult.user.entityId,
userId: dataUser.userResult.user.id
}
console.log('member a añadir a mailchimp y envio correo');
console.log(member);
member.marketing_memberId = await eventInscriptionService._addMember(marketingListOfInscription, member);
eventInscriptionService._updateMarketingMemberOfInscription(dataInscription.inscription.id, member.marketing_memberId);
var mailOptions = {
//MADAMOS MAIL CON LA ENTRADA
const qrConfig = {
name: member.name,
surname: member.surname,
date: member.date,
code: member.code_ticket,
color: member.color,
}
const qrCode = await QRHelper.getInscriptionQRCode(qrConfig);
var headerMail = {
to: member.email,
name: member.name + ' ' + member.surname,
subject: ((member.validated) ? 'Entrada' : 'Lista de espera') + ' para el congreso ' + dataInscription.event.name + ' confirmada'
}
if (dataInscription.inscription.validated) {
mailOptions = Object.assign(mailOptions, {
subject: messages.emails.confirmInvitation.subject.concat(dataInscription.event.name),
text: messages.emails.confirmInvitation.body.text.concat(dataInscription.event.name),
html: messages.emails.confirmInvitation.body.html.concat(dataInscription.event.name),
});
} else {
mailOptions = Object.assign(mailOptions, {
subject: messages.emails.confirmInvitationToWaitingList.subject.concat(dataInscription.event.name),
text: messages.emails.confirmInvitationToWaitingList.body.text.concat(dataInscription.event.name),
html: messages.emails.confirmInvitationToWaitingList.body.html.concat(dataInscription.event.name),
});
};
var bodyMail = {
tipoEntrada: (member.validated) ? 'Entrada' : 'Lista de espera',
descriptionEntrada: member.description,
qrCode: qrCode,
color: qrConfig.color,
codeTicket: member.code_ticket,
eventName: dataInscription.event.name,
dateInscription: moment(dataInscription.event.init_date).format('D [de] MMMM [de] YYYY'),
}
console.log(headerMail, bodyMail);
// if ((member.validated))
emailHelper.sendTicket(headerMail, bodyMail);
console.log('maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaail');
console.log(mailOptions);
emailHelper.send(mailOptions);
return handleResultResponse(await dataInscription.inscription.toJSON(), null, params, res, httpStatus.CREATED)
},

View File

@ -35,7 +35,7 @@ function generateNewCodeTicket() {
return id;
}
const extraMethods = {
const extraMethods = {
_getInscriptionById: (id) => {
return models.EventInscription.scope('includeEventAndVenue').findOne({
@ -168,25 +168,10 @@ const extraMethods = {
});
},
_addMember: (marketingListId, user, inscription, reservation) => {
_addMember: (marketingListId, member) => {
console.log('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasddddddmemberrrrr1');
console.log(user, reservation);
var member = {
marketing_memberId: null,
email: user.email,
name: user.name,
surname: user.surname,
source: inscription.source,
reservation_code: (reservation) ? reservation.reservation_code : null,
code_ticket: inscription.code_ticket,
validated: inscription.validated,
color: (reservation) ? reservation.color : 'white',
description: (reservation) ? reservation.description : 'entrada libre',
entity: (reservation) ? reservation.Entity.name : user.entityId,
userId: user.id
}
// console.log('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasddddddmemberrrrr1');
// console.log(member);
return new Promise(function (resolve, reject) {
if (!marketingListId) { // || !member.validated) {
@ -194,8 +179,7 @@ const extraMethods = {
} else {
marketing.addMember(marketingListId, member)
.then(function (result) {
member.marketing_memberId = result.ID;
resolve(member);
resolve(result.ID);
})
.catch(function (error) {
reject(error)