diff --git a/dcnsanplanung.bewertung/BewM149.cs b/dcnsanplanung.bewertung/BewM149.cs index 914c7d2..00dd9a2 100644 --- a/dcnsanplanung.bewertung/BewM149.cs +++ b/dcnsanplanung.bewertung/BewM149.cs @@ -1,12 +1,75 @@ using dcnsanplanung.bewertung.M149_3; +using dcnsanplanung.shared.Model; using System.Diagnostics; namespace dcnsanplanung.bewertung { public static class BewM149 { - - // input Kürzel + + public static Dictionary StartWert = new Dictionary() + { + {0,400 }, + {1,300 }, + {2,200 }, + {3,100 }, + {4,0 }, + {5,0 } + }; + + public static float SXj(int sk,float length) + { + return (5 - sk) * length; + } + + public static Dictionary ObjektKlasse(List schaeden) + { + Dictionary result = new Dictionary(); + + result.Add("B", schaeden.Select(x => x.KB).Min()); + result.Add("D", schaeden.Select(x => x.KD).Min()); + result.Add("S", schaeden.Select(x => x.KS).Min()); + + return result; + } + + public static void CalculateHaltung(Haltung haltung) + { + var k = ObjektKlasse(haltung.Kodierungen); + + foreach (var schaden in haltung.Kodierungen) + { + schaden.KBj = SXj(schaden.KB, 2.5f); + schaden.KDj = SXj(schaden.KD, 2.5f); + schaden.KSj = SXj(schaden.KS, 2.5f); + } + + float Haltungslaenge = (float)haltung.Kodierungen.Select(x => x.Entfernung).Max(); + + float KBSumme = haltung.Kodierungen.Select(x => x.KBj).Sum(); + float KSSumme = haltung.Kodierungen.Select(x => x.KSj).Sum(); + float KDSumme = haltung.Kodierungen.Select(x => x.KDj).Sum(); + + float ObjektDSumme = SXj(k["D"],Haltungslaenge); + float ObjektSSumme = SXj(k["S"],Haltungslaenge); + float ObjektBSumme = SXj(k["B"],Haltungslaenge); + + float SchadensDichteD = KDSumme / ObjektDSumme; + float SchadensDichteS = KSSumme / ObjektSSumme; + float SchadensDichteB = KBSumme / ObjektBSumme; + + float zuschlagD = 50 * SchadensDichteD; + float zuschlagS = 50 * SchadensDichteS; + float zuschlagB = 50 * SchadensDichteB; + + int startWertD = StartWert[k["D"]]; + int startWertB = StartWert[k["B"]]; + int startWertS = StartWert[k["S"]]; + + int ZustandPunkteD = startWertD + (int)zuschlagD; + int ZustandPunkteB = startWertB + (int)zuschlagB; + int ZustandPunkteS = startWertS + (int)zuschlagS; + } public static Dictionary Klassifiziere(string hauptcode, string ch1, string ch2, string q1, string q2, int dn) { AbstractCode? abstractCode = null; diff --git a/dcnsanplanung.bewertung/dcnsanplanung.bewertung.csproj b/dcnsanplanung.bewertung/dcnsanplanung.bewertung.csproj index cfadb03..d66d8f0 100644 --- a/dcnsanplanung.bewertung/dcnsanplanung.bewertung.csproj +++ b/dcnsanplanung.bewertung/dcnsanplanung.bewertung.csproj @@ -6,4 +6,8 @@ enable + + + + diff --git a/dcnsanplanung.bewertungTests/BewM149Tests.cs b/dcnsanplanung.bewertungTests/BewM149Tests.cs index 8928882..ef5a3f0 100644 --- a/dcnsanplanung.bewertungTests/BewM149Tests.cs +++ b/dcnsanplanung.bewertungTests/BewM149Tests.cs @@ -17,5 +17,14 @@ namespace dcnsanplanung.bewertung.Tests var t = BewM149.Klassifiziere("BAB", "B", "A", "10", "10", 0); } + + [TestMethod()] + public void SXjTest() + { + + Assert.AreEqual(0, BewM149.SXj(5,2.5f)); + Assert.AreEqual(7.5, BewM149.SXj(2, 2.5f)); + Assert.AreEqual(5, BewM149.SXj(3, 2.5f)); + } } } \ No newline at end of file diff --git a/dcnsanplanung.shared/Model/Schaden.cs b/dcnsanplanung.shared/Model/Schaden.cs index c404767..330dad1 100644 --- a/dcnsanplanung.shared/Model/Schaden.cs +++ b/dcnsanplanung.shared/Model/Schaden.cs @@ -1,4 +1,6 @@ -namespace dcnsanplanung.shared.Model +using System.Reflection.Metadata.Ecma335; + +namespace dcnsanplanung.shared.Model { public class Schaden : DBObjekt { @@ -13,8 +15,18 @@ public int KD { get; set; } public int KS { get; set; } public int KB { get; set; } + public float KDj { get; set; } + public float KBj { get; set; } + public float KSj { get; set; } public string StreckenschadenCode { get; set; } = string.Empty; public List Sanierungsvorgaben { get; set; } + public bool IsStreckenSchaden + { + get + { + return StreckenschadenCode != string.Empty; + } + } } public class Sanierungsvorgabe @@ -22,4 +34,3 @@ public string Vorgabe { get; set; } = ""; } } - \ No newline at end of file diff --git a/dcnsanplanung.wpf/ViewModel/HaltungObjektViewModel.cs b/dcnsanplanung.wpf/ViewModel/HaltungObjektViewModel.cs index cad61d5..98d2468 100644 --- a/dcnsanplanung.wpf/ViewModel/HaltungObjektViewModel.cs +++ b/dcnsanplanung.wpf/ViewModel/HaltungObjektViewModel.cs @@ -1,4 +1,5 @@ using CommunityToolkit.Mvvm.Input; +using dcnsanplanung.bewertung; using dcnsanplanung.DAL.Services.PostgresqlData; using dcnsanplanung.shared.Model; using System; @@ -23,16 +24,25 @@ namespace dcnsanplanung.wpf.ViewModel public List Schaeden { get => model.Kodierungen; } public ICommand Speichern { get; set; } - + public ICommand BerechneObjektklasse { get; set; } + + public HaltungObjektViewModel(Haltung selectedHaltung) { model = selectedHaltung; Speichern = new RelayCommand(() => doSpeichern()); + BerechneObjektklasse = new RelayCommand(() => doBerechneObjektklasse()); LadeSchaeden(); } + private void doBerechneObjektklasse() + { + BewM149.CalculateHaltung(model); + //BewM149.ObjektKlasse(model.Kodierungen); + } + private void doSpeichern() { SchadenDataService schadenDataService = new SchadenDataService("Host = localhost; Database = sanplaner; Username = dcnsanplaner; Password = sanplaner"); diff --git a/dcnsanplanung.wpf/W_ObjektView.xaml b/dcnsanplanung.wpf/W_ObjektView.xaml index 810cf7a..cf155a7 100644 --- a/dcnsanplanung.wpf/W_ObjektView.xaml +++ b/dcnsanplanung.wpf/W_ObjektView.xaml @@ -40,6 +40,7 @@