Straßenumsatz wird erechnet

This commit is contained in:
Husky
2021-08-14 13:45:10 +02:00
parent e35fa908ad
commit 5c9770bf45
5 changed files with 93 additions and 13 deletions

3
.gitignore vendored
View File

@@ -6,3 +6,6 @@
/XMLProgramm/bin/* /XMLProgramm/bin/*
/XMLProgramm/obj/* /XMLProgramm/obj/*
data.csv data.csv
.vs/XMLParser/DesignTimeBuild/.dtbcache.v2
.vs/XMLParser/v16/.suo
.vs/XMLParser/v16/TestStore/*

View File

@@ -1,12 +1,13 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Linq; using System.Linq;
namespace XMLParser namespace XMLParser
{ {
public static class Calculate public static class Calculate
{ {
public static Dictionary<ECalculatedResult,decimal> CalculateDay(List<KanalObjekt> inspektionen) public static Dictionary<ECalculatedResult,decimal> CalculateStreet(List<KanalObjekt> inspektionen)
{ {
Dictionary<ECalculatedResult,decimal> result = new Dictionary<ECalculatedResult, decimal>(); Dictionary<ECalculatedResult,decimal> result = new Dictionary<ECalculatedResult, decimal>();
decimal HauptkanalLaenge =0.0m; decimal HauptkanalLaenge =0.0m;
@@ -21,16 +22,91 @@ namespace XMLParser
int.MaxValue int.MaxValue
}; };
var rangePairs = ranges.Select((r,i)=> new {Range = r,Index = i}).ToList(); 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 IEnumerable<IGrouping<int, KanalObjekt>> groupedInspektion = inspektionen
// .FindAll(s => s.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Haltung)) .FindAll(s => s.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Haltung))
// .ForEach(g => HauptkanalLaenge += g.Inspektionsdaten.OptischeInspektion.Rohrleitung.Inspektionslaenge); .OrderBy(a => a.Inspektionsdaten.OptischeInspektion.Rohrleitung.Grunddaten.Profilbreite)
//result.Add(ECalculatedResult.HAUPTKANALLAENGE,HauptkanalLaenge); .GroupBy(x => rangePairs.FirstOrDefault(r => r.Range >= x.Inspektionsdaten.OptischeInspektion.Rohrleitung.Grunddaten.Profilbreite)?.Index ?? -1)
//result.Add(ECalculatedResult.DN150DN250); .ToList();
var t = groupedInspektion.ToList();
decimal length = 0.0m;
int counter = 0;
foreach(IGrouping<int,KanalObjekt> v in t)
{
length = 0.0m;
List<InspizierteAbwassertechnischeAnlage> 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<KanalObjekt> Anschlussleitungen = inspektionen.FindAll(x => x.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Anschlussleitung));
List<KanalObjekt> SEs = Anschlussleitungen.FindAll(x => x.Stammdaten.Knoten != null && x.Stammdaten.Knoten.Anschlusspunkt != null && x.Stammdaten.Knoten.Anschlusspunkt.Punktkennung.Equals("SE"));
List<KanalObjekt> 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<ECalculatedResult,decimal> CalculateDay(List<KanalObjekt> inspektionen)
{
Dictionary<ECalculatedResult,decimal> result = new Dictionary<ECalculatedResult, decimal>();
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<KanalObjekt> Anschlussleitungen = inspektionen.FindAll(x => x.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Anschlussleitung)); List<KanalObjekt> Anschlussleitungen = inspektionen.FindAll(x => x.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Anschlussleitung));
List<KanalObjekt> SEs = Anschlussleitungen.FindAll(x => x.Stammdaten.Knoten != null && x.Stammdaten.Knoten.Anschlusspunkt != null && x.Stammdaten.Knoten.Anschlusspunkt.Punktkennung.Equals("SE")); List<KanalObjekt> SEs = Anschlussleitungen.FindAll(x => x.Stammdaten.Knoten != null && x.Stammdaten.Knoten.Anschlusspunkt != null && x.Stammdaten.Knoten.Anschlusspunkt.Punktkennung.Equals("SE"));
List<KanalObjekt> SOs = Anschlussleitungen.FindAll(x => x.Stammdaten.Knoten != null && x.Stammdaten.Knoten.Anschlusspunkt != null && !x.Stammdaten.Knoten.Anschlusspunkt.Punktkennung.Equals("SE")); List<KanalObjekt> SOs = Anschlussleitungen.FindAll(x => x.Stammdaten.Knoten != null && x.Stammdaten.Knoten.Anschlusspunkt != null && !x.Stammdaten.Knoten.Anschlusspunkt.Punktkennung.Equals("SE"));

View File

@@ -76,6 +76,7 @@ namespace XMLParser
DN450DN600, DN450DN600,
DN650DN800, DN650DN800,
DN850DN1000, DN850DN1000,
GESAMTHAUPTKANAL,
HAUPTKANALUMSATZ, HAUPTKANALUMSATZ,
SONSTIGELAENGEZULAGEMETER, SONSTIGELAENGEZULAGEMETER,
STRASSENABLAUFLAENGEZULAGEMETER, STRASSENABLAUFLAENGEZULAGEMETER,

View File

@@ -53,7 +53,7 @@ namespace XMLParser
} }
public override string ToString() public override string ToString()
{ {
return objektbezeichnung; return objektbezeichnung + " " + optischeInspektion.Rohrleitung.Grunddaten.Profilbreite;
} }
} }
} }

View File

@@ -23,7 +23,7 @@ namespace XMLProgramm
// KS_Oldenburg_Lönsweg.xml // KS_Oldenburg_Lönsweg.xml
XMLParse ser = new XMLParse("2021-07-29_KR_H_L_Oldenburg_Eichenstraße.xml"); XMLParse ser = new XMLParse("2021-07-29_KR_H_L_Oldenburg_Eichenstraße.xml");
objekte.AddRange(ser.KanalObjekte); objekte.AddRange(ser.KanalObjekte);
Dictionary<ECalculatedResult,decimal> d = Calculate.CalculateDay(objekte); Dictionary<ECalculatedResult,decimal> d = Calculate.CalculateStreet(objekte);
} }