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));
        }
예제 #2
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);
        }