// GET: Turnering/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            // REPOSITORY !!!
            Turnering turnering = db.Turneringer.Include(h => h.HoldListe).Include(k => k.Kampe).Where(d => d.TurneringId == id).First();

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

            // if (turnering.HoldListe.Count >= turnering.MaxAntalHold || turnering.AabenForTilmelding == false)
            if (turnering.AabenForTilmelding == false)
            {
                return(RedirectToAction("Kampprogram", new { turneringsId = turnering.TurneringId }));
            }

            TurneringDetailsViewModel viewModel = OpbygTurneringDetailsViewModel(turnering);

            return(View(viewModel));
        }
        private static List <Kamp> BeregnKampeForTurnering(Turnering turnering, int antalTurneringsRunder, List <Hold> hjemmeHold, List <Hold> udeHold, int antalKampePrRunde)
        {
            List <Kamp> TurneringsRundeKampe = new List <Kamp>();

            for (int j = 1; j <= antalTurneringsRunder; j++)
            {
                for (int i = 0; i < antalKampePrRunde; i++)
                {
                    Kamp kamp = new Kamp
                    {
                        TurneringId     = turnering.TurneringId,
                        TurneringsRunde = j,
                        HoldListe       = new List <Hold>
                        {
                            hjemmeHold[i],
                            udeHold[i]
                        },
                        ScoreHjemmeHold = "",
                        ScoreUdeHold    = ""
                    };
                    TurneringsRundeKampe.Add(kamp);
                }

                OmrokerHjemmeOgUdeholdTilNaesteTurneringsRunde(hjemmeHold, udeHold);
            }

            return(TurneringsRundeKampe);
        }
        public ActionResult DeleteConfirmed(int id)
        {
            Turnering turnering = db.Turneringer.Find(id);

            db.Turneringer.Remove(turnering);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
 public ActionResult Edit([Bind(Include = "TurneringId,Navn,MaxAntalHold,AabenForTilmelding")] Turnering turnering)
 {
     if (ModelState.IsValid)
     {
         db.Entry(turnering).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(turnering));
 }
        public ActionResult AfmeldHold(int turneringsId, int holdId)
        {
            // REPOSITORY !!!
            Turnering turnering    = db.Turneringer.Include(h => h.HoldListe).Where(t => t.TurneringId == turneringsId).First();
            Hold      holdAtFjerne = db.HoldListe.Find(holdId);

            turnering.HoldListe.Remove(holdAtFjerne);
            db.SaveChanges();

            TurneringDetailsViewModel viewModel = OpbygTurneringDetailsViewModel(turnering);

            return(View("Details", viewModel));
        }
        public ActionResult Create([Bind(Include = "TurneringId,Navn,MaxAntalHold")] Turnering turnering)
        {
            if (ModelState.IsValid)
            {
                turnering.AabenForTilmelding = true;
                // REPOSITORY !!!
                db.Turneringer.Add(turnering);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(turnering));
        }
        private TurneringDetailsViewModel OpbygTurneringDetailsViewModel(Turnering turnering)
        {
            List <Hold> tilmeldteHold     = turnering.HoldListe.ToList();
            List <Hold> alleHold          = db.HoldListe.ToList();
            List <Hold> ikkeTilmeldteHold = alleHold.Except(tilmeldteHold).ToList();

            var viewModel = new TurneringDetailsViewModel()
            {
                Turnering         = turnering,
                IkkeTilmeldteHold = ikkeTilmeldteHold
            };

            return(viewModel);
        }
        // GET: Turnering/Delete/5
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Turnering turnering = db.Turneringer.Find(id);

            if (turnering == null)
            {
                return(HttpNotFound());
            }
            return(View(turnering));
        }
        private KampprogramViewModel OpbygKampprogramViewModel(Turnering turnering)
        {
            List <Hold> holdTilmeldtTurnering = turnering.HoldListe.ToList();
            List <Kamp> kampe = turnering.Kampe.ToList();

            KampprogramViewModel viewModel = new KampprogramViewModel()
            {
                TurneringId           = turnering.TurneringId,
                TurneringsNavn        = turnering.Navn,
                HoldTilmeldtTurnering = holdTilmeldtTurnering,
                Kampe = kampe
            };

            return(viewModel);
        }
        // GET: Turnering/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            // REPOSITORY !!!
            Turnering turnering = db.Turneringer.Find(id);

            if (turnering == null)
            {
                return(HttpNotFound());
            }
            return(View(turnering));
        }
        private void UdregnKampprogram(Turnering turnering)
        {
            Hold[] holdListe             = turnering.HoldListe.ToArray();
            int    antalHold             = holdListe.Count();
            int    antalTurneringsRunder = BeregnAntalTurneringsRunder(antalHold);

            List <Hold> hjemmeHold, udeHold;

            FordelHjemmeOgUdehold(holdListe, antalHold, antalTurneringsRunder, out hjemmeHold, out udeHold);

            var         antalKampePrRunde    = antalHold / 2;
            List <Kamp> TurneringsRundeKampe = BeregnKampeForTurnering(turnering, antalTurneringsRunder, hjemmeHold, udeHold, antalKampePrRunde);

            turnering.Kampe = TurneringsRundeKampe;
        }
        public ActionResult StartTurnering(int?turneringsId)
        {
            // REPOSITORY !!!
            Turnering turnering = db.Turneringer.Include(h => h.HoldListe).Where(t => t.TurneringId == turneringsId).First();

            if (turnering.HoldListe.Count < 2)
            {
                return(RedirectToAction("Details", new { id = turnering.TurneringId }));
            }

            LukForTilmeldinger(turnering);

            UdregnKampprogram(turnering);

            GemKampprogram(turnering);

            return(RedirectToAction("Kampprogram", new { turneringsId = turnering.TurneringId }));
        }
        public ActionResult TilmeldHold(int turneringsId, int holdId) // ActionResult
        {
            // REPOSITORY !!!
            Turnering turnering = db.Turneringer.Include(h => h.HoldListe).Where(t => t.TurneringId == turneringsId).First();

            if (turnering.HoldListe.Count >= turnering.MaxAntalHold)
            {
                return(RedirectToAction("Index"));
            }

            // REPOSITORY !!!
            Hold holdAtTilmelde = db.HoldListe.Find(holdId);

            turnering.HoldListe.Add(holdAtTilmelde);
            db.SaveChanges();

            TurneringDetailsViewModel viewModel = OpbygTurneringDetailsViewModel(turnering);

            return(View("Details", viewModel));
        }
        public ActionResult Kampprogram(int?turneringsId = 0)
        {
            var turnering = new Turnering();

            if (turneringsId == 0)
            {
                // Hvis der ikke er valgt nogen turnering, så vælg den første
                turnering = db.Turneringer.Include(h => h.HoldListe).First();
                // for at finde kampe nedenfor sættes turneringsId til
                // den første turnering, der blev fundet ovenfor
                turneringsId = turnering.TurneringId;
            }
            else
            {
                turnering = db.Turneringer.Include(h => h.HoldListe).Where(t => t.TurneringId == turneringsId).First();
            }

            ICollection <Kamp> kampe = db.Kampe.Include(h => h.HoldListe).Where(t => t.TurneringId == turneringsId).ToList();

            turnering.Kampe = kampe;
            KampprogramViewModel viewModel = OpbygKampprogramViewModel(turnering);

            return(View(viewModel));
        }
 private void GemKampprogram(Turnering turnering)
 {
     db.SaveChanges();
 }
 public void LukForTilmeldinger(Turnering turnering)
 {
     turnering.AabenForTilmelding = false;
     // REPOSITORY !!!
     db.SaveChanges();
 }