Compare commits

...

4 Commits

Author SHA1 Message Date
Damian Wessels
d5d853abc5 Double to decimal geändert 2025-01-27 17:43:40 +01:00
Damian Wessels
2f078c19ab ExcelExporter erweitert 2025-01-22 19:51:20 +01:00
Damian Wessels
8d8baf0766 XML parser erweitert 2024-09-09 14:48:05 +02:00
Damian Wessels
133bc5f6b0 Sanierungsystem umgeschrieben 2024-08-30 20:40:20 +02:00
12 changed files with 383 additions and 143 deletions

View File

@@ -0,0 +1,12 @@
using Schnittstelle.Contract;
using Schnittstelle.Import.XML.v2013.Model;
namespace Schnittstelle.DWA149_2_2013
{
internal class AEC : CodeBeschreibung
{
public AEC(RZustand kuerzel) : base("Grundlagen änderung", kuerzel)
{
}
}
}

View File

@@ -6,19 +6,12 @@ using System.Text;
namespace Schnittstelle.DWA149_2_2013 namespace Schnittstelle.DWA149_2_2013
{ {
class BAA : CodeBeschreibung, IReparatur, IRenovation class BAA : CodeBeschreibung
{ {
List<SanierungMassnahme> reparatur = new List<SanierungMassnahme>(); public BAA(RZustand kuerzel) : base("Verformung", kuerzel)
List<SanierungMassnahme> renovation = new List<SanierungMassnahme>();
public BAA(RZustand kuerzel) : base("Verformung",kuerzel)
{ {
CH1.Add("A", "vertikal"); CH1.Add("A", "vertikal");
CH1.Add("B", "horizontal"); CH1.Add("B", "horizontal");
} }
List<SanierungMassnahme> IReparatur.Massnahmen => reparatur;
List<SanierungMassnahme> IRenovation.Massnahmen => renovation;
} }
} }

View File

@@ -5,10 +5,8 @@ using System.Collections.Generic;
namespace Schnittstelle.DWA149_2_2013 namespace Schnittstelle.DWA149_2_2013
{ {
class BAB : CodeBeschreibung, IReparatur class BAB : CodeBeschreibung
{ {
List<SanierungMassnahme> reparatur = new List<SanierungMassnahme>();
public BAB(RZustand kuerzel) : base("Rissbildung", kuerzel) public BAB(RZustand kuerzel) : base("Rissbildung", kuerzel)
{ {
CH1.Add("A", "Oberflächenriss (Haarriss)"); CH1.Add("A", "Oberflächenriss (Haarriss)");
@@ -20,13 +18,6 @@ namespace Schnittstelle.DWA149_2_2013
CH2.Add("C", "komplexe Rissbildung"); CH2.Add("C", "komplexe Rissbildung");
CH2.Add("D", "gewundene oder spiralförmige Rissbildung"); CH2.Add("D", "gewundene oder spiralförmige Rissbildung");
CH2.Add("E", "sternförmige Rissbildung"); CH2.Add("E", "sternförmige Rissbildung");
reparatur.Add(new SanierungMassnahme("anfräsen",100,0));
reparatur.Add(new SanierungMassnahme("kurzliner",200, 0));
} }
List<SanierungMassnahme> IReparatur.Massnahmen => reparatur;
} }
} }

View File

@@ -4,10 +4,8 @@ using System.Collections.Generic;
namespace Schnittstelle.DWA149_2_2013 namespace Schnittstelle.DWA149_2_2013
{ {
class BCA : CodeBeschreibung, IRenovation class BCA : CodeBeschreibung
{ {
List<SanierungMassnahme> renovation = new List<SanierungMassnahme>();
public BCA(RZustand kuerzel) : base("Anschluss", kuerzel) public BCA(RZustand kuerzel) : base("Anschluss", kuerzel)
{ {
CH1.Add("A", "Abzweig"); CH1.Add("A", "Abzweig");
@@ -22,9 +20,6 @@ namespace Schnittstelle.DWA149_2_2013
CH2.Add("A", "offen"); CH2.Add("A", "offen");
CH2.Add("B", "geschlossen"); CH2.Add("B", "geschlossen");
renovation.Add(new SanierungMassnahme("Einmessen, Öffnen, Hut", 800, -1));
} }
List<SanierungMassnahme> IRenovation.Massnahmen => renovation;
} }
} }

View File

@@ -4,18 +4,13 @@ using System.Collections.Generic;
namespace Schnittstelle.DWA149_2_2013 namespace Schnittstelle.DWA149_2_2013
{ {
class BCE : CodeBeschreibung, IRenovation class BCE : CodeBeschreibung
{ {
List<SanierungMassnahme> renovation = new List<SanierungMassnahme>(); List<SanierungMassnahme> renovation = new List<SanierungMassnahme>();
public BCE(RZustand kuerzel) : base("Endknoten", kuerzel) public BCE(RZustand kuerzel) : base("Endknoten", kuerzel)
{ {
renovation.Add(new SanierungMassnahme("Schlauchliner", 100, 200));
renovation.Add(new SanierungMassnahme("Schlauchliner", 105, 250));
renovation.Add(new SanierungMassnahme("Schlauchliner", 120, 300));
renovation.Add(new SanierungMassnahme("Schlauchliner", 130, 400));
renovation.Add(new SanierungMassnahme("Schlauchliner", 140, 500));
renovation.Add(new SanierungMassnahme("Schlauchliner", 150, 600));
} }
public List<SanierungMassnahme> Massnahmen => renovation; public List<SanierungMassnahme> Massnahmen => renovation;

View File

@@ -2,6 +2,7 @@
using Schnittstelle.Import.XML.v2013.Model; using Schnittstelle.Import.XML.v2013.Model;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text; using System.Text;
namespace Schnittstelle.DWA149_2_2013 namespace Schnittstelle.DWA149_2_2013
@@ -13,6 +14,7 @@ namespace Schnittstelle.DWA149_2_2013
switch(zustand.Inspektionskode.ToUpper()) switch(zustand.Inspektionskode.ToUpper())
{ {
case "AED": return new AED(zustand); case "AED": return new AED(zustand);
case "AEC": return new AEC(zustand);
case "BAA": return new BAA(zustand); case "BAA": return new BAA(zustand);
case "BAB": return new BAB(zustand); case "BAB": return new BAB(zustand);
@@ -55,7 +57,7 @@ namespace Schnittstelle.DWA149_2_2013
case "BDG": return new BDG(zustand); case "BDG": return new BDG(zustand);
default: default:
throw new ApplicationException("Code not implemented"); throw new NotImplementedException(string.Format("Code not implemented: {0}",zustand.Inspektionskode.ToUpper()));
} }
} }

View File

@@ -1,11 +1,13 @@
using Schnittstelle.Import.XML.v2013.Model; using Schnittstelle.Import.XML.v2013.Model;
using Schnittstelle.Sanierung; using Schnittstelle.Sanierung;
using Syncfusion.Drawing;
using Syncfusion.XlsIO; using Syncfusion.XlsIO;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Security.Cryptography;
using System.Text; using System.Text;
namespace Schnittstelle.Export namespace Schnittstelle.Export
@@ -43,19 +45,28 @@ namespace Schnittstelle.Export
KodierungEnde.Borders[ExcelBordersIndex.EdgeTop].LineStyle = ExcelLineStyle.Thin; KodierungEnde.Borders[ExcelBordersIndex.EdgeTop].LineStyle = ExcelLineStyle.Thin;
KodierungEnde.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thick; KodierungEnde.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thick;
IStyle AnmerkungStyle = workbook.Styles.Add("AnmerkungStyle");
AnmerkungStyle.ColorIndex = ExcelKnownColors.Custom56;
AnmerkungStyle.Borders.LineStyle = ExcelLineStyle.Medium;
AnmerkungStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false;
AnmerkungStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false;
for (int i = 0; i < KanalObjekte.Count; i++) for (int i = 0; i < KanalObjekte.Count; i++)
{ {
IWorksheet worksheet = workbook.Worksheets[i]; IWorksheet worksheet = workbook.Worksheets[i];
KanalObjekt k = KanalObjekte[i]; KanalObjekt k = KanalObjekte[i];
CalculateHaltung(k, worksheet, sanierungsarten, CellStyle, HeaderStyle, KodierungEnde); CalculateHaltung(k, worksheet, sanierungsarten, CellStyle, HeaderStyle, KodierungEnde,AnmerkungStyle);
} }
FileStream stream = new FileStream("beurteilung.xlsx", FileMode.Create, FileAccess.ReadWrite); FileStream stream = new FileStream("beurteilung.xlsx", FileMode.Create, FileAccess.ReadWrite);
workbook.SaveAs(stream); workbook.SaveAs(stream);
stream.Dispose(); stream.Dispose();
} }
private static void CalculateHaltung(KanalObjekt haltung, IWorksheet worksheet, List<Sanierungart> sanierungsarten, IStyle cellStyle, IStyle headerStyle, IStyle kodierungEnde) private static void CalculateHaltung(KanalObjekt haltung, IWorksheet worksheet, List<Sanierungart> sanierungsarten, IStyle cellStyle, IStyle headerStyle, IStyle kodierungEnde, IStyle AnmerkungStyle)
{ {
worksheet.Name = string.Format("{0}", haltung.Stammdaten.Objektbezeichnung); worksheet.Name = string.Format("{0}", haltung.Stammdaten.Objektbezeichnung);
@@ -66,21 +77,30 @@ namespace Schnittstelle.Export
{ {
Sanierungart sanArt = sanierungsarten[i]; Sanierungart sanArt = sanierungsarten[i];
int mainrow = row; int mainrow = row;
worksheet.Range[row, 1].Text = "Haltung"; worksheet.Range[row, 1].Text = "Von - Nach";
worksheet.Range[row, 2].Text = "Länge"; worksheet.Range[row, 2].Text = "Straße"; // 5
worksheet.Range[row, 3].Text = "Tiefe"; worksheet.Range[row, 3].Text = "Inspizierte Länge"; // 4
worksheet.Range[row, 4].Text = "Inspizierte Länge"; worksheet.Range[row, 4].Text = "Länge"; // 2
worksheet.Range[row, 5].Text = "Straße"; worksheet.Range[row, 5].Text = "Tiefe"; // 3
worksheet.Range[row, 7].Text = sanArt.Sanierungsbezeichnung; worksheet.Range[row, 6].Text = "Inspektionsrichtung";
worksheet.Range[row, 9].Text = "DN";
worksheet.Range[row, 7].Text = "Schadensbeschreibung"; //sanArt.Sanierungsbezeichnung;
worksheet.Range[row, 9].Text = "Durchmesser";
worksheet.Range[row, 10].Text = "Material"; worksheet.Range[row, 10].Text = "Material";
row++; row++;
worksheet.Range[row, 1].Text = haltung.Stammdaten.Objektbezeichnung; string richtung = haltung.Inspektionsdaten.OptischeInspektion[0].Rohrleitung.Inspektionsrichtung_RAW;
worksheet.Range[row, 2].Text = haltung.Stammdaten.Kante.Laenge.ToString(); // Länge string s1 = richtung == "O" ? haltung.Stammdaten.Kante.KnotenZulauf!.Objektbezeichnung : haltung.Stammdaten.Kante.KnotenAblauf!.Objektbezeichnung;
worksheet.Range[row, 3].Text = "Not Implemented yet"; // Tiefe string s2 = richtung == "O" ? haltung.Stammdaten.Kante.KnotenAblauf!.Objektbezeichnung : haltung.Stammdaten.Kante.KnotenZulauf!.Objektbezeichnung;
worksheet.Range[row, 1].Text = string.Format("{0} -> {1}", s1, s2);
worksheet.Range[row, 2].Text = haltung.Inspektionsdaten.Lage.Strassename;
worksheet.Range[row, 4].Text = haltung.Stammdaten.Kante.Laenge.ToString(); // Länge
worksheet.Range[row, 5].Text = "Not Implemented yet"; // Tiefe
worksheet.Range[row, 6].Text = haltung.Inspektionsdaten.OptischeInspektion[0].Rohrleitung.Inspektionsrichtung;
worksheet.Range[row, 5].Text = haltung.Inspektionsdaten.Lage.Strassename;
worksheet.Range[row, 9].Text = haltung.Inspektionsdaten.OptischeInspektion[0].Rohrleitung.Grunddaten.Profilbreite.ToString(); worksheet.Range[row, 9].Text = haltung.Inspektionsdaten.OptischeInspektion[0].Rohrleitung.Grunddaten.Profilbreite.ToString();
worksheet.Range[row, 10].Text = haltung.Inspektionsdaten.OptischeInspektion[0].Rohrleitung.Grunddaten.Material.ToString(); worksheet.Range[row, 10].Text = haltung.Inspektionsdaten.OptischeInspektion[0].Rohrleitung.Grunddaten.Material.ToString();
@@ -92,16 +112,16 @@ namespace Schnittstelle.Export
//worksheet.Range[row, 2].Text = sanArt.Sanierungsbezeichnung; //worksheet.Range[row, 2].Text = sanArt.Sanierungsbezeichnung;
//row+= 2; //row+= 2;
//int temprow = row; //int temprow = row;
worksheet.Range[row, 1].Text = "Stat"; worksheet.Range[row, 1].Text = "Station";
worksheet.Range[row, 2].Text = "Kürzel"; worksheet.Range[row, 2].Text = "Kürzel";
worksheet.Range[row, 3].Text = "Charakterisierung"; worksheet.Range[row, 3].Text = "Charakterisi.";
worksheet.Range[row, 4].Text = "Quantifizierung"; worksheet.Range[row, 4].Text = "Quantifizierung";
worksheet.Range[row, 5].Text = "Lage"; worksheet.Range[row, 5].Text = "Lage im Kreis";
worksheet.Range[row, 6].Text = "Verb."; //worksheet.Range[row, 6].Text = "Verb.";
worksheet.Range[row, 7].Text = "Schaden"; worksheet.Range[row, 7].Text = "Schadensbeschreibung / Info";
worksheet.Range[row, 8].Text = "Strecke"; worksheet.Range[row, 8].Text = "Strecke";
worksheet.Range[row, 9].Text = "Sanierung"; worksheet.Range[row, 9].Text = "Sanierungsvorschlag";
worksheet.Range[row, 10].Text = "Kosten"; worksheet.Range[row, 10].Text = "Kostenans.";
worksheet.Range[row, 1, row,10].CellStyle=headerStyle; worksheet.Range[row, 1, row,10].CellStyle=headerStyle;
@@ -144,38 +164,73 @@ namespace Schnittstelle.Export
worksheet.Range[row + j, 7].Text = code.KodeDescription; worksheet.Range[row + j, 7].Text = code.KodeDescription;
worksheet.Range[row + j, 8].Text = code.Streckenschaden; worksheet.Range[row + j, 8].Text = code.Streckenschaden;
IRenovation renovation = null;
if (code.Renovation is IRenovation) List<SanierungMassnahme> Massnahmen;
Console.WriteLine(code.Inspektionskode);
if (sanArt.Massnahmen.TryGetValue(code.Inspektionskode, out Massnahmen))
{ {
List<SanierungMassnahme> k = code.Renovation.Massnahmen; List<SanierungMassnahme> imasses = Massnahmen.FindAll(x =>
SanierungMassnahme s = k.Find(x => haltung.Inspektionsdaten.OptischeInspektion[0].Rohrleitung.Grunddaten.Profilbreite >= x.DN); haltung.Inspektionsdaten.OptischeInspektion[0].Rohrleitung.Grunddaten.Profilbreite >=
worksheet.Range[row + j, 9].Text = s.Beschreibung; x.DN);
if (s.Beschreibung.Equals("Schlauchliner"))
uint counter = 0;
decimal Kosten = 0;
bool Schlauchliner = false;
foreach (SanierungMassnahme imas in imasses)
{ {
double zuschlag = 1; if(CheckKuerzel(imas.Begrenzung, code))
double tmpLaenge = Convert.ToDouble(haltung.Stammdaten.Kante.Laenge); {
if (tmpLaenge < 30) Kosten += imas.Kosten;
zuschlag = 1.3; if(counter == 0)
if (tmpLaenge < 15) worksheet.Range[row + j, 9].Text += imas.Beschreibung;
zuschlag = 1.5; else
worksheet.Range[row + j, 10].Number = (s.Kosten*zuschlag) * tmpLaenge; worksheet.Range[row + j, 9].Text += "," + imas.Beschreibung;
if (imas.Beschreibung.Equals("Schlauchliner"))
{
Schlauchliner = true;
decimal zuschlag = 1;
decimal tmpLaenge = haltung.Stammdaten.Kante.Laenge;
if (tmpLaenge < 30)
zuschlag = 1.3m;
if (tmpLaenge < 15)
zuschlag = 1.5m;
worksheet.Range[row + j, 10].Number = Convert.ToDouble((imas.Kosten * zuschlag) * tmpLaenge);
break;
}
}
counter++;
}
if(!Schlauchliner)
{
worksheet.Range[row + j, 10].Number = Convert.ToDouble(Kosten);
}
if (imasses != null)
{
/*
worksheet.Range[row + j, 9].Text = imass.Beschreibung;
if (imass.Beschreibung.Equals("Schlauchliner"))
{
double zuschlag = 1;
double tmpLaenge = Convert.ToDouble(haltung.Stammdaten.Kante.Laenge);
if (tmpLaenge < 30)
zuschlag = 1.3;
if (tmpLaenge < 15)
zuschlag = 1.5;
worksheet.Range[row + j, 10].Number = (imass.Kosten * zuschlag) * tmpLaenge;
}
else
worksheet.Range[row + j, 10].Number = imass.Kosten;
*/
} }
else
worksheet.Range[row + j, 10].Number = s.Kosten;
//Debugger.Break();
} }
//Debugger.Break();
/*Tuple<string, double> d;
if (sanArt.Sanierungen.TryGetValue(code.Inspektionskode, out d))
{
worksheet.Range[row + j, 9].Text = d.Item1;
worksheet.Range[row + j, 10].Number = d.Item2;
}
*/
row++; row++;
} }
} }
@@ -183,54 +238,130 @@ namespace Schnittstelle.Export
worksheet.Range[temprow, 1, row-1, 10].CellStyle = cellStyle; worksheet.Range[temprow, 1, row-1, 10].CellStyle = cellStyle;
worksheet.Range[row-1, 1, row-1, 10].CellStyle = kodierungEnde; worksheet.Range[row-1, 1, row-1, 10].CellStyle = kodierungEnde;
temprow = row; temprow = row;
worksheet.Range[row, 7].Text = "Zwischensumme"; worksheet.Range[row, 7].Text = "netto-Zwischensumme";
worksheet.Range[row, 10].Formula = string.Format("=SUM(J{0}:J{1})", codestart_row, row-1); worksheet.Range[row, 10].Formula = string.Format("=SUM(J{0}:J{1})", codestart_row, row-1);
row++; row++;
worksheet.Range[row, 7].Text = "Baustelleneinrichtung"; //10%
//Linke seite
worksheet.Range[row, 1].Text =sanArt.Sanierungsbezeichnung.ToString();
// Auflistung
worksheet.Range[row, 7].Text = "Baustelleneinrichtung anteilig Haltung"; //10%
worksheet.Range[row, 8].Number = 10; worksheet.Range[row, 8].Number = 10;
worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}", row, temprow); worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}", row, temprow);
row++; row++;
worksheet.Range[row, 7].Text = "Verkehrssicherung"; // 5% worksheet.Range[row, 7].Text = "Verkehrssicherung anteilig Haltung"; // 5%
worksheet.Range[row, 8].Number = 5; worksheet.Range[row, 8].Number = 5;
worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}", row, temprow); worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}", row, temprow);
row++; row++;
worksheet.Range[row, 7].Text = "Aufrechterhaltung der Vorflut"; // 12% // Linke seite
worksheet.Range[row, 1].CellStyle = headerStyle;
worksheet.Range[row, 1].Text = "Sanierungspriorität";
worksheet.Range[row, 3].CellStyle = headerStyle;
worksheet.Range[row, 3].Text = "Info";
// Auflistung
worksheet.Range[row, 7].Text = "Aufrechterhaltung der Vorflut Haltung"; // 12%
worksheet.Range[row, 8].Number = 12; worksheet.Range[row, 8].Number = 12;
worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}", row, temprow); worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}", row, temprow);
row++; row++;
worksheet.Range[row, 7].Text = "Kanalreinigung"; // 2€ /m // Linke seite
worksheet.Range[row, 1].Text = "kurzfristing";
worksheet.Range[row, 2].Text = "ja oder nein";
worksheet.Range[row, 3].Text = "6-12 Monate";
worksheet.Range[row, 1, row, 3].CellStyle = cellStyle;
// Auflistung
worksheet.Range[row, 7].Text = "Kanalreinigung vor Sanierung"; // 2€ /m
worksheet.Range[row, 8].Number = Convert.ToDouble(inspizierteLaenge); worksheet.Range[row, 8].Number = Convert.ToDouble(inspizierteLaenge);
worksheet.Range[row, 9].Number = 2; worksheet.Range[row, 9].Number = 2;
worksheet.Range[row, 10].Formula = string.Format("=H{0}*I{0}", row); worksheet.Range[row, 10].Formula = string.Format("=H{0}*I{0}", row);
row++; row++;
worksheet.Range[row, 7].Text = "Kamerainspektion"; // 3€ /m // Linke seite
worksheet.Range[row, 1].Text = "mittelfristig";
worksheet.Range[row, 2].Text = "ja oder nein";
worksheet.Range[row, 3].Text = "1 bis 5 Jahre";
worksheet.Range[row, 1, row, 3].CellStyle = cellStyle;
// Auflistung
worksheet.Range[row, 7].Text = "Kamerainspektion Abnahme"; // 3€ /m
worksheet.Range[row, 8].Number = Convert.ToDouble(inspizierteLaenge); worksheet.Range[row, 8].Number = Convert.ToDouble(inspizierteLaenge);
worksheet.Range[row, 9].Number = 3; worksheet.Range[row, 9].Number = 3;
worksheet.Range[row, 10].Formula = string.Format("=H{0}*I{0}", row); worksheet.Range[row, 10].Formula = string.Format("=H{0}*I{0}", row);
/*
row++; row++;
worksheet.Range[row, 7].Text = "Reinigung verstopfter Abzweiger"; //250€ // Linke seite
worksheet.Range[row, 9].Number = 250; worksheet.Range[row, 1].Text = "langfristig";
worksheet.Range[row, 10].Formula = string.Format("=H{0}*I{0}", row); worksheet.Range[row, 2].Text = "ja oder nein";
*/ worksheet.Range[row, 3].Text = "5 bis 10 Jahre";
row++; worksheet.Range[row, 1, row, 3].CellStyle = cellStyle;
worksheet.Range[row, 7].Text = "Summe netto"; // Auflistung
worksheet.Range[row, 7].Text = "Summe netto Haltung";
worksheet.Range[row, 10].Formula = string.Format("=SUM(J{0}:J{1})",temprow,row-1); worksheet.Range[row, 10].Formula = string.Format("=SUM(J{0}:J{1})",temprow,row-1);
row++; row++;
worksheet.Range[row, 7].Text = "Mehrwertsteuer"; // 19% worksheet.Range[row, 7].Text = "Mehrwertsteuer"; // 19%
worksheet.Range[row, 8].Number = 19; worksheet.Range[row, 8].Number = 19;
worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}",row,row-1); worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}",row,row-1);
row++; row++;
worksheet.Range[row, 7].Text = "Summe brutto"; // Linke seite
worksheet.Range[row, 1].Text = "Sanierung im Verbund";
worksheet.Range[row, 2].Text = "ja oder nein";
worksheet.Range[row, 1, row, 2].CellStyle = cellStyle;
// Auflistung
worksheet.Range[row, 7].Text = "Summe brutto Haltung";
worksheet.Range[row, 10].Formula = string.Format("=SUM(J{0}:J{1})", row - 1, row - 2); worksheet.Range[row, 10].Formula = string.Format("=SUM(J{0}:J{1})", row - 1, row - 2);
worksheet.Range[temprow, 7, row, 10].CellStyle = cellStyle; worksheet.Range[temprow, 7, row, 10].CellStyle = cellStyle;
worksheet.Range[mainrow+1, 4].Text = inspizierteLaenge.ToString(); worksheet.Range[mainrow+1, 3].Text = inspizierteLaenge.ToString();
row += 5; row += 5;
} }
row -= 3;
worksheet.Range[row, 1].Text = "Haltungsbewertung:";
worksheet.Range[row + 1, 1, row + 4, 5].Merge();
worksheet.Range[row + 1, 1, row + 4, 5].CellStyle.Color = ColorTranslator.FromHtml("#FCE4D6");
row += 6;
worksheet.Range[row, 1].Text = "Sanierungsempfehlung:";
row += 2;
worksheet.Range[row, 1].Text = "Hinweis:";
row++;
worksheet.Range[row, 1].Text = "TV-Befahrung:";
worksheet.Range[row, 2].Text = "Sohle sichtbar:";
worksheet.Range[row, 4].Text = "% Wasser in der Sohle";
worksheet.UsedRange.AutofitColumns(); worksheet.UsedRange.AutofitColumns();
worksheet.Range[string.Format("J1:J{0}",row)].NumberFormat = "#,##0.00"; worksheet.Range[string.Format("J1:J{0}", row)].NumberFormat = "_(€* #,##0_)"; // "€ #,##0";
row += 3;
}
private static bool CheckKuerzel(string begrenzung, RZustand code)
{
string[] begrenzungs = begrenzung.Split(':');
string ch1 = begrenzungs[1];
string ch2 = begrenzungs[2];
bool check1 = false;
bool check2 = false;
if(ch1 != "-")
{
check1 = ch1 == code.Charakterisierung1;
}
else
{
check1 = true;
}
if (ch2 != "-")
{
check2 = ch2 == code.Charakterisierung2;
}
else
{
check2 = true;
}
return check1 && check2;
} }
} }
} }

View File

@@ -33,8 +33,6 @@ namespace Schnittstelle.Import.XML.v2013.Model
string kommentar; string kommentar;
Klassifizierung? klassifizierung; Klassifizierung? klassifizierung;
string kodeDescription; string kodeDescription;
IReparatur? reparatur;
IRenovation? renovation;
public decimal Station { get => station; set => station = value; } public decimal Station { get => station; set => station = value; }
public string Inspektionskode { get => inspektionskode; set => inspektionskode = value; } public string Inspektionskode { get => inspektionskode; set => inspektionskode = value; }
@@ -50,7 +48,5 @@ namespace Schnittstelle.Import.XML.v2013.Model
public string Kommentar { get => kommentar; set => kommentar = value; } public string Kommentar { get => kommentar; set => kommentar = value; }
public Klassifizierung? Klassifizierung { get => klassifizierung; set => klassifizierung = value; } public Klassifizierung? Klassifizierung { get => klassifizierung; set => klassifizierung = value; }
public string KodeDescription { get => kodeDescription; set => kodeDescription = value; } public string KodeDescription { get => kodeDescription; set => kodeDescription = value; }
public IReparatur Reparatur { get => reparatur; set => reparatur = value; }
public IRenovation Renovation { get => renovation; set => renovation = value; }
} }
} }

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
namespace Schnittstelle.Import.XML.v2013.Model namespace Schnittstelle.Import.XML.v2013.Model
{ {
@@ -34,6 +35,12 @@ namespace Schnittstelle.Import.XML.v2013.Model
inspektionslaenge = value; inspektionslaenge = value;
} }
} }
public string Inspektionsrichtung_RAW
{
get => inspektionsrichtung;
}
public string Inspektionsrichtung public string Inspektionsrichtung
{ {
get get

View File

@@ -13,6 +13,12 @@ using System.Xml;
namespace Schnittstelle.Import.XML.v2013 namespace Schnittstelle.Import.XML.v2013
{ {
public class NotZustandException: Exception
{
}
public class XML2013 : ISchnittstelleImporter public class XML2013 : ISchnittstelleImporter
{ {
private string xmlFile = ""; private string xmlFile = "";
@@ -78,6 +84,7 @@ namespace Schnittstelle.Import.XML.v2013
Tuple<List<AbwassertechnischeAnlage>, List<InspizierteAbwassertechnischeAnlage>> src = LoadRawFile(); Tuple<List<AbwassertechnischeAnlage>, List<InspizierteAbwassertechnischeAnlage>> src = LoadRawFile();
stammdaten = src.Item1; stammdaten = src.Item1;
inspektionsdaten = src.Item2; inspektionsdaten = src.Item2;
if (inspektionsdaten.Count == 0) Console.WriteLine("Keine Inspektionsdaten gefunden in der XML");
foreach (InspizierteAbwassertechnischeAnlage iat in inspektionsdaten) foreach (InspizierteAbwassertechnischeAnlage iat in inspektionsdaten)
{ {
AbwassertechnischeAnlage stammdatens = stammdaten.Find(x => x.Objektbezeichnung.Equals(iat.Objektbezeichnung) && x.ObjektArt.Equals(EObjektArt.KANTE));//; AbwassertechnischeAnlage stammdatens = stammdaten.Find(x => x.Objektbezeichnung.Equals(iat.Objektbezeichnung) && x.ObjektArt.Equals(EObjektArt.KANTE));//;
@@ -100,20 +107,43 @@ namespace Schnittstelle.Import.XML.v2013
if (!File.Exists(XmlFile)) throw new FileNotFoundException(string.Format("XML Datei mit den Pfad {0} wurde nicht gefunden", XmlFile)); if (!File.Exists(XmlFile)) throw new FileNotFoundException(string.Format("XML Datei mit den Pfad {0} wurde nicht gefunden", XmlFile));
XmlDocument doc = new XmlDocument(); XmlDocument doc = new XmlDocument();
doc.Load(XmlFile); doc.Load(XmlFile);
string xmlNameSpace = doc.DocumentElement.NamespaceURI;
rootChild = doc.LastChild; rootChild = doc.LastChild;
manager = new XmlNamespaceManager(doc.NameTable); manager = new XmlNamespaceManager(doc.NameTable);
manager.AddNamespace("e", "http://www.ofd-hannover.la/Identifikation");
manager.AddNamespace("e", xmlNameSpace);
rootChild = rootChild.SelectSingleNode("//e:Datenkollektive", manager); rootChild = rootChild.SelectSingleNode("//e:Datenkollektive", manager);
Stammdaten = LoadStammdatenCollectiv(); Stammdaten = LoadStammdatenCollectiv();
Inspektionsdaten = LoadInspektionsdatenCollectiv(); try
{
Inspektionsdaten = LoadInspektionsdatenCollectiv();
}
catch (NotZustandException ex)
{
Inspektionsdaten = new List<InspizierteAbwassertechnischeAnlage>();
}
return new Tuple<List<AbwassertechnischeAnlage>, List<InspizierteAbwassertechnischeAnlage>>(Stammdaten, Inspektionsdaten); return new Tuple<List<AbwassertechnischeAnlage>, List<InspizierteAbwassertechnischeAnlage>>(Stammdaten, Inspektionsdaten);
} }
private List<InspizierteAbwassertechnischeAnlage> LoadInspektionsdatenCollectiv() private List<InspizierteAbwassertechnischeAnlage> LoadInspektionsdatenCollectiv()
{ {
List<InspizierteAbwassertechnischeAnlage> result = new List<InspizierteAbwassertechnischeAnlage>(); List<InspizierteAbwassertechnischeAnlage> result = new List<InspizierteAbwassertechnischeAnlage>();
bool found = false;
foreach(XmlNode childNode in rootChild.ChildNodes)
{
if(childNode.Name.Equals("Zustandsdatenkollektiv"))
{
found = true;
break;
}
}
if (!found) throw new NotZustandException();
XmlNode zstdk = rootChild.SelectSingleNode("//e:Zustandsdatenkollektiv", manager); XmlNode zstdk = rootChild.SelectSingleNode("//e:Zustandsdatenkollektiv", manager);
XmlNodeList Inspektionsdaten = zstdk.SelectNodes("//e:InspizierteAbwassertechnischeAnlage", manager); XmlNodeList Inspektionsdaten = zstdk.SelectNodes("//e:InspizierteAbwassertechnischeAnlage", manager);
@@ -323,6 +353,8 @@ namespace Schnittstelle.Import.XML.v2013
case "Timecode": break; case "Timecode": break;
case "GrundAbbruch": break; case "GrundAbbruch": break;
case "Videozaehler": break; case "Videozaehler": break;
case "BCAMaterial": break;
case "BDBZustandLeitung": break;
default: throw new NotImplementedException(d.Name); default: throw new NotImplementedException(d.Name);
} }
@@ -331,8 +363,6 @@ namespace Schnittstelle.Import.XML.v2013
ICodeBeschreibung codedescription = factory.GetCodeBeschreibung(rZustand); ICodeBeschreibung codedescription = factory.GetCodeBeschreibung(rZustand);
rZustand.KodeDescription = codedescription.GetBeschreibung; rZustand.KodeDescription = codedescription.GetBeschreibung;
if (codedescription is IRenovation) rZustand.Renovation = (IRenovation)codedescription;
if(codedescription is IReparatur) rZustand.Reparatur = (IReparatur)codedescription;
result.Add(rZustand); result.Add(rZustand);
} }
@@ -460,6 +490,7 @@ namespace Schnittstelle.Import.XML.v2013
case "Kantentyp": result.Kantentyp = (EKantenTyp)Convert.ToInt32(d.InnerText); break; case "Kantentyp": result.Kantentyp = (EKantenTyp)Convert.ToInt32(d.InnerText); break;
case "Entfernung": result.Entfernung = ConvertXMLToDecimal(d.InnerText); break; case "Entfernung": result.Entfernung = ConvertXMLToDecimal(d.InnerText); break;
case "Fixierung": result.Fixierung = d.InnerText; break; case "Fixierung": result.Fixierung = d.InnerText; break;
case "AnschlussArt": break;
default: throw new NotImplementedException(d.Name); default: throw new NotImplementedException(d.Name);
} }
@@ -504,6 +535,7 @@ namespace Schnittstelle.Import.XML.v2013
case "Kommentar": break; case "Kommentar": break;
case "Geometrie": result.Geometrie = parseGeometrie(aktuell); break; case "Geometrie": result.Geometrie = parseGeometrie(aktuell); break;
case "Sanierung": break; case "Sanierung": break;
case "Ordnungseinheiten": break;
default: throw new NotImplementedException(aktuell.Name); default: throw new NotImplementedException(aktuell.Name);
} }
} }
@@ -547,6 +579,7 @@ namespace Schnittstelle.Import.XML.v2013
case "Kanten": case "Kanten":
result.Kanten = parseGeometrieKanten(s); result.Kanten = parseGeometrieKanten(s);
break; break;
case "Polygone": break;
default: throw new NotImplementedException(s.Name); default: throw new NotImplementedException(s.Name);
} }
} }
@@ -599,6 +632,8 @@ namespace Schnittstelle.Import.XML.v2013
case "Hochwert": result.Hochwert = ConvertXMLToDecimal(s.InnerText); break; case "Hochwert": result.Hochwert = ConvertXMLToDecimal(s.InnerText); break;
case "Punkthoehe": result.Punkthoehe = ConvertXMLToDecimal(s.InnerText); break; case "Punkthoehe": result.Punkthoehe = ConvertXMLToDecimal(s.InnerText); break;
case "PunktattributAbwasser": result.PunktattributAbwasser = s.InnerText; break; case "PunktattributAbwasser": result.PunktattributAbwasser = s.InnerText; break;
case "Lagegenauigkeitsstufe": break;
case "Hoehengenauigkeitsstufe": break;
default: throw new NotImplementedException(s.Name); default: throw new NotImplementedException(s.Name);
} }
} }
@@ -641,6 +676,8 @@ namespace Schnittstelle.Import.XML.v2013
case "PunktattributAbwasser": case "PunktattributAbwasser":
punkt.PunktattributeAbwasser = s.InnerText; punkt.PunktattributeAbwasser = s.InnerText;
break; break;
case "Lagegenauigkeitsstufe": break;
case "Hoehengenauigkeitsstufe": break;
default: throw new NotImplementedException(s.Name); default: throw new NotImplementedException(s.Name);
} }
} }
@@ -686,6 +723,10 @@ namespace Schnittstelle.Import.XML.v2013
break; break;
case "Haltung": case "Haltung":
break; break;
case "Leitung":
break;
case "Anschlussdaten":
break;
default: throw new NotImplementedException(s.Name); default: throw new NotImplementedException(s.Name);
} }
} }
@@ -719,6 +760,7 @@ namespace Schnittstelle.Import.XML.v2013
case "KnotenTyp": result.KnotenTyp = (EKnotenTyp)Convert.ToInt32(s.InnerText); break; case "KnotenTyp": result.KnotenTyp = (EKnotenTyp)Convert.ToInt32(s.InnerText); break;
case "Anschlusspunkt": result.Anschlusspunkt = new Anschlusspunkt() { Punktkennung = s.InnerText }; break; case "Anschlusspunkt": result.Anschlusspunkt = new Anschlusspunkt() { Punktkennung = s.InnerText }; break;
case "Schacht": result.Schacht = parseSchacht(s); break; case "Schacht": result.Schacht = parseSchacht(s); break;
case "Abdeckungen": break;
default: throw new NotImplementedException(s.Name); default: throw new NotImplementedException(s.Name);
} }
} }
@@ -736,7 +778,7 @@ namespace Schnittstelle.Import.XML.v2013
case "SchachtFunktion": result.SchachtFunktion = (ESchachtFunktion)Convert.ToInt32(n.InnerText); break; case "SchachtFunktion": result.SchachtFunktion = (ESchachtFunktion)Convert.ToInt32(n.InnerText); break;
case "Schachttiefe": case "Schachttiefe":
result.SchachtTiefe = Convert.ToDecimal(n.InnerText); result.SchachtTiefe = Convert.ToDecimal(n.InnerText);
Debugger.Break(); //Debugger.Break();
break; break;
case "Einstieghilfe": break; case "Einstieghilfe": break;
case "ArtEinstieghilfe": break; case "ArtEinstieghilfe": break;

View File

@@ -3,34 +3,6 @@ using System.Collections.Generic;
namespace Schnittstelle.Sanierung namespace Schnittstelle.Sanierung
{ {
public interface IReparatur
{
List<SanierungMassnahme> Massnahmen { get; }
}
public interface IRenovation
{
List<SanierungMassnahme> Massnahmen { get; }
}
public class SanierungMassnahme
{
string beschreibung = string.Empty;
double kosten = double.MinValue;
int dn = 0;
public string Beschreibung { get => beschreibung; }
public double Kosten { get => kosten; }
public int DN { get => dn; }
public SanierungMassnahme(string beschreibung, double kosten, int dn)
{
this.beschreibung = beschreibung;
this.kosten = kosten;
this.dn = dn;
}
}
} }

View File

@@ -6,11 +6,37 @@ using System.Text;
namespace Schnittstelle.Sanierung namespace Schnittstelle.Sanierung
{ {
public class SanierungMassnahme
{
private string begrenzung = string.Empty;
string beschreibung = string.Empty;
decimal kosten = decimal.Zero;
int dn = 0;
public string Beschreibung { get => beschreibung; }
public string Begrenzung { get => begrenzung; }
public decimal Kosten { get => kosten; }
public int DN { get => dn; }
public SanierungMassnahme(string beschreibung, decimal kosten, int dn, string begrenzung = "-:-:-")
{
this.beschreibung = beschreibung;
this.kosten = kosten;
this.dn = dn;
this.begrenzung = begrenzung;
}
}
public abstract class Sanierungart public abstract class Sanierungart
{ {
string sanierungsbezeichnung = string.Empty; string sanierungsbezeichnung = string.Empty;
public string Sanierungsbezeichnung { get => sanierungsbezeichnung; } public string Sanierungsbezeichnung { get => sanierungsbezeichnung; }
public Dictionary<string, Tuple<string, double>> Sanierungen = new Dictionary<string, Tuple<string, double>>(); public Dictionary<string, Tuple<string, double>> Sanierungen = new Dictionary<string, Tuple<string, double>>();
protected Dictionary<string, List<SanierungMassnahme>> massnahmen =
new Dictionary<string, List<SanierungMassnahme>>();
public Dictionary<string, List<SanierungMassnahme>> Massnahmen => massnahmen;
public Sanierungart(string art) public Sanierungart(string art)
{ {
sanierungsbezeichnung = art; sanierungsbezeichnung = art;
@@ -20,17 +46,95 @@ namespace Schnittstelle.Sanierung
public class Reparatur : Sanierungart public class Reparatur : Sanierungart
{ {
public Reparatur() : base("Reparaturverfahren") public Reparatur() : base("Reparatur")
{ {
massnahmen.Add("BAB", new List<SanierungMassnahme>()
{
new SanierungMassnahme("Kurzliner",450,0)
});
massnahmen.Add("BAG", new List<SanierungMassnahme>()
{
new SanierungMassnahme("Fräsen",50,0)
});
massnahmen.Add("BAH", new List<SanierungMassnahme>()
{
new SanierungMassnahme("Fräsen",50,0,"BAH:C:-"),
new SanierungMassnahme("Hut",400,0,"BAH:C:-")
});
massnahmen.Add("BAI", new List<SanierungMassnahme>()
{
new SanierungMassnahme("Fräsen",50,0)
});
massnahmen.Add("BAJ", new List<SanierungMassnahme>()
{
new SanierungMassnahme("Fräsen",50,0)
});
massnahmen.Add("BBA", new List<SanierungMassnahme>()
{
new SanierungMassnahme("Fräsen",50,0)
});
massnahmen.Add("BBB", new List<SanierungMassnahme>()
{
new SanierungMassnahme("Fräsen",50,0)
});
massnahmen.Add("BBC", new List<SanierungMassnahme>()
{
new SanierungMassnahme("Fräsen",50,0)
});
massnahmen.Add("BCA", new List<SanierungMassnahme>()
{
new SanierungMassnahme("Tittensanierung",600,0,"BCA:C:-"),
new SanierungMassnahme("Tittensanierung",600,0,"BCA:E:-")
});
} }
} }
public class Renovation : Sanierungart public class Renovation : Sanierungart
{ {
public Renovation() : base("Renovationsverfahren")
{
public Renovation() : base("Renovation")
{
BCA();
BCE();
massnahmen.Add("BAJ", new List<SanierungMassnahme>()
{
new SanierungMassnahme("Fräsen",50,0)
});
massnahmen.Add("BBA", new List<SanierungMassnahme>()
{
new SanierungMassnahme("Fräsen",50,0)
});
massnahmen.Add("BBB", new List<SanierungMassnahme>()
{
new SanierungMassnahme("Fräsen",50,0)
});
massnahmen.Add("BBC", new List<SanierungMassnahme>()
{
new SanierungMassnahme("Fräsen",50,0)
});
}
void BCA()
{
List<SanierungMassnahme> bca = new List<SanierungMassnahme>();
bca.Add(new SanierungMassnahme("Einmessen", 100, 0, "BCA:-:-"));
bca.Add(new SanierungMassnahme("Öffnen", 100, 0, "BCA:-:A"));
bca.Add(new SanierungMassnahme("Stsan", 600, 0, "BCA:-:A"));
massnahmen.Add("BCA", bca);
}
void BCE()
{
List<SanierungMassnahme> bce = new List<SanierungMassnahme>();
bce.Add(new SanierungMassnahme("Schlauchliner", 100, 200));
bce.Add(new SanierungMassnahme("Schlauchliner", 105, 250));
bce.Add(new SanierungMassnahme("Schlauchliner", 110, 300));
bce.Add(new SanierungMassnahme("Schlauchliner", 120, 400));
bce.Add(new SanierungMassnahme("Schlauchliner", 130, 500));
bce.Add(new SanierungMassnahme("Schlauchliner", 140, 600));
massnahmen.Add("BCE", bce);
} }
} }
} }