From b11c48626cbc696b047a9c01027632a122108621 Mon Sep 17 00:00:00 2001 From: david Date: Tue, 20 Aug 2019 18:39:05 +0200 Subject: [PATCH] a --- modules/events/event.controller.js | 24 ++++- modules/events/event.routes.js | 5 ++ modules/events/events_inscriptions.service.js | 87 ++++++++++++++++++- 3 files changed, 111 insertions(+), 5 deletions(-) diff --git a/modules/events/event.controller.js b/modules/events/event.controller.js index 73965e7..a381866 100644 --- a/modules/events/event.controller.js +++ b/modules/events/event.controller.js @@ -463,12 +463,11 @@ console.log(mailOptions); getReservationsExcel: async (req, res, next) => { - console.log('exxxxxxxxxxxxxxxcel'); const params = extractParamsFromRequest(req, res, {}); const eventId = params.params.id; const userId = req.user.id; - const inscription = await eventReservationService._getReservationsExcel(req.user, eventId, null, function(result, status){ + const reservations = await eventReservationService._getReservationsExcel(req.user, eventId, null, function(result, status){ if (result.messenger.code == "S99001") { console.log(result); res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); @@ -479,7 +478,26 @@ console.log(mailOptions); res.status(status).json(result); } }) - } + }, + + getInscripcionsExcel: async (req, res, next) => { + const params = extractParamsFromRequest(req, res, {}); + const eventId = params.params.id; + const userId = req.user.id; + + const inscriptions = await eventInscriptionService._getInscriptionsExcel(req.user, eventId, function (result, status) { + if (result.messenger.code == "S99001") { + console.log(result); + res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + res.setHeader('Content-Disposition', 'attachment; filename=' + result.data.name); + res.attachment(result.data.name); + res.download(path.resolve(result.data.path), result.data.name); + } else { + res.status(status).json(result); + } + }) + }, + }; diff --git a/modules/events/event.routes.js b/modules/events/event.routes.js index eed2d7c..cc8075c 100644 --- a/modules/events/event.routes.js +++ b/modules/events/event.routes.js @@ -333,6 +333,11 @@ routes.get('/admin/events/:id/reservations/excel', eventController.getReservationsExcel, ); +routes.get('/admin/events/:id/inscriptions/excel', + isAdministratorUser, + eventController.getInscripcionsExcel, +); + routes.get('/admin/events/:eventId/partners/:entityId/reservations', isAdministratorUser, eventReservationController.find(), diff --git a/modules/events/events_inscriptions.service.js b/modules/events/events_inscriptions.service.js index 27b1b0e..510083c 100644 --- a/modules/events/events_inscriptions.service.js +++ b/modules/events/events_inscriptions.service.js @@ -7,8 +7,11 @@ const { generateService, parseParamsToFindOptions } = require('../../helpers/ser const models = require('../../core/models'); const marketing = require('../../helpers/mailchimp.helper') const Sequelize = require('sequelize'); -moment.locale('es'); +const xlsx = require("node-xlsx"); +const fs = require("fs"); +const cdnHelper = require('../../helpers/cdn.helper'); +moment.locale('es'); function generateNewCodeTicket() { @@ -200,8 +203,88 @@ const extraMethods = { } }); }, + + _getInscriptionsExcel: (user, eventId, callback) => { + models.EventInscription.findAll({ + where: { + eventId: eventId, + type: 'regular' + }, + include: [{ + model: models.Event, + as: 'event', + attributes: ['id', 'name'], + }], + order:[ +// [{ model: models.Entity }, 'name', 'ASC'], +// [{ model: models.User },'name', 'ASC'], + ], + + }).then(function (inscriptions) { + if (inscriptions.length) { + var data = []; + + data.push(["Centro educativo", "Número de entrada", "Nombre", "Apellidos", "Email", "Válido"]); + + for (var c = 0; c < inscriptions.length; c++) { + var inscription = inscriptions[c]; + console.log(inscription); + + var code = inscription.code_ticket; + var name = inscription.user.name; + var surname = inscription.user.surname ? inscription.user.surname : ""; + var email = inscription.user.email; + var college = inscription.user.entityId ? inscription.user.entity : ""; + var valid = inscription.validated ? "Válido" : "No válido"; + + data.push([college, code, name, surname, email, valid]); + } + + var buffer = xlsx.build([{ + name: inscriptions[0].event.name, + data: data + }]); + + var fileName = cdnHelper.sanitizeFilename(inscriptions[0].event.name + "-inscripciones.xlsx"); + var xlsxPath = cdnHelper.getCDNPath('xlsx') + fileName; + var wstream = fs.createWriteStream(xlsxPath); + wstream.write(buffer); + wstream.end(); + + wstream.on("close", function () { + return callback({ + messenger: { + success: true, + message: 'Ok', + code: 'S99001' + }, + data: { + path: xlsxPath, + name: fileName + } + }, 200); + }); + } else { + return callback({ + messenger: { + success: true, + message: 'Ok', + code: 'S99002' + } + }, 200); + } + }).catch(function (error) { + console.log(error); + return callback({ + messenger: { + success: false, + message: 'Database error getting inscription.', + code: 'E01004' + } + }, 500); + }); + }, - }; module.exports = generateService(models.EventInscription, extraMethods); \ No newline at end of file