/* global Events Reservations */ 'use strict'; const _ = require('lodash'); const moment = require('moment'); const Sequelize = require('sequelize'); const { generateService, parseParamsToFindOptions } = require('../../helpers/service.helper'); const models = require('../../core/models'); const xlsx = require("node-xlsx"); const fs = require("fs"); const cdnHelper = require('../../helpers/cdn.helper'); function getWhereTypeEntity(type) { var whereType = {}; if (type == 'partners') whereType = { alias: 'partner' } else if (type == 'colleges') whereType = { alias: 'college' }; return whereType; } const extraMethods = { _getReservaById: (Id) => { return models.EventReservation.findOne({ where: { id: Id }, }) }, _getReservaByIdWithEntityAndEvent: (Id) => { return models.EventReservation.findOne({ where: { id: Id }, include: [{ model: models.Event }, { model: models.Entity }] }) }, _getReservasByEventAndEntity: (eventId, entityId) => { return models.EventReservation.findAll({ where: { eventId: eventId, entityId: entityId }, include: [{ model: models.Event }, { model: models.Entity }] }) }, _getReservasByEventAndType: (eventId, type) => { return models.EventReservation.findAll({ where: { eventId: eventId }, include: [{ model: models.Event, }, { model: models.Entity, include: [{ model: models.EntityType, as: 'types', where: getWhereTypeEntity(type) }] }], order: [['entityId', 'asc']], }) }, _getReservaByCode: (eventId, code) => { return models.EventReservation.findOne({ where: { reservation_code: code, eventId: eventId }, include: [{ model: models.Event, }, {model: models.Entity}], }) }, _getPartners: (eventId) => { return models.EventReservation.findAll({ where: { eventId: eventId }, include: [{ model: models.Entity, include: [{ model: models.EntityType, as:'types', where:{alias: 'partner'}}], }], order: [[{ model: models.Entity }, 'name', 'asc'], ['description', 'desc']], }) }, _getColleges: (eventId) => { return models.EventReservation.findAll({ where: { eventId: eventId }, include: [{ model: models.Entity, include: [{ model: models.EntityType, as: 'types', where: { alias: 'college' } }], }], order: [[{ model: models.Entity }, 'name', 'asc'], ['description', 'desc']], }) }, _updateConfirmedReservation: (id, confirmed) => { return new Promise(function (resolve, reject) { models.EventReservation.update( { confirmed: confirmed, }, { where: { id: id } }) .then(function (result) { resolve((result[0] === 1)); }) .catch(function (error) { reject(error) }); }); }, _updateSoldOutReservation: (id, sold_out) => { return new Promise(function (resolve, reject) { models.EventReservation.update( { sold_out: sold_out, }, { where: { id: id } }) .then(function (result) { resolve((result[0] === 1)); }) .catch(function (error) { reject(error) }); }); }, _updatePublishReservation: (id) => { return new Promise(function (resolve, reject) { models.EventReservation.update( { state: 'publish', }, { where: { id: id } }) .then(function (result) { resolve((result[0] === 1)); }) .catch(function (error) { reject(error) }); }); }, _generateReservatioCode: (event, entityName) => { let result = 'default'; let entity = (entityName)? entityName : 'DEFAULT'; if (!event) return result; let xxx = event.location.city.replace(/\s+/g, '').substr(0, 3); let yyy = moment(event.init_date).format('YY'); let zzz = entity.replace(/\s+/g, '').substr(0, 3); let www = Math.floor((Math.random() * 999) + 1).toString().padStart(3, '0'); result = `${xxx}${yyy}-${zzz}${www}`; return result.toUpperCase(); }, _getReservationsExcel: (user, eventId, partnerId, type, callback) => { console.log('>>>>>>>>>>>>>>>>>>>>