/* global Venue */ 'use strict'; const _ = require('lodash'); const moment = require('moment'); const { generateService, parseParamsToFindOptions } = require('../../helpers/service.helper'); const models = require('../../core/models'); const marketing = require('../../helpers/mailchimp.helper') const Sequelize = require('sequelize'); moment.locale('es'); function generateNewCodeTicket() { let longitud = 8; let timestamp = +new Date; var _getRandomInt = function (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } var ts = timestamp.toString(); var parts = ts.split("").reverse(); var id = ""; for (var i = 0; i < longitud; ++i) { var index = _getRandomInt(0, longitud - 1); id += parts[index]; } return id; } const extraMethods = { _getInscriptionById: (id) => { return models.EventInscription.scope('includeEventAndVenue').findOne({ where: { id: id, }, }) }, _getInscriptionByEventAndUser: (eventId, userId) => { return models.EventInscription.scope('includeEventAndVenue').findOne({ where: { eventId: eventId, userId: userId }, }) }, _getInscriptionByEvent: (eventId) => { return models.EventInscription.scope('defaultScope').findAll({ where: { eventId: eventId, }, }) }, _getInscriptionsUser: (userId) => { return models.EventInscription.scope('includeEventAndVenue').findAll({ attributes: { exclude: ['marketing_memberId', 'overflowEventId', 'createdAt', 'updatedAt', 'userId', 'eventId', 'validateUserId'] }, where: { userId: userId }, }) }, _getInscriptionsOfNextEventsUser: (userId) => { return models.EventInscription.count({ include: [{ model: models.Event, as: 'event', where: { end_date: {[Sequelize.Op.gte]: moment().utc()}, } }], where: { userId: userId }, }); }, //Nos devuelve el número de inscripciones confirmadas para ese evento sin tener en cuenta reservas _getCountInscriptionsWithoutReservationAndOverflow: (eventId) => { return models.EventInscription.count({ where: { eventId: eventId, reservationId: null, overflowEventId: null }, }) }, //Nos devuelve el número de inscripciones realizadas con esa reserva _getCountInscriptionsWithReservation: (reservationId) => { return models.EventInscription.count({ where: { reservationId: reservationId, }, }) }, //Nos devuelve el número de inscripciones realizadas con esa reserva _getCountInscriptionsWithOverflowEventId: (overflowEventId) => { return models.EventInscription.count({ where: { overflowEventId: overflowEventId, }, }) }, _updateReservationOfInscription: (id, reservationId) => { return models.EventInscription.update ({ reservationId: reservationId, }, { where: { id: id } }); }, _updateMarketingMemberOfInscription: (id, marketingMemberId) => { return models.EventInscription.update({ marketing_memberId: marketingMemberId, }, { where: { id: id } }); }, _createInscription: (eventId, userId, type, validated, source, reservationId, overflowEventId) => { console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>< { //habria que poner el idusuario para asegurar que otro usuario no borra una inscripcion de otro return models.EventInscription.destroy({ where: { id: id, } }); }, _addMember: (marketingListId, user, inscription, reservation) => { 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 } return new Promise(function (resolve, reject) { if (!marketingListId) { // || !member.validated) { resolve(member) } else { marketing.addMember(marketingListId, member) .then(function (result) { member.marketing_memberId = result.ID; resolve(member); }) .catch(function (error) { reject(error) }); } }); }, }; module.exports = generateService(models.EventInscription, extraMethods);