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); }
public ActionResult PickTeam(int id) { var currentGameweek = this.Data.Gameweeks.All() .FirstOrDefault(g => DateTime.Now <= g.Deadline); currentGameweekId = currentGameweek == null ? 38 : currentGameweek.Id; myTeam = PopulateMyPlayers(id); if (myTeam == null || myTeam.Values.Sum(p => p.Count) < 15) { return RedirectToAction("Transfers", new { id = id }); } var game = this.Data.Games.GetById(id); var playersInGame = this.Data.PlayersGames.All().Where(p => p.GameId == game.Id); var playersInGameId = playersInGame.Select(x => x.PlayerId).ToList(); var gamePlayersInGameweek = this.Data.PlayersGamesGameweeks.All() .Where(g => g.GameweekId == currentGameweekId && g.GameId == game.Id); if (gamePlayersInGameweek.Count() == 0) { foreach (var playerInGame in playersInGame) { string aginstTeam = GetTeamAgainstInGameweek(playerInGame.Player); PlayersGamesGameweek newPlayerInGameweek = new PlayersGamesGameweek() { GameweekId = currentGameweekId.Value, PlayerId = playerInGame.PlayerId, IsStarting = playerInGame.IsStarting, GameId = game.Id, GamePlayer = playerInGame.GamePlayer, TeamAgainst = aginstTeam }; this.Data.PlayersGamesGameweeks.Add(newPlayerInGameweek); } game.FirstUserGWPoints = 0; game.SecondUserGWPoints = 0; this.Data.SaveChanges(); } ViewData["Fixtures"] = PopulateCurrentMatches(); pickTeamPlayers = GetStartingPlayers(myTeam); return View(pickTeamPlayers); }