public async Task <IActionResult> Participate(int?id, EventParticipateViewModel viewModel)
        {
            if (id == null)
            {
                return(StatusCode((int)HttpStatusCode.BadRequest));
            }

            if (viewModel.CurrentEvent.Start < DateTime.Now)
            {
                return(StatusCode((int)HttpStatusCode.BadRequest));
            }

            var user = await _userManager.GetUserAsync(this.User);

            _participationRepository.Update((int)id, user.UserId, viewModel);

            // Send participation update to opted-in admins
            var admins = await _userManager.GetUsersInRoleAsync(RoleNames.ROLE_ADMIN);

            foreach (var admin in admins)
            {
                var config = _notificationConfigurationRepository.GetConfigurationForUser(admin.UserId);
                if (config != null && config.UserParticipationUpdated)
                {
                    await _eMailSender.SendUserParticipationEmail(admin.Email);
                }
            }

            return(RedirectToAction(MethodNames.INDEX));
        }
        public void Update(int eventId, int userId, EventParticipateViewModel viewModel)
        {
            var date             = DateTime.Now;
            EventParticipation p = _appDbContext.EventParticipations.Where(x => x.EventId == eventId && x.UserId == userId).FirstOrDefault();

            if (p == null)
            {
                p         = new EventParticipation();
                p.Created = date;
                p.UserId  = userId;
                p.EventId = eventId;
                _appDbContext.EventParticipations.Add(p);
            }

            p.Modified = date;

            p.AnswerYes = viewModel.ParticipationType == ParticipationTypesEnum.yes;
            p.AnswerNo  = viewModel.ParticipationType == ParticipationTypesEnum.no;
            p.Note      = viewModel.Note;
            p.IsPlayer  = viewModel.IsPlayer;
            p.IsCoach   = viewModel.IsCoach;
            p.IsScorer  = viewModel.IsScorer;
            p.IsUmpire  = viewModel.IsUmpire;
            p.Seats     = viewModel.HasSeats;

            CommitChanges();
        }
        public async Task <IActionResult> Participate(int?id)
        {
            if (id == null)
            {
                return(StatusCode((int)HttpStatusCode.BadRequest));
            }

            EventParticipateViewModel viewModel = new EventParticipateViewModel();

            viewModel.CurrentEvent = _eventRepository.Find(x => x.Id == id).FirstOrDefault();

            if (viewModel.CurrentEvent == null)
            {
                return(StatusCode((int)HttpStatusCode.NotFound));
            }

            var user = await _userManager.GetUserAsync(this.User);

            var participation = _participationRepository.Find(x => x.EventId == id && x.UserId == user.UserId).FirstOrDefault();

            viewModel.DisplayIsPlayer = viewModel.CurrentEvent.PlayersRequired > 0;
            viewModel.DisplayIsCoach  = viewModel.CurrentEvent.CoachesRequired > 0;
            viewModel.DisplayIsUmpire = viewModel.CurrentEvent.UmpiresRequired > 0;
            viewModel.DisplayIsScorer = viewModel.CurrentEvent.ScorersRequired > 0;
            viewModel.DisplayHasSeats = viewModel.CurrentEvent.SeatsRequired > 0;

            if (participation != null)
            {
                if (participation.AnswerYes)
                {
                    viewModel.ParticipationType = ParticipationTypesEnum.yes;
                }
                else if (participation.AnswerNo)
                {
                    viewModel.ParticipationType = ParticipationTypesEnum.no;
                }
                else
                {
                    viewModel.ParticipationType = ParticipationTypesEnum.maybe;
                }

                viewModel.Note     = participation.Note;
                viewModel.IsPlayer = participation.IsPlayer;
                viewModel.IsCoach  = participation.IsCoach;
                viewModel.IsUmpire = participation.IsUmpire;
                viewModel.IsScorer = participation.IsScorer;
                viewModel.HasSeats = participation.Seats;
            }
            else
            {
                viewModel.ParticipationType = ParticipationTypesEnum.maybe;
            }

            if (viewModel.CurrentEvent != null)
            {
                return(View(viewModel));
            }
            else
            {
                return(RedirectToAction(MethodNames.INDEX));
            }
        }