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} * @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') const mailjet = require('node-mailjet')
.connect(mailjet_public, mailjet_private) .connect(mailjet_public, mailjet_private)
const request = mailjet const request = mailjet
.post("send", { 'version': 'v3.1' }) .post("send", { 'version': 'v3.1' })
.request({ .request({
"Messages": [{ "Messages": [params]
"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
}]
}) })
request request
.then((result) => { .then((result) => {
console.log(result.body) console.log(result.body)
@ -43,6 +47,68 @@ function send(data) {
console.log(error.statusCode) console.log(error.statusCode)
return error; 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) { function addMember(listId, member) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
// logger.debug('addMember => ', '/lists/' + listId + '/members', ' email: ' + member.email); // logger.debug('addMember => ', '/lists/' + listId + '/members', ' email: ' + member.email);

View File

@ -1,8 +1,10 @@
var _ = require('lodash'); var _ = require('lodash');
var QRCode = require('qrcode'); var QRCode = require('qrcode');
const moment = require('moment');
/* params = { /* params = {
code: 'xxxx', code: 'xxxx',
date: 'date-time',
name: 'xxxx', name: 'xxxx',
surname: 'xxxx', surname: 'xxxx',
color: '#ff', color: '#ff',
@ -11,7 +13,7 @@ var QRCode = require('qrcode');
module.exports.getInscriptionQRCode = function (params) { module.exports.getInscriptionQRCode = function (params) {
return new Promise(function (resolve, reject) { 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 = { var options = {
errorCorrectionLevel: 'M', errorCorrectionLevel: 'M',
} }
@ -27,7 +29,7 @@ module.exports.getInscriptionQRCode = function (params) {
QRCode.toDataURL(texto, options, function (err, qrcode) { QRCode.toDataURL(texto, options, function (err, qrcode) {
if (err) resolve(''); if (err) resolve('');
//console.log(qrcode); // console.log('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' + qrcode);
resolve(qrcode); resolve(qrcode);
}); });
}) })

View File

@ -1,4 +1,5 @@
'use strict'; 'use strict';
const moment = require('moment');
const httpStatus = require('http-status'); const httpStatus = require('http-status');
const generateControllers = require('../../core/controllers'); const generateControllers = require('../../core/controllers');
const QRHelper = require('../../helpers/qr.helper'); const QRHelper = require('../../helpers/qr.helper');
@ -413,32 +414,60 @@ console.log('actualizo confirmados de la nueva reserva');
else else
marketingListOfInscription = dataInscription.event.marketingList; 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); 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, to: member.email,
name: member.name + ' ' + member.surname, name: member.name + ' ' + member.surname,
subject: ((member.validated) ? 'Entrada' : 'Lista de espera') + ' para el congreso ' + dataInscription.event.name + ' confirmada'
} }
if (dataInscription.inscription.validated) { var bodyMail = {
mailOptions = Object.assign(mailOptions, { tipoEntrada: (member.validated) ? 'Entrada' : 'Lista de espera',
subject: messages.emails.confirmInvitation.subject.concat(dataInscription.event.name), descriptionEntrada: member.description,
text: messages.emails.confirmInvitation.body.text.concat(dataInscription.event.name), qrCode: qrCode,
html: messages.emails.confirmInvitation.body.html.concat(dataInscription.event.name), color: qrConfig.color,
}); codeTicket: member.code_ticket,
} else { eventName: dataInscription.event.name,
mailOptions = Object.assign(mailOptions, { dateInscription: moment(dataInscription.event.init_date).format('D [de] MMMM [de] YYYY'),
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), 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) return handleResultResponse(await dataInscription.inscription.toJSON(), null, params, res, httpStatus.CREATED)
}, },

View File

@ -168,25 +168,10 @@ const extraMethods = {
}); });
}, },
_addMember: (marketingListId, user, inscription, reservation) => { _addMember: (marketingListId, member) => {
console.log('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasddddddmemberrrrr1'); // console.log('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasddddddmemberrrrr1');
console.log(user, reservation); // console.log(member);
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
}
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
if (!marketingListId) { // || !member.validated) { if (!marketingListId) { // || !member.validated) {
@ -194,8 +179,7 @@ const extraMethods = {
} else { } else {
marketing.addMember(marketingListId, member) marketing.addMember(marketingListId, member)
.then(function (result) { .then(function (result) {
member.marketing_memberId = result.ID; resolve(result.ID);
resolve(member);
}) })
.catch(function (error) { .catch(function (error) {
reject(error) reject(error)