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" })); }
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" })); }