コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }