コード例 #1
0
        public async Task <ILoadedReport> LoadAsync(Guid competitionId, OptionalReportColumns optionalColumns)
        {
            var book = new ReportBook();

            using (var context = contextFactory())
            {
                var competition = await context.Competitions.FirstOrDefaultAsync(c => c.Id == competitionId);

                if (competition == null)
                {
                    throw new CompetitionNotFoundException();
                }

                book.DocumentName = string.Format(Resources.FillInTitle, competition.Name);

                foreach (var distance in await context.Distances.Where(d => d.CompetitionId == competitionId).OrderBy(d => d.Number).ToListAsync())
                {
                    var calculator = calculatorManager.Get(distance.Discipline);
                    var length     = calculator.Length(distance);

                    var report = await DrawFillInReportLoader.LoadAsync(context, competitionId, distance.Id, length, optionalColumns);

                    var drawReport = report as IPairsDrawReport;
                    if (drawReport?.Pairs.Count() == 0)
                    {
                        continue;
                    }

                    book.Reports.Add(report);
                }
            }

            return(new TelerikLoadedReport(book));
        }
コード例 #2
0
        internal static async Task <MassStartTranspondersReport> LoadAsync(ICompetitionContext context, Guid competitionId, Guid distanceId,
                                                                           OptionalReportColumns optionalColumns)
        {
            var report = new MassStartTranspondersReport();

            var distance = await context.Distances.Include(d => d.Competition.Venue).Include(d => d.Competition.ReportTemplate.Logos).FirstOrDefaultAsync(d => d.Id == distanceId);

            if (distance == null)
            {
                throw new DistanceNotFoundException();
            }

            report.SetParameters(distance);

            var races = await context.Races.Include(r => r.Competitor)
                        .Include(r => r.Transponders)
                        .Where(r => r.DistanceId == distanceId)
                        .OrderBy(r => r.Round)
                        .ThenBy(r => r.Heat)
                        .ThenBy(r => r.Lane)
                        .ToListAsync();

            report.Races = races;
            return(report);
        }
コード例 #3
0
        internal static async Task <T> LoadAsync(DistanceCombinationsWorkflow workflow, Guid competitionId, Guid distanceCombinationId,
                                                 OptionalReportColumns optionalColumns)
        {
            var report = new T();

            var distanceCombination = await workflow
                                      .Combinations(competitionId)
                                      .Include(dc => dc.Competition.Venue)
                                      .Include(dc => dc.Competition.ReportTemplate.Logos)
                                      .FirstOrDefaultAsync(dc => dc.Id == distanceCombinationId);

            if (distanceCombination == null)
            {
                return(null);
            }

            report.SetParameters(distanceCombination);

            var competitors = await workflow.Competitors(competitionId, distanceCombinationId)
                              .Include(c => c.Competitor)
                              .Where(c => c.Status == DistanceCombinationCompetitorStatus.Confirmed && c.Competitor is TCompetitor)
                              .ToListAsync();

            if (typeof(TeamCompetitor).IsAssignableFrom(typeof(TCompetitor)))
            {
                await workflow.Competitors(competitionId, distanceCombinationId)
                .Select(c => c.Competitor)
                .OfType <TeamCompetitor>()
                .Include(tc => tc.Members.Select(m => m.Member))
                .LoadAsync();
            }

            report.Competitors = competitors.OrderBy(c => c.Reserve).ThenBy(c => c.Competitor.StartNumber);

            report.ReportParameters["OptionalColumnHeader"].Value = Resources.ResourceManager.GetString($"OptionalColumn_{(int)optionalColumns}") ?? "";
            switch (optionalColumns)
            {
            case OptionalReportColumns.HomeVenueCode:
                report.ReportParameters["OptionalColumnField"].Value = "Competitor.VenueCode";
                break;

            case OptionalReportColumns.NationalityCode:
                report.ReportParameters["OptionalColumnField"].Value = "Competitor.NationalityCode";
                break;

            case OptionalReportColumns.ClubShortName:
                report.ReportParameters["OptionalColumnField"].Value = "Competitor.ClubShortName";
                break;

            case OptionalReportColumns.LicenseKey:
                report.ReportParameters["OptionalColumnField"].Value = "Competitor.LicenseKey";
                break;

            default:
                report.OptionalFieldValue = null;
                break;
            }

            return(report);
        }
コード例 #4
0
        public async Task <ILoadedReport> LoadAsync(Guid competitionId, OptionalReportColumns optionalColumns)
        {
            var book = new ReportBook();

            using (var context = contextFactory())
            {
                var competition = await context.Competitions.FirstOrDefaultAsync(c => c.Id == competitionId);

                if (competition == null)
                {
                    throw new CompetitionNotFoundException();
                }

                book.DocumentName = string.Format(Resources.DrawTitle, competition.Name);

                foreach (var distance in await context.Distances.Where(d => d.CompetitionId == competitionId).OrderBy(d => d.Number).ToListAsync())
                {
                    Report report = null;
                    switch (distance.Discipline)
                    {
                    case "SpeedSkating.LongTrack.PairsDistance.Individual":
                        report = await DrawReportLoader <DrawReport> .LoadAsync(context, competitionId, distance.Id, optionalColumns);

                        break;

                    case "SpeedSkating.LongTrack.PairsDistance.TeamPursuit":
                    case "SpeedSkating.LongTrack.PairsDistance.TeamSprint":
                        report = await DrawReportLoader <TeamDrawReport> .LoadAsync(context, competitionId, distance.Id, optionalColumns);

                        break;

                    case "SpeedSkating.LongTrack.MassStartDistance":
                        report = await MassStartDrawReportLoader.LoadAsync(context, competitionId, distance.Id, optionalColumns);

                        break;
                    }

                    var pairsDrawReport = report as IPairsDrawReport;
                    if (pairsDrawReport?.Pairs.Count() == 0)
                    {
                        continue;
                    }

                    book.Reports.Add(report);
                }
            }

            if (book.Reports.Count == 0)
            {
                return(null);
            }

            return(new TelerikLoadedReport(book));
        }
コード例 #5
0
        public async Task <ILoadedReport> LoadAsync(Guid competitionId, OptionalReportColumns optionalColumns)
        {
            var book = new ReportBook();

            using (var workflow = workflowFactory())
            {
                var competition = await workflow.Competitions.Include(c => c.Venue).Include(c => c.ReportTemplate.Logos).FirstOrDefaultAsync(c => c.Id == competitionId);

                if (competition == null)
                {
                    throw new CompetitionNotFoundException();
                }

                book.DocumentName = string.Format(Resources.CompetitorGroupTitle, competition.Name);

                ICompetitorGroupComparer comparer;
                switch (optionalColumns)
                {
                case OptionalReportColumns.HomeVenueCode:
                    comparer = HomeVenueComparer.Default;
                    break;

                case OptionalReportColumns.NationalityCode:
                    comparer = NationalityComparer.Default;
                    break;

                case OptionalReportColumns.ClubShortName:
                    comparer = ClubComparer.Default;
                    break;

                default:
                    comparer = LicenseKeyComparer.Default;
                    break;
                }

                var races = new List <RankedRace>();
                foreach (var distance in await workflow.Distances.Where(d => d.CompetitionId == competitionId).OrderBy(d => d.Number).ToListAsync())
                {
                    var distanceResult = await workflow.GetDistanceResultAsync(distance);

                    races.AddRange(distanceResult);
                }

                var groups = races.GroupBy(r => r.Race.Competitor, comparer.Group, comparer).SortAndRank().Where(g => g.TotalPoints > 0).ToList();

                book.Reports.Add(CreateRankingReport(competition, groups));
            }

            return(new TelerikLoadedReport(book));
        }
コード例 #6
0
        public async Task <ILoadedReport> LoadAsync(Guid competitionId, OptionalReportColumns optionalColumns)
        {
            var book = new ReportBook();

            using (var workflow = workflowFactory())
            {
                var competition = await workflow.Competitions.FirstOrDefaultAsync(c => c.Id == competitionId);

                if (competition == null)
                {
                    throw new CompetitionNotFoundException();
                }

                book.DocumentName = string.Format(Resources.ResultTitle, competition.Name);

                foreach (var distance in await workflow.Distances.Where(d => d.CompetitionId == competitionId).OrderBy(d => d.Number).ToListAsync())
                {
                    if (distance.Discipline.StartsWith("SpeedSkating.LongTrack.PairsDistance"))
                    {
                        var result = await DistanceResultReportLoader.LoadAsync(workflow, competitionId, distance.Id, optionalColumns);

                        if (result.Races.Count() == 0)
                        {
                            continue;
                        }

                        book.Reports.Add(result);

                        var details = await DistanceDetailedResultReportLoader.LoadAsync(workflow, competitionId, distance.Id, expertManager, optionalColumns);

                        book.Reports.Add(details);
                    }
                    else if (distance.Discipline.StartsWith("SpeedSkating.LongTrack.MassStartDistance"))
                    {
                        var result = await MassStartDistanceResultReportLoader.LoadAsync(workflow, competitionId, distance.Id, optionalColumns);

                        if (result.Races.Count() == 0)
                        {
                            continue;
                        }

                        book.Reports.Add(result);
                    }
                }
            }

            return(new TelerikLoadedReport(book));
        }
コード例 #7
0
        public async Task <ILoadedReport> LoadAsync(Guid competitionId, OptionalReportColumns optionalColumns)
        {
            var report = new CompetitorSignatureListsReport();

            using (var context = contextFactory())
            {
                var competition = await(from c in context.Competitions
                                        where c.Id == competitionId
                                        select new
                {
                    c.Name,
                    c.Culture
                }).SingleAsync();

                report.CompetitionName = competition.Name;
                report.DocumentName    = string.Format(Resources.CompetitorSignatureListTitle, competition.Name);
                report.Culture         = CultureInfo.GetCultureInfo(competition.Culture ?? "");

                report.DistanceCombinations = (await(from dc in context.DistanceCombinations
                                                     where dc.CompetitionId == competitionId
                                                     orderby dc.Number
                                                     select new
                {
                    dc.Number,
                    dc.Name,
                    Competitors = from c in dc.Competitors
                                  let pc = c.Competitor as PersonCompetitor
                                           where pc != null && c.Status == DistanceCombinationCompetitorStatus.Confirmed
                                           orderby c.Reserve, pc.StartNumber
                    select new
                    {
                        pc.StartNumber,
                        pc.From,
                        pc.Name,
                        pc.Category,
                        pc.LicenseKey,
                        c.Reserve,
                        pc.Status,
                        pc.Transponder1,
                        pc.Sponsor
                    }
                }).ToListAsync()).Where(dc => dc.Competitors.Any());
            }

            return(new TelerikLoadedReport(report));
        }
コード例 #8
0
        public async Task <ILoadedReport> LoadAsync(Guid competitionId, OptionalReportColumns optionalColumns)
        {
            var book = new ReportBook();

            using (var workflow = workflowFactory())
            {
                var competition = await workflow.Competitions.FirstOrDefaultAsync(c => c.Id == competitionId);

                if (competition == null)
                {
                    throw new CompetitionNotFoundException();
                }

                book.DocumentName = string.Format(Resources.CompetitorListTitle, competition.Name);

                var combinations = await workflow.Combinations(competitionId).OrderBy(dc => dc.Number).ToListAsync();

                foreach (var combination in combinations)
                {
                    var query = workflow.Competitors(competitionId, combination.Id).Select(c => c.Competitor);

                    var people = await query.OfType <PersonCompetitor>().CountAsync();

                    if (people > 0)
                    {
                        var report = await CompetitorListReportLoaderBase <CompetitorListReport, PersonCompetitor> .LoadAsync(workflow, competitionId, combination.Id, optionalColumns);

                        book.Reports.Add(report);
                    }

                    var teams = await query.OfType <TeamCompetitor>().CountAsync();

                    if (teams > 0)
                    {
                        var report = await CompetitorListReportLoaderBase <TeamCompetitorListReport, TeamCompetitor> .LoadAsync(workflow, competitionId, combination.Id, optionalColumns);

                        book.Reports.Add(report);
                    }
                }
            }

            return(new TelerikLoadedReport(book));
        }
コード例 #9
0
        public async Task <ILoadedReport> LoadAsync(Guid competitionId, Guid distanceId, OptionalReportColumns optionalColumns)
        {
            using (var context = contextFactory())
            {
                var distance = await context.Distances.FirstOrDefaultAsync(d => d.CompetitionId == competitionId && d.Id == distanceId);

                if (distance == null)
                {
                    return(null);
                }

                var calculator = calculatorManager.Get(distance.Discipline);
                var length     = calculator.Length(distance);
                var report     = await LoadAsync(context, competitionId, distanceId, length, optionalColumns);

                return(new TelerikLoadedReport(report));
            }
        }
コード例 #10
0
 protected abstract Report CreateReport(Classification distances, int?differenceDistance, OptionalReportColumns optionalColumns);
コード例 #11
0
        public async Task <ILoadedReport> LoadAsync(Guid competitionId, int classificationWeight, int categoryLength, int?differenceDistance, Guid[] distanceIdentifiers,
                                                    bool groupByDistanceCombinations, OptionalReportColumns optionalColumns)
        {
            var book = new ReportBook();

            using (var workflow = racesWorkflowFactory())
            {
                var competition = await workflow.Competitions.Include(c => c.Venue).Include(c => c.ReportTemplate.Logos).FirstOrDefaultAsync(c => c.Id == competitionId);

                if (competition == null)
                {
                    return(null);
                }

                var distances = await workflow.Distances.Include(d => d.Combinations).Where(d => d.CompetitionId == competitionId && distanceIdentifiers.Contains(d.Id))
                                .OrderBy(d => d.Number).ToArrayAsync();

                book.DocumentName = string.Format(Resources.ClassificationTitle, competition.Name,
                                                  groupByDistanceCombinations
                        ? Resources.DistanceCombinations
                        : string.Join("-", distances.Select(d => d.Value)));

                var selectorSets = new List <IRaceSelector[]>();
                if (groupByDistanceCombinations)
                {
                    var distanceCombinations = distances.SelectMany(d => d.Combinations).Distinct();
                    selectorSets.Add(distanceCombinations.Select(dc => (IRaceSelector) new RaceDistanceCombinationSelector(dc)).ToArray());
                }
                else
                {
                    selectorSets.Add(new IRaceSelector[] { new RaceDistancesSelector(distances) });
                }

                foreach (var selectors in selectorSets.CartesianProduct().Select(p => p.ToArray()))
                {
                    var classifications = await workflow.GetClassificationAsync(competitionId, classificationWeight, categoryLength, differenceDistance, selectors);

                    foreach (var classification in classifications)
                    {
                        if (classification.Distances.Count == 0)
                        {
                            continue;
                        }

                        var filters = selectors.Select(s => s.ToString());
                        if (classification.Category != string.Empty)
                        {
                            filters = filters.Concat(new[] { classification.Category });
                        }

                        var report = CreateReport(classification, differenceDistance, optionalColumns);
                        report.SetParameters(competition);
                        report.ReportParameters.Add("Filters", ReportParameterType.String, string.Join(" ", filters));
                        book.Reports.Add(report);
                    }
                }
            }

            return(book.Reports.Count != 0 ? new TelerikLoadedReport(book) : null);
        }
コード例 #12
0
        internal static async Task <DistanceResultReport> LoadAsync(RacesWorkflow workflow, Guid competitionId, Guid distanceId, OptionalReportColumns optionalColumns)
        {
            var distance =
                await workflow.Distances.Include(d => d.Competition.Venue).Include(d => d.Competition.ReportTemplate.Logos).FirstOrDefaultAsync(d => d.Id == distanceId);

            if (distance == null)
            {
                throw new DistanceNotFoundException();
            }

            var report = new DistanceResultReport();

            report.SetParameters(distance);
            report.ReportParameters["OptionalColumnHeader"].Value = Resources.ResourceManager.GetString($"OptionalColumn_{(int)optionalColumns}") ?? "";
            switch (optionalColumns)
            {
            case OptionalReportColumns.HomeVenueCode:
                report.ReportParameters["OptionalColumnField"].Value = "Race.Competitor.VenueCode";
                break;

            case OptionalReportColumns.NationalityCode:
                report.ReportParameters["OptionalColumnField"].Value = "Race.Competitor.NationalityCode";
                break;

            case OptionalReportColumns.ClubShortName:
                report.ReportParameters["OptionalColumnField"].Value = "Race.Competitor.ClubShortName";
                break;

            case OptionalReportColumns.LicenseKey:
                report.ReportParameters["OptionalColumnField"].Value = "Race.Competitor.LicenseKey";
                break;

            default:
                report.OptionalFieldTextBox.Value = null;
                break;
            }

            report.Races = await workflow.GetDistanceResultAsync(distance);

            return(report);
        }
コード例 #13
0
        protected override Report CreatePointsReport(IList <int> distances, IList <RankedPersonPoints> people, OptionalReportColumns optionalColumns)
        {
            if (people.Count == 0)
            {
                return(null);
            }

            var report = new PointsRankingReport
            {
                RankedPeople = people
            };

            report.ReportParameters["Distances"].Value = string.Join(" + ", distances);
            for (var i = 0; i < 4; i++)
            {
                report.ReportParameters[$"Distance{i + 1}"].Value = distances.Select(d => new int?(d)).ElementAtOrDefault(i);
            }
            report.ReportParameters["OptionalColumnHeader"].Value = Resources.ResourceManager.GetString($"OptionalColumn_{(int)optionalColumns}") ?? "";

            switch (optionalColumns)
            {
            case OptionalReportColumns.HomeVenueCode:
                report.ReportParameters["OptionalColumnField"].Value = "License.VenueCode";
                break;

            case OptionalReportColumns.NationalityCode:
                report.ReportParameters["OptionalColumnField"].Value = "License.Person.NationalityCode";
                break;

            case OptionalReportColumns.ClubShortName:
                report.ReportParameters["OptionalColumnField"].Value = "License.Club.ShortName";
                break;

            case OptionalReportColumns.LicenseKey:
                report.ReportParameters["OptionalColumnField"].Value = "License.Key";
                break;

            default:
                report.OptionalFieldTextBox.Value = null;
                break;
            }
            return(report);
        }
コード例 #14
0
 protected abstract Report CreatePointsReport(IList <int> distances, IList <RankedPersonPoints> people, OptionalReportColumns optionalColumns);
コード例 #15
0
 protected abstract Report CreateTimeReport(int distance, IList <RankedPersonTime> people, OptionalReportColumns optionalColumns);
コード例 #16
0
        public async Task <ILoadedReport> LoadAsync(string licenseIssuerId, string discipline, string distanceDiscipline, int[][] distanceValues, TimeSpan?toTime,
                                                    decimal?maxPoints, int?count, IEnumerable <IHistoricalTimeSelector[]> selectorSets, OptionalReportColumns optionalColumns, int?classificationWeight)
        {
            if (distanceValues == null)
            {
                throw new ArgumentNullException(nameof(distanceValues));
            }

            var book = new ReportBook();
            var i    = 1;

            using (var workflow = personTimesWorkflowFactory())
                foreach (var distances in distanceValues)
                {
                    foreach (var selectors in selectorSets.CartesianProduct().Select(p => p.ToArray()))
                    {
                        Report report = null;
                        if (distances.Length == 1)
                        {
                            var people = await workflow.GetRankingAsync(licenseIssuerId, discipline, distanceDiscipline, distances[0], toTime, count, selectors);

                            report = CreateTimeReport(distances[0], people, optionalColumns);
                        }
                        else if (distances.Length > 1)
                        {
                            var people = await workflow.GetRankingAsync(licenseIssuerId, discipline, distanceDiscipline, distances, classificationWeight, maxPoints, count, selectors);

                            report = CreatePointsReport(distances, people, optionalColumns);
                        }

                        if (report == null)
                        {
                            continue;
                        }

                        report.ReportParameters.Add("Filters", ReportParameterType.String, string.Join(", ", (IEnumerable <IHistoricalTimeSelector>)selectors));
                        report.DocumentName = string.Join("_", selectors.Select(s => s.ToShortString()));
                        book.Reports.Add(report);
                        i++;
                    }
                }

            return(book.Reports.Count != 0 ? new TelerikLoadedReport(book) : null);
        }
コード例 #17
0
        internal static async Task <MassStartDistanceResultReport> LoadAsync(RacesWorkflow workflow, Guid competitionId, Guid distanceId, OptionalReportColumns optionalColumns)
        {
            var distance =
                await workflow.Distances.Include(d => d.Competition.Venue).Include(d => d.Competition.ReportTemplate.Logos).FirstOrDefaultAsync(d => d.Id == distanceId);

            if (distance == null)
            {
                throw new DistanceNotFoundException();
            }

            var report = new MassStartDistanceResultReport();

            report.SetParameters(distance);
            report.ReportParameters["OptionalColumnHeader"].Value = Resources.ResourceManager.GetString($"OptionalColumn_{(int)optionalColumns}") ?? "";
            switch (optionalColumns)
            {
            case OptionalReportColumns.HomeVenueCode:
                report.ReportParameters["OptionalColumnField"].Value = "Race.Competitor.VenueCode";
                break;

            case OptionalReportColumns.NationalityCode:
                report.ReportParameters["OptionalColumnField"].Value = "Race.Competitor.NationalityCode";
                break;

            case OptionalReportColumns.ClubShortName:
                report.ReportParameters["OptionalColumnField"].Value = "Race.Competitor.ClubShortName";
                break;

            case OptionalReportColumns.LicenseKey:
                report.ReportParameters["OptionalColumnField"].Value = "Race.Competitor.LicenseKey";
                break;

            default:
                report.OptionalFieldTextBox.Value = null;
                break;
            }

            var races = await workflow.GetDistanceResultByLapPointsAsync(distance);

            var lapsWithPoints = races.SelectMany(r => r.LapPoints.Keys)
                                 .OrderBy(i => i)
                                 .Distinct()
                                 .Select(i => new
            {
                Index      = i,
                RoundsToGo = MassStartDistanceCalculator.Default.RoundsToGo(distance, i + 1)
            })
                                 .ToList();

            report.Races = races;
            foreach (var i in new[] { 1, 2, 3, 4 })
            {
                report.ReportParameters[$"Round{i}Header"].Value   = lapsWithPoints.ElementAtOrDefault(i - 1)?.RoundsToGo.ToString(CultureInfo.InvariantCulture);
                report.ReportParameters[$"Round{i}LapIndex"].Value = lapsWithPoints.ElementAtOrDefault(i - 1)?.Index;
            }

            return(report);
        }
コード例 #18
0
        protected override Report CreateReport(Classification classification, int?behindDistance, OptionalReportColumns optionalColumns)
        {
            var report = new ClassificationReport
            {
                Competitors = classification.Competitors
            };

            for (var i = 0; i < 4; i++)
            {
                var distance = classification.Distances.ElementAtOrDefault(i)?.Value;
                if (i == 3)
                {
                    distance = distance ?? behindDistance;
                }

                report.ReportParameters.Add($"Distance{i + 1}", ReportParameterType.String, distance?.ToString() ?? "");
            }

            report.ReportParameters["OptionalColumnHeader"].Value = Resources.ResourceManager.GetString($"OptionalColumn_{(int)optionalColumns}") ?? "";
            switch (optionalColumns)
            {
            case OptionalReportColumns.HomeVenueCode:
                report.ReportParameters["OptionalColumnField"].Value = "Competitor.VenueCode";
                break;

            case OptionalReportColumns.NationalityCode:
                report.ReportParameters["OptionalColumnField"].Value = "Competitor.NationalityCode";
                break;

            case OptionalReportColumns.ClubShortName:
                report.ReportParameters["OptionalColumnField"].Value = "Competitor.ClubShortName";
                break;

            case OptionalReportColumns.LicenseKey:
                report.ReportParameters["OptionalColumnField"].Value = "Competitor.LicenseKey";
                break;

            default:
                report.OptionalFieldTextBox.Value = null;
                break;
            }

            return(report);
        }
コード例 #19
0
        public static async Task <Report> LoadAsync(ICompetitionContext context, Guid competitionId, Guid distanceId, int length, OptionalReportColumns optionalColumns)
        {
            if (length <= 1500)
            {
                return(await DrawReportLoader <DrawFillIn4Report> .LoadAsync(context, competitionId, distanceId, optionalColumns));
            }

            if (length <= 5000)
            {
                return(await DrawReportLoader <DrawFillIn13Report> .LoadAsync(context, competitionId, distanceId, optionalColumns));
            }

            if (length <= 10000)
            {
                return(await DrawReportLoader <DrawFillIn25Report> .LoadAsync(context, competitionId, distanceId, optionalColumns));
            }

            return(null);
        }
コード例 #20
0
        public static async Task <T> LoadAsync(ICompetitionContext context, Guid competitionId, Guid distanceId, OptionalReportColumns optionalColumns)
        {
            var report = new T();

            var distance = await context.Distances
                           .Include(d => d.Competition.Venue)
                           .Include(d => d.Competition.ReportTemplate.Logos)
                           .FirstOrDefaultAsync(d => d.Id == distanceId);

            if (distance == null)
            {
                throw new DistanceNotFoundException();
            }

            report.SetParameters(distance);
            report.ReportParameters["OptionalColumnHeader"].Value = Resources.ResourceManager.GetString($"OptionalColumn_{(int)optionalColumns}") ?? "";

            var reportOptionalColumns = report as IPairsDrawReportWithOptionalColumn;

            if (reportOptionalColumns != null)
            {
                switch (optionalColumns)
                {
                case OptionalReportColumns.HomeVenueCode:
                    report.ReportParameters["InnerOptionalColumnField"].Value = "Inner.Competitor.VenueCode";
                    report.ReportParameters["OuterOptionalColumnField"].Value = "Outer.Competitor.VenueCode";
                    break;

                case OptionalReportColumns.NationalityCode:
                    report.ReportParameters["InnerOptionalColumnField"].Value = "Inner.Competitor.NationalityCode";
                    report.ReportParameters["OuterOptionalColumnField"].Value = "Outer.Competitor.NationalityCode";
                    break;

                case OptionalReportColumns.ClubShortName:
                    report.ReportParameters["InnerOptionalColumnField"].Value = "Inner.Competitor.ClubShortName";
                    report.ReportParameters["OuterOptionalColumnField"].Value = "Outer.Competitor.ClubShortName";
                    break;

                case OptionalReportColumns.LicenseKey:
                    report.ReportParameters["InnerOptionalColumnField"].Value = "Inner.Competitor.LicenseKey";
                    report.ReportParameters["OuterOptionalColumnField"].Value = "Outer.Competitor.LicenseKey";
                    break;

                case OptionalReportColumns.SeasonBest:
                    reportOptionalColumns.InnerOptionalFieldValue = "= SpeedSkating.LongTrack.FormatTime(Fields.Inner.SeasonBest, Parameters.TimeDigits.Value)";
                    reportOptionalColumns.OuterOptionalFieldValue = "= SpeedSkating.LongTrack.FormatTime(Fields.Outer.SeasonBest, Parameters.TimeDigits.Value)";
                    break;

                default:
                    report.ReportParameters["OptionalColumnHeader"].Value = string.Empty;
                    reportOptionalColumns.InnerOptionalFieldValue         = null;
                    reportOptionalColumns.OuterOptionalFieldValue         = null;
                    break;
                }
            }

            var races = await context.Races
                        .Include(r => r.Competitor)
                        .Include(r => r.Results)
                        .Include(r => r.Times)
                        .Where(r => r.DistanceId == distanceId)
                        .ToListAsync();

            await context.Competitors.OfType <TeamCompetitor>()
            .Include(t => t.Members.Select(m => m.Member))
            .Where(tc => tc.Races.Any(r => r.DistanceId == distanceId))
            .LoadAsync();

            var maxPair = races.Select(r => r.Heat).DefaultIfEmpty(0).Max();
            var pairs   = new List <Pair>();

            for (var pair = distance.FirstHeat; pair <= maxPair; pair++)
            {
                var colors         = PairsDistanceCalculator.Colors(distance, pair);
                var innerRace      = races.SingleOrDefault(r => r.Heat == pair && r.Lane == 0);
                var innerRaceColor = (int)colors.ToLaneColor(Lane.Inner);
                var outerRace      = races.SingleOrDefault(r => r.Heat == pair && r.Lane == 1);
                var outerRaceColor = (int)colors.ToLaneColor(Lane.Outer);

                pairs.Add(new Pair(pair, innerRace, innerRaceColor, null, outerRace, outerRaceColor, null));
            }

            report.Pairs = pairs;
            return(report);
        }
コード例 #21
0
        internal static async Task <DetailedResultReport> LoadAsync(RacesWorkflow workflow, Guid competitionId, Guid distanceId, IDistanceDisciplineExpertManager expertManager,
                                                                    OptionalReportColumns optionalColumns)
        {
            var distance = await workflow.Distances.Include(d => d.Competition.Venue).Include(d => d.Competition.ReportTemplate.Logos).FirstOrDefaultAsync(d => d.Id == distanceId);

            if (distance == null)
            {
                throw new DistanceNotFoundException();
            }

            var expert = expertManager.Find(distance.Discipline);

            if (expert == null)
            {
                return(null);
            }

            var report = new DetailedResultReport();

            report.SetParameters(distance);
            report.ReportParameters["OptionalColumnHeader"].Value = Resources.ResourceManager.GetString($"OptionalColumn_{(int)optionalColumns}") ?? "";

            switch (optionalColumns)
            {
            case OptionalReportColumns.HomeVenueCode:
                report.ReportParameters["InnerOptionalColumnField"].Value = "Inner.Competitor.VenueCode";
                report.ReportParameters["OuterOptionalColumnField"].Value = "Outer.Competitor.VenueCode";
                break;

            case OptionalReportColumns.NationalityCode:
                report.ReportParameters["InnerOptionalColumnField"].Value = "Inner.Competitor.NationalityCode";
                report.ReportParameters["OuterOptionalColumnField"].Value = "Outer.Competitor.NationalityCode";
                break;

            case OptionalReportColumns.ClubShortName:
                report.ReportParameters["InnerOptionalColumnField"].Value = "Inner.Competitor.ClubShortName";
                report.ReportParameters["OuterOptionalColumnField"].Value = "Outer.Competitor.ClubShortName";
                break;

            case OptionalReportColumns.LicenseKey:
                report.ReportParameters["InnerOptionalColumnField"].Value = "Inner.Competitor.LicenseKey";
                report.ReportParameters["OuterOptionalColumnField"].Value = "Outer.Competitor.LicenseKey";
                break;

            default:
                report.InnerOptionalFieldTextBox.Value = null;
                report.OuterOptionalFieldTextBox.Value = null;
                break;
            }

            var races = await workflow.Races(competitionId).Include(r => r.Competitor)
                        .Include(r => r.Results)
                        .Include(r => r.Times)
                        .Include(r => r.Laps)
                        .Where(r => r.DistanceId == distanceId)
                        .ToListAsync();

            races = races.Where(r => r.PresentedResult?.Status == RaceStatus.Done).ToList();

            var maxPair = races.Select(r => r.Heat).DefaultIfEmpty(0).Max();
            var pairs   = new List <Pair>();

            for (var pair = distance.FirstHeat; pair <= maxPair; pair++)
            {
                var colors         = PairsDistanceCalculator.Colors(distance, pair);
                var innerRace      = races.SingleOrDefault(r => r.Heat == pair && r.Lane == 0);
                var innerRaceColor = (int)colors.ToLaneColor(Lane.Inner);
                var innerLaps      = innerRace != null?expert.Calculator.CalculateLaps(distance, innerRace.PresentedLaps.Select(t => t?.Time)) : null;

                var outerRace      = races.SingleOrDefault(r => r.Heat == pair && r.Lane == 1);
                var outerRaceColor = (int)colors.ToLaneColor(Lane.Outer);
                var outerLaps      = outerRace != null?expert.Calculator.CalculateLaps(distance, outerRace.PresentedLaps.Select(t => t?.Time)) : null;

                pairs.Add(new Pair(pair, innerRace, innerRaceColor, innerLaps, outerRace, outerRaceColor, outerLaps));
            }

            report.Pairs = pairs;
            return(report);
        }
コード例 #22
0
        internal static async Task <RaceTranspondersReport> LoadAsync(ICompetitionContext context, Guid competitionId, Guid distanceId, OptionalReportColumns optionalColumns)
        {
            var report = new RaceTranspondersReport();

            var distance = await context.Distances.Include(d => d.Competition.Venue).Include(d => d.Competition.ReportTemplate.Logos).FirstOrDefaultAsync(d => d.Id == distanceId);

            if (distance == null)
            {
                throw new DistanceNotFoundException();
            }

            report.SetParameters(distance);

            var races = await context.Races.Include(r => r.Competitor).Include(r => r.Transponders).Where(r => r.DistanceId == distanceId).ToListAsync();

            await(context.TeamCompetitorMembers
                  .Include(tcm => tcm.Member)
                  .Where(tcm => tcm.Team.DistanceCombinations.Any(dc => dc.DistanceCombination.Distances.Any(d => d.Id == distanceId))))
            .LoadAsync();

            var maxPair = races.Select(r => r.Heat).DefaultIfEmpty(0).Max();
            var pairs   = new List <Pair>();

            for (var pair = distance.FirstHeat; pair <= maxPair; pair++)
            {
                var colors         = PairsDistanceCalculator.Colors(distance, pair);
                var innerRace      = races.SingleOrDefault(r => r.Heat == pair && r.Lane == 0);
                var innerRaceColor = (int)colors.ToLaneColor(Lane.Inner);
                var outerRace      = races.SingleOrDefault(r => r.Heat == pair && r.Lane == 1);
                var outerRaceColor = (int)colors.ToLaneColor(Lane.Outer);

                pairs.Add(new Pair(pair, innerRace, innerRaceColor, null, outerRace, outerRaceColor, null));
            }

            report.Pairs = pairs;
            return(report);
        }
コード例 #23
0
        public async Task <ILoadedReport> LoadAsync(Guid competitionId, Guid distanceId, OptionalReportColumns optionalColumns)
        {
            using (var workflow = workflowFactory())
            {
                var report = await LoadAsync(workflow, competitionId, distanceId, optionalColumns);

                return(new TelerikLoadedReport(report));
            }
        }
コード例 #24
0
        async Task <ILoadedReport> IDistanceReportLoader.LoadAsync(Guid competitionId, Guid distanceId, OptionalReportColumns optionalColumns)
        {
            using (var context = contextFactory())
            {
                var report = await LoadAsync(context, competitionId, distanceId, optionalColumns);

                return(new TelerikLoadedReport(report));
            }
        }
コード例 #25
0
        protected override Report CreateTimeReport(int distance, IList <RankedPersonTime> people, OptionalReportColumns optionalColumns)
        {
            if (people.Count == 0)
            {
                return(null);
            }

            var report = new TimeRankingReport
            {
                RankedPeople = people
            };

            report.ReportParameters["Distance"].Value             = distance;
            report.ReportParameters["OptionalColumnHeader"].Value = Resources.ResourceManager.GetString($"OptionalColumn_{(int)optionalColumns}") ?? "";

            switch (optionalColumns)
            {
            case OptionalReportColumns.HomeVenueCode:
                report.ReportParameters["OptionalColumnField"].Value = "Time.License.VenueCode";
                break;

            case OptionalReportColumns.NationalityCode:
                report.ReportParameters["OptionalColumnField"].Value = "Time.License.Person.NationalityCode";
                break;

            case OptionalReportColumns.ClubShortName:
                report.ReportParameters["OptionalColumnField"].Value = "Time.License.Club.ShortName";
                break;

            case OptionalReportColumns.LicenseKey:
                report.ReportParameters["OptionalColumnField"].Value = "Time.License.Key";
                break;

            default:
                report.OptionalFieldTextBox.Value = null;
                break;
            }
            return(report);
        }