From 5c9770bf4518121b39dd4391314292b4d83fae8b Mon Sep 17 00:00:00 2001 From: Husky Date: Sat, 14 Aug 2021 13:45:10 +0200 Subject: [PATCH] =?UTF-8?q?Stra=C3=9Fenumsatz=20wird=20erechnet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + XMLParser/CalculateDay.cs | 98 ++++++++++++++++--- XMLParser/Enums.cs | 1 + .../InspizierteAbwassertechnischeAnlage.cs | 2 +- XMLProgramm/Program.cs | 2 +- 5 files changed, 93 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index efc3832..1f974a3 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ /XMLProgramm/bin/* /XMLProgramm/obj/* data.csv +.vs/XMLParser/DesignTimeBuild/.dtbcache.v2 +.vs/XMLParser/v16/.suo +.vs/XMLParser/v16/TestStore/* diff --git a/XMLParser/CalculateDay.cs b/XMLParser/CalculateDay.cs index b19b567..466fa58 100644 --- a/XMLParser/CalculateDay.cs +++ b/XMLParser/CalculateDay.cs @@ -1,12 +1,13 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; namespace XMLParser { public static class Calculate { - public static Dictionary CalculateDay(List inspektionen) + public static Dictionary CalculateStreet(List inspektionen) { Dictionary result = new Dictionary(); decimal HauptkanalLaenge =0.0m; @@ -21,16 +22,91 @@ namespace XMLParser int.MaxValue }; var rangePairs = ranges.Select((r,i)=> new {Range = r,Index = i}).ToList(); - var groupedInspektionen = inspektionen - .FindAll(s => s.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Haltung)) - .OrderBy(a => a.Inspektionsdaten.OptischeInspektion.Rohrleitung.Grunddaten.Profilbreite) - .GroupBy(x => rangePairs.FirstOrDefault(r => r.Range >= x.Inspektionsdaten.OptischeInspektion.Rohrleitung.Grunddaten.Profilbreite)?.Index ?? -1); - //inspektionen - // .FindAll(s => s.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Haltung)) - // .ForEach(g => HauptkanalLaenge += g.Inspektionsdaten.OptischeInspektion.Rohrleitung.Inspektionslaenge); - //result.Add(ECalculatedResult.HAUPTKANALLAENGE,HauptkanalLaenge); - //result.Add(ECalculatedResult.DN150DN250); + IEnumerable> groupedInspektion = inspektionen + .FindAll(s => s.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Haltung)) + .OrderBy(a => a.Inspektionsdaten.OptischeInspektion.Rohrleitung.Grunddaten.Profilbreite) + .GroupBy(x => rangePairs.FirstOrDefault(r => r.Range >= x.Inspektionsdaten.OptischeInspektion.Rohrleitung.Grunddaten.Profilbreite)?.Index ?? -1) + .ToList(); + var t = groupedInspektion.ToList(); + decimal length = 0.0m; + int counter = 0; + foreach(IGrouping v in t) + { + length = 0.0m; + List d = t[counter].Select(group => group.Inspektionsdaten).ToList(); + d.ForEach(g => length += g.OptischeInspektion.Rohrleitung.Inspektionslaenge); + switch(v.Key) + { + case 0: result.Add(ECalculatedResult.DN150DN250,length); break; + case 1: result.Add(ECalculatedResult.DN300DN400,length); break; + case 2: result.Add(ECalculatedResult.DN450DN600,length); break; + case 3: result.Add(ECalculatedResult.DN650DN800,length); break; + case 4: result.Add(ECalculatedResult.DN850DN1000,length); break; + default: throw new Exception(v.Key.ToString()); + } + HauptkanalLaenge += length; + counter++; + } + + result.Add(ECalculatedResult.GESAMTHAUPTKANAL,HauptkanalLaenge); + + List Anschlussleitungen = inspektionen.FindAll(x => x.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Anschlussleitung)); + List SEs = Anschlussleitungen.FindAll(x => x.Stammdaten.Knoten != null && x.Stammdaten.Knoten.Anschlusspunkt != null && x.Stammdaten.Knoten.Anschlusspunkt.Punktkennung.Equals("SE")); + List SOs = Anschlussleitungen.FindAll(x => x.Stammdaten.Knoten != null && x.Stammdaten.Knoten.Anschlusspunkt != null && !x.Stammdaten.Knoten.Anschlusspunkt.Punktkennung.Equals("SE")); + + foreach(KanalObjekt s in SEs) { + Anschlussleitungen.Remove(s); + } + foreach(KanalObjekt s in SOs) { + Anschlussleitungen.Remove(s); + } + + SOs.AddRange(Anschlussleitungen); + + result.Add(ECalculatedResult.STRASSENABLAUFANZAHL,SEs.Count); + result.Add(ECalculatedResult.SONSTIGEANZAHL,SOs.Count); + + decimal SEPauschal = 34.00m * SEs.Count; + decimal SOPauschal = 45.00m * SOs.Count; + decimal HauptkanalPreis = 1.60m * HauptkanalLaenge; + + result.Add(ECalculatedResult.STRASSENABLAUFUMSATZ,SEPauschal); + result.Add(ECalculatedResult.SONSTIGEUMSATZ,SOPauschal); + result.Add(ECalculatedResult.HAUPTKANALUMSATZ,HauptkanalPreis); + + + + decimal SEOverlength = 0.0m; + decimal SOOverlength = 0.0m; + + SEs.ForEach(x => { + decimal length = x.Inspektionsdaten.OptischeInspektion.Rohrleitung.Inspektionslaenge; + if(length > 5.0m) SEOverlength += length - 5.0m; + }); + SOs.ForEach(x => { + decimal length = x.Inspektionsdaten.OptischeInspektion.Rohrleitung.Inspektionslaenge; + if(length > 7.0m) SOOverlength += length - 7.0m; + }); + + decimal LeitungsOverlengthPreis = (SEOverlength + SOOverlength) * 2.4m; + result.Add(ECalculatedResult.STRASSENABLAUFLAENGEZULAGEMETER,SEOverlength); + result.Add(ECalculatedResult.SONSTIGELAENGEZULAGEMETER,SOOverlength); + result.Add(ECalculatedResult.LAENGEZULAGEUMSATZ,LeitungsOverlengthPreis); + result.Add(ECalculatedResult.GESAMTUMSATZ,(LeitungsOverlengthPreis + HauptkanalPreis + SEPauschal + SOPauschal)); + + return result; + } + public static Dictionary CalculateDay(List inspektionen) + { + Dictionary result = new Dictionary(); + decimal HauptkanalLaenge =0.0m; + + inspektionen + .FindAll(s => s.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Haltung)) + .ForEach(g => HauptkanalLaenge += g.Inspektionsdaten.OptischeInspektion.Rohrleitung.Inspektionslaenge); + result.Add(ECalculatedResult.GESAMTHAUPTKANAL,HauptkanalLaenge); + List Anschlussleitungen = inspektionen.FindAll(x => x.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Anschlussleitung)); List SEs = Anschlussleitungen.FindAll(x => x.Stammdaten.Knoten != null && x.Stammdaten.Knoten.Anschlusspunkt != null && x.Stammdaten.Knoten.Anschlusspunkt.Punktkennung.Equals("SE")); List SOs = Anschlussleitungen.FindAll(x => x.Stammdaten.Knoten != null && x.Stammdaten.Knoten.Anschlusspunkt != null && !x.Stammdaten.Knoten.Anschlusspunkt.Punktkennung.Equals("SE")); @@ -77,4 +153,4 @@ namespace XMLParser return result; } } -} \ No newline at end of file +} diff --git a/XMLParser/Enums.cs b/XMLParser/Enums.cs index c762b71..b953752 100644 --- a/XMLParser/Enums.cs +++ b/XMLParser/Enums.cs @@ -76,6 +76,7 @@ namespace XMLParser DN450DN600, DN650DN800, DN850DN1000, + GESAMTHAUPTKANAL, HAUPTKANALUMSATZ, SONSTIGELAENGEZULAGEMETER, STRASSENABLAUFLAENGEZULAGEMETER, diff --git a/XMLParser/InspizierteAbwassertechnischeAnlage.cs b/XMLParser/InspizierteAbwassertechnischeAnlage.cs index f966b03..1583186 100644 --- a/XMLParser/InspizierteAbwassertechnischeAnlage.cs +++ b/XMLParser/InspizierteAbwassertechnischeAnlage.cs @@ -53,7 +53,7 @@ namespace XMLParser } public override string ToString() { - return objektbezeichnung; + return objektbezeichnung + " " + optischeInspektion.Rohrleitung.Grunddaten.Profilbreite; } } } diff --git a/XMLProgramm/Program.cs b/XMLProgramm/Program.cs index c449c54..9be8751 100644 --- a/XMLProgramm/Program.cs +++ b/XMLProgramm/Program.cs @@ -23,7 +23,7 @@ namespace XMLProgramm // KS_Oldenburg_Lönsweg.xml XMLParse ser = new XMLParse("2021-07-29_KR_H_L_Oldenburg_Eichenstraße.xml"); objekte.AddRange(ser.KanalObjekte); - Dictionary d = Calculate.CalculateDay(objekte); + Dictionary d = Calculate.CalculateStreet(objekte); }