public ActionResult Edit(int id)
        {
            var facility = _context.SportsFacilities.Find(id);

            if (facility == null)
            {
                return(HttpNotFound());
            }

            var sports            = _context.Sports.ToList();
            var selectedSports    = _context.SportSportsFacilities.Where(x => x.SportsFacility_Id == id).ToList();
            var checkBoxListItems = new List <CheckBoxListItem>();

            foreach (var sport in sports)
            {
                checkBoxListItems.Add(new CheckBoxListItem()
                {
                    ID        = sport.Id,
                    Display   = sport.Name,
                    IsChecked = selectedSports.Where(x => x.Sport_Id == sport.Id).Any()
                });
            }

            var viewModel = new FacilityFormViewModel()
            {
                Facility = facility,
                Sports   = checkBoxListItems
            };

            return(View("FacilityForm", viewModel));
        }
        public ActionResult Create()
        {
            FacilityFormViewModel model = new FacilityFormViewModel()
            {
                Facility = new SportsFacility()
            };
            var sports            = _context.Sports.ToList();
            var checkBoxListItems = new List <CheckBoxListItem>();

            foreach (var sport in sports)
            {
                checkBoxListItems.Add(new CheckBoxListItem()
                {
                    ID        = sport.Id,
                    Display   = sport.Name,
                    IsChecked = false
                });
            }
            model.Sports = checkBoxListItems;

            return(View("FacilityForm", model));
        }
        public ActionResult Save(FacilityFormViewModel model)
        {
            if (!ModelState.IsValid)
            {
                var sports            = _context.Sports.ToList();
                var checkBoxListItems = new List <CheckBoxListItem>();
                foreach (var sport in sports)
                {
                    checkBoxListItems.Add(new CheckBoxListItem()
                    {
                        ID        = sport.Id,
                        Display   = sport.Name,
                        IsChecked = false
                    });
                }
                var viewModel = new FacilityFormViewModel
                {
                    Facility = model.Facility,
                    Sports   = checkBoxListItems
                };
                return(View("FacilityForm", viewModel));
            }

            if (model.Facility.Id == 0)
            {
                var selectedSports = model.Sports.Where(x => x.IsChecked).Select(x => x.ID).ToList();
                var facility       = new SportsFacility()
                {
                    Name    = model.Facility.Name,
                    Town    = model.Facility.Town,
                    Address = model.Facility.Address
                };

                _context.SportsFacilities.Add(facility);

                _context.SaveChanges();

                foreach (var sportID in selectedSports)
                {
                    var name = new SportSportsFacility
                    {
                        Sport_Id          = sportID,
                        SportsFacility_Id = facility.Id
                    };
                    _context.SportSportsFacilities.Add(name);
                }
            }
            else
            {
                var facilityInDb = _context.SportsFacilities.Single(sf => sf.Id == model.Facility.Id);
                facilityInDb.Name         = model.Facility.Name;
                facilityInDb.Town         = model.Facility.Town;
                facilityInDb.Address      = model.Facility.Address;
                facilityInDb.AverageGrade = model.Facility.AverageGrade;

                var selectedSports = model.Sports.Where(x => x.IsChecked).Select(x => x.ID).ToList();
                foreach (var sportID in selectedSports)
                {
                    var sport = _context.SportSportsFacilities.SingleOrDefault(ssf => ssf.Sport_Id == sportID && ssf.SportsFacility_Id == model.Facility.Id);
                    if (sport == null)
                    {
                        _context.SportSportsFacilities.Add(new SportSportsFacility()
                        {
                            SportsFacility_Id = model.Facility.Id,
                            Sport_Id          = sportID
                        });
                    }
                }

                var unselectedSports = model.Sports.Where(x => !x.IsChecked).Select(x => x.ID).ToList();
                foreach (var sportID in unselectedSports)
                {
                    var sport = _context.SportSportsFacilities.SingleOrDefault(ssf => ssf.Sport_Id == sportID && ssf.SportsFacility_Id == model.Facility.Id);
                    if (sport != null)
                    {
                        _context.SportSportsFacilities.Remove(sport);
                    }
                }
            }
            _context.SaveChanges();

            return(RedirectToAction("Index"));
        }