protected void assignParticipant(RaceParticipant rp) { if (!_snAssignment.IsAssigned(rp)) { _snAssignment.AssignNextFree(rp); } }
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 = ""; } }
private void OnSomethingChanged(object sender, RaceParticipant participantEnteredTrack, RaceParticipant participantLeftTrack, RunResult currentRunResult) { if (participantEnteredTrack != null) { startCountDown(); } }
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); } }
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()); }
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(); }
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(); }
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); } } } }
/// <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); }
public override int Compare(RaceParticipant left, RaceParticipant right) { // According to points, but other direction int compPoints = right.Points.CompareTo(left.Points); return(compPoints); }
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); }
private void raceRun_OnTrackChanged(RaceRun raceRun, RaceParticipant participantEnteredTrack, RaceParticipant participantLeftTrack, RunResult currentRunResult) { if (participantEnteredTrack != null) { _liveTiming.UpdateOnTrack(raceRun, participantEnteredTrack); updateNextStarter(raceRun); } }
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))); }
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); }
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); }
private void assignParticipantsRandomly(List <RaceParticipant> participants) { var wcParticipants = participants.ToList(); while (wcParticipants.Count > 0) { RaceParticipant rp = pickRandomParticipant(wcParticipants); assignParticipant(rp); removeParticipant(wcParticipants, rp); } }
/// <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); }
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); } }
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()); }
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; }
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; }