Ejemplo n.º 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));
        }
Ejemplo n.º 2
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));
            }
        }
        private XElement XDistances(Competition competition, IList <PersonCompetitor> competitors)
        {
            /* <distances>
             *   <distance id="1">
             *     <length>1000</length>
             *     <description>1000 meter</description>
             *     <date>2015-03-29</date>
             *     <icerinkref id="DH"/>
             *     <timeinfo source="electronic" precision="2"/>
             *     <races>
             *       <race nr="1" track="inner">
             *         <competitorref id="44"/>
             *         <finaltime value="112200" points="56100"/>
             *       </race>
             *       ... */

            return(new XElement("distances",
                                from d in competition.Distances
                                where d.Discipline.StartsWith("SpeedSkating.LongTrack.PairsDistance")
                                orderby d.Number
                                let calculator = calculatorManager.Get(d.Discipline)
                                                 let precision = calculator.DefaultResultPrecision ?? TimeSpan.Zero
                                                                 let precisionDigits = precision == TimeSpan.FromTicks(10) ? 2 : 3
                                                                                       select new XElement("distance",
                                                                                                           new XAttribute("id", d.Number),
                                                                                                           new XElement("length", calculator.Length(d)),
                                                                                                           new XElement("description", d.Name),
                                                                                                           new XElement("date", (d.Starts ?? competition.Starts).ToString("yyyy-MM-dd")),
                                                                                                           new XElement("icerinkref", new XAttribute("id", competition.VenueCode ?? "")),
                                                                                                           new XElement("timeinfo", new XAttribute("source", "electronic"), new XAttribute("precision", precisionDigits)),
                                                                                                           new XElement("races",
                                                                                                                        from r in d.Races
                                                                                                                        where r.PresentedResult != null && r.PresentedResult.Status == RaceStatus.Done
                                                                                                                        orderby r.Round, r.Heat, r.Lane
                                                                                                                        let competitorId = competitors.IndexOf(r.Competitor as PersonCompetitor)
                                                                                                                                           where competitorId > -1
                                                                                                                                           select new XElement("race",
                                                                                                                                                               new XAttribute("nr", r.Heat),
                                                                                                                                                               new XAttribute("track", XTrack((Lane)r.Lane)),
                                                                                                                                                               new XElement("competitorref", new XAttribute("id", competitorId + 1)),
                                                                                                                                                               XFinalTime(r, precision),
                                                                                                                                                               XRaceAttributes(r))))));
        }
Ejemplo n.º 4
0
        public void ActivateHeat(Heat heat, IEnumerable <TRace> races)
        {
            var heatState = new HeatState <TRace, TRacePassing, TRaceLap>(Distance, heat, races, calculatorManager.Get(Distance.Discipline));

            heatState.Activate();
            activeHeats[heat] = heatState;
        }
Ejemplo n.º 5
0
        private async Task ExportDistancesAsync(Competition competition, TextWriter writer, CultureInfo culture, ICompetitionContext context)
        {
            var distances = await context.Distances
                            .Include(d => d.Races.Select(r => r.Competitor))
                            .Include(d => d.Races.Select(r => r.Transponders.Select(t => t.Transponder)))
                            .Where(d => d.CompetitionId == competition.Id)
                            .ToListAsync();

            var groups = new XElement("groups");

            foreach (var distance in distances.OrderBy(dc => dc.Number))
            {
                var calculator = distanceCalculatorManager.Get(distance.Discipline);

                var group = new XElement("group",
                                         new XAttribute("name", $"{distance.Number:00}. {distance.Name}"),
                                         new XElement("competitors",
                                                      from r in distance.Races
                                                      let personCompetitor = r.Competitor as PersonCompetitor
                                                                             where personCompetitor != null
                                                                             orderby personCompetitor.StartNumber
                                                                             select new XElement("competitor",
                                                                                                 new XAttribute("no", personCompetitor.StartNumber),
                                                                                                 new XAttribute("driverregistration", personCompetitor.LicenseKey),
                                                                                                 new XAttribute("registration", personCompetitor.LicenseKey),
                                                                                                 new XAttribute("class", personCompetitor.Category),
                                                                                                 new XAttribute("firstname", personCompetitor.Name.FirstName ?? ""),
                                                                                                 new XAttribute("lastname", personCompetitor.Name.PrefixedSurname ?? ""),
                                                                                                 new XAttribute("transponders", string.Join(",", r.Transponders.Select(t => t.Transponder.Label))),
                                                                                                 new XAttribute("additional1", personCompetitor.NationalityCode),
                                                                                                 new XAttribute("additional2", personCompetitor.Sponsor ?? ""),
                                                                                                 new XAttribute("additional3", personCompetitor.ShortName),
                                                                                                 new XAttribute("additional4", personCompetitor.From ?? ""),
                                                                                                 new XAttribute("additional5", personCompetitor.ClubFullName ?? ""))));

                var starts = InTimeZone(distance.Starts ?? competition.Starts, competition.TimeZone);

                var runs = new XElement("runs");
                foreach (var heat in distance.Races.GroupBy(r => new { r.Round, r.Heat }).OrderBy(g => g.Key.Round).ThenBy(g => g.Key.Heat))
                {
                    var minimumLapTime = calculator.MininumLapTime(distance);
                    var run            = new XElement("run",
                                                      new XAttribute("name", $"{heat.Key.Round:00}.{heat.Key.Heat:000}"),
                                                      new XAttribute("shortname", $"{heat.Key.Round:00}.{heat.Key.Heat:000}"),
                                                      new XAttribute("date", starts.ToString("yyyy-MM-dd")),
                                                      new XAttribute("time", starts.ToString("HH:mm:ss")),
                                                      new XAttribute("type", "race"),
                                                      new XAttribute("countfirst", "lap"),
                                                      new XAttribute("minimumlaptime", minimumLapTime.ToString(@"h\:mm\:ss\.fff")),
                                                      new XAttribute("copygroupcompetitor", true),
                                                      new XElement("competitors",
                                                                   from r in heat
                                                                   let personCompetitor = r.Competitor as PersonCompetitor
                                                                                          where personCompetitor != null
                                                                                          orderby r.Lane
                                                                                          select new XElement("competitor",
                                                                                                              new XAttribute("no", personCompetitor.StartNumber),
                                                                                                              new XAttribute("driverregistration", personCompetitor.LicenseKey),
                                                                                                              new XAttribute("registration", personCompetitor.LicenseKey),
                                                                                                              new XAttribute("class", personCompetitor.Category),
                                                                                                              new XAttribute("firstname", personCompetitor.Name.FirstName ?? ""),
                                                                                                              new XAttribute("lastname", personCompetitor.Name.PrefixedSurname ?? ""),
                                                                                                              new XAttribute("transponders", string.Join(",", r.Transponders.Select(t => t.Transponder.Label))),
                                                                                                              new XAttribute("additional1", personCompetitor.NationalityCode),
                                                                                                              new XAttribute("additional2", personCompetitor.Sponsor ?? ""),
                                                                                                              new XAttribute("additional3", personCompetitor.ShortName),
                                                                                                              new XAttribute("additional4", personCompetitor.From ?? ""),
                                                                                                              new XAttribute("additional5", personCompetitor.ClubFullName ?? ""))));

                    switch (calculator.HeatStartEvent)
                    {
                    case HeatStartEvent.Start:
                        run.Add(new XAttribute("startmethod", "flag"));
                        break;

                    case HeatStartEvent.FirstPassing:
                        run.Add(new XAttribute("startmethod", "firstpassing"));
                        break;
                    }

                    switch (distance.ValueQuantity)
                    {
                    case DistanceValueQuantity.Length:
                    case DistanceValueQuantity.Count:
                        run.Add(new XAttribute("autofinishmethod", "individualonlaps"));
                        run.Add(new XAttribute("autofinishlaps", calculator.Laps(distance)));
                        break;
                    }

                    runs.Add(run);
                }

                group.Add(runs);
                groups.Add(group);
            }

            var document = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), groups);

            document.Save(writer);
        }
        private string GetDistanceFileName(IDistance distance, char type)
        {
            var calculator = calculatorManager.Get(distance.Discipline);

            return(string.Format(DistanceFileName, type, calculator.Length(distance), distance.Number));
        }