Example #1
0
 protected void assignParticipant(RaceParticipant rp)
 {
     if (!_snAssignment.IsAssigned(rp))
     {
         _snAssignment.AssignNextFree(rp);
     }
 }
Example #2
0
        private void TxtStartNumber_TextChanged(object sender, TextChangedEventArgs e)
        {
            uint startNumber = 0U;

            try { startNumber = uint.Parse(txtStartNumber.Text); } catch (Exception) { }
            RaceParticipant participant = _race.GetParticipant(startNumber);

            if (participant != null)
            {
                txtParticipant.Text = participant.Fullname;
                RunResult rr = _currentRaceRun.GetResultList().FirstOrDefault(r => r.Participant == participant);
                if (rr != null)
                {
                    cmbDisqualifyReason.Text    = rr.GetDisqualifyText();
                    txtDisqualify.Text          = rr.GetDisqualifyGoal();
                    cmbDisqualify.SelectedValue = rr.ResultCode;
                }
                else
                {
                    txtDisqualify.Text          = "";
                    cmbDisqualify.SelectedValue = null;
                }
            }
            else
            {
                txtParticipant.Text = "";
            }
        }
Example #3
0
 private void OnSomethingChanged(object sender, RaceParticipant participantEnteredTrack, RaceParticipant participantLeftTrack, RunResult currentRunResult)
 {
     if (participantEnteredTrack != null)
     {
         startCountDown();
     }
 }
Example #4
0
        public void ImportParticpantsWithClassAssignment()
        {
            string dbFilename = TestUtilities.CreateWorkingFileFrom(testContextInstance.TestDeploymentDir, @"TestDB_EmptyManyClasses.mdb");

            RaceHorologyLib.Database db = new RaceHorologyLib.Database();
            db.Connect(dbFilename);
            AppDataModel dm = new AppDataModel(db);

            var ir = new ImportReader(@"Teilnehmer_V1_202001301844.csv");

            RaceMapping mapping = new RaceMapping(ir.Columns);

            ClassAssignment cla    = new ClassAssignment(dm.GetParticipantClasses());
            RaceImport      im     = new RaceImport(dm.GetRace(0), mapping, cla);
            var             impRes = im.DoImport(ir.Data);

            Assert.AreEqual(153, impRes.SuccessCount);
            Assert.AreEqual(0, impRes.ErrorCount);

            for (int i = 0; i < 153; i++)
            {
                Participant     p  = dm.GetParticipants()[i];
                RaceParticipant rp = dm.GetRace(0).GetParticipants()[i];

                Assert.AreEqual(string.Format("Name {0}", i + 1), p.Name);
                Assert.AreEqual(string.Format("Name {0}", i + 1), rp.Name);
                Assert.IsTrue(rp.Participant == p);
                Assert.AreSame(cla.DetermineClass(p), p.Class);
                Assert.IsNotNull(p.Class);
            }
        }
Example #5
0
        private void BtnStore_Click(object sender, RoutedEventArgs e)
        {
            uint startNumber = 0U;

            try { startNumber = uint.Parse(txtStartNumber.Text); } catch (Exception) { }

            RaceParticipant participant = _race.GetParticipant(startNumber);


            string disqualifyText = RunResultExtension.JoinDisqualifyText(cmbDisqualifyReason.Text, txtDisqualify.Text);

            if (participant != null)
            {
                _currentRaceRun.SetResultCode(participant, (EResultCode)cmbDisqualify.SelectedValue, disqualifyText);
            }
            else
            {
                foreach (object item in dgDisqualifications.SelectedItems)
                {
                    if (item is RunResult rr)
                    {
                        _currentRaceRun.SetResultCode(rr.Participant, (EResultCode)cmbDisqualify.SelectedValue, disqualifyText);
                    }
                }
            }

            txtStartNumber.Focus();
        }
        public static string ConvertEvent(RaceParticipant particpant, string eventType, RunResult runResult)
        {
            var data = new Dictionary <string, object>
            {
                { "EventType", eventType },
                { "Participant", particpant },
                { "RunResult", runResult }
            };

            var wrappedData = new Dictionary <string, object>
            {
                { "type", "event_participant" },
                { "data", data }
            };

            JsonSerializer serializer = new JsonSerializer();

            serializer.Converters.Add(new RaceParticipantConverter());
            serializer.Converters.Add(new RunResultConverter(true, true));


            StringWriter sw = new StringWriter();

            using (JsonWriter writer = new JsonTextWriter(sw))
            {
                serializer.Serialize(writer, wrappedData);
            }

            return(sw.ToString());
        }
Example #7
0
        private void selectNextParticipant(RaceParticipant currentParticipant)
        {
            RaceParticipant nextParticipant = null;
            bool            useNext         = false;

            foreach (var sle in _rslVP.GetView().SourceCollection.OfType <StartListEntry>())
            {
                if (useNext)
                {
                    nextParticipant = sle.Participant;
                    break;
                }
                if (sle.Participant == currentParticipant)
                {
                    useNext = true;
                }
            }

            if (nextParticipant != null)
            {
                txtStartNumber.Text = nextParticipant.StartNumber.ToString();
            }

            txtStartNumber.Focus();
        }
Example #8
0
        static void writeCompetitor(XmlWriter writer, RaceParticipant participant)
        {
            writer.WriteStartElement("competitor");

            writer.WriteStartElement("dsvcode");
            writer.WriteValue(participant.Participant.CodeOrSvId);
            writer.WriteEndElement();

            writer.WriteStartElement("year_of_birth");
            writer.WriteValue(participant.Participant.Year);
            writer.WriteEndElement();

            writer.WriteStartElement("gender");
            writer.WriteValue(mapSex(participant));
            writer.WriteEndElement();

            writer.WriteStartElement("lastname");
            writer.WriteValue(participant.Name);
            writer.WriteEndElement();

            writer.WriteStartElement("firstname");
            writer.WriteValue(participant.Firstname);
            writer.WriteEndElement();

            writer.WriteStartElement("club");
            writer.WriteValue(participant.Club);
            writer.WriteEndElement();

            writer.WriteStartElement("association"); // TODO: currently Verband = Nation
            writer.WriteValue(participant.Nation);
            writer.WriteEndElement();

            writer.WriteEndElement();
        }
Example #9
0
        private void TestingTime(string command)
        {
            uint startNumber = 0U;

            try { startNumber = uint.Parse(txtStartNumber.Text); } catch (Exception) { }
            RaceParticipant participant = _thisRace.GetParticipant(startNumber);

            TimeSpan time = DateTime.Now - DateTime.Today;

            if (participant != null)
            {
                if (command == "start")
                {
                    _currentRaceRun.SetStartTime(participant, time);
                }
                if (command == "stop")
                {
                    _currentRaceRun.SetFinishTime(participant, time);
                }
                if (command == "clear_start")
                {
                    _currentRaceRun.SetStartTime(participant, null);
                }
                if (command == "clear_stop")
                {
                    _currentRaceRun.SetFinishTime(participant, null);
                }
            }
        }
 private void setToNiZ(RaceParticipant participant)
 {
     System.Windows.Application.Current.Dispatcher.Invoke(() =>
     {
         _raceRun.SetResultCode(participant, RunResult.EResultCode.NiZ);
     });
 }
        private void processStartListTill(RaceParticipant participant)
        {
            // Copy starters (copy to avoid any side effects)
            StartListEntry[] starters = _raceRun.GetStartListProvider().GetViewList().ToArray();

            // Participant enters track
            if (participant != null)
            {
                // Loop over StartList until the starter has been found, remember all not started participants
                List <StartListEntry> toPurge = new List <StartListEntry>();
                foreach (StartListEntry se in starters)
                {
                    if (se.Participant == participant)
                    {
                        break;
                    }

                    toPurge.Add(se);
                }

                // Loop
                for (int i = 0; i < toPurge.Count() - Math.Abs(_startersTillAutoNaS); i++)
                {
                    RaceParticipant rp = toPurge[i].Participant;
                    if (!_raceRun.IsOrWasOnTrack(rp))
                    {
                        _raceRun.SetResultCode(rp, RunResult.EResultCode.NaS);
                    }
                }
            }
        }
Example #12
0
        /// <summary>
        /// Assigns next free startnumber to the participant
        /// </summary>
        /// <param name="participant">The particpant the startnumber to assign</param>
        /// <returns></returns>
        public uint AssignNextFree(RaceParticipant participant)
        {
            uint sn = NextFreeStartNumber;

            Assign(sn, participant);
            return(sn);
        }
Example #13
0
            public override int Compare(RaceParticipant left, RaceParticipant right)
            {
                // According to points, but other direction
                int compPoints = right.Points.CompareTo(left.Points);

                return(compPoints);
            }
Example #14
0
        public RunResultProxy(RaceParticipant rp, RaceRun raceRun)
            : base(rp)
        {
            _raceRun = raceRun;
            _raceRun.GetResultList().CollectionChanged += runResults_CollectionChanged;

            runResults_CollectionChanged(null, null);
        }
        public RunResult createRunResult(RaceParticipant rp, TimeSpan?startTime, TimeSpan?endTime)
        {
            RunResult rr = new RunResult(rp);

            rr.SetStartTime(startTime);
            rr.SetFinishTime(endTime);
            return(rr);
        }
Example #16
0
 private void raceRun_OnTrackChanged(RaceRun raceRun, RaceParticipant participantEnteredTrack, RaceParticipant participantLeftTrack, RunResult currentRunResult)
 {
     if (participantEnteredTrack != null)
     {
         _liveTiming.UpdateOnTrack(raceRun, participantEnteredTrack);
         updateNextStarter(raceRun);
     }
 }
Example #17
0
        public void UpdateInFinish(RaceRun raceRun, RaceParticipant rp)
        {
            SetActiveRaceRun(raceRun);

            var results         = ViewUtilities.ViewToList <RaceResultItem>(raceRun.GetRace().GetTotalResultView());
            var rri4Participant = results.FirstOrDefault(rri => rri.Participant == rp);

            scheduleTransfer(new LTTransfer(getXmlEventResult(raceRun, rri4Participant)));
        }
Example #18
0
        public void ImportParticpantsForRaceWithPoints()
        {
            TestDataGenerator tg = new TestDataGenerator();

            var ir = new ImportReader(@"Teilnehmer_Import_Race.xlsx");

            RaceMapping mapping = new RaceMapping(ir.Columns);

            RaceImport im     = new RaceImport(tg.Model.GetRace(0), mapping);
            var        impRes = im.DoImport(ir.Data);

            Assert.AreEqual(20, impRes.SuccessCount);
            Assert.AreEqual(0, impRes.ErrorCount);

            for (int i = 0; i < 20; i++)
            {
                Participant     p  = tg.Model.GetParticipants()[i];
                RaceParticipant rp = tg.Model.GetRace(0).GetParticipants()[i];

                Assert.AreEqual(string.Format("Name {0}", i + 1), p.Name);

                Assert.AreEqual(string.Format("Name {0}", i + 1), rp.Name);

                if (i == 0)
                {
                    Assert.AreEqual((double)(1), rp.Points);
                }
                else if (i == 1)
                {
                    Assert.AreEqual((double)(2), rp.Points);
                }
                else if (i == 2)
                {
                    Assert.AreEqual((double)(3.3), rp.Points);
                }
                else if (i == 3)
                {
                    Assert.AreEqual((double)(-1), rp.Points);
                }
                else
                {
                    Assert.AreEqual((double)(i + 1), rp.Points);
                }

                if (i == 3)
                {
                    Assert.AreEqual((uint)(0), rp.StartNumber);
                }
                else
                {
                    Assert.AreEqual((uint)(20 - i), rp.StartNumber);
                }

                Assert.IsTrue(rp.Participant == p);
            }
        }
            public RaceParticipant HasFiredAdd(bool reset = true)
            {
                RaceParticipant b = firedAdd;

                if (reset)
                {
                    firedAdd = null;
                }
                return(b);
            }
            public RaceParticipant HasFiredRemove(bool reset = true)
            {
                RaceParticipant b = firedRemove;

                if (reset)
                {
                    firedRemove = null;
                }
                return(b);
            }
Example #21
0
        public RaceParticipant ImportRow(DataRow row)
        {
            Participant importedParticipant = _participantImport.ImportRow(row);

            double points = _partImportUtils.GetPoints(row);
            uint   sn     = _partImportUtils.GetStartNumber(row);

            RaceParticipant rp = _race.AddParticipant(importedParticipant, sn, points);

            return(rp);
        }
Example #22
0
        private void assignParticipantsRandomly(List <RaceParticipant> participants)
        {
            var wcParticipants = participants.ToList();

            while (wcParticipants.Count > 0)
            {
                RaceParticipant rp = pickRandomParticipant(wcParticipants);
                assignParticipant(rp);
                removeParticipant(wcParticipants, rp);
            }
        }
Example #23
0
        /// <summary>
        /// Checks whether the participant seems to be FIS compliant
        ///
        /// - FIS does not accept participants with invalid FIS code
        /// </summary>
        private bool checkParticipantFisCompliant(RaceParticipant rp)
        {
            // Check whether FIS code is a number
            uint nFisCode = 0;

            if (!uint.TryParse(rp.Code, out nFisCode) || nFisCode == 0)
            {
                return(false);
            }

            return(true);
        }
        public RaceParticipant createRaceParticipant(ParticipantClass cla = null, ParticipantCategory cat = null, double points = -1.0)
        {
            Participant     p  = createParticipant(cla: cla, cat: cat);
            RaceParticipant rp = _race.AddParticipant(p);

            if (points > 0)
            {
                rp.Points = points;
            }
            rp.StartNumber = uint.Parse(p.Id);

            return(rp);
        }
Example #25
0
        public void ImportParticpantsForRaceViaZip()
        {
            string[] columnShall =
            {
                "id",
                "nachname",
                "vorname",
                "geschlecht",
                "verein",
                "verbandskürzel",
                "jg",
                "punkte",
                "adr_str",
                "adr_plz",
                "adr_ort"
            };

            void checkColumns(List <string> columns)
            {
                for (int i = 0; i < columnShall.Length; i++)
                {
                    Assert.AreEqual(columnShall[i], columns[i]);
                }
            }

            TestDataGenerator tg = new TestDataGenerator();

            var ir = new ImportZipReader(@"1557MRBR.zip");

            checkColumns(ir.Columns);

            RaceMapping mapping = new RaceMapping(ir.Columns);

            RaceImport im     = new RaceImport(tg.Model.GetRace(0), mapping);
            var        impRes = im.DoImport(ir.Data);

            Assert.AreEqual(3, impRes.SuccessCount);
            Assert.AreEqual(0, impRes.ErrorCount);

            Assert.AreEqual(3, ir.Data.Tables[0].Rows.Count);

            for (int i = 0; i < 2; i++)
            {
                Participant     p  = tg.Model.GetParticipants()[i];
                RaceParticipant rp = tg.Model.GetRace(0).GetParticipants()[i];

                Assert.AreEqual(string.Format("NACHNAME{0}", i + 1), p.Name);
                Assert.AreEqual(string.Format("Vorname{0}", i + 1), rp.Firstname);
                Assert.IsTrue(rp.Participant == p);
            }
        }
Example #26
0
        private void storeResultCodeAndSelectNext(RunResult.EResultCode code)
        {
            uint startNumber = 0U;

            try { startNumber = uint.Parse(txtStartNumber.Text); } catch (Exception) { }
            RaceParticipant participant = _thisRace.GetParticipant(startNumber);

            if (participant != null)
            {
                _currentRaceRun.SetResultCode(participant, code);
            }

            selectNextParticipant(participant);
        }
        public void Race_ManageRun_DataHandling()
        {
            string dbFilename = TestUtilities.CreateWorkingFileFrom(testContextInstance.TestDeploymentDir, @"TestDB_LessParticipants_MultipleRaces.mdb");

            RaceHorologyLib.Database db = new RaceHorologyLib.Database();
            db.Connect(dbFilename);

            AppDataModel dm   = new AppDataModel(db);
            var          race = dm.GetRaces().FirstOrDefault(r => r.RaceType == Race.ERaceType.GiantSlalom);

            // Check correct initial assumptions
            Assert.AreEqual(4, dm.GetRaces().Count);
            Assert.AreEqual(2, race.GetMaxRun());

            RaceParticipant p1 = race.GetParticipant(1);

            Assert.AreEqual(new TimeSpan(0, 0, 0, 22, 850), race.GetRun(0).GetRunResult(p1).GetRunTime());
            Assert.AreEqual(new TimeSpan(0, 0, 0, 21, 950), race.GetRun(1).GetRunResult(p1).GetRunTime());

            race.DeleteRaceRun();
            Assert.AreEqual(1, race.GetMaxRun());
            Assert.AreEqual(new TimeSpan(0, 0, 0, 22, 850), race.GetRun(0).GetRunResult(p1).GetRunTime());


            race.AddRaceRun();
            Assert.AreEqual(2, race.GetMaxRun());
            Assert.AreEqual(new TimeSpan(0, 0, 0, 22, 850), race.GetRun(0).GetRunResult(p1).GetRunTime());
            Assert.AreEqual(new TimeSpan(0, 0, 0, 21, 950), race.GetRun(1).GetRunResult(p1).GetRunTime());


            // Perform Modification and Check again
            race.GetRun(1).SetRunTime(p1, new TimeSpan(0, 0, 0, 10, 110));
            Assert.AreEqual(new TimeSpan(0, 0, 0, 10, 110), race.GetRun(1).GetRunResult(p1).GetRunTime());

            race.DeleteRaceRun();
            Assert.AreEqual(1, race.GetMaxRun());
            Assert.AreEqual(new TimeSpan(0, 0, 0, 22, 850), race.GetRun(0).GetRunResult(p1).GetRunTime());

            race.AddRaceRun();
            Assert.AreEqual(2, race.GetMaxRun());
            Assert.AreEqual(new TimeSpan(0, 0, 0, 22, 850), race.GetRun(0).GetRunResult(p1).GetRunTime());
            Assert.AreEqual(new TimeSpan(0, 0, 0, 10, 110), race.GetRun(1).GetRunResult(p1).GetRunTime());

            //race.UpdateNumberOfRuns(3);
            //Assert.AreEqual(3, race.GetMaxRun());

            //race.UpdateNumberOfRuns(2);
            //Assert.AreEqual(2, race.GetMaxRun());
        }
Example #28
0
        private void assignParticipantsOrdered(List <RaceParticipant> participants)
        {
            var wcParticipants = participants.ToList();

            while (wcParticipants.Count > 0)
            {
                List <RaceParticipant> samePoints = new List <RaceParticipant>();
                do
                {
                    RaceParticipant rp = wcParticipants[0];
                    samePoints.Add(rp);
                    removeParticipant(wcParticipants, rp);
                } while (wcParticipants.Count > 0 && wcParticipants[0].Points == samePoints[0].Points);

                assignParticipantsRandomly(samePoints);
            }
        }
        public void Init(AppDataModel dm, Race race, TabControl parent, TabItem thisTabItem)
        {
            _dm   = dm;
            _race = race;

            ucSaveOrReset.Init("Startnummerzuweisungen", parent, thisTabItem, existingChanges, saveChanges, resetChanges);

            _snaWorkspace = new StartNumberAssignment();
            _snaWorkspace.ParticipantList.CollectionChanged += OnWorkspaceChanged;
            _snaWorkspace.NextStartnumberChanged            += OnNextStartnumberChanged;

            _rpSelector = new ParticipantSelector(_race, _snaWorkspace);
            _rpSelector.CurrentGroupChanged += OnCurrentGroupChangedHandler;
            _rpSelector.GroupingChanged     += OnGroupingChangedHandler;

            cmbDirection.Items.Clear();
            cmbDirection.Items.Add(new CBItem {
                Text = "Aufsteigend", Value = new ParticipantSelector.PointsComparerAsc()
            });
            cmbDirection.Items.Add(new CBItem {
                Text = "Absteigend", Value = new ParticipantSelector.PointsComparerDesc()
            });
            cmbDirection.SelectedIndex = 0;

            _startNUmberAssignmentFilter = new CollectionViewSource()
            {
                Source = _snaWorkspace.ParticipantList
            };
            _startNUmberAssignmentFilter.IsLiveFilteringRequested = true;
            _startNUmberAssignmentFilter.LiveFilteringProperties.Add("StartNumber");
            chkShowEmptyStartNumbers_Click(null, null); // Initially setup the filter
            dgStartList.ItemsSource = _startNUmberAssignmentFilter.View;

            _participantFilter = new CollectionViewSource()
            {
                Source = _race.GetParticipants()
            };
            _participantFilter.Filter += new FilterEventHandler(delegate(object s, FilterEventArgs ea)
            {
                RaceParticipant rr = (RaceParticipant)ea.Item; ea.Accepted = !_snaWorkspace.IsAssigned(rr);
            });
            dgParticipants.ItemsSource = _participantFilter.View;
            //RaceUC.EnableOrDisableColumns(_race, dgStartList);

            IsVisibleChanged += StartNumbersUC_IsVisibleChanged;
        }
Example #30
0
        public Race(List <Driver> inputListOfDrivers, RaceTrack inputRaceTrack)
        {
            InitializeComponent();

            btnFinishRace.IsEnabled = false;

            foreach (var driver in inputListOfDrivers)
            {
                RaceParticipant participant = new RaceParticipant(driver);

                listOfParticipants.Add(participant);
            }

            race       = new BL.Models.Race(listOfParticipants, inputRaceTrack);
            raceEngine = new RaceLogic(race.RaceLength);

            dgParticipants.ItemsSource = listOfParticipants;
        }