// GET: Admin/Sessions/Edit/5
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var session = await _context.Sessions.Where(x => x.Id == id).Include(x => x.PlayerForSessions).FirstAsync();

            if (session == null)
            {
                return(NotFound());
            }
            ViewData["GroupId"] = new SelectList(_context.Groups, "Id", "GroupName", session.GroupId);
            ViewData["PostId"]  = new SelectList(_context.Posts, "Id", "PostHeader", session.PostId);
            ViewData["TermId"]  = new SelectList(_context.Terms, "Id", "TermName", session.TermId);
            foreach (Player p in _context.Players)
            {
                if (session.PlayerForSessions.Any(x => x.PlayerId == p.Id))
                {
                    session.PlayerForSessions.Where(x => x.PlayerId == p.Id).First().isChecked = true;
                }
                else
                {
                    PlayerForSession ps = new PlayerForSession()
                    {
                        PlayerId = p.Id, Player = p
                    };
                    session.PlayerForSessions.Add(ps);
                }
            }
            session.PlayerForSessions.OrderBy(x => x.Player.LastName);
            return(View(session));
        }
        public async Task <IActionResult> Edit(int id, [Bind("Id,PlayerId,SessionId,Attended,WorkEthic,TechnicalImprovementDuringSession,TechnicalImprovementFromPreviousSession,Notes")] PlayerForSession playerForSession)
        {
            if (id != playerForSession.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(playerForSession);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!PlayerForSessionExists(playerForSession.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["PlayerId"]  = new SelectList(_context.Players, "Id", "FirstName", playerForSession.PlayerId);
            ViewData["SessionId"] = new SelectList(_context.Sessions, "Id", "Id", playerForSession.SessionId);
            return(View(playerForSession));
        }
        public async Task <IActionResult> Create([Bind("Id,PlayerId,SessionId,Attended,WorkEthic,TechnicalImprovementDuringSession,TechnicalImprovementFromPreviousSession,Notes")] PlayerForSession playerForSession)
        {
            if (ModelState.IsValid)
            {
                _context.Add(playerForSession);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["PlayerId"]  = new SelectList(_context.Players, "Id", "FirstName", playerForSession.PlayerId);
            ViewData["SessionId"] = new SelectList(_context.Sessions, "Id", "Id", playerForSession.SessionId);
            return(View(playerForSession));
        }
        public async Task <IActionResult> Create(Session session)
        {
            if (ModelState.IsValid)
            {
                foreach (PlayerForSession rec in session.PlayerForSessions)
                {
                    if (rec.isChecked == false)
                    {
                        session.PlayerForSessions.Remove(rec);
                    }
                    else
                    {
                        rec.Attended = true;
                    }
                    if (rec.Notes == null)
                    {
                        rec.Notes = "";
                    }
                }
                _context.Add(session);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            Session s = new Session()
            {
                IsActive = true, IsDraft = true, SessionDate = DateTime.Now, PlayerForSessions = new List <PlayerForSession>()
            };

            foreach (Player p in _context.Players.OrderBy(x => x.LastName))
            {
                PlayerForSession ps = new PlayerForSession()
                {
                    Player = p, PlayerId = p.Id
                };
                s.PlayerForSessions.Add(ps);
            }
            ViewData["GroupId"] = new SelectList(_context.Groups, "Id", "GroupName", session.GroupId);
            ViewData["PostId"]  = new SelectList(_context.Posts, "Id", "PostHeader", session.PostId);
            ViewData["TermId"]  = new SelectList(_context.Terms, "Id", "TermName", session.TermId);
            return(View(session));
        }
        // GET: Admin/Sessions/Create
        public IActionResult Create()
        {
            ViewData["GroupId"] = new SelectList(_context.Groups, "Id", "GroupName");
            ViewData["PostId"]  = new SelectList(_context.Posts, "Id", "PostHeader");
            ViewData["TermId"]  = new SelectList(_context.Terms, "Id", "TermName");
            Session s = new Session()
            {
                IsActive = true, IsDraft = true, SessionDate = DateTime.Now, PlayerForSessions = new List <PlayerForSession>()
            };

            foreach (Player p in _context.Players.OrderBy(x => x.LastName))
            {
                PlayerForSession ps = new PlayerForSession()
                {
                    Player = p, PlayerId = p.Id
                };
                s.PlayerForSessions.Add(ps);
            }
            return(View(s));
        }
        public async Task <IActionResult> Edit(int id, Session session)
        {
            if (id != session.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    foreach (PlayerForSession ps in session.PlayerForSessions)
                    {
                        ps.SessionId = session.Id;
                        if (_context.PlayerForSessions.Any(x => x.SessionId == ps.SessionId && x.PlayerId == ps.PlayerId) && ps.isChecked == false)
                        {
                            session.PlayerForSessions.Remove(ps);
                            _context.RemoveRange(_context.PlayerForSessions.Where(x => x.SessionId == ps.SessionId && x.PlayerId == ps.PlayerId));
                        }
                        if (_context.PlayerForSessions.Any(x => x.SessionId == ps.SessionId && x.PlayerId == ps.PlayerId) && ps.isChecked == true)
                        {
                            session.PlayerForSessions.Remove(ps);
                        }
                        if (ps.isChecked == false)
                        {
                            session.PlayerForSessions.Remove(ps);
                        }
                        if (ps.isChecked == true)
                        {
                            ps.Attended = true;
                            if (ps.Notes == null)
                            {
                                ps.Notes = "";
                            }
                        }
                    }
                    _context.Update(session);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!SessionExists(session.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["GroupId"] = new SelectList(_context.Groups, "Id", "GroupName", session.GroupId);
            ViewData["PostId"]  = new SelectList(_context.Posts, "Id", "PostHeader", session.PostId);
            ViewData["TermId"]  = new SelectList(_context.Terms, "Id", "TermName", session.TermId);
            foreach (Player p in _context.Players)
            {
                if (session.PlayerForSessions.Any(x => x.PlayerId == p.Id))
                {
                    session.PlayerForSessions.Where(x => x.PlayerId == p.Id).First().isChecked = true;
                }
                else
                {
                    PlayerForSession ps = new PlayerForSession()
                    {
                        PlayerId = p.Id, Player = p
                    };
                    session.PlayerForSessions.Add(ps);
                }
            }
            session.PlayerForSessions.OrderBy(x => x.Player.LastName);
            return(View(session));
        }