2019-06-21 08:40:28 +00:00
|
|
|
'use strict';
|
2019-07-16 16:27:54 +00:00
|
|
|
const moment = require('moment');
|
|
|
|
|
const Sequelize = require('sequelize');
|
2019-07-22 17:03:26 +00:00
|
|
|
moment.locale('es');
|
2019-06-21 08:40:28 +00:00
|
|
|
|
2019-07-26 17:06:19 +00:00
|
|
|
const getStateCode = (event) => {
|
2019-09-27 10:22:09 +00:00
|
|
|
var currentDate = moment(),
|
|
|
|
|
initDate = moment(event.init_date),
|
|
|
|
|
endDate = moment(event.end_date),
|
|
|
|
|
init_availableDate = moment(event.init_available_date),
|
|
|
|
|
end_availableDate = moment(event.end_available_date);
|
2019-07-26 17:06:19 +00:00
|
|
|
|
2019-09-27 10:22:09 +00:00
|
|
|
if (currentDate.isBetween(initDate, endDate)) {
|
2019-07-26 17:06:19 +00:00
|
|
|
return 'current_event';
|
|
|
|
|
} else {
|
2019-09-27 10:22:09 +00:00
|
|
|
if (endDate.isBefore(currentDate)) {
|
2019-07-26 17:06:19 +00:00
|
|
|
return 'closed_event';
|
|
|
|
|
} else {
|
2019-09-27 10:22:09 +00:00
|
|
|
if (currentDate.isBefore(init_availableDate)){
|
2019-07-26 17:06:19 +00:00
|
|
|
return 'future_registrations'
|
|
|
|
|
} else {
|
2019-09-27 10:22:09 +00:00
|
|
|
if (currentDate.isBetween(init_availableDate, end_availableDate)) {
|
2019-07-26 17:06:19 +00:00
|
|
|
return (event.sold_out == 1) ? 'waitinglist_open' : 'registrations_open';
|
|
|
|
|
}
|
|
|
|
|
else {
|
2019-09-27 10:22:09 +00:00
|
|
|
if (currentDate.isAfter(end_availableDate))
|
2019-07-26 17:06:19 +00:00
|
|
|
return 'closed_registrations'
|
|
|
|
|
else
|
|
|
|
|
return 'N/A';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2019-07-25 16:39:18 +00:00
|
|
|
const getStateText = (event) => {
|
2019-09-27 10:22:09 +00:00
|
|
|
var currentDate = moment(),
|
|
|
|
|
initDate = moment(event.init_date),
|
|
|
|
|
endDate = moment(event.end_date),
|
|
|
|
|
init_availableDate = moment(event.init_available_date),
|
|
|
|
|
end_availableDate = moment(event.end_available_date);
|
2019-07-21 18:48:19 +00:00
|
|
|
|
2019-09-27 10:22:09 +00:00
|
|
|
if (currentDate.isBetween(initDate, endDate)) {
|
2019-07-21 18:48:19 +00:00
|
|
|
return 'Congreso en curso';
|
|
|
|
|
} else {
|
2019-09-27 10:22:09 +00:00
|
|
|
if (endDate.isBefore(currentDate)) {
|
2019-07-21 18:48:19 +00:00
|
|
|
return 'Congreso finalizado';
|
|
|
|
|
} else {
|
2019-09-27 10:22:09 +00:00
|
|
|
if (currentDate.isBefore(init_availableDate)) {
|
|
|
|
|
return 'Inscripciones a partir del ' + init_availableDate.format('D [de] MMMM');
|
2019-07-26 17:06:19 +00:00
|
|
|
} else {
|
2019-09-27 10:22:09 +00:00
|
|
|
if (currentDate.isBetween(init_availableDate, end_availableDate)) {
|
2019-07-26 17:06:19 +00:00
|
|
|
return (event.sold_out == 1) ? 'Inscripciones abiertas a lista de espera' : 'Inscripciones abiertas';
|
|
|
|
|
}
|
|
|
|
|
else {
|
2019-09-27 10:22:09 +00:00
|
|
|
if (currentDate.isAfter(end_availableDate))
|
2019-07-26 17:06:19 +00:00
|
|
|
return 'Inscripciones cerradas'
|
|
|
|
|
else
|
2019-09-18 16:01:53 +00:00
|
|
|
return 'N/A';
|
2019-07-26 17:06:19 +00:00
|
|
|
}
|
|
|
|
|
|
2019-07-21 18:48:19 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2019-06-21 08:40:28 +00:00
|
|
|
module.exports = function (sequelize, DataTypes) {
|
2019-07-21 18:48:19 +00:00
|
|
|
|
2019-06-21 08:40:28 +00:00
|
|
|
const Event = sequelize.define('Event', {
|
|
|
|
|
id: {
|
|
|
|
|
type: DataTypes.UUID,
|
|
|
|
|
defaultValue: DataTypes.UUIDV4,
|
|
|
|
|
primaryKey: true,
|
|
|
|
|
},
|
|
|
|
|
name: {
|
|
|
|
|
type: DataTypes.STRING,
|
|
|
|
|
allowNull: false,
|
|
|
|
|
},
|
|
|
|
|
description: {
|
|
|
|
|
type: DataTypes.STRING,
|
|
|
|
|
},
|
2019-06-26 10:24:58 +00:00
|
|
|
campaign_text: {
|
|
|
|
|
type: DataTypes.TEXT,
|
|
|
|
|
allowNull: true
|
|
|
|
|
},
|
2019-07-17 14:47:27 +00:00
|
|
|
init_date: {
|
2019-06-21 08:40:28 +00:00
|
|
|
type: DataTypes.DATE,
|
|
|
|
|
allowNull: false,
|
2019-07-17 14:47:27 +00:00
|
|
|
},
|
|
|
|
|
end_date: {
|
|
|
|
|
type: DataTypes.DATE,
|
|
|
|
|
},
|
2019-07-10 08:42:03 +00:00
|
|
|
init_available_date: {
|
2019-06-21 08:40:28 +00:00
|
|
|
type: DataTypes.DATE,
|
|
|
|
|
},
|
2019-07-10 08:42:03 +00:00
|
|
|
end_available_date: {
|
2019-06-21 08:40:28 +00:00
|
|
|
type: DataTypes.DATE,
|
|
|
|
|
},
|
|
|
|
|
gmt: {
|
|
|
|
|
type: DataTypes.INTEGER,
|
|
|
|
|
defaultValue: 1,
|
|
|
|
|
},
|
|
|
|
|
assistants: {
|
|
|
|
|
type: DataTypes.INTEGER,
|
|
|
|
|
},
|
|
|
|
|
confirmed: {
|
|
|
|
|
type: DataTypes.INTEGER,
|
|
|
|
|
},
|
2019-07-25 16:39:18 +00:00
|
|
|
sold_out: { //Se han vendido todas y se ha abierto lista de espera si hay asignada
|
|
|
|
|
type: DataTypes.BOOLEAN,
|
|
|
|
|
defaultValue: false,
|
|
|
|
|
},
|
2019-06-21 08:40:28 +00:00
|
|
|
allow_multiple: {
|
|
|
|
|
type: DataTypes.BOOLEAN,
|
|
|
|
|
allowNull: false,
|
|
|
|
|
defaultValue: false,
|
|
|
|
|
},
|
|
|
|
|
multiple_limit: {
|
|
|
|
|
type: DataTypes.INTEGER,
|
|
|
|
|
},
|
|
|
|
|
allow_overflow: {
|
|
|
|
|
type: DataTypes.BOOLEAN,
|
|
|
|
|
allowNull: false,
|
|
|
|
|
defaultValue: false,
|
|
|
|
|
},
|
|
|
|
|
overflow_eventId: {
|
|
|
|
|
type: DataTypes.UUID,
|
|
|
|
|
foreignKey: true,
|
2019-07-16 16:27:54 +00:00
|
|
|
require: false,
|
2019-06-21 08:40:28 +00:00
|
|
|
},
|
|
|
|
|
state: {
|
|
|
|
|
type: DataTypes.STRING,
|
|
|
|
|
allowNull: false,
|
2019-07-17 12:07:35 +00:00
|
|
|
defaultValue: 'draft'
|
2019-06-21 08:40:28 +00:00
|
|
|
},
|
2019-07-26 17:06:19 +00:00
|
|
|
stateCode: {
|
|
|
|
|
type: Sequelize.VIRTUAL(Sequelize.STRING, ['init_date', 'end_date', 'init_available_date', 'end_available_date', 'sold_out']),
|
|
|
|
|
get: function () {
|
|
|
|
|
return getStateCode(this);
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-07-21 18:48:19 +00:00
|
|
|
stateText: {
|
2019-07-25 16:39:18 +00:00
|
|
|
type: Sequelize.VIRTUAL(Sequelize.STRING, ['init_date', 'end_date', 'init_available_date', 'end_available_date', 'sold_out']),
|
2019-07-21 18:48:19 +00:00
|
|
|
get: function () {
|
|
|
|
|
return getStateText(this);
|
|
|
|
|
},
|
|
|
|
|
},
|
2019-06-21 08:40:28 +00:00
|
|
|
typeId: {
|
|
|
|
|
type: DataTypes.UUID,
|
|
|
|
|
foreignKey: true,
|
|
|
|
|
},
|
|
|
|
|
venueId: {
|
|
|
|
|
type: DataTypes.UUID,
|
|
|
|
|
foreignKey: true,
|
|
|
|
|
},
|
2019-08-28 09:07:38 +00:00
|
|
|
locationId:{
|
|
|
|
|
type: DataTypes.UUID,
|
2019-08-27 14:46:20 +00:00
|
|
|
foreignKey: true,
|
2019-08-28 09:07:38 +00:00
|
|
|
},
|
2019-06-21 08:40:28 +00:00
|
|
|
url_streaming: {
|
|
|
|
|
type: DataTypes.STRING,
|
|
|
|
|
},
|
|
|
|
|
url_poll: {
|
|
|
|
|
type: DataTypes.STRING,
|
|
|
|
|
},
|
|
|
|
|
url_registration: {
|
|
|
|
|
type: DataTypes.STRING,
|
|
|
|
|
},
|
2019-07-17 12:07:35 +00:00
|
|
|
marketing_list: {
|
2019-07-05 07:06:29 +00:00
|
|
|
type: DataTypes.STRING,
|
2019-06-21 08:40:28 +00:00
|
|
|
},
|
2019-07-11 18:05:06 +00:00
|
|
|
userId: {
|
|
|
|
|
type: DataTypes.UUID,
|
|
|
|
|
foreignKey: true,
|
|
|
|
|
},
|
|
|
|
|
|
2019-06-21 08:40:28 +00:00
|
|
|
}, {
|
|
|
|
|
tableName: 'events',
|
|
|
|
|
freezeTableName: true,
|
|
|
|
|
timestamps: true,
|
2019-07-16 16:27:54 +00:00
|
|
|
|
|
|
|
|
defaultScope: {
|
2019-07-17 12:07:35 +00:00
|
|
|
where: {
|
2019-07-26 15:54:05 +00:00
|
|
|
state: 'publish',
|
|
|
|
|
typeId: { [Sequelize.Op.ne]: 2 },
|
2019-07-18 18:26:57 +00:00
|
|
|
},
|
|
|
|
|
include: [{
|
|
|
|
|
model: sequelize.models.EventType,
|
|
|
|
|
as: 'type',
|
|
|
|
|
attributes: ['name', 'title'],
|
2019-09-18 16:01:18 +00:00
|
|
|
},
|
2019-08-31 09:36:31 +00:00
|
|
|
{
|
|
|
|
|
association: 'location',
|
|
|
|
|
attributes: ['country', 'city'],
|
|
|
|
|
require:false,
|
2019-08-28 09:07:38 +00:00
|
|
|
}],
|
2019-07-16 16:27:54 +00:00
|
|
|
},
|
2019-06-21 08:40:28 +00:00
|
|
|
});
|
2019-07-17 12:07:35 +00:00
|
|
|
|
2019-06-21 08:40:28 +00:00
|
|
|
Event.associate = function (models) {
|
2019-08-20 15:37:53 +00:00
|
|
|
|
|
|
|
|
Event.OverflowEvent = Event.belongsTo(models.Event, {
|
|
|
|
|
as: 'overflowEvent',
|
|
|
|
|
foreignKey: 'overflow_eventId',
|
|
|
|
|
required: false });
|
|
|
|
|
|
2019-08-27 11:08:04 +00:00
|
|
|
Event.Type = Event.belongsTo(models.EventType, { foreignKey: 'typeId', as: "type" });
|
2019-07-14 16:44:59 +00:00
|
|
|
Event.UserCreate = Event.belongsTo(models.User, { foreignKey: 'userId', as: "user" });
|
2019-08-28 09:07:38 +00:00
|
|
|
Event.Venue = Event.belongsTo(models.Venue, { foreignKey: 'venueId', as: "venue", required: false});
|
2019-07-17 14:47:27 +00:00
|
|
|
Event.Details = Event.hasMany(models.EventDetail, { foreignKey: 'eventId', as: "details" });
|
2019-08-28 09:07:38 +00:00
|
|
|
Event.Location = Event.belongsTo(models.Location, { foreignKey: 'locationId', as: "location" });
|
2019-07-09 17:39:52 +00:00
|
|
|
|
2019-07-26 14:50:53 +00:00
|
|
|
//OJO antes de force comentar
|
2019-07-17 14:47:27 +00:00
|
|
|
// OJO GENERA UN FOREIGN KEY Con eventos y habrá ID de otras entidades que no exitan en la tabla eventos, porque son post o speakers
|
2019-07-26 14:50:53 +00:00
|
|
|
Event.Comments = Event.hasMany(models.Comment, {
|
|
|
|
|
foreignKey: 'entityId',
|
|
|
|
|
scope: {
|
|
|
|
|
entityName: 'event'
|
|
|
|
|
},
|
2019-08-14 20:50:04 +00:00
|
|
|
as: "comments",
|
|
|
|
|
required: false,
|
2019-07-26 14:50:53 +00:00
|
|
|
});
|
2019-08-28 09:07:38 +00:00
|
|
|
|
2019-07-18 16:13:27 +00:00
|
|
|
Event.Multimedias = Event.hasMany(models.Multimedia, {
|
|
|
|
|
foreignKey: 'entityId',
|
2019-08-14 20:50:04 +00:00
|
|
|
as: { singular: 'multimedia', plural: 'multimedias' },
|
|
|
|
|
required: false,
|
2019-07-18 16:13:27 +00:00
|
|
|
});
|
|
|
|
|
|
2019-08-14 20:50:04 +00:00
|
|
|
Event.Reservations = Event.hasMany(models.EventReservation, {
|
|
|
|
|
foreignKey: 'eventId', as: "reservations",
|
|
|
|
|
required: false,
|
|
|
|
|
});
|
|
|
|
|
Event.Inscriptions = Event.hasMany(models.EventInscription, {
|
|
|
|
|
foreignKey: 'eventId', as: "inscriptions",
|
|
|
|
|
required: false,
|
|
|
|
|
});
|
|
|
|
|
Event.Questions = Event.hasMany(models.EventQuestion, {
|
|
|
|
|
foreignKey: 'eventId', as: "questions" ,
|
|
|
|
|
required: false,
|
|
|
|
|
});
|
2019-06-21 08:40:28 +00:00
|
|
|
};
|
2019-07-17 12:07:35 +00:00
|
|
|
|
|
|
|
|
Event.addScope('includeVenue', () => {
|
|
|
|
|
return {
|
|
|
|
|
include: [
|
|
|
|
|
{ model: sequelize.models.Venue, as: 'venue' }
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2019-07-18 16:13:27 +00:00
|
|
|
Event.addScope('includeMultimedias', () => {
|
|
|
|
|
return {
|
|
|
|
|
include: [{
|
|
|
|
|
model: sequelize.models.Multimedia,
|
2019-07-25 17:21:26 +00:00
|
|
|
as: { singular: 'multimedia', plural: 'multimedias' },
|
2019-07-18 16:13:27 +00:00
|
|
|
required: false,
|
|
|
|
|
include : [{
|
|
|
|
|
model: sequelize.models.MultimediaFile,
|
2019-07-25 17:21:26 +00:00
|
|
|
as: "multimediaFile"
|
2019-07-18 16:13:27 +00:00
|
|
|
}]
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2019-07-21 17:36:25 +00:00
|
|
|
Event.addScope('includeInscription', (userId) => {
|
|
|
|
|
return {
|
|
|
|
|
include: [
|
2019-09-11 13:23:13 +00:00
|
|
|
{ model: sequelize.models.EventInscription, as: 'inscriptions',
|
|
|
|
|
required: false,
|
|
|
|
|
where: { userId: userId } }
|
2019-07-21 17:36:25 +00:00
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2019-08-20 15:37:53 +00:00
|
|
|
Event.addScope('includeOverflowEvent', () => {
|
|
|
|
|
return {
|
|
|
|
|
include: [
|
2019-09-11 13:23:13 +00:00
|
|
|
{ model: sequelize.models.Event,
|
|
|
|
|
as: 'overflowEvent',
|
|
|
|
|
required: false,
|
2019-09-11 13:46:46 +00:00
|
|
|
where: { typeId: { [Sequelize.Op.ne]: null}},
|
2019-09-11 13:47:13 +00:00
|
|
|
// attributes: ['assistants', 'confirmed'],
|
2019-09-11 13:23:13 +00:00
|
|
|
}
|
2019-08-20 15:37:53 +00:00
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
});
|
2019-07-21 17:36:25 +00:00
|
|
|
|
2019-08-14 17:49:38 +00:00
|
|
|
Event.addScope('includeDetails', () => {
|
2019-07-17 12:07:35 +00:00
|
|
|
return {
|
|
|
|
|
include: [{
|
2019-07-17 14:47:27 +00:00
|
|
|
model: sequelize.models.EventDetail,
|
2019-07-17 15:13:55 +00:00
|
|
|
as: 'details',
|
2019-07-18 11:23:43 +00:00
|
|
|
required: false,
|
2019-07-17 15:34:54 +00:00
|
|
|
include: [{
|
|
|
|
|
model: sequelize.models.Speaker,
|
|
|
|
|
as: 'speaker',
|
2019-07-18 16:13:27 +00:00
|
|
|
required: false,
|
2019-07-17 15:34:54 +00:00
|
|
|
include : [{
|
|
|
|
|
model: sequelize.models.Multimedia,
|
2019-07-25 17:21:26 +00:00
|
|
|
as: { singular: 'multimedia', plural: 'multimedias' },
|
2019-07-18 16:13:27 +00:00
|
|
|
required: false,
|
2019-07-17 15:34:54 +00:00
|
|
|
include: [{
|
|
|
|
|
model: sequelize.models.MultimediaFile,
|
2019-07-25 17:21:26 +00:00
|
|
|
as: "multimediaFile"
|
2019-07-17 15:34:54 +00:00
|
|
|
}]
|
2019-07-26 14:50:53 +00:00
|
|
|
}]
|
2019-07-17 15:34:54 +00:00
|
|
|
}]
|
2019-07-17 12:07:35 +00:00
|
|
|
}]
|
|
|
|
|
}
|
2019-07-21 17:36:25 +00:00
|
|
|
});
|
2019-07-17 12:07:35 +00:00
|
|
|
|
|
|
|
|
Event.addScope('next', {
|
|
|
|
|
where: {
|
2019-07-17 15:13:55 +00:00
|
|
|
init_date: {
|
2019-09-27 10:22:09 +00:00
|
|
|
[Sequelize.Op.gte]: moment().add(1, 'days').startOf('day').format('YYYY-MM-DD HH:mm:ss')
|
2019-07-17 12:07:35 +00:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
2019-07-23 11:35:20 +00:00
|
|
|
Event.addScope('today', {
|
2019-07-17 12:07:35 +00:00
|
|
|
where: {
|
2019-07-17 15:13:55 +00:00
|
|
|
init_date: {
|
2019-09-27 10:22:09 +00:00
|
|
|
[Sequelize.Op.gte]: moment().startOf('day').format('YYYY-MM-DD HH:mm:ss'),
|
|
|
|
|
[Sequelize.Op.lt]: moment().add(1, 'days').startOf('day').format('YYYY-MM-DD HH:mm:ss'),
|
2019-07-17 12:07:35 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2019-07-23 11:35:20 +00:00
|
|
|
Event.addScope('current', {
|
|
|
|
|
where: {
|
|
|
|
|
init_date: {
|
2019-09-27 10:22:09 +00:00
|
|
|
[Sequelize.Op.lte]: moment().format('YYYY-MM-DD HH:mm:ss'),
|
2019-07-23 11:35:20 +00:00
|
|
|
},
|
|
|
|
|
end_date:{
|
2019-09-27 10:22:09 +00:00
|
|
|
[Sequelize.Op.gt]: moment().format('YYYY-MM-DD HH:mm:ss'),
|
2019-07-23 11:35:20 +00:00
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2019-09-27 10:22:09 +00:00
|
|
|
Event.addScope('tomorrow', {
|
|
|
|
|
where: {
|
|
|
|
|
init_date: {
|
|
|
|
|
[Sequelize.Op.gte]: moment().add(1, 'days').startOf('day').format('YYYY-MM-DD HH:mm:ss'),
|
|
|
|
|
[Sequelize.Op.lt]: moment().add(2, 'days').startOf('day').format('YYYY-MM-DD HH:mm:ss'),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
Event.addScope('yesterday', {
|
|
|
|
|
where: {
|
|
|
|
|
init_date: {
|
|
|
|
|
[Sequelize.Op.gte]: moment().add(-1, 'days').startOf('day').format('YYYY-MM-DD HH:mm:ss'),
|
|
|
|
|
[Sequelize.Op.lt]: moment().add('day').startOf('day').format('YYYY-MM-DD HH:mm:ss'),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2019-07-17 12:07:35 +00:00
|
|
|
Event.addScope('past', {
|
|
|
|
|
where: {
|
2019-07-17 15:13:55 +00:00
|
|
|
init_date: {
|
2019-09-27 10:22:09 +00:00
|
|
|
[Sequelize.Op.lt]: moment().startOf('day').format('YYYY-MM-DD HH:mm:ss')
|
2019-07-17 12:07:35 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
2019-06-21 08:40:28 +00:00
|
|
|
|
2019-07-23 11:35:20 +00:00
|
|
|
Event.addScope('withOpenInscriptions', {
|
|
|
|
|
where: {
|
|
|
|
|
init_available_date: {
|
2019-09-27 10:22:09 +00:00
|
|
|
[Sequelize.Op.lte]: moment().format('YYYY-MM-DD HH:mm:ss')
|
2019-07-23 11:35:20 +00:00
|
|
|
},
|
|
|
|
|
end_available_date: {
|
2019-09-27 10:22:09 +00:00
|
|
|
[Sequelize.Op.gt]: moment().format('YYYY-MM-DD HH:mm:ss')
|
2019-07-23 11:35:20 +00:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
2019-08-28 09:07:38 +00:00
|
|
|
Event.addScope('CitiesOfEvents', () => {
|
|
|
|
|
return {
|
|
|
|
|
include: [{
|
|
|
|
|
model: sequelize.models.Location, as: 'location', required: false,
|
|
|
|
|
include: [{
|
2019-08-28 10:43:41 +00:00
|
|
|
model: sequelize.models.Multimedia, as: { singular: 'multimedia', plural: 'multimedias' }, required: false, attributes: ['type'],
|
2019-08-28 09:07:38 +00:00
|
|
|
include: [{ model: sequelize.models.MultimediaFile, as: "multimediaFile", attributes: ['name', 'description', 'class', 'provider', 'url'] },]
|
|
|
|
|
}]
|
|
|
|
|
},
|
|
|
|
|
{ model: sequelize.models.EventType, as: 'type', attributes: ['name', 'title'] }],
|
|
|
|
|
group: ['location.country', 'location.city', 'Event.typeId',],
|
|
|
|
|
attributes: ['location.country', 'location.city', 'type.name', 'type.title', [sequelize.fn('COUNT', sequelize.col('Event.typeId')), 'ediciones'], [sequelize.fn('SUM', sequelize.col('Event.assistants')), 'assistants']]
|
|
|
|
|
}
|
2019-07-29 15:10:23 +00:00
|
|
|
});
|
|
|
|
|
|
2019-08-28 12:00:59 +00:00
|
|
|
Event.addScope('onlyOfLocation', (location) => {
|
2019-07-29 16:27:38 +00:00
|
|
|
return {
|
2019-08-28 12:00:59 +00:00
|
|
|
where: { locationId: { [Sequelize.Op.eq]: location } },
|
2019-07-29 16:27:38 +00:00
|
|
|
}
|
|
|
|
|
});
|
2019-07-29 15:10:23 +00:00
|
|
|
|
|
|
|
|
|
2019-06-21 08:40:28 +00:00
|
|
|
return Event;
|
|
|
|
|
};
|