From ff1d37189755d34ef39efa5d593ce6519eb49b71 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 29 Aug 2019 20:08:22 +0200 Subject: [PATCH] a --- helpers/mail.helper.js | 100 +++++++++++++++--- helpers/mailchimp.helper.js | 1 + helpers/qr.helper.js | 8 +- modules/events/event.controller.js | 65 ++++++++---- modules/events/events_inscriptions.service.js | 26 +---- 5 files changed, 141 insertions(+), 59 deletions(-) diff --git a/helpers/mail.helper.js b/helpers/mail.helper.js index 13b8335..d93b562 100644 --- a/helpers/mail.helper.js +++ b/helpers/mail.helper.js @@ -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; \ No newline at end of file +/** + * 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 +}; \ No newline at end of file diff --git a/helpers/mailchimp.helper.js b/helpers/mailchimp.helper.js index 14118b9..bf6b635 100644 --- a/helpers/mailchimp.helper.js +++ b/helpers/mailchimp.helper.js @@ -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); diff --git a/helpers/qr.helper.js b/helpers/qr.helper.js index 79743b8..59f4937 100644 --- a/helpers/qr.helper.js +++ b/helpers/qr.helper.js @@ -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); }); }) diff --git a/modules/events/event.controller.js b/modules/events/event.controller.js index 2bbc036..c9c1280 100644 --- a/modules/events/event.controller.js +++ b/modules/events/event.controller.js @@ -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) }, diff --git a/modules/events/events_inscriptions.service.js b/modules/events/events_inscriptions.service.js index 510083c..ca4854f 100644 --- a/modules/events/events_inscriptions.service.js +++ b/modules/events/events_inscriptions.service.js @@ -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)