From 938e03ad67d22a4d805ef3ad737eeadd01a76344 Mon Sep 17 00:00:00 2001 From: HuskyTeufel Date: Sun, 15 Aug 2021 13:52:32 +0200 Subject: [PATCH] Strassen werden nun richtig in csv geschrieben --- XMLParser.Functions/CSVWriterBase.cs | 27 +++++ XMLParser.Functions/CalculateDay.cs | 75 ++++++-------- .../StrassenUmsatzCSVWriter.cs | 99 +++++++++++++++++++ .../{CSVWriter.cs => TagesUmsatzCSVWriter.cs} | 18 +--- .../UmsatzCalculator/Strassenumsatz.cs | 1 + XMLProgramm/Program.cs | 11 +-- 6 files changed, 166 insertions(+), 65 deletions(-) create mode 100644 XMLParser.Functions/CSVWriterBase.cs create mode 100644 XMLParser.Functions/StrassenUmsatzCSVWriter.cs rename XMLParser.Functions/{CSVWriter.cs => TagesUmsatzCSVWriter.cs} (74%) diff --git a/XMLParser.Functions/CSVWriterBase.cs b/XMLParser.Functions/CSVWriterBase.cs new file mode 100644 index 0000000..b7fefe5 --- /dev/null +++ b/XMLParser.Functions/CSVWriterBase.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using XMLParser.Model; +using XMLParser.Contract; + +namespace XMLParser.Functions +{ + public abstract class CSVWriterBase : ICSVWriter + { + internal FileStream handle = null; + + + public abstract void WriteEntry(Dictionary calculated, List inspektionenAmTag); + + internal void writeToFile(string content) + { + content += Environment.NewLine; + byte[] bytes = Encoding.UTF8.GetBytes(content); + handle.Write(bytes,0,bytes.Length); + handle.Flush(); + } + } +} \ No newline at end of file diff --git a/XMLParser.Functions/CalculateDay.cs b/XMLParser.Functions/CalculateDay.cs index 381178d..41cda16 100644 --- a/XMLParser.Functions/CalculateDay.cs +++ b/XMLParser.Functions/CalculateDay.cs @@ -11,6 +11,37 @@ namespace XMLParser.Functions public static Dictionary CalculateStreet(List inspektionen) { Dictionary result = new Dictionary(); + + 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); + + 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; + }); + + result.Add(ECalculatedResult.STRASSENABLAUFANZAHL,SEs.Count); + result.Add(ECalculatedResult.SONSTIGEANZAHL,SOs.Count); + + result.Add(ECalculatedResult.STRASSENABLAUFLAENGEZULAGEMETER,SEOverlength); + result.Add(ECalculatedResult.SONSTIGELAENGEZULAGEMETER,SOOverlength); + decimal HauptkanalLaenge =0.0m; List ranges = new List() @@ -51,50 +82,6 @@ namespace XMLParser.Functions } 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; } diff --git a/XMLParser.Functions/StrassenUmsatzCSVWriter.cs b/XMLParser.Functions/StrassenUmsatzCSVWriter.cs new file mode 100644 index 0000000..2aeb04a --- /dev/null +++ b/XMLParser.Functions/StrassenUmsatzCSVWriter.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using XMLParser.Contract; +using XMLParser.Model; + +namespace XMLParser.Functions +{ + [DebuggerDisplay("{" + nameof(GetDebuggerDisplay) + "(),nq}")] + public class StrassenUmsatzCSVWriter : CSVWriterBase + { + + public StrassenUmsatzCSVWriter() + { + handle = File.Create("./data.csv"); + } + + public void Save() + { + handle.Close(); + } + + private string GetDebuggerDisplay() + { + return ToString(); + } + + + public override void WriteEntry(Dictionary calculated, List inspektionenAmTag) + { + int anzahlStraßenablaufe = (int)calculated[ECalculatedResult.STRASSENABLAUFANZAHL]; + int sonstigeLeitungen = (int)calculated[ECalculatedResult.SONSTIGEANZAHL]; + decimal Strassenablaufzulage = calculated[ECalculatedResult.STRASSENABLAUFLAENGEZULAGEMETER]; + decimal Sonstigezulage = calculated[ECalculatedResult.SONSTIGELAENGEZULAGEMETER]; + + decimal HauptkanalLänge = calculated[ECalculatedResult.DN150DN250]; + + string entry = ""; + bool firstentry = true; + List AvaibleHeaders = new List(); + foreach(var s in calculated.Keys) + { + if(firstentry) + { + entry += calculated[s]; + firstentry = false; + } + else + { + entry += "#"+calculated[s]; + } + AvaibleHeaders.Add(s); + } + makeHeader(AvaibleHeaders); + Debugger.Log(0,"",entry); + //Debugger.Break(); + + KanalObjekt last = inspektionenAmTag.Last(); + + + writeToFile(entry); + } + + private void makeHeader(List avaibleHeaders) + { + Dictionary dict = new Dictionary(); + dict.Add(ECalculatedResult.DN150DN250, "DN150 - DN250 [m]"); + dict.Add(ECalculatedResult.DN300DN400, "DN300 - DN400 [m]"); + dict.Add(ECalculatedResult.DN450DN600, "DN450 - DN600 [m]"); + dict.Add(ECalculatedResult.DN650DN800, "DN650 - DN800 [m]"); + dict.Add(ECalculatedResult.DN850DN1000,"DN850 - DN1000 [m]"); + dict.Add(ECalculatedResult.GESAMTHAUPTKANAL,"Hauptkanal Gesamt [m]"); + dict.Add(ECalculatedResult.STRASSENABLAUFANZAHL, "Straßenablauf [Stk]"); + dict.Add(ECalculatedResult.STRASSENABLAUFLAENGEZULAGEMETER,"Straßenablauf > 5m [m]"); + dict.Add(ECalculatedResult.SONSTIGEANZAHL,"Anschlussleitung [Stk]"); + dict.Add(ECalculatedResult.SONSTIGELAENGEZULAGEMETER,"Anschlussleitung > 7m [m]"); + + string header = ""; + bool firstentry = true; + foreach(ECalculatedResult s in avaibleHeaders) + { + if(firstentry) + { + firstentry = false; + } + else + { + header += "#"; + } + header += dict[s]; + } + Debugger.Log(0,"CSVWriter",header); + writeToFile(header); + } + } +} diff --git a/XMLParser.Functions/CSVWriter.cs b/XMLParser.Functions/TagesUmsatzCSVWriter.cs similarity index 74% rename from XMLParser.Functions/CSVWriter.cs rename to XMLParser.Functions/TagesUmsatzCSVWriter.cs index 3567eb4..3f68e17 100644 --- a/XMLParser.Functions/CSVWriter.cs +++ b/XMLParser.Functions/TagesUmsatzCSVWriter.cs @@ -7,20 +7,12 @@ using System.Text; using XMLParser.Contract; using XMLParser.Model; -namespace XMLProgramm +namespace XMLParser.Functions { [DebuggerDisplay("{" + nameof(GetDebuggerDisplay) + "(),nq}")] - public class CSVWriter : ICSVWriter + public class TagesUmsatzCSVWriter : CSVWriterBase { - FileStream handle = null; - void writeToFile(string content) - { - content += Environment.NewLine; - byte[] bytes = Encoding.UTF8.GetBytes(content); - handle.Write(bytes,0,bytes.Length); - handle.Flush(); - } - public CSVWriter() + public TagesUmsatzCSVWriter() { handle = File.Create("./data.csv"); string WriteHeader = "Inspektionsdatum#Anzahl Straßenablaufe#Länge über 5m#SonstigeLeitungen#Sonstige Länge über 5m#Hauptkanallänge"; @@ -38,13 +30,13 @@ namespace XMLProgramm } - public void WriteEntry(Dictionary calculated, List inspektionenAmTag) + public override void WriteEntry(Dictionary calculated, List inspektionenAmTag) { int anzahlStraßenablaufe = (int)calculated[ECalculatedResult.STRASSENABLAUFANZAHL]; int sonstigeLeitungen = (int)calculated[ECalculatedResult.SONSTIGEANZAHL]; decimal Strassenablaufzulage = calculated[ECalculatedResult.STRASSENABLAUFLAENGEZULAGEMETER]; decimal Sonstigezulage = calculated[ECalculatedResult.SONSTIGELAENGEZULAGEMETER]; - decimal HauptkanalLänge = calculated[ECalculatedResult.DN150DN250]; + decimal HauptkanalLänge = calculated[ECalculatedResult.GESAMTHAUPTKANAL]; KanalObjekt last = inspektionenAmTag.Last(); diff --git a/XMLParser.Functions/UmsatzCalculator/Strassenumsatz.cs b/XMLParser.Functions/UmsatzCalculator/Strassenumsatz.cs index 80bed1a..83c3ee3 100644 --- a/XMLParser.Functions/UmsatzCalculator/Strassenumsatz.cs +++ b/XMLParser.Functions/UmsatzCalculator/Strassenumsatz.cs @@ -11,6 +11,7 @@ namespace XMLParser.Functions.UmsatzCalculator XMLParse ser = new XMLParse("2021-07-29_KR_H_L_Oldenburg_Eichenstraße.xml"); objekte.AddRange(ser.KanalObjekte); Dictionary d = XMLParser.Functions.Calculate.CalculateStreet(objekte); + csvWriter.WriteEntry(d,objekte); } } } diff --git a/XMLProgramm/Program.cs b/XMLProgramm/Program.cs index 0675372..1cbc28c 100644 --- a/XMLProgramm/Program.cs +++ b/XMLProgramm/Program.cs @@ -5,7 +5,7 @@ using System.IO; using System.Linq; using XMLParser.Contract; using XMLParser.Model; - +using XMLParser.Functions; namespace XMLProgramm { class Program @@ -13,15 +13,10 @@ namespace XMLProgramm static void Main(string[] args) { - ICSVWriter csvWriter = new CSVWriter(); - //CSVWriter csvWriter = new CSVWriter(); + ICSVWriter csvWriter = new StrassenUmsatzCSVWriter(); List objekte = new List(); - IUmsatzCalculator calculator = new XMLParser.Functions.UmsatzCalculator.TagesUmsatz(); + IUmsatzCalculator calculator = new XMLParser.Functions.UmsatzCalculator.StrassenUmsatz(); calculator.Calculate(csvWriter,objekte); - - //StrassenUmsatz(csvWriter,objekte); - //TagesUmsatz(csvWriter,objekte); - } } }