public ActionResult ConfirmTransfers(int id, PlayerGameViewModel[] playersModel) { ViewBag.Budget = budget; var game = this.Data.Games.GetById(id); if (budget < 0) { Response.StatusCode = (int)HttpStatusCode.BadRequest; Response.StatusDescription = "Not enough money"; return PartialView("_TransferPitch", playersModel); } int myPlayersCount = GetMyPlayersCount(playersModel); if (myPlayersCount < 15) { Response.StatusCode = (int)HttpStatusCode.BadRequest; Response.StatusDescription = string.Format("You have only {0} players", myPlayersCount); myTeam = PopulateMyPlayers(id); var myPlayers = MyPlayersInArray(myTeam); return PartialView("_TransferPitch", myPlayers); } GamePlayer gamePlayer; if (game.First_PlayerId == User.Identity.GetUserId()) { gamePlayer = GamePlayer.FirstPlayer; } else { gamePlayer = GamePlayer.SecondPlayer; } List<int> playersModelId = new List<int>(); List<Player> myPlayersToConfirm = new List<Player>(); foreach (var player in playersModel) { var playerToConfirm = this.Data.Players.GetById(player.Id); myPlayersToConfirm.Add(playerToConfirm); playersModelId.Add(player.Id); } var myPlayersGame = this.Data.PlayersGames.All() .Where(g => g.GameId == game.Id && g.GamePlayer == gamePlayer); var myPlayersInGame = myPlayersGame.Select(p => p.Player).ToList(); var gamePlayersGameweek = this.Data.PlayersGamesGameweeks.All() .Where(g => g.GameweekId == currentGameweekId && g.GameId == game.Id && g.GamePlayer == gamePlayer); var gamePlayersInGameweek = gamePlayersGameweek.Select(p => p.Player).ToList(); var myPlayerInGameToRemove = myPlayersGame .Where(p => !playersModelId.Contains(p.PlayerId)); this.Data.PlayersGames.DeleteRange(p => myPlayerInGameToRemove.Contains(p)); var gamePlayersInGameweekToRemove = gamePlayersGameweek .Where(p => !playersModelId.Contains(p.PlayerId)); this.Data.PlayersGamesGameweeks.DeleteRange(g => g.GameweekId == currentGameweekId && g.GamePlayer == gamePlayer && gamePlayersInGameweekToRemove.Contains(g)); foreach (var player in myPlayersToConfirm) { var playerFromModel = playersModel.FirstOrDefault(p => p.Id == player.Id); if (!myPlayersInGame.Contains(player)) { var playerExists = this.Data.PlayersGames.All().Where(g => g.GameId == game.Id) .FirstOrDefault(p => p.PlayerId == player.Id); if (playerExists != null) { Response.StatusCode = (int)HttpStatusCode.BadRequest; Response.StatusDescription = string.Format("Your opponent already bought {0}", player.Name); return PartialView("_TransferPitch", playersModel); } var playerInGame = new PlayersGame() { GameId = id, PlayerId = player.Id, GamePlayer = gamePlayer, IsStarting = playerFromModel.IsStarting }; this.Data.PlayersGames.Add(playerInGame); } if (!gamePlayersInGameweek.Contains(player)) { string aginstTeam = GetTeamAgainstInGameweek(player); var playerInGameweek = new PlayersGamesGameweek() { GameweekId = currentGameweekId.Value, PlayerId = player.Id, GameId = game.Id, GamePlayer = gamePlayer, TeamAgainst = aginstTeam, IsStarting = playerFromModel.IsStarting }; this.Data.PlayersGamesGameweeks.Add(playerInGameweek); } } if (gamePlayer == GamePlayer.FirstPlayer) { game.FirstUserBudget = budget; } else { game.SecondUserBudget = budget; } this.Data.SaveChanges(); var playersInGameCount = this.Data.PlayersGames.All() .Where(g => g.GameId == id).Count(); if (game.GameState != GameState.InProgress && playersInGameCount == 30) { game.GameState = GameState.InProgress; game.StartedGameweek = this.Data.Gameweeks.All() .FirstOrDefault(g => g.StartDate < DateTime.Now && DateTime.Now < g.Deadline).Id; this.Data.SaveChanges(); } ViewBag.Budget = budget; return PartialView("_TransferPitch", playersModel); }
private PlayerGameViewModel[] MyPlayersInArray( Dictionary<int, List<PlayerGameViewModel>> players) { PlayerGameViewModel[] playersArr = new PlayerGameViewModel[15]; foreach (var position in players) { foreach (var player in position.Value) { AddPlayerInArray(playersArr, player); } } return playersArr; }
private static int GetMyPlayersCount(PlayerGameViewModel[] playersModel) { int myPlayersCount = 0; foreach (var cell in playersModel) { if (cell.Name != null) { myPlayersCount++; } } return myPlayersCount; }
private void AddPlayerInArray(PlayerGameViewModel[] playersArr, PlayerGameViewModel player) { switch (player.Position) { case Position.GKP: for (int i = 0; i < 2; i++) { if (playersArr[i] == null) { playersArr[i] = player; break; } } break; case Position.DEF: for (int i = 2; i < 7; i++) { if (playersArr[i] == null) { playersArr[i] = player; break; } } break; case Position.MID: for (int i = 7; i < 12; i++) { if (playersArr[i] == null) { playersArr[i] = player; break; } } break; case Position.FWD: for (int i = 12; i < 15; i++) { if (playersArr[i] == null) { playersArr[i] = player; break; } } break; default: break; } }
public ActionResult AddPlayer(int id, int? selectPlayerId) { var game = this.Data.Games.GetById(id); var myPlayers = MyPlayersInArray(myTeam); if (selectPlayerId == null) { Response.StatusCode = (int)HttpStatusCode.BadRequest; Response.StatusDescription = "Select any player"; return View("_TransferPitch", myPlayers); } var playerExists = this.Data.Players.GetById(selectPlayerId.Value); if (!IsValidPosition(playerExists)) { Response.StatusCode = (int)HttpStatusCode.BadRequest; Response.StatusDescription = "You already have tha maximum number of " + GetFullPosition(playerExists.Position) + "s"; return View("_TransferPitch", myPlayers); } PlayerGameViewModel newPlayer = new PlayerGameViewModel() { Id = playerExists.Id, Name = playerExists.Name, Position = playerExists.Position, Price = playerExists.Price, Points = playerExists.Points, RoundScore = playerExists.RoundScore, Team = playerExists.Team.Initials, IsStarting = true }; if (myPlayers.Contains(newPlayer)) { Response.StatusCode = (int)HttpStatusCode.BadRequest; Response.StatusDescription = "You already bought " + playerExists.Name; return View("_TransferPitch", myPlayers); } budget -= playerExists.Price; int startingPlayers = myTeam.Values.Select(x => x.Where(y => y.IsStarting)) .Sum(p => p.Count()); if (startingPlayers == 11 || !IsStarting(playerExists)) { newPlayer.IsStarting = false; } ViewBag.Budget = budget; if (!myTeam.ContainsKey((int)newPlayer.Position)) { myTeam.Add((int)newPlayer.Position, new List<PlayerGameViewModel>()); } myTeam[(int)newPlayer.Position].Add(newPlayer); myPlayers = MyPlayersInArray(myTeam); return PartialView("_TransferPitch", myPlayers); }