/// <inheritdoc />
        public async Task <int> SubscribeOnEventAsync(Event targetEvent, string userId)
        {
            try
            {
                int undeterminedStatus = await _participantStatusManager.GetStatusIdAsync("Розглядається");

                int finishedEvent = await _eventStatusManager.GetStatusIdAsync("Завершений(-на)");

                if (targetEvent.EventStatusID == finishedEvent)
                {
                    return(StatusCodes.Status409Conflict);
                }
                await _repoWrapper.Participant.CreateAsync(new Participant()
                {
                    ParticipantStatusId = undeterminedStatus, EventId = targetEvent.ID, UserId = userId
                });

                await _repoWrapper.SaveAsync();

                return(StatusCodes.Status200OK);
            }
            catch
            {
                return(StatusCodes.Status400BadRequest);
            }
        }
Esempio n. 2
0
        public async Task <EventUserDTO> EventUserAsync(string userId, ClaimsPrincipal user)
        {
            var currentUserId = _userManager.GetUserId(user);

            if (string.IsNullOrEmpty(userId))
            {
                userId = currentUserId;
            }

            var targetUser = await _repoWrapper.User.GetFirstAsync(predicate : q => q.Id == userId);

            User userWithRoles = await _userManager.FindByIdAsync(userId);

            var userRoles = await _userManager.GetRolesAsync(userWithRoles);

            var model = new EventUserDTO
            {
                User      = _mapper.Map <User, UserDTO>(targetUser),
                UserRoles = userRoles
            };
            var eventAdmins = await _eventAdmininistrationManager.GetEventAdmininistrationByUserIdAsync(userId);

            var participants = await _participantManager.GetParticipantsByUserIdAsync(userId);

            model.CreatedEvents = new List <EventGeneralInfoDTO>();
            foreach (var eventAdmin in eventAdmins)
            {
                var eventToAdd = _mapper.Map <Event, EventGeneralInfoDTO>(eventAdmin.Event);
                if (eventToAdd.EventDateEnd > DateTime.Now)
                {
                    model.CreatedEvents.Add(eventToAdd);
                }
            }

            model.PlanedEvents  = new List <EventGeneralInfoDTO>();
            model.VisitedEvents = new List <EventGeneralInfoDTO>();
            foreach (var participant in participants)
            {
                var eventToAdd = _mapper.Map <Event, EventGeneralInfoDTO>(participant.Event);
                if (participant.Event.EventDateEnd >= DateTime.Now)
                {
                    model.PlanedEvents.Add(eventToAdd);
                }
                else if (participant.Event.EventDateEnd < DateTime.Now &&
                         participant.ParticipantStatusId == await _participantStatusManager.GetStatusIdAsync("Учасник"))
                {
                    model.VisitedEvents.Add(eventToAdd);
                }
            }

            return(model);
        }
        /// <inheritdoc />
        public async Task <EventDTO> GetEventInfoAsync(int id, User user)
        {
            int approvedStatus = await _participantStatusManager.GetStatusIdAsync("Учасник");

            int undeterminedStatus = await _participantStatusManager.GetStatusIdAsync("Розглядається");

            int rejectedStatus = await _participantStatusManager.GetStatusIdAsync("Відмовлено");

            int finishedEvent = await _eventWrapper.EventStatusManager.GetStatusIdAsync("Завершений(-на)");

            var userRoles = await _userManager.GetRolesAsync(user);

            bool isUserGlobalEventAdmin = userRoles?.Contains(Roles.EventAdministrator) ?? false;

            var targetEvent = await _repoWrapper.Event
                              .GetFirstAsync(
                e => e.ID == id,
                source => source
                .Include(e => e.Participants)
                .ThenInclude(p => p.User)
                .Include(e => e.Participants)
                .ThenInclude(p => p.ParticipantStatus)
                .Include(e => e.EventStatus)
                .Include(e => e.EventAdministrations)
                .ThenInclude(a => a.User)
                .Include(e => e.EventAdministrations)
                .ThenInclude(a => a.EventAdministrationType)
                .Include(e => e.EventType)
                .Include(e => e.EventCategory)
                );

            var dto = new EventDTO()
            {
                Event                         = _mapper.Map <Event, EventInfoDTO>(targetEvent),
                IsUserEventAdmin              = (targetEvent.EventAdministrations.Any(evAdm => evAdm.UserID == _userManager.GetUserIdAsync(user).Result)) || isUserGlobalEventAdmin,
                IsUserParticipant             = targetEvent.Participants.Any(p => p.UserId == _userManager.GetUserIdAsync(user).Result),
                IsUserApprovedParticipant     = targetEvent.Participants.Any(p => p.UserId == _userManager.GetUserIdAsync(user).Result&& p.ParticipantStatusId == approvedStatus),
                IsUserUndeterminedParticipant = targetEvent.Participants.Any(p => p.UserId == _userManager.GetUserIdAsync(user).Result&& p.ParticipantStatusId == undeterminedStatus),
                IsUserRejectedParticipant     = targetEvent.Participants.Any(p => p.UserId == _userManager.GetUserIdAsync(user).Result&& p.ParticipantStatusId == rejectedStatus),
                IsEventFinished               = targetEvent.EventStatusID == finishedEvent
            };

            if (!dto.IsUserEventAdmin && dto.ParticipantAssessment != 0)
            {
                dto.Event.EventParticipants = dto.Event.EventParticipants.Where(p => p.StatusId == approvedStatus);
            }

            if (dto.IsUserApprovedParticipant &&
                dto.IsEventFinished &&
                (DateTime.Now < targetEvent.EventDateEnd.Add(new TimeSpan(3, 0, 0, 0))))
            {
                dto.CanEstimate           = true;
                dto.ParticipantAssessment = targetEvent.Participants.First(p => p.UserId == _userManager.GetUserIdAsync(user).Result).Estimate;
            }

            return(dto);
        }
Esempio n. 4
0
        /// <inheritdoc />
        public async Task <List <GeneralEventDTO> > GetEventsAsync(int categoryId, int eventTypeId, ClaimsPrincipal user)
        {
            int approvedStatus = await _participantStatusManager.GetStatusIdAsync("Учасник");

            int undeterminedStatus = await _participantStatusManager.GetStatusIdAsync("Розглядається");

            int rejectedStatus = await _participantStatusManager.GetStatusIdAsync("Відмовлено");

            int approvedEvent = await _eventStatusManager.GetStatusIdAsync("Затверджений(-на)");

            int finishedEvent = await _eventStatusManager.GetStatusIdAsync("Завершений(-на)");

            int notApprovedEvent = await _eventStatusManager.GetStatusIdAsync("Не затверджені");

            var events = await _repoWrapper.Event
                         .GetAllAsync(
                e => e.EventCategoryID == categoryId && e.EventTypeID == eventTypeId,
                source => source
                .Include(e => e.EventAdministrations)
                .Include(e => e.Participants)
                );

            var dto = events
                      .Select(ev => new GeneralEventDTO
            {
                EventId                       = ev.ID,
                EventName                     = ev.EventName,
                IsUserEventAdmin              = (ev.EventAdministrations.Any(e => e.UserID == _userManager.GetUserId(user))) || user.IsInRole("Адміністратор подій"),
                IsUserParticipant             = ev.Participants.Any(p => p.UserId == _userManager.GetUserId(user)),
                IsUserApprovedParticipant     = ev.Participants.Any(p => p.UserId == _userManager.GetUserId(user) && p.ParticipantStatusId == approvedStatus),
                IsUserUndeterminedParticipant = ev.Participants.Any(p => p.UserId == _userManager.GetUserId(user) && p.ParticipantStatusId == undeterminedStatus),
                IsUserRejectedParticipant     = ev.Participants.Any(p => p.UserId == _userManager.GetUserId(user) && p.ParticipantStatusId == rejectedStatus),
                IsEventApproved               = ev.EventStatusID == approvedEvent,
                IsEventNotApproved            = ev.EventStatusID == notApprovedEvent,
                IsEventFinished               = ev.EventStatusID == finishedEvent
            })
                      .ToList();

            return(dto);
        }