public void ComparesLeftAbsence()
        {
            // Arrange
            var left = new PlayerStatusViewModel("A", null);
            left.Absences.Add(new AbsenceIndex.Result());
            var right = new PlayerStatusViewModel("B", null);
            var comparer = new PlayerStatusViewModel.Comparer(CompareMode.SeasonAverage);

            // Act
            var result = comparer.Compare(left, right);

            // Assert
            Assert.Equal(1, result);
        }
        public void ComparesPlayerFormGreater()
        {
            // Arrange
            var left = new PlayerStatusViewModel("A", new PlayerFormViewModel("A")
            {
                SeasonAverage = 190,
                Last5Average = 197
            });
            var right = new PlayerStatusViewModel("B", new PlayerFormViewModel("B")
            {
                SeasonAverage = 190,
                Last5Average = 195
            });
            var comparer = new PlayerStatusViewModel.Comparer(CompareMode.PlayerForm);

            // Act
            var result = comparer.Compare(left, right);

            // Assert
            Assert.Equal(1, result);
        }
Esempio n. 3
0
        public ActionResult PlayerStatus(int turn, int season)
        {
            Roster[] rosters = DocumentSession.Query <Roster, RosterSearchTerms>()
                               .Where(x => x.Turn == turn && x.Season == season)
                               .ToArray();
            DateTime from = rosters.Select(x => x.Date.Date)
                            .Min();
            DateTime to = rosters.Select(x => x.Date.Date)
                          .Max();

            /*
             *    x   y
             * 1         1
             * 2    2
             *      3   3
             *     4 4
             */
            var absences = DocumentSession.Query <AbsenceIndex.Result, AbsenceIndex>()
                           .Where(x => x.From <= from && to <= x.To ||
                                  x.From <= from && from <= x.To ||
                                  x.From <= to && to <= x.To ||
                                  from <= x.From && x.To <= to)
                           .ProjectFromIndexFieldsInto <AbsenceIndex.Result>()
                           .ToArray()
                           .ToLookup(x => x.Player)
                           .ToDictionary(x => x.Key, x => x.ToList());

            Player[] players = DocumentSession.Query <Player, PlayerSearch>()
                               .ToArray();
            var rostersForPlayers = new Dictionary <string, List <RosterViewModel> >();

            foreach (Roster roster in rosters)
            {
                var rosterViewModel = new RosterViewModel(
                    roster,
                    new RosterViewModel.PlayerItem(string.Empty, string.Empty, false),
                    new List <RosterViewModel.PlayerItem>());
                foreach (string player in roster.Players)
                {
                    if (rostersForPlayers.TryGetValue(player, out List <RosterViewModel> rosterViewModels) == false)
                    {
                        rosterViewModels = new List <RosterViewModel>();
                        rostersForPlayers.Add(player, rosterViewModels);
                    }

                    rosterViewModels.Add(rosterViewModel);
                }
            }

            var resultsForPlayer = DocumentSession.Query <ResultForPlayerIndex.Result, ResultForPlayerIndex>()
                                   .Where(x => x.Season == season)
                                   .ToArray()
                                   .ToDictionary(x => x.PlayerId);

            var activities = new List <PlayerStatusViewModel>();

            foreach (Player player in players)
            {
                PlayerFormViewModel playerForm;
                if (resultsForPlayer.TryGetValue(player.Id, out ResultForPlayerIndex.Result resultForPlayer) &&
                    resultForPlayer.TotalSeries > 0)
                {
                    playerForm = new PlayerFormViewModel(player.Name)
                    {
                        TotalSeries   = resultForPlayer.TotalSeries,
                        SeasonAverage = (double)resultForPlayer.TotalPins / Math.Max(1, resultForPlayer.TotalSeries),
                        Last5Average  = (double)resultForPlayer.Last5TotalPins / Math.Max(1, resultForPlayer.Last5TotalSeries),
                        HasResult     = true
                    };
                }
                else if (player.PlayerStatus == Player.Status.Active)
                {
                    playerForm = new PlayerFormViewModel(player.Name);
                }
                else
                {
                    continue;
                }

                var activity = new PlayerStatusViewModel(player, playerForm, from, to);

                if (rostersForPlayers.ContainsKey(player.Id))
                {
                    List <RosterViewModel> rostersForPlayer = rostersForPlayers[player.Id];
                    activity.Teams.AddRange(rostersForPlayer);
                }

                if (absences.TryGetValue(player.Id, out List <AbsenceIndex.Result> playerAbsences))
                {
                    activity.AddAbsences(playerAbsences.OrderBy(x => x.From));
                }

                activities.Add(activity);
            }

            PlayerStatusViewModel[] vm = activities.OrderByDescending(x => x, new PlayerStatusViewModel.Comparer(CompareMode.PlayerForm))
                                         .ToArray();
            return(PartialView(vm));
        }
Esempio n. 4
0
        public ActionResult PlayerStatus(int turn, int season)
        {
            var rosters = DocumentSession.Query<Roster, RosterSearchTerms>()
                .Where(x => x.Turn == turn && x.Season == season)
                .ToArray();
            var from = rosters.Select(x => x.Date.Date)
                .Min();
            var to = rosters.Select(x => x.Date.Date)
                .Max();

            /*
             *    x   y
             * 1         1
             * 2    2
             *      3   3
             *     4 4
             */
            var absences = DocumentSession.Query<AbsenceIndex.Result, AbsenceIndex>()
                .Where(x => x.From <= from && to <= x.To
                    || x.From <= from && from <= x.To
                    || x.From <= to && to <= x.To
                    || from <= x.From && x.To <= to)
                .OrderBy(p => p.To)
                .ThenBy(p => p.PlayerName)
                .AsProjection<AbsenceIndex.Result>()
                .ToArray()
                .ToLookup(x => x.Player)
                .ToDictionary(x => x.Key, x => x.ToList());

            var players = DocumentSession.Query<Player, PlayerSearch>()
                .ToArray();
            var rostersForPlayers = new Dictionary<string, List<RosterViewModel>>();
            foreach (var roster in rosters)
            {
                var rosterViewModel = roster.MapTo<RosterViewModel>();
                foreach (var player in roster.Players)
                {
                    List<RosterViewModel> rosterViewModels;
                    if (rostersForPlayers.TryGetValue(player, out rosterViewModels) == false)
                    {
                        rosterViewModels = new List<RosterViewModel>();
                        rostersForPlayers.Add(player, rosterViewModels);
                    }

                    rosterViewModels.Add(rosterViewModel);
                }
            }

            var resultsForPlayer = DocumentSession.Query<ResultForPlayerIndex.Result, ResultForPlayerIndex>()
                                                  .Where(x => x.Season == season)
                                                  .ToArray()
                                                  .ToDictionary(x => x.PlayerId);

            var activities = new List<PlayerStatusViewModel>();
            foreach (var player in players)
            {
                PlayerFormViewModel playerForm;
                ResultForPlayerIndex.Result resultForPlayer;
                if (resultsForPlayer.TryGetValue(player.Id, out resultForPlayer)
                    && resultForPlayer.TotalSeries > 0)
                {
                    playerForm = new PlayerFormViewModel(player.Name)
                    {
                        TotalSeries = resultForPlayer.TotalSeries,
                        SeasonAverage = (double)resultForPlayer.TotalPins / Math.Max(1, resultForPlayer.TotalSeries),
                        Last5Average = (double)resultForPlayer.Last5TotalPins / Math.Max(1, resultForPlayer.Last5TotalSeries),
                        HasResult = true
                    };
                }
                else if (player.PlayerStatus == Player.Status.Active)
                {
                    playerForm = new PlayerFormViewModel(player.Name);
                }
                else
                {
                    continue;
                }

                var activity = new PlayerStatusViewModel(player.Name, playerForm);

                if (rostersForPlayers.ContainsKey(player.Id))
                {
                    var rostersForPlayer = rostersForPlayers[player.Id];
                    activity.Teams.AddRange(rostersForPlayer);
                }

                List<AbsenceIndex.Result> playerAbsences;
                if (absences.TryGetValue(player.Id, out playerAbsences))
                {
                    activity.Absences.AddRange(playerAbsences.OrderBy(x => x.From));
                }

                activities.Add(activity);
            }

            var activitiesWithNoAbsence = activities.Where(x => x.Absences.Count == 0);
            var activitiesWithAbsence = activities.Where(x => x.Absences.Count > 0);
            var vm = activitiesWithNoAbsence.OrderByDescending(x => x, new PlayerStatusViewModel.Comparer(CompareMode.PlayerForm))
                .Concat(activitiesWithAbsence.OrderBy(x => x.Absences.Min(y => y.To)).ThenBy(x => x.Name));
            return PartialView(vm);
        }
        public void ComparesSeasonAverageRight()
        {
            // Arrange
            var left = new PlayerStatusViewModel("A", null);
            var right = new PlayerStatusViewModel("B", new PlayerFormViewModel("B")
            {
                SeasonAverage = 195
            });
            var comparer = new PlayerStatusViewModel.Comparer(CompareMode.SeasonAverage);

            // Act
            var result = comparer.Compare(left, right);

            // Assert
            Assert.Equal(-1, result);
        }