Straßenumsatz wird erechnet
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -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/*
|
||||||
|
|||||||
@@ -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
|
|
||||||
|
IEnumerable<IGrouping<int, KanalObjekt>> groupedInspektion = inspektionen
|
||||||
.FindAll(s => s.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Haltung))
|
.FindAll(s => s.Inspektionsdaten.Anlagentyp.Equals(EAnlagetyp.Haltung))
|
||||||
.OrderBy(a => a.Inspektionsdaten.OptischeInspektion.Rohrleitung.Grunddaten.Profilbreite)
|
.OrderBy(a => a.Inspektionsdaten.OptischeInspektion.Rohrleitung.Grunddaten.Profilbreite)
|
||||||
.GroupBy(x => rangePairs.FirstOrDefault(r => r.Range >= x.Inspektionsdaten.OptischeInspektion.Rohrleitung.Grunddaten.Profilbreite)?.Index ?? -1);
|
.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<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);
|
||||||
|
|
||||||
//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);
|
|
||||||
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"));
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ namespace XMLParser
|
|||||||
DN450DN600,
|
DN450DN600,
|
||||||
DN650DN800,
|
DN650DN800,
|
||||||
DN850DN1000,
|
DN850DN1000,
|
||||||
|
GESAMTHAUPTKANAL,
|
||||||
HAUPTKANALUMSATZ,
|
HAUPTKANALUMSATZ,
|
||||||
SONSTIGELAENGEZULAGEMETER,
|
SONSTIGELAENGEZULAGEMETER,
|
||||||
STRASSENABLAUFLAENGEZULAGEMETER,
|
STRASSENABLAUFLAENGEZULAGEMETER,
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ namespace XMLParser
|
|||||||
}
|
}
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return objektbezeichnung;
|
return objektbezeichnung + " " + optischeInspektion.Rohrleitung.Grunddaten.Profilbreite;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user