From fe4ee123f6283e27a36fb9650a3a0f8e7178c7cc Mon Sep 17 00:00:00 2001 From: LexTrafico Date: Mon, 16 Jun 2025 02:27:59 +0200 Subject: [PATCH 1/2] KAR richtingnummers instelbaar in GUI + toevoegen aan SpecGen --- .../Models/Models/Prio_HD/HDIngreepModel.cs | 1 + .../Models/Models/Prio_HD/PrioIngreepModel.cs | 2 + .../Functionality/PrioCodeGenerator.cs | 6 + .../TLCGen.Specificator/TableGenerator.cs | 280 +++++++++++++----- .../DataTypes/PrioIngreepView.xaml | 17 +- .../DataTypes/PrioIngreepViewModel.cs | 36 +++ .../PrioriteitsTab/HD/HDIngreepViewModel.cs | 34 +++ 7 files changed, 299 insertions(+), 77 deletions(-) diff --git a/TLCGen.Dependencies/TLCGen.Dependencies/Models/Models/Prio_HD/HDIngreepModel.cs b/TLCGen.Dependencies/TLCGen.Dependencies/Models/Models/Prio_HD/HDIngreepModel.cs index be0ddb57..8e1bf8fd 100644 --- a/TLCGen.Dependencies/TLCGen.Dependencies/Models/Models/Prio_HD/HDIngreepModel.cs +++ b/TLCGen.Dependencies/TLCGen.Dependencies/Models/Models/Prio_HD/HDIngreepModel.cs @@ -37,6 +37,7 @@ public class HDIngreepModel : IComparable [HasDefault(false)] public string OpticomRelatedInput { get; set; } public bool Sirene { get; set; } + public int KARSignaalGroepNummerHD { get; set; } public bool InmeldingOokDoorToepassen { get; set; } public int InmeldingOokDoorFase { get; set; } diff --git a/TLCGen.Dependencies/TLCGen.Dependencies/Models/Models/Prio_HD/PrioIngreepModel.cs b/TLCGen.Dependencies/TLCGen.Dependencies/Models/Models/Prio_HD/PrioIngreepModel.cs index 7978426d..33c66a9b 100644 --- a/TLCGen.Dependencies/TLCGen.Dependencies/Models/Models/Prio_HD/PrioIngreepModel.cs +++ b/TLCGen.Dependencies/TLCGen.Dependencies/Models/Models/Prio_HD/PrioIngreepModel.cs @@ -63,6 +63,8 @@ public class PrioIngreepModel : IComparable public int GeconditioneerdePrioOpTijd { get; set; } public int GeconditioneerdePrioTeLaat { get; set; } + public int KARSignaalGroepNummer { get; set; } + public HalfstarPrioIngreepModel HalfstarIngreepData { get; set; } [HasDefault(false)] diff --git a/TLCGen.PluggedInItems/TLCGen.Generators.CCOL/CodeGeneration/Functionality/PrioCodeGenerator.cs b/TLCGen.PluggedInItems/TLCGen.Generators.CCOL/CodeGeneration/Functionality/PrioCodeGenerator.cs index 00ff8759..f4630e5c 100644 --- a/TLCGen.PluggedInItems/TLCGen.Generators.CCOL/CodeGeneration/Functionality/PrioCodeGenerator.cs +++ b/TLCGen.PluggedInItems/TLCGen.Generators.CCOL/CodeGeneration/Functionality/PrioCodeGenerator.cs @@ -689,6 +689,9 @@ public override void CollectCCOLElements(ControllerModel c) { if (!int.TryParse(sg.Naam, out var iFc)) continue; if (c.PrioData.VerlaagHogeSignaalGroepNummers && iFc > 200) iFc -= 200; + var ingr = c.PrioData.PrioIngrepen.FirstOrDefault(x => x.FaseCyclus == sg.Naam && x.HasPrioIngreepKAR()); + var iFcm = ingr.KARSignaalGroepNummer; + iFc = (iFcm > 0) ? iFcm : iFc; _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement( $"{_prmkarsg}{sg.Naam}", iFc, CCOLElementTimeTypeEnum.None, _prmkarsg, sg.Naam)); } @@ -697,6 +700,9 @@ public override void CollectCCOLElements(ControllerModel c) { if (!int.TryParse(hd.FaseCyclus, out var iFc)) continue; if (c.PrioData.VerlaagHogeSignaalGroepNummers && iFc > 200) iFc -= 200; + var ingr = c.PrioData.HDIngrepen.FirstOrDefault(x => x.FaseCyclus == hd.FaseCyclus && x.KAR); + var iFcm = ingr.KARSignaalGroepNummerHD; + iFc = (iFcm > 0) ? iFcm : iFc; _myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement( $"{_prmkarsghd}{hd.FaseCyclus}", iFc, CCOLElementTimeTypeEnum.None, _prmkarsghd, hd.FaseCyclus)); diff --git a/TLCGen.PluggedInItems/TLCGen.Specificator/TableGenerator.cs b/TLCGen.PluggedInItems/TLCGen.Specificator/TableGenerator.cs index f7171350..0ff85b48 100644 --- a/TLCGen.PluggedInItems/TLCGen.Specificator/TableGenerator.cs +++ b/TLCGen.PluggedInItems/TLCGen.Specificator/TableGenerator.cs @@ -593,8 +593,7 @@ internal static IEnumerable GetTable_Wachtgroen(Control { l.Add([ mvfc.Naam, - mvfc.Wachtgroen.GetDescription(), - + mvfc.Wachtgroen != NooitAltijdAanUitEnum.Altijd ? mvfc.Wachtgroen.GetDescription() : "-", (mvfc.WachtgroenType == WachtgroenTypeEnum.Geen ? " 0: " : mvfc.WachtgroenType == WachtgroenTypeEnum.GroenVasthouden ? " 1: " : mvfc.WachtgroenType == WachtgroenTypeEnum.GroenVasthoudenEnAanvragen ? " 2: " : @@ -2112,91 +2111,206 @@ internal static IEnumerable GetTable_OV_PrioriteitsInst List> l; if (c.PrioData.PrioIngrepen.Any(x => x.GeconditioneerdePrioriteit != Models.Enumerations.NooitAltijdAanUitEnum.Nooit)) { - l = new List> + if (c.PrioData.KARSignaalGroepNummersInParameters) { - new List + l = new List> { - "Signaalgroep (##)", - "Geconditioneerde prio", - "Gec. Te vroeg PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmovstipttevroeg") + "##bus", - "Gec. Op tijd PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmovstiptoptijd") + "##bus", - "Gec. Te laat PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmovstipttelaat") + "##bus", - "Ongecond. PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmprio") + "##bus", - "Rijtijd ongeh. PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmrto") + "##bus", - "Rijtijd bep. geh. PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmrtbg") + "##bus", - "Rijtijd geh. PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmrtg") + "##bus", - "Bezettijd geh. T " + CCOLGeneratorSettingsProvider.Default.GetElementName("tbtovg") + "##bus", - "Blokkeringstijd T " + CCOLGeneratorSettingsProvider.Default.GetElementName("tblk") + "##bus", - "Groenbewaking T " + CCOLGeneratorSettingsProvider.Default.GetElementName("tgb") + "##bus", - "Ondermaximum PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmomx") + "##bus" + new List + { + "Signaalgroep (##)", + "KAR richtingnummer PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmkarsg") + "##", + "Geconditioneerde prio", + "Gec. Te vroeg PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmovstipttevroeg") + "##bus", + "Gec. Op tijd PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmovstiptoptijd") + "##bus", + "Gec. Te laat PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmovstipttelaat") + "##bus", + "Ongecond. PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmprio") + "##bus", + "Rijtijd ongeh. PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmrto") + "##bus", + "Rijtijd bep. geh. PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmrtbg") + "##bus", + "Rijtijd geh. PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmrtg") + "##bus", + "Bezettijd geh. T " + CCOLGeneratorSettingsProvider.Default.GetElementName("tbtovg") + "##bus", + "Blokkeringstijd T " + CCOLGeneratorSettingsProvider.Default.GetElementName("tblk") + "##bus", + "Groenbewaking T " + CCOLGeneratorSettingsProvider.Default.GetElementName("tgb") + "##bus", + "Ondermaximum PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmomx") + "##bus" + } + }; + foreach (var ov in c.PrioData.PrioIngrepen.Where(x => x.HasOVIngreepDSI() || x.HasOVIngreepVecom() || + x.HasOVIngreepVecomIO() || x.HasOVIngreepWissel() || x.HasPrioIngreepKAR())) + { + int iFc = 0; + if (int.TryParse(ov.FaseCyclus, out iFc)) + { + if (c.PrioData.VerlaagHogeSignaalGroepNummers && iFc > 200) iFc -= 200; + var ingr = c.PrioData.PrioIngrepen.FirstOrDefault(x => x.FaseCyclus == ov.FaseCyclus && x.HasPrioIngreepKAR()); + var iFcm = ingr.KARSignaalGroepNummer; + iFc = (iFcm > 0) ? iFcm : iFc; + } + var cp = ov.GeconditioneerdePrioriteit != Models.Enumerations.NooitAltijdAanUitEnum.Nooit; + var opties = 0; + if (ov.AfkappenConflicten || ov.AfkappenConflictenPrio) opties += 100; + if (ov.AfkappenConflictenPrio) opties += 300; + if (ov.TussendoorRealiseren) opties += 3; + if (ov.VasthoudenGroen) opties += 20; + var sopties = opties == 0 ? "0" : opties.ToString().Replace("0", ""); + l.Add(new List + { + ov.FaseCyclus, + iFc.ToString(), + ov.GeconditioneerdePrioriteit.GetDescription(), + cp ? ov.GeconditioneerdePrioTeVroeg.ToString() : "-", + cp ? ov.GeconditioneerdePrioOpTijd.ToString() : "-", + cp ? ov.GeconditioneerdePrioTeLaat.ToString() : "-", + sopties, + ov.RijTijdOngehinderd.ToString(), + ov.RijTijdBeperktgehinderd.ToString(), + ov.RijTijdGehinderd.ToString(), + ov.BezettijdPrioGehinderd.ToString(), + ov.BlokkeertijdNaPrioIngreep.ToString(), + ov.GroenBewaking.ToString(), + ov.OnderMaximum.ToString() + }); } - }; - foreach (var ov in c.PrioData.PrioIngrepen.Where(x => x.HasOVIngreepDSI() || x.HasOVIngreepVecom() || - x.HasOVIngreepVecomIO() || x.HasOVIngreepWissel() || x.HasPrioIngreepKAR() )) - { - var cp = ov.GeconditioneerdePrioriteit != Models.Enumerations.NooitAltijdAanUitEnum.Nooit; - var opties = 0; - if (ov.AfkappenConflicten || ov.AfkappenConflictenPrio) opties += 100; - if (ov.AfkappenConflictenPrio) opties += 300; - if (ov.TussendoorRealiseren) opties += 3; - if (ov.VasthoudenGroen) opties += 20; - var sopties = opties == 0 ? "0" : opties.ToString().Replace("0", ""); - l.Add(new List + } + else + { + l = new List> { - ov.FaseCyclus, - ov.GeconditioneerdePrioriteit.GetDescription(), - cp ? ov.GeconditioneerdePrioTeVroeg.ToString() : "-", - cp ? ov.GeconditioneerdePrioOpTijd.ToString() : "-", - cp ? ov.GeconditioneerdePrioTeLaat.ToString() : "-", - sopties, - ov.RijTijdOngehinderd.ToString(), - ov.RijTijdBeperktgehinderd.ToString(), - ov.RijTijdGehinderd.ToString(), - ov.BezettijdPrioGehinderd.ToString(), - ov.BlokkeertijdNaPrioIngreep.ToString(), - ov.GroenBewaking.ToString(), - ov.OnderMaximum.ToString() - }); + new List + { + "Signaalgroep (##)", + "Geconditioneerde prio", + "Gec. Te vroeg PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmovstipttevroeg") + "##bus", + "Gec. Op tijd PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmovstiptoptijd") + "##bus", + "Gec. Te laat PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmovstipttelaat") + "##bus", + "Ongecond. PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmprio") + "##bus", + "Rijtijd ongeh. PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmrto") + "##bus", + "Rijtijd bep. geh. PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmrtbg") + "##bus", + "Rijtijd geh. PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmrtg") + "##bus", + "Bezettijd geh. T " + CCOLGeneratorSettingsProvider.Default.GetElementName("tbtovg") + "##bus", + "Blokkeringstijd T " + CCOLGeneratorSettingsProvider.Default.GetElementName("tblk") + "##bus", + "Groenbewaking T " + CCOLGeneratorSettingsProvider.Default.GetElementName("tgb") + "##bus", + "Ondermaximum PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmomx") + "##bus" + } + }; + foreach (var ov in c.PrioData.PrioIngrepen.Where(x => x.HasOVIngreepDSI() || x.HasOVIngreepVecom() || + x.HasOVIngreepVecomIO() || x.HasOVIngreepWissel() || x.HasPrioIngreepKAR())) + { + var cp = ov.GeconditioneerdePrioriteit != Models.Enumerations.NooitAltijdAanUitEnum.Nooit; + var opties = 0; + if (ov.AfkappenConflicten || ov.AfkappenConflictenPrio) opties += 100; + if (ov.AfkappenConflictenPrio) opties += 300; + if (ov.TussendoorRealiseren) opties += 3; + if (ov.VasthoudenGroen) opties += 20; + var sopties = opties == 0 ? "0" : opties.ToString().Replace("0", ""); + l.Add(new List + { + ov.FaseCyclus, + ov.GeconditioneerdePrioriteit.GetDescription(), + cp ? ov.GeconditioneerdePrioTeVroeg.ToString() : "-", + cp ? ov.GeconditioneerdePrioOpTijd.ToString() : "-", + cp ? ov.GeconditioneerdePrioTeLaat.ToString() : "-", + sopties, + ov.RijTijdOngehinderd.ToString(), + ov.RijTijdBeperktgehinderd.ToString(), + ov.RijTijdGehinderd.ToString(), + ov.BezettijdPrioGehinderd.ToString(), + ov.BlokkeertijdNaPrioIngreep.ToString(), + ov.GroenBewaking.ToString(), + ov.OnderMaximum.ToString() + }); + } } } else { - l = new List> + if (c.PrioData.KARSignaalGroepNummersInParameters) { - new List + l = new List> + { + new List + { + "Signaalgroep", + "KAR richtingnummer PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmkarsg") + "##", + "Prioriteitsopties", + "Ongehinderde rijtijd", + "Beperkt rijtijd", + "Gehinderde rijtijd", + "Bezettijd OV gehinderd", + "Blokkeringstijd", + "Groenbewaking", + "Ondermaximum" + } + }; + foreach (var ov in c.PrioData.PrioIngrepen) { - "Signaalgroep", - "Prioriteitsopties", - "Ongehinderde rijtijd", - "Beperkt rijtijd", - "Gehinderde rijtijd", - "Bezettijd OV gehinderd", - "Blokkeringstijd", - "Groenbewaking", - "Ondermaximum" + int iFc = 0; + if (int.TryParse(ov.FaseCyclus, out iFc)) + { + if (c.PrioData.VerlaagHogeSignaalGroepNummers && iFc > 200) iFc -= 200; + var ingr = c.PrioData.PrioIngrepen.FirstOrDefault(x => x.FaseCyclus == ov.FaseCyclus && x.HasPrioIngreepKAR()); + var iFcm = ingr.KARSignaalGroepNummer; + iFc = (iFcm > 0) ? iFcm : iFc; + } + var cp = ov.GeconditioneerdePrioriteit != Models.Enumerations.NooitAltijdAanUitEnum.Nooit; + var opties = 0; + if (ov.AfkappenConflicten || ov.AfkappenConflictenPrio) opties += 100; + if (ov.AfkappenConflictenPrio) opties += 300; + if (ov.TussendoorRealiseren) opties += 3; + if (ov.VasthoudenGroen) opties += 20; + var sopties = opties == 0 ? "0" : opties.ToString().Replace("0", ""); + l.Add(new List + { + ov.FaseCyclus, + iFc.ToString(), + sopties, + ov.RijTijdOngehinderd.ToString(), + ov.RijTijdBeperktgehinderd.ToString(), + ov.RijTijdGehinderd.ToString(), + ov.BezettijdPrioGehinderd.ToString(), + ov.BlokkeertijdNaPrioIngreep.ToString(), + ov.GroenBewaking.ToString(), + ov.OnderMaximum.ToString() + }); } - }; - foreach (var ov in c.PrioData.PrioIngrepen) - { - var cp = ov.GeconditioneerdePrioriteit != Models.Enumerations.NooitAltijdAanUitEnum.Nooit; - var opties = 0; - if (ov.AfkappenConflicten || ov.AfkappenConflictenPrio) opties += 100; - if (ov.AfkappenConflictenPrio) opties += 300; - if (ov.TussendoorRealiseren) opties += 3; - if (ov.VasthoudenGroen) opties += 20; - var sopties = opties == 0 ? "0" : opties.ToString().Replace("0", ""); - l.Add(new List + } + else + { + l = new List> { - ov.FaseCyclus, - sopties, - ov.RijTijdOngehinderd.ToString(), - ov.RijTijdBeperktgehinderd.ToString(), - ov.RijTijdGehinderd.ToString(), - ov.BezettijdPrioGehinderd.ToString(), - ov.BlokkeertijdNaPrioIngreep.ToString(), - ov.GroenBewaking.ToString(), - ov.OnderMaximum.ToString() - }); + new List + { + "Signaalgroep", + "Prioriteitsopties", + "Ongehinderde rijtijd", + "Beperkt rijtijd", + "Gehinderde rijtijd", + "Bezettijd OV gehinderd", + "Blokkeringstijd", + "Groenbewaking", + "Ondermaximum" + } + }; + foreach (var ov in c.PrioData.PrioIngrepen) + { + var cp = ov.GeconditioneerdePrioriteit != Models.Enumerations.NooitAltijdAanUitEnum.Nooit; + var opties = 0; + if (ov.AfkappenConflicten || ov.AfkappenConflictenPrio) opties += 100; + if (ov.AfkappenConflictenPrio) opties += 300; + if (ov.TussendoorRealiseren) opties += 3; + if (ov.VasthoudenGroen) opties += 20; + var sopties = opties == 0 ? "0" : opties.ToString().Replace("0", ""); + l.Add(new List + { + ov.FaseCyclus, + sopties, + ov.RijTijdOngehinderd.ToString(), + ov.RijTijdBeperktgehinderd.ToString(), + ov.RijTijdGehinderd.ToString(), + ov.BezettijdPrioGehinderd.ToString(), + ov.BlokkeertijdNaPrioIngreep.ToString(), + ov.GroenBewaking.ToString(), + ov.OnderMaximum.ToString() + }); + } } } @@ -2259,6 +2373,10 @@ internal static IEnumerable GetTable_HD_Instellingen(Co if (c.HasHDKAR()) { ll.Add("HD via KAR"); + if (c.PrioData.KARSignaalGroepNummersInParameters) + { + ll.Add("KAR richtingnummer PRM " + CCOLGeneratorSettingsProvider.Default.GetElementName("prmkarsghd") + "##"); + } ll.Add("KAR inmeld filtertijd T " + CCOLGeneratorSettingsProvider.Default.GetElementName("thdin") + "##kar"); ll.Add("KAR uitmeld filtertijd T " + CCOLGeneratorSettingsProvider.Default.GetElementName("thduit") + "##kar"); if (c.PrioData.HDIngrepen.Any(x => x.InmeldingOokDoorToepassen)) @@ -2287,7 +2405,19 @@ internal static IEnumerable GetTable_HD_Instellingen(Co ll = new List { ovcf.FaseCyclus }; if (c.HasHDKAR()) { + int iFc = 0; + if (int.TryParse(ovcf.FaseCyclus, out iFc)) + { + if (c.PrioData.VerlaagHogeSignaalGroepNummers && iFc > 200) iFc -= 200; + var ingr = c.PrioData.HDIngrepen.FirstOrDefault(x => x.FaseCyclus == ovcf.FaseCyclus && x.KAR); + var iFcm = ingr.KARSignaalGroepNummerHD; + iFc = (iFcm > 0) ? iFcm : iFc; + } ll.Add(ovcf.KAR.ToCustomString()); + if (c.PrioData.KARSignaalGroepNummersInParameters) + { + ll.Add(iFc.ToString()); + } ll.Add(ovcf.KARInmeldingFilterTijd.ToString()); ll.Add(ovcf.KARUitmeldingFilterTijd.ToString()); if (c.PrioData.HDIngrepen.Any(x => x.InmeldingOokDoorToepassen)) diff --git a/TLCGen/Views/Tabs/PrioriteitsTab/DataTypes/PrioIngreepView.xaml b/TLCGen/Views/Tabs/PrioriteitsTab/DataTypes/PrioIngreepView.xaml index 1b228896..35827284 100644 --- a/TLCGen/Views/Tabs/PrioriteitsTab/DataTypes/PrioIngreepView.xaml +++ b/TLCGen/Views/Tabs/PrioriteitsTab/DataTypes/PrioIngreepView.xaml @@ -41,7 +41,7 @@ - + @@ -61,7 +61,6 @@ -