Ejemplo n.º 1
0
        public IActionResult OnPostConfirm(List <WinLose> winLoseList)
        {
            Tournament = (from r in _db.Tournament
                          where r.Id == Tournament.Id
                          select r).FirstOrDefault();

            //Check if author
            if (!_signInManager.IsSignedIn(User) || Tournament.Originator != User.Identities.FirstOrDefault().Name)
            {
                return(RedirectToPage("./NotFound"));
            }

            //Start uploading
            foreach (var pair in winLoseList)
            {
                //Calculate ELO score for given result
                ELOTable playerWinner = (from r in _db.ELOTable
                                         where r.PlayerId == pair.winner &&
                                         r.TournamentId == Tournament.Id
                                         select r).FirstOrDefault();
                ELOTable playerLoser = (from r in _db.ELOTable
                                        where r.PlayerId == pair.loser &&
                                        r.TournamentId == Tournament.Id
                                        select r).FirstOrDefault();
                int scoreBeforeWinner = playerWinner.ELOScore;
                int scoreBeforeLoser  = playerLoser.ELOScore;
                ELOCalculation.CalculateELO(ref playerWinner, ref playerLoser, Tournament.ELOFactor);

                //Add match to the recent action history
                var tempHistory = new History()
                {
                    PlayerWinId  = pair.winner ?? 0,
                    PlayerLoseId = pair.loser ?? 0,
                    TournamentId = Tournament.Id,
                    WinIncrease  = playerWinner.ELOScore - scoreBeforeWinner,
                    LoseDecrease = playerLoser.ELOScore - scoreBeforeLoser,
                    WinFinalELO  = playerWinner.ELOScore,
                    LoseFinalELO = playerLoser.ELOScore,
                    Date         = DateTime.Now
                };
                _db.History.Add(tempHistory);
                _db.SaveChanges();
            }

            TempData["Message"] = "Pomyślnie dodano wyniki!";
            return(RedirectToPage("./ResultTournament/", new { tournamentId = Tournament.Id, orderBy = "ELODESC" }));
        }
        public IActionResult OnPostDefault()
        {
            AvailableTournaments = (from r in _db.Tournament
                                    where
                                    //r.Shops.Contains(User.Identity.Name) &&
                                    r.DateFrom <= DateTime.UtcNow.Date &&
                                    r.DateTo >= DateTime.UtcNow.Date
                                    select new SelectListItem {
                Text = r.Name, Value = r.Id.ToString()
            }).ToList();

            if (Tournament.Name == "" || Tournament.Name == null || ScannedPlayer.KFId == 0)
            {
                ErrorMsg = "Zeskanuj kod QR i wybierz turniej.";
                return(Page());
            }

            //Add player to DB if not already there
            bool isPlayerPresent = (from r in _db.Player
                                    where r.KFId == ScannedPlayer.KFId
                                    select r).Count() > 0;

            if (!isPlayerPresent)
            {
                _db.Player.Add(ScannedPlayer);
            }
            else
            {
                var tempPlayer = (from r in _db.Player
                                  where r.KFId == ScannedPlayer.KFId
                                  select r).FirstOrDefault();

                if (tempPlayer.Name != ScannedPlayer.Name)
                {
                    tempPlayer.Name = ScannedPlayer.Name;
                    _db.SaveChanges();
                }
            }

            //Add player to tournament results if not already there and give him 1000 pts
            isPlayerPresent = (from r in _db.ELOTable
                               where r.PlayerId == ScannedPlayer.KFId &&
                               r.TournamentId == Convert.ToInt32(Tournament.Name)
                               select r).Count() > 0;
            if (!isPlayerPresent)
            {
                var temp = new ELOTable()
                {
                    ELOScore     = 1000,
                    PlayerId     = ScannedPlayer.KFId,
                    TournamentId = Convert.ToInt32(Tournament.Name)
                };
                _db.ELOTable.Add(temp);
            }
            else
            {
                ErrorMsg = "Ten gracz jest już zarejestrowany na ten turniej.";
                return(Page());
            }

            _db.SaveChanges();

            TempData["Message"] = "Pomyślnie zarejestrowano!";
            return(RedirectToPage("./ResultTournament/", new { tournamentId = Convert.ToInt32(Tournament.Name), orderBy = "ELODESC" }));
        }
Ejemplo n.º 3
0
        public IActionResult OnPost()
        {
            Tournament = (from r in _db.Tournament
                          where r.Id == Tournament.Id
                          select r).FirstOrDefault();

            //Check if author
            if (!_signInManager.IsSignedIn(User) || Tournament.Originator != User.Identities.FirstOrDefault().Name)
            {
                return(RedirectToPage("./NotFound"));
            }

            AvailablePlayers = (from r2 in _db.ELOTable
                                join r1 in _db.Player on r2.TournamentId equals Tournament.Id
                                where r2.PlayerId == r1.KFId
                                orderby r1.Name ascending
                                select new SelectListItem {
                Text = r1.Name, Value = r1.KFId.ToString()
            }).ToList();

            //Verify input
            if (WinnerIDs.Count == 0 || LoserIDs.Count == 0)
            {
                ErrorMsg = "Brak danych.";
                return(Page());
            }

            if (WinnerIDs.Count != LoserIDs.Count)
            {
                ErrorMsg = "Pary zwycięzca-pokonany muszą być kompletne.";
                return(Page());
            }

            for (int i = 0; i < WinnerIDs.Count; i++)
            {
                if (WinnerIDs[i] == LoserIDs[i])
                {
                    ErrorMsg = "Podani gracze w jednej parze muszą być różni.";
                    return(Page());
                }
            }

            //Start uploading
            for (int i = 0; i < WinnerIDs.Count; i++)
            {
                //Calculate ELO score for given result
                ELOTable playerWinner = (from r in _db.ELOTable
                                         where r.PlayerId == WinnerIDs[i] &&
                                         r.TournamentId == Tournament.Id
                                         select r).FirstOrDefault();
                ELOTable playerLoser = (from r in _db.ELOTable
                                        where r.PlayerId == LoserIDs[i] &&
                                        r.TournamentId == Tournament.Id
                                        select r).FirstOrDefault();
                int scoreBeforeWinner = playerWinner.ELOScore;
                int scoreBeforeLoser  = playerLoser.ELOScore;
                ELOCalculation.CalculateELO(ref playerWinner, ref playerLoser, Tournament.ELOFactor);

                //Add match to the recent action history
                var tempHistory = new History()
                {
                    PlayerWinId  = WinnerIDs[i],
                    PlayerLoseId = LoserIDs[i],
                    TournamentId = Tournament.Id,
                    WinIncrease  = playerWinner.ELOScore - scoreBeforeWinner,
                    LoseDecrease = playerLoser.ELOScore - scoreBeforeLoser,
                    WinFinalELO  = playerWinner.ELOScore,
                    LoseFinalELO = playerLoser.ELOScore,
                    Date         = DateTime.Now
                };
                _db.History.Add(tempHistory);
                _db.SaveChanges();
            }

            TempData["Message"] = "Pomyślnie dodano wyniki!";
            return(RedirectToPage("./ResultTournament/", new { tournamentId = Tournament.Id, orderBy = "ELODESC" }));
        }
        public IActionResult OnPostDefault()
        {
            Tournament = (from r in _db.Tournament
                          where r.Id == Tournament.Id
                          select r).FirstOrDefault();

            //Check if author
            if (!_signInManager.IsSignedIn(User) || Tournament.Originator != User.Identities.FirstOrDefault().Name)
            {
                return(RedirectToPage("./NotFound"));
            }

            AvailablePlayers = (from r2 in _db.ELOTable
                                join r1 in _db.Player on r2.TournamentId equals Tournament.Id
                                where r2.PlayerId == r1.KFId
                                orderby r1.Name ascending
                                select new SelectListItem {
                Text = r1.Name, Value = r1.KFId.ToString()
            }).ToList();

            if (PlayerWin.Name == PlayerLose.Name && PlayerWin.KFId == PlayerLose.KFId)
            {
                ErrorMsg = "Podani gracze muszą być różni.";
                return(Page());
            }
            else if (PlayerWin.Name == null || PlayerLose.Name == null)
            {
                ErrorMsg = "Należy podać obu graczy.";
                return(Page());
            }

            //Add player to DB if not already there
            bool isPlayerPresent = (from r in _db.Player
                                    where r.KFId == PlayerWin.KFId
                                    select r).Count() > 0;

            if (!isPlayerPresent)
            {
                _db.Player.Add(PlayerWin);
            }//TODO UPDATE PLAYER'S NAME ON READ

            isPlayerPresent = (from r in _db.Player
                               where r.KFId == PlayerLose.KFId
                               select r).Count() > 0;
            if (!isPlayerPresent)
            {
                _db.Player.Add(PlayerLose);
            }

            //Add player to tournament results if not already there and give him 1000 pts
            isPlayerPresent = (from r in _db.ELOTable
                               where r.PlayerId == PlayerWin.KFId &&
                               r.TournamentId == Tournament.Id
                               select r).Count() > 0;
            if (!isPlayerPresent)
            {
                var temp = new ELOTable()
                {
                    ELOScore     = 1000,
                    PlayerId     = PlayerWin.KFId,
                    TournamentId = Tournament.Id
                };
                _db.ELOTable.Add(temp);
            }

            isPlayerPresent = (from r in _db.ELOTable
                               where r.PlayerId == PlayerLose.KFId &&
                               r.TournamentId == Tournament.Id
                               select r).Count() > 0;
            if (!isPlayerPresent)
            {
                var temp = new ELOTable()
                {
                    ELOScore     = 1000,
                    PlayerId     = PlayerLose.KFId,
                    TournamentId = Tournament.Id
                };
                _db.ELOTable.Add(temp);
            }
            _db.SaveChanges();

            //Calculate ELO score for given result
            ELOTable playerWinner = (from r in _db.ELOTable
                                     where r.PlayerId == PlayerWin.KFId &&
                                     r.TournamentId == Tournament.Id
                                     select r).FirstOrDefault();
            ELOTable playerLoser = (from r in _db.ELOTable
                                    where r.PlayerId == PlayerLose.KFId &&
                                    r.TournamentId == Tournament.Id
                                    select r).FirstOrDefault();
            int scoreBeforeWinner = playerWinner.ELOScore;
            int scoreBeforeLoser  = playerLoser.ELOScore;

            ELOCalculation.CalculateELO(ref playerWinner, ref playerLoser, Tournament.ELOFactor);

            //Add match to the recent action history
            var tempHistory = new History()
            {
                PlayerWinId  = PlayerWin.KFId,
                PlayerLoseId = PlayerLose.KFId,
                TournamentId = Tournament.Id,
                WinIncrease  = playerWinner.ELOScore - scoreBeforeWinner,
                LoseDecrease = playerLoser.ELOScore - scoreBeforeLoser,
                WinFinalELO  = playerWinner.ELOScore,
                LoseFinalELO = playerLoser.ELOScore,
                Date         = DateTime.Now
            };

            _db.History.Add(tempHistory);
            _db.SaveChanges();

            TempData["Message"] = "Pomyślnie dodano wynik!";
            return(RedirectToPage("./ResultTournament/", new { tournamentId = Tournament.Id, orderBy = "ELODESC" }));
        }