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)); }
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); }
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); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); } }
protected abstract Report CreateReport(Classification distances, int?differenceDistance, OptionalReportColumns optionalColumns);
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); }
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); }
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); }
protected abstract Report CreatePointsReport(IList <int> distances, IList <RankedPersonPoints> people, OptionalReportColumns optionalColumns);
protected abstract Report CreateTimeReport(int distance, IList <RankedPersonTime> people, OptionalReportColumns optionalColumns);
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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)); } }
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)); } }
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); }