diff --git a/XMLParser/CalculateDay.cs b/XMLParser/CalculateDay.cs new file mode 100644 index 0000000..08762a8 --- /dev/null +++ b/XMLParser/CalculateDay.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace XMLParser +{ + public static class Calculate + { + 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); + + 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("StraßenablaufCount",SEs.Count); + result.Add("SonstigeCount",SOs.Count); + + decimal SEPauschal = 34.00m * SEs.Count; + decimal SOPauschal = 45.00m * SOs.Count; + decimal HauptkanalPreis = 1.60m * HauptkanalLaenge; + + result.Add("StraßenablaufPauschal",SEPauschal); + result.Add("SonstigesPauschal",SOPauschal); + result.Add("HauptkanalPreis",HauptkanalPreis); + + decimal SEOverlength = 0.0m; + // SE preise + foreach(KanalObjekt Strassenablauf in SEs) { + decimal length = Strassenablauf.Inspektionsdaten.OptischeInspektion.Rohrleitung.Inspektionslaenge; + if(length > 5.0m) { + SEOverlength += length - 5.0m; + } + } + decimal SOOverlength = 0.0m; + // SO preise + foreach(KanalObjekt Sonstige in SOs) { + decimal length = Sonstige.Inspektionsdaten.OptischeInspektion.Rohrleitung.Inspektionslaenge; + if(length > 7.0m) { + SOOverlength += length - 7.0m; + } + } + + decimal LeitungOverlength = SEOverlength + SOOverlength; + + decimal LeitungsOverlengthPreis = LeitungOverlength * 2.4m; + result.Add("LeitungÜberlaenge",LeitungOverlength); + result.Add("PreisLeitung",LeitungsOverlengthPreis); + result.Add("Umsatz",(LeitungsOverlengthPreis + HauptkanalPreis + SEPauschal + SOPauschal)); + return result; + } + } +} \ No newline at end of file diff --git a/XMLParserTest/CalculateTest.cs b/XMLParserTest/CalculateTest.cs new file mode 100644 index 0000000..e8a02ee --- /dev/null +++ b/XMLParserTest/CalculateTest.cs @@ -0,0 +1,27 @@ +using System.Diagnostics; +using System.Collections.Generic; +using System.Linq; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using XMLParser; + +namespace XMLParserTest +{ + [TestClass] + public class CalculateTest + { + [TestMethod] + public void TestCalculate() + { + + List kanalObjekts = new XMLParse("input.xml").KanalObjekte.FindAll(x => x.Inspektionsdaten.OptischeInspektion.Inspektionsdatum.Equals("20.07.2021")); + Assert.AreEqual(35,kanalObjekts.Count); + + var umsatz = Calculate.CalculateDay(kanalObjekts); + Assert.AreEqual(3,umsatz["StraßenablaufCount"]); + Assert.AreEqual(29,umsatz["SonstigeCount"]); + Assert.AreEqual(102.00m,umsatz["StraßenablaufPauschal"]); + Assert.AreEqual(1305.00m,umsatz["SonstigesPauschal"]); + Assert.AreEqual(27.50m,umsatz["LeitungÜberlaenge"]); + } + } +} diff --git a/XMLParserTest/UnitTest1.cs b/XMLParserTest/ParserTest.cs similarity index 96% rename from XMLParserTest/UnitTest1.cs rename to XMLParserTest/ParserTest.cs index b13b039..da515fa 100644 --- a/XMLParserTest/UnitTest1.cs +++ b/XMLParserTest/ParserTest.cs @@ -6,7 +6,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; namespace XMLParserTest { [TestClass] - public class UnitTest1 + public class ParserTest { [TestMethod] public void TestMethod1() diff --git a/XMLProgramm/Program.cs b/XMLProgramm/Program.cs index 45c8048..db797d4 100644 --- a/XMLProgramm/Program.cs +++ b/XMLProgramm/Program.cs @@ -9,67 +9,7 @@ namespace XMLProgramm { class Program { - 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); - - 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("StraßenablaufCount",SEs.Count); - result.Add("SontigeCount",SOs.Count); - - decimal SEPauschal = 34.00m * SEs.Count; - decimal SOPauschal = 45.00m * SOs.Count; - decimal HauptkanalPreis = 1.60m * HauptkanalLaenge; - - result.Add("StraßenablaufPauschal",SEPauschal); - result.Add("SonstigesPauschal",SOPauschal); - result.Add("HauptkanalPreis",HauptkanalPreis); - - decimal SEOverlength = 0.0m; - // SE preise - foreach(KanalObjekt Strassenablauf in SEs) { - decimal length = Strassenablauf.Inspektionsdaten.OptischeInspektion.Rohrleitung.Inspektionslaenge; - if(length > 5.0m) { - SEOverlength += length - 5.0m; - } - } - decimal SOOverlength = 0.0m; - // SO preise - foreach(KanalObjekt Sonstige in SOs) { - decimal length = Sonstige.Inspektionsdaten.OptischeInspektion.Rohrleitung.Inspektionslaenge; - if(length > 7.0m) { - SOOverlength += length - 7.0m; - } - } - - decimal LeitungOverlength = SEOverlength + SOOverlength; - - decimal LeitungsOverlengthPreis = LeitungOverlength * 2.4m; - result.Add("LeitungÜberlaenge",LeitungOverlength); - result.Add("PreisLeitung",LeitungsOverlengthPreis); - result.Add("Umsatz",(LeitungsOverlengthPreis + HauptkanalPreis + SEPauschal + SOPauschal)); - return result; - - - - } + static void Main(string[] args) { List objekte = new List(); @@ -88,7 +28,7 @@ namespace XMLProgramm decimal gesamt = 0.0m; //Dictionary s = CalculateDay(objekte.FindAll(x => x.Inspektionsdaten.OptischeInspektion.Inspektionsdatum.Equals("05.08.2021"))); foreach(string datum in datums) { - Dictionary s = CalculateDay(objekte.FindAll(x => x.Inspektionsdaten.OptischeInspektion.Inspektionsdatum.Equals(datum))); + Dictionary s = Calculate.CalculateDay(objekte.FindAll(x => x.Inspektionsdaten.OptischeInspektion.Inspektionsdatum.Equals(datum))); Console.WriteLine("Umsatz am : "+datum + " " + s["Umsatz"]); gesamt +=s["Umsatz"]; //if(datum.Equals("05.08.2021")) Debugger.Break();