public async Task <ActionResult> AddPlayer(AddPlayerRequest addPlayerRequest)
        {
            if (!ModelState.IsValid)
            {
                return(View(addPlayerRequest));
            }

            var yearTask = this.Db.years.Where(x => x.value == this.CurrentYear).FirstOrDefaultAsync();
            var teamTask = this.Db.teams.Where(x => x.id == addPlayerRequest.TeamId).FirstOrDefaultAsync();

            var playerTask = this.Db.players.Include(x => x.playeryeardatas).Where(x => x.name.ToLower() == addPlayerRequest.PlayerName.ToLower()).FirstOrDefaultAsync();

            await Task.WhenAll(yearTask, teamTask, playerTask);

            player player = null;

            // If the player doesn't exist, force create as rookie.
            bool rookieStatus = true;

            if (playerTask.Result != null)
            {
                player = playerTask.Result;

                // if the player already has a PYD for the current year, delete it.
                var currentYearPyd = player.playeryeardatas.FirstOrDefault(x => x.year.value == this.CurrentYear);

                player.currentHandicap = addPlayerRequest.Handicap;

                if (currentYearPyd != null)
                {
                    this.Db.playeryeardatas.Remove(currentYearPyd);
                }

                // if player DOES exist honor rookie option.
                rookieStatus = addPlayerRequest.IsRookie;
            }
            else
            {
                player = new player {
                    validPlayer = true, name = addPlayerRequest.PlayerName, currentHandicap = addPlayerRequest.Handicap
                };
            }

            var newPyd = new playeryeardata
            {
                isRookie          = rookieStatus,
                year              = yearTask.Result,
                team              = teamTask.Result,
                player            = player,
                week0Score        = addPlayerRequest.Handicap + 36,
                startingHandicap  = addPlayerRequest.Handicap,
                finishingHandicap = addPlayerRequest.Handicap
            };

            this.Db.playeryeardatas.Add(newPyd);

            await this.Db.SaveChangesAsync();

            return(RedirectToAction("AddPlayer", new { result = "success" }));
        }
        public static PlayerResponse From(playeryeardata p)
        {
            var pr = From(p.player);

            pr.YD = PlayerYearDataResponse.From(p);

            return(pr);
        }
 public static PlayerYearDataResponse From(playeryeardata pyd)
 {
     return(new PlayerYearDataResponse
     {
         IsR = pyd.isRookie,
         Id = pyd.id,
         SH = pyd.startingHandicap,
         FH = pyd.finishingHandicap,
         TId = pyd.teamId
     });
 }
Ejemplo n.º 4
0
        private IEnumerable <string> IntializeRosters()
        {
            LinkedList <string> playersNotFoundInDb = new LinkedList <string>();

            foreach (var roster in rosters)
            {
                foreach (var playerName in roster.GetPlayers())
                {
                    player currentPlayer = null;

                    if (!this.playersLookup.TryGetValue(playerName.ToLowerInvariant(), out currentPlayer))
                    {
                        playersNotFoundInDb.AddLast(playerName);
                        continue;
                    }

                    // find the latest year data, this will be the one we copy from.  If they don't have one, then
                    // push on to list of not founds.
                    var recentPyd = currentPlayer.playeryeardatas.OrderByDescending(x => x.year.value).FirstOrDefault();

                    if (recentPyd == null)
                    {
                        playersNotFoundInDb.AddLast(playerName);
                        continue;
                    }

                    var newPlayerYearData =
                        new playeryeardata
                    {
                        isRookie          = false,
                        year              = this.yearToInitialize,
                        startingHandicap  = recentPyd.finishingHandicap,
                        finishingHandicap = recentPyd.finishingHandicap,     // we may use finishing handicap during leaderboard calcs.
                        week0Score        = recentPyd.finishingHandicap + 36,
                        team              = roster.Team,
                        player            = currentPlayer
                    };

                    currentPlayer.currentHandicap = recentPyd.finishingHandicap; // just to make sure these values are consistent.

                    //roster.Team.playeryeardatas.Add(newPlayerYearData);
                    //currentPlayer.playeryeardatas.Add(newPlayerYearData);
                    this.playeryeardatasToCreate.AddLast(newPlayerYearData);
                }
            }

            return(playersNotFoundInDb);
        }