public CompetitionLayoutIndexViewModel(CompetitionInfo info, ScoringMap scoringMap)
        {
            Info = info;
            ScoringMap = scoringMap;

            Performances =
                info
                    .Registrations
                    .SelectMany(x => x.GetPerformances(info.Competition))
                    .ToList();

            var go =
                Performances.Where(x => x.RegistrationId == "company/1/competitions/5/registrations/gyms/41/team/12").ToList();

            JudgePanel = new FiveJudgePanel(new List<JudgeScore>()); //TODO: If we need a different panel....
            SecurityContext = new SecurityContext();
        }
        void Populate(CompetitionInfo info)
        {
            var performances =
                info.Registrations
                    .Select(x => x.GetPerformances(info.Competition))
                    .SelectMany(x => x)
                    .ToList();

            var panel = new FiveJudgePanel(new List<JudgeScore>());
            performances.ForEach(performance =>
            {
                var scores = panel.Judges.Select(judge => new JudgeScore(performance.Id, judge.Id)).ToList();
                var calculator = new FiveJudgePanelPerformanceScoreCalculator(scores);

                var score = new PerformanceScore {PerformanceId = performance.Id};
                var command = new MarkTeamScoringCompleteCommand
                {
                    PerformanceId = performance.Id,
                    RegistrationId = performance.RegistrationId,
                    DivisionId = performance.DivisionId,
                    CommandByUser = "******",
                    CommandWhen = DateTime.UtcNow
                };

                score.Update(calculator);
                score.Update(command);
                score.IsScoringComplete = false;

                scores.ForEach(RavenSession.Store);
                RavenSession.Store(score);
            });
        }
        public IEnumerable<TeamScore> From(IEnumerable<PerformanceScore> scores, CompetitionInfo info)
        {
            var result =
                scores
                    .Select(s =>
                    {
                        var registration =
                            info.Registrations.First(x => x.Id == s.RegistrationId);

                        var gym =
                            info.Gyms.First(x => x.Id == registration.GymId);

                        var division =
                            info.Divisions.First(x => x.Id == s.DivisionId);

                        var level =
                            info.Levels.First(x => x.Id == division.LevelId);

                        var awardsLevel =
                            info.CompetitionDivisions.FindAwardsLevel(division.LevelId);

                        return new TeamScore
                        {
                            CompetitionId = info.Competition.Id,
                            RegistrationId = registration.Id,
                            LevelId = level.Id,
                            AwardsLevelId = awardsLevel.Id,
                            DivisionId = division.Id,
                            PerformanceScores = new List<decimal>(){s.TotalScore},
                            GymName = gym.Name,
                            DivisionName = division.Name,
                            LevelName = level.Name,
                            AwardsLevelName = awardsLevel.Name,
                            TeamName = registration.TeamName,
                            GymLocation = gym.Location,
                            IsSmallGym = gym.IsSmallGym,
                            IsShowTeam = registration.IsShowTeam,
                            Participants = registration.ParticipantCount,
                            DidNotCompete = s.DidNotCompete,
                            ScoringComplete = s.IsScoringComplete,
                            UseSmallGymCalculator = awardsLevel.UseSmallGymRanking,
                            SuppressLevelChampion = awardsLevel.SuppressLevelWinner
                        };
                    }
            );

            return result;
        }