Exemple #1
0
        /// <summary>
        /// Save the Team Trophy current event table.
        /// </summary>
        /// <param name="model">junior handicap model</param>
        /// <param name="folderPath">path of the folder to save the table to</param>
        /// <param name="logger">application logger</param>
        /// <returns>success flag</returns>
        private static bool WriteCurrentEventTable(
            IModel model,
            string folderPath,
            IJHcLogger logger)
        {
            bool success = true;

            try
            {
                string outPath =
                    $"{folderPath}{ResultsPaths.teamTrophyPointsTableCurrentEvent}{ResultsPaths.csvExtension}";

                using (
                    StreamWriter writer =
                        new StreamWriter(
                            outPath))
                {
                    string titleString = "Club" + ResultsPaths.separator + "Score" + ResultsPaths.separator + "Points";

                    writer.WriteLine(titleString);

                    foreach (ClubSeasonDetails club in model.CurrentSeason.Clubs)
                    {
                        if (club.MobTrophy.TotalPoints > 0)
                        {
                            ITeamTrophyEvent foundEvent =
                                club.TeamTrophy.Events.Find(
                                    e => e.Date == model.CurrentEvent.Date);

                            if (foundEvent == null)
                            {
                                continue;
                            }

                            string entryString =
                                $"{club.Name}{ResultsPaths.separator}{foundEvent.Score}{ResultsPaths.separator}{foundEvent.TotalAthletePoints}";

                            foreach (ICommonTeamTrophyPoints commonPoints in foundEvent.Points)
                            {
                                entryString = entryString + ResultsPaths.separator + commonPoints.Point;
                            }

                            writer.WriteLine(entryString);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.WriteLog("Error, failed to print club points table: " + ex.ToString());

                Messenger.Default.Send(
                    new HandicapErrorMessage(
                        "Failed to print club points table"));

                success = false;
            }

            return(success);
        }
Exemple #2
0
        /// <summary>
        /// Write the next runner to a file.
        /// </summary>
        /// <param name="model">junior handicap model</param>
        /// <param name="folder">output model</param>
        /// <param name="seriesConfigMngr">series configuraton manager</param>
        /// <param name="logger">application logger</param>
        /// <returns>success flag</returns>
        public static bool WriteNextRunnerTable(
            IModel model,
            string folder,
            ISeriesConfigMngr seriesConfigMngr,
            IJHcLogger logger)
        {
            bool success = true;

            Messenger.Default.Send(
                new HandicapProgressMessage(
                    "Printing next runner."));

            SeriesConfigType config =
                seriesConfigMngr.ReadSeriesConfiguration();

            try
            {
                using (StreamWriter writer = new StreamWriter(Path.GetFullPath(folder) +
                                                              Path.DirectorySeparatorChar +
                                                              model.CurrentSeason.Name +
                                                              model.CurrentEvent.Name +
                                                              ResultsPaths.nextNewRunner +
                                                              ResultsPaths.csvExtension))
                {
                    writer.WriteLine(config?.NumberPrefix + model.Athletes.NextAvailableRaceNumber.ToString("000000"));
                }
            }
            catch (Exception ex)
            {
                logger.WriteLog("Error, failed to print next runner: " + ex.ToString());

                Messenger.Default.Send(
                    new HandicapErrorMessage(
                        "Failed to print next runner"));

                success = false;
            }

            return(success);
        }
Exemple #3
0
        /// <summary>
        /// Write the results to a comma separated file
        /// </summary>
        /// <param name="model">junior handicap model</param>
        /// <param name="folder">folder to save the file to</param>
        /// <param name="logger">application logger</param>
        /// <returns>success flag</returns>
        public static bool SavePointsTable(
            IModel model,
            string folder,
            IJHcLogger logger)
        {
            bool success = false;

            Messenger.Default.Send(
                new HandicapProgressMessage(
                    "Saving results."));

            try
            {
                using (StreamWriter writer = new StreamWriter(Path.GetFullPath(folder) +
                                                              Path.DirectorySeparatorChar +
                                                              model.CurrentSeason.Name +
                                                              model.CurrentEvent.Name +
                                                              ResultsPaths.pointsTable +
                                                              ResultsPaths.csvExtension))
                {
                    foreach (AthleteSeasonDetails athlete in model.CurrentSeason.Athletes)
                    {
                        if (athlete.Points.TotalPoints > 0)
                        {
                            double averagePoints = 0;
                            if (athlete.NumberOfAppearances > 0)
                            {
                                averagePoints = (double)athlete.Points.TotalPoints / (double)athlete.NumberOfAppearances;
                            }

                            string entryString = athlete.Name +
                                                 ResultsPaths.separator +
                                                 athlete.Points.TotalPoints.ToString() +
                                                 ResultsPaths.separator +
                                                 model.Athletes.GetPB(athlete.Key).ToString() +
                                                 ResultsPaths.separator +
                                                 athlete.SB.ToString() +
                                                 ResultsPaths.separator +
                                                 athlete.NumberOfAppearances.ToString() +
                                                 ResultsPaths.separator +
                                                 averagePoints.ToString("0.##");

                            writer.WriteLine(entryString);
                        }
                    }

                    success = true;
                }
            }
            catch (Exception ex)
            {
                logger.WriteLog("Error, failed to print points table: " + ex.ToString());

                Messenger.Default.Send(
                    new HandicapErrorMessage(
                        "Failed to print points table"));

                success = false;
            }

            return(success);
        }
Exemple #4
0
        /// <summary>
        /// Write the handicaps to a file.
        /// </summary>
        /// <param name="model">junior handicap model</param>
        /// <param name="folder">output folder</param>
        /// <param name="normalisationConfigMngr">normalisation configuration manager</param>
        /// <param name="logger">application logger</param>
        /// <returns>success flag</returns>
        public static bool WriteHandicapTable(
            IModel model,
            string folder,
            INormalisationConfigMngr normalisationConfigMngr,
            IJHcLogger logger)
        {
            bool success = true;

            Messenger.Default.Send(
                new HandicapProgressMessage(
                    "Printing handicap."));

            try
            {
                NormalisationConfigType hcConfiguration =
                    normalisationConfigMngr.ReadNormalisationConfiguration();

                using (StreamWriter writer = new StreamWriter(Path.GetFullPath(folder) +
                                                              Path.DirectorySeparatorChar +
                                                              model.CurrentSeason.Name +
                                                              model.CurrentEvent.Name +
                                                              ResultsPaths.handicapTable +
                                                              ResultsPaths.csvExtension))
                {
                    List <AthleteDetails> athletes = new List <AthleteDetails>(model.Athletes.AthleteDetails);
                    athletes = athletes.OrderBy(athlete => athlete.Forename).ToList();
                    athletes = athletes.OrderBy(athlete => athlete.Surname).ToList();

                    foreach (AthleteDetails athlete in athletes)
                    {
                        if (!athlete.Active)
                        {
                            continue;
                        }

                        string number =
                            model.Athletes.GetAthleteRunningNumber(
                                athlete.Key);
                        TimeType newHandicap =
                            model.CurrentSeason.GetAthleteHandicap(
                                athlete.Key,
                                hcConfiguration);
                        string consented =
                            athlete.SignedConsent
                            ? "Y"
                            : string.Empty;

                        // Use default handicap, if the athlete is not registered for the current season.
                        if (newHandicap == null)
                        {
                            newHandicap = athlete.RoundedHandicap;
                        }

                        string entryString = athlete.Name +
                                             ResultsPaths.separator +
                                             number +
                                             ResultsPaths.separator +
                                             newHandicap +
                                             ResultsPaths.separator +
                                             athlete.Club +
                                             ResultsPaths.separator +
                                             consented;

                        writer.WriteLine(entryString);
                    }
                    success = true;
                }
            }
            catch (Exception ex)
            {
                logger.WriteLog("Error, failed to print handicap: " + ex.ToString());

                Messenger.Default.Send(
                    new HandicapErrorMessage(
                        "Failed to print handicap"));

                success = false;
            }

            return(success);
        }
Exemple #5
0
        /// <summary>
        /// Write the summary to a file.
        /// </summary>
        /// <param name="model">junior handicap model</param>
        /// <param name="folder">output folder</param>
        /// <param name="logger">application logger</param>
        /// <returns>success folder</returns>
        public static bool WriteEventSummaryTable(
            IModel model,
            string folder,
            IJHcLogger logger)
        {
            bool success = true;

            Messenger.Default.Send(
                new HandicapProgressMessage(
                    "Printing event summary"));

            try
            {
                using (StreamWriter writer = new StreamWriter(Path.GetFullPath(folder) +
                                                              Path.DirectorySeparatorChar +
                                                              model.CurrentSeason.Name +
                                                              model.CurrentEvent.Name +
                                                              ResultsPaths.summaryTable +
                                                              ResultsPaths.csvExtension))
                {
                    writer.WriteLine(model.CurrentEvent.Name +
                                     ResultsPaths.separator +
                                     model.CurrentEvent.Date);
                    writer.WriteLine();
                    writer.WriteLine("Number Of Runners" +
                                     ResultsPaths.separator +
                                     model.CurrentEvent.Summary.Runners);
                    writer.WriteLine("Number Of Girls" +
                                     ResultsPaths.separator +
                                     model.CurrentEvent.Summary.FemaleRunners);
                    writer.WriteLine("Number Of Boys" +
                                     ResultsPaths.separator +
                                     model.CurrentEvent.Summary.MaleRunners);
                    writer.WriteLine("Number Of Personal Bests" +
                                     ResultsPaths.separator +
                                     model.CurrentEvent.Summary.PBs);
                    writer.WriteLine("Number Of Season Bests" +
                                     ResultsPaths.separator +
                                     model.CurrentEvent.Summary.SBs);
                    writer.WriteLine("Number Of First Timers" +
                                     ResultsPaths.separator +
                                     model.CurrentEvent.Summary.FirstTimers);
                    writer.WriteLine("Fastest Girl" +
                                     ResultsPaths.separator +
                                     model.CurrentEvent.Summary.FastestGirl +
                                     ResultsPaths.separator +
                                     model.CurrentEvent.Summary.FastestGirlTime);
                    writer.WriteLine("Fastest Boy" +
                                     ResultsPaths.separator +
                                     model.CurrentEvent.Summary.FastestBoy +
                                     ResultsPaths.separator +
                                     model.CurrentEvent.Summary.FastestBoyTime);
                }
            }
            catch (Exception ex)
            {
                logger.WriteLog("Error, failed to print event summary: " + ex.ToString());

                Messenger.Default.Send(
                    new HandicapErrorMessage(
                        "Failed to print event summary"));

                success = false;
            }

            return(success);
        }
Exemple #6
0
        /// <summary>
        /// Save the Team Trophy to the file.
        /// </summary>
        /// <param name="model">junior handicap model</param>
        /// <param name="folderPath">path of the folder to save the table to</param>
        /// <param name="eventData">event data wrapper</param>
        /// <param name="logger">application logger</param>
        /// <returns>success flag</returns>
        private static bool WriteOverallSeasonTable(
            IModel model,
            string folderPath,
            IEventData eventData,
            IJHcLogger logger)
        {
            bool            success    = true;
            List <DateType> eventDates = new List <DateType>();

            try
            {
                string outPath =
                    $"{folderPath}{ResultsPaths.teamTrophyPointsTable}{ResultsPaths.csvExtension}";

                using (
                    StreamWriter writer =
                        new StreamWriter(
                            outPath))
                {
                    string titleString = "Club" + ResultsPaths.separator + "TotalPoints";

                    foreach (string eventName in model.CurrentSeason.Events)
                    {
                        titleString = titleString + ResultsPaths.separator + eventName;
                        eventDates.Add(eventData.LoadEventData(model.CurrentSeason.Name, eventName).EventDate);
                    }

                    writer.WriteLine(titleString);

                    foreach (ClubSeasonDetails club in model.CurrentSeason.Clubs)
                    {
                        int totalScore =
                            TeamTrophyTableWriter.CalculateTotalScore(
                                club.TeamTrophy.Events);

                        if (totalScore > 0)
                        {
                            string entryString =
                                $"{club.Name}{ResultsPaths.separator}{totalScore}";

                            foreach (DateType eventDate in eventDates)
                            {
                                if (club.MobTrophy.Points.Exists(points => points.Date == eventDate))
                                {
                                    ITeamTrophyEvent foundEvent =
                                        club.TeamTrophy.Events.Find(
                                            points =>
                                            points.Date == eventDate);

                                    int eventPoints =
                                        foundEvent != null
                                        ? foundEvent.Score
                                        : 0;

                                    entryString = entryString + ResultsPaths.separator + eventPoints;
                                }
                                else
                                {
                                    entryString += ResultsPaths.separator;
                                }
                            }

                            writer.WriteLine(entryString);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.WriteLog("Error, failed to print club points table: " + ex.ToString());

                Messenger.Default.Send(
                    new HandicapErrorMessage(
                        "Failed to print club points table"));

                success = false;
            }

            return(success);
        }
Exemple #7
0
        /// <summary>
        /// Write the results to a comma separated file
        /// </summary>
        /// <param name="model">junior handicap model</param>
        /// <param name="folder">folder to save the file to</param>
        /// <param name="logger">application logger</param>
        /// <returns>success flag</returns>
        public static bool WriteResultsTable(
            IModel model,
            string folder,
            IJHcLogger logger)
        {
            bool success = false;

            Messenger.Default.Send(
                new HandicapProgressMessage(
                    "Printing results."));

            try
            {
                using (StreamWriter writer = new StreamWriter(Path.GetFullPath(folder) +
                                                              Path.DirectorySeparatorChar +
                                                              model.CurrentSeason.Name +
                                                              model.CurrentEvent.Name +
                                                              ResultsPaths.resultsTable +
                                                              ResultsPaths.csvExtension))
                {
                    foreach (ResultsTableEntry entry in model.CurrentEvent.ResultsTable.Entries)
                    {
                        string pbString = entry.PB ? "Y" : string.Empty;
                        string sbString = entry.SB ? "Y" : string.Empty;

                        string entryString = entry.Name +
                                             ResultsPaths.separator +
                                             entry.Time +
                                             ResultsPaths.separator +
                                             entry.RunningTime +
                                             ResultsPaths.separator +
                                             entry.Handicap +
                                             ResultsPaths.separator +
                                             entry.RunningOrder.ToString() +
                                             ResultsPaths.separator +
                                             pbString +
                                             ResultsPaths.separator +
                                             sbString +
                                             ResultsPaths.separator +
                                             entry.Points.TotalPoints +
                                             ResultsPaths.separator +
                                             entry.HarmonyPoints +
                                             ResultsPaths.separator +
                                             entry.Notes +
                                             ResultsPaths.separator +
                                             entry.RaceNumber +
                                             ResultsPaths.separator +
                                             entry.Club;

                        writer.WriteLine(entryString);
                    }
                    success = true;
                }
            }
            catch (Exception ex)
            {
                logger.WriteLog("Error, failed to print results: " + ex.ToString());

                Messenger.Default.Send(
                    new HandicapErrorMessage(
                        "Failed to print results"));

                success = false;
            }

            return(success);
        }
Exemple #8
0
        /// <summary>
        /// Write the club points (harmony) table to a file
        /// </summary>
        /// <param name="model">junior handicap model</param>
        /// <param name="folder">output folder</param>
        /// <param name="eventData">event data wrapper</param>
        /// <param name="logger">application logger</param>
        /// <returns>success flag</returns>
        public static bool Write(
            IModel model,
            string folder,
            IEventData eventData,
            IJHcLogger logger)
        {
            bool            success    = true;
            List <DateType> eventDates = new List <DateType>();

            Messenger.Default.Send(
                new HandicapProgressMessage(
                    "Saving club points (harmony) table"));

            try
            {
                using (StreamWriter writer =
                           new StreamWriter(
                               Path.GetFullPath(folder) +
                               Path.DirectorySeparatorChar +
                               model.CurrentSeason.Name +
                               model.CurrentEvent.Name +
                               ResultsPaths.clubHarmonyTable +
                               ResultsPaths.csvExtension))
                {
                    string titleString = "Club" + ResultsPaths.separator + "TotalPoints";

                    foreach (string eventName in model.CurrentSeason.Events)
                    {
                        titleString = titleString + ResultsPaths.separator + eventName;
                        eventDates.Add(eventData.LoadEventData(model.CurrentSeason.Name, eventName).EventDate);
                    }

                    writer.WriteLine(titleString);

                    foreach (ClubSeasonDetails club in model.CurrentSeason.Clubs)
                    {
                        if (club.ClubCompetition.TotalPoints > 0)
                        {
                            string entryString =
                                $"{club.Name}{ResultsPaths.separator}{club.HarmonyCompetition.TotalScore}";

                            foreach (DateType eventDate in eventDates)
                            {
                                if (club.ClubCompetition.Points.Exists(points => points.Date == eventDate))
                                {
                                    int eventPoints = club.HarmonyCompetition.Events.Find(points => points.Date == eventDate).TotalAthletePoints;

                                    entryString = entryString + ResultsPaths.separator + eventPoints;
                                }
                                else
                                {
                                    entryString += ResultsPaths.separator;
                                }
                            }

                            writer.WriteLine(entryString);
                        }
                    }

                    success = true;
                }
            }
            catch (Exception ex)
            {
                logger.WriteLog("Error, failed to print club points table: " + ex.ToString());

                Messenger.Default.Send(
                    new HandicapErrorMessage(
                        "Failed to print club points table"));

                success = false;
            }

            return(success);
        }
Exemple #9
0
        /// <summary>
        /// Write the Mob Trophy points table to a file
        /// </summary>
        /// <param name="model">junior handicap model</param>
        /// <param name="folder">output folder</param>
        /// <param name="eventData">event data wrapper</param>
        /// <param name="logger">application logger</param>
        /// <returns>success flag</returns>
        public static bool WriteMobTrophyPointsTable(
            IModel model,
            string folder,
            IEventData eventData,
            IJHcLogger logger)
        {
            bool            success    = true;
            List <DateType> eventDates = new List <DateType>();

            Messenger.Default.Send(
                new HandicapProgressMessage(
                    "Saving Mob Trophy points table"));

            // Export the overall season table.
            try
            {
                string outPath =
                    Path.GetFullPath(folder) +
                    Path.DirectorySeparatorChar +
                    model.CurrentSeason.Name +
                    model.CurrentEvent.Name +
                    ResultsPaths.mobTrophyPointsTable +
                    ResultsPaths.csvExtension;

                using (StreamWriter writer = new StreamWriter(outPath))
                {
                    string titleString = "Club" + ResultsPaths.separator + "TotalPoints";

                    foreach (string eventName in model.CurrentSeason.Events)
                    {
                        titleString = titleString + ResultsPaths.separator + eventName;
                        eventDates.Add(eventData.LoadEventData(model.CurrentSeason.Name, eventName).EventDate);
                    }

                    writer.WriteLine(titleString);

                    foreach (ClubSeasonDetails club in model.CurrentSeason.Clubs)
                    {
                        if (club.MobTrophy.TotalPoints > 0)
                        {
                            string entryString =
                                $"{club.Name}{ResultsPaths.separator}{club.MobTrophy.TotalPoints}";

                            foreach (DateType eventDate in eventDates)
                            {
                                if (club.MobTrophy.Points.Exists(points => points.Date == eventDate))
                                {
                                    int eventPoints = club.MobTrophy.Points.Find(points => points.Date == eventDate).TotalPoints;

                                    entryString = entryString + ResultsPaths.separator + eventPoints;
                                }
                                else
                                {
                                    entryString = entryString + ResultsPaths.separator;
                                }
                            }

                            writer.WriteLine(entryString);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.WriteLog("Error, failed to print mob trophy points table: " + ex.ToString());

                Messenger.Default.Send(
                    new HandicapErrorMessage(
                        "Failed to print mob trophy points table"));

                success = false;
            }

            // Export the table for the current event.
            try
            {
                using (
                    StreamWriter writer =
                        new StreamWriter(
                            Path.GetFullPath(folder) +
                            Path.DirectorySeparatorChar +
                            model.CurrentSeason.Name +
                            model.CurrentEvent.Name +
                            ResultsPaths.mobTrophyPointsTableCurrentEvent +
                            ResultsPaths.csvExtension))
                {
                    string titleString =
                        "Club" + ResultsPaths.separator +
                        "Total Points" + ResultsPaths.separator +
                        "Finishing Points" + ResultsPaths.separator +
                        "Position Points" + ResultsPaths.separator +
                        "Season Best Points";

                    writer.WriteLine(titleString);

                    foreach (ClubSeasonDetails club in model.CurrentSeason.Clubs)
                    {
                        if (club.MobTrophy.TotalPoints > 0)
                        {
                            ICommonPoints currentEventPoints =
                                club.MobTrophy.Points.Find(
                                    e => e.Date == model.CurrentEvent.Date);

                            if (currentEventPoints == null)
                            {
                                continue;
                            }

                            string entryString =
                                club.Name + ResultsPaths.separator +
                                currentEventPoints.TotalPoints + ResultsPaths.separator +
                                currentEventPoints.FinishingPoints + ResultsPaths.separator +
                                currentEventPoints.PositionPoints + ResultsPaths.separator +
                                currentEventPoints.BestPoints;
                            writer.WriteLine(entryString);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.WriteLog("Error, failed to print mob trophy points table: " + ex.ToString());

                Messenger.Default.Send(
                    new HandicapErrorMessage(
                        "Failed to print mob trophy points table"));

                success = false;
            }

            return(success);
        }
        /// <summary>
        /// Import the times from <paramref name="fileName"/>
        /// </summary>
        /// <param name="fileName">file containing times</param>
        /// <param name="commonIo">common Io manager</param>
        /// <param name="logger">program logger</param>
        /// <returns>collection of race times.</returns>
        public static List <RawPositionResults> Import(
            string fileName,
            ICommonIo commonIo,
            IJHcLogger logger)
        {
            List <RawPositionResults> rawImportedPositions = new List <RawPositionResults>();
            List <List <string> >     rawPositions         = commonIo.ReadPairedStringListFomFile(fileName);

            foreach (List <string> positionAthleteData in rawPositions)
            {
                // Ensure 2 results present
                if (positionAthleteData.Count == 2)
                {
                    int?   position   = null;
                    string raceNumber = null;

                    string result1 = ResultsDecoder.OpnScannerResultsBarcode(positionAthleteData[0]);
                    string result2 = ResultsDecoder.OpnScannerResultsBarcode(positionAthleteData[1]);

                    UpdatePositionAthleteData(
                        result1,
                        ref position,
                        ref raceNumber);
                    UpdatePositionAthleteData(
                        result2,
                        ref position,
                        ref raceNumber);

                    if (position != null && raceNumber != null)
                    {
                        RawPositionResults results =
                            new RawPositionResults(
                                raceNumber,
                                (int)position);
                        rawImportedPositions.Add(results);
                    }
                    else
                    {
                        string errorString = $"Can't decode {positionAthleteData[0]}/{positionAthleteData[1]}";
                        HandicapProgressMessage message =
                            new HandicapProgressMessage(
                                errorString);

                        Messenger.Default.Send(
                            new HandicapProgressMessage(
                                errorString));

                        logger.WriteLog(errorString);
                    }
                }
                else
                {
                    string errorString = "Please check results, result/barcode pair invalid";
                    Messenger.Default.Send(
                        new HandicapProgressMessage(
                            errorString));
                    logger.WriteLog(errorString);
                }
            }

            rawImportedPositions =
                rawImportedPositions
                .OrderBy(position => position.Position)
                .ToList();

            return(rawImportedPositions);
        }