/* 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) }); }); }, _getReservationsExcel: (user, eventId, partnerId, type, callback) => { console.log('>>>>>>>>>>>>>>>>>>>>