"use strict"; const Sequelize = require("sequelize"); const getStateText = (inscription) => { if (inscription.type !== "online" && inscription !== "online group") { if (inscription.validated == true) { return "Inscripción confirmada"; } else if (inscription.overflowEventId) { return "Inscripción confirmada a lista de espera"; } else if (inscription.reservationId) { return "Pendiente confirmación para tu reserva"; } else return "N/A"; } else { // online return "Inscripción online confirmada"; } }; module.exports = function (sequelize, DataTypes) { const EventInscription = sequelize.define( "EventInscription", { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true, }, date: { type: DataTypes.DATE, }, code_ticket: { type: DataTypes.STRING(45), }, type: { type: DataTypes.STRING, allowNull: false, defaultValue: "onsite", //grupal, invitacion-regular, invitation-grupal, online, online group, onsite, onsite group }, source: { type: DataTypes.STRING, //app, web }, marketing_memberId: { type: DataTypes.STRING, }, validated: { type: DataTypes.BOOLEAN, }, stateText: { type: Sequelize.VIRTUAL(Sequelize.STRING, ["validated", "reservationId", "overflowEventId", "type"]), get: function () { return getStateText(this); }, }, reservationId: { //contendra el id de la reserva o de la lista de espera de la reserva type: DataTypes.UUID, foreignKey: true, }, overflowEventId: { //contendra el id del evento de lista de espera del evento type: DataTypes.UUID, foreignKey: true, }, }, { tableName: "events_inscriptions", freezeTableName: true, timestamps: true, defaultScope: { order: [["date", "DESC"]], include: [ { model: sequelize.models.User, as: "user", include: [{ model: sequelize.models.Entity, attributes: ["id", "name"], required: false }], }, ], }, } ); EventInscription.associate = function (models) { EventInscription.Event = EventInscription.belongsTo(models.Event, { foreignKey: "eventId", as: "event" }); EventInscription.Reservation = EventInscription.belongsTo(models.EventReservation, { foreignKey: "reservationId", as: "reservation", }); EventInscription.User = EventInscription.belongsTo(models.User, { foreignKey: "userId", as: "user" }); EventInscription.UserValidate = EventInscription.belongsTo(models.User, { foreignKey: "validateUserId" }); }; EventInscription.addScope("includeEventAndVenue", () => { return { include: [ { model: sequelize.models.Event, as: "event", attributes: [ "id", "name", "description", "campaign_text", "init_date", "end_date", "init_available_date", "end_available_date", "stateCode", "stateText", "marketing_list", "assistants", ], include: [ { model: sequelize.models.Venue, as: "venue", attributes: { exclude: ["createdAt", "updatedAt"], }, }, ], }, ], }; }); EventInscription.addScope("includeReservation", () => { return { include: [ { model: sequelize.models.EventReservation, as: "reservation", require: false, include: [ { model: sequelize.models.Entity, required: false, }, ], }, ], }; }); EventInscription.addScope("includeUser", () => { return { include: [ { model: sequelize.models.User, as: "user", }, ], }; }); return EventInscription; };