203 lines
10 KiB
C#
203 lines
10 KiB
C#
using Schnittstelle.Import.XML.v2013.Model;
|
|
using Schnittstelle.Sanierung;
|
|
using Syncfusion.XlsIO;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace Schnittstelle.Export
|
|
{
|
|
public static class Excel
|
|
{
|
|
const string LizenceKey = "Ngo9BigBOggjHTQxAR8/V1NCaF5cXmZCf1FpRmJGdld5fUVHYVZUTXxaS00DNHVRdkdnWXdccXRQQ2NZWEBxWUM=";
|
|
public static void MakeWorkbook(List<KanalObjekt> KanalObjekte, List<Sanierungart> sanierungsarten)
|
|
{
|
|
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(LizenceKey);
|
|
ExcelEngine excelEngine = new ExcelEngine();
|
|
IApplication application = excelEngine.Excel;
|
|
|
|
application.DefaultVersion = ExcelVersion.Xlsx;
|
|
IWorkbook workbook = application.Workbooks.Create(KanalObjekte.Count);
|
|
IStyle CellStyle = workbook.Styles.Add("MainStyle");
|
|
|
|
CellStyle.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin;
|
|
CellStyle.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin;
|
|
CellStyle.Borders[ExcelBordersIndex.EdgeTop].LineStyle = ExcelLineStyle.Thin;
|
|
CellStyle.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin;
|
|
|
|
IStyle HeaderStyle = workbook.Styles.Add("HeaderStyle");
|
|
|
|
HeaderStyle.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin;
|
|
HeaderStyle.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin;
|
|
HeaderStyle.Borders[ExcelBordersIndex.EdgeTop].LineStyle = ExcelLineStyle.Thin;
|
|
HeaderStyle.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin;
|
|
HeaderStyle.Font.Bold = true;
|
|
|
|
IStyle KodierungEnde = workbook.Styles.Add("KodierungEndestyleStyle");
|
|
|
|
KodierungEnde.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin;
|
|
KodierungEnde.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin;
|
|
KodierungEnde.Borders[ExcelBordersIndex.EdgeTop].LineStyle = ExcelLineStyle.Thin;
|
|
KodierungEnde.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thick;
|
|
|
|
|
|
for (int i = 0; i < KanalObjekte.Count; i++)
|
|
{
|
|
IWorksheet worksheet = workbook.Worksheets[i];
|
|
KanalObjekt k = KanalObjekte[i];
|
|
CalculateHaltung(k, worksheet, sanierungsarten, CellStyle, HeaderStyle, KodierungEnde);
|
|
}
|
|
FileStream stream = new FileStream("beurteilung.xlsx", FileMode.Create, FileAccess.ReadWrite);
|
|
workbook.SaveAs(stream);
|
|
stream.Dispose();
|
|
}
|
|
|
|
private static void CalculateHaltung(KanalObjekt haltung, IWorksheet worksheet, List<Sanierungart> sanierungsarten, IStyle cellStyle, IStyle headerStyle, IStyle kodierungEnde)
|
|
{
|
|
|
|
worksheet.Name = string.Format("{0}", haltung.Stammdaten.Objektbezeichnung);
|
|
|
|
int row = 1;
|
|
|
|
for (int i = 0; i < sanierungsarten.Count; i++)
|
|
{
|
|
Sanierungart sanArt = sanierungsarten[i];
|
|
int mainrow = row;
|
|
worksheet.Range[row, 1].Text = "Haltung";
|
|
worksheet.Range[row, 2].Text = "Länge";
|
|
worksheet.Range[row, 3].Text = "Tiefe";
|
|
worksheet.Range[row, 4].Text = "Inspizierte Länge";
|
|
worksheet.Range[row, 5].Text = "Straße";
|
|
worksheet.Range[row, 9].Text = "DN";
|
|
worksheet.Range[row, 10].Text = "Material";
|
|
|
|
row++;
|
|
worksheet.Range[row, 1].Text = haltung.Stammdaten.Objektbezeichnung;
|
|
worksheet.Range[row, 2].Text = "TODO"; // Länge
|
|
worksheet.Range[row, 3].Text = "TODO"; // Tiefe
|
|
|
|
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, 10].Text = haltung.Inspektionsdaten.OptischeInspektion[0].Rohrleitung.Grunddaten.Material.ToString();
|
|
|
|
worksheet.Range[mainrow, 1, mainrow, 10].CellStyle = headerStyle;
|
|
worksheet.Range[row,1,row,10].CellStyle = cellStyle;
|
|
|
|
|
|
row += 2;
|
|
worksheet.Range[row, 2].Text = sanArt.Sanierungsbezeichnung;
|
|
row+= 2;
|
|
//int temprow = row;
|
|
worksheet.Range[row, 1].Text = "Stat";
|
|
worksheet.Range[row, 2].Text = "Kürzel";
|
|
worksheet.Range[row, 3].Text = "Charakterisierung";
|
|
worksheet.Range[row, 4].Text = "Quantifizierung";
|
|
worksheet.Range[row, 5].Text = "Lage";
|
|
worksheet.Range[row, 6].Text = "Verb.";
|
|
worksheet.Range[row, 7].Text = "Schaden";
|
|
worksheet.Range[row, 8].Text = "Strecke";
|
|
worksheet.Range[row, 9].Text = "Sanierung";
|
|
worksheet.Range[row, 10].Text = "Kosten";
|
|
|
|
worksheet.Range[row, 1, row,10].CellStyle=headerStyle;
|
|
|
|
row++;
|
|
int temprow = row;
|
|
int codestart_row = row;
|
|
//int rows = 7;
|
|
decimal inspizierteLaenge = 0m;
|
|
for (int j = 0; j < haltung.Inspektionsdaten.OptischeInspektion.Count; j++)
|
|
{
|
|
OptischeInspektion opt = haltung.Inspektionsdaten.OptischeInspektion[j];
|
|
inspizierteLaenge += opt.Rohrleitung.Zustaende.Max(x => x.Station);
|
|
foreach (RZustand code in opt.Rohrleitung.Zustaende)
|
|
{
|
|
worksheet.Range[row + j, 1].Text = code.Station.ToString();
|
|
worksheet.Range[row + j, 2].Text = code.Inspektionskode;
|
|
string ch = "";
|
|
if (code.Charakterisierung1 != null)
|
|
ch = code.Charakterisierung1;
|
|
if (code.Charakterisierung2 != null)
|
|
ch = string.Format("{0} / {1}", ch, code.Charakterisierung2);
|
|
worksheet.Range[row + j, 3].Text = ch;
|
|
|
|
worksheet.Range[row + j, 4].Text = code.Quantifizierung1.ToString();
|
|
|
|
string pos = "";
|
|
if (code.PositionVon != 0)
|
|
pos = code.PositionVon.ToString();
|
|
if (code.PositionBis != 0)
|
|
pos = string.Format("{0} - {1}", pos, code.PositionBis);
|
|
worksheet.Range[row + j, 5].Text = pos;
|
|
|
|
if (code.Verbindung)
|
|
worksheet.Range[row + j, 6].Text = "JA";
|
|
|
|
worksheet.Range[row + j, 7].Text = code.KodeDescription;
|
|
worksheet.Range[row + j, 8].Text = code.Streckenschaden;
|
|
|
|
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++;
|
|
}
|
|
}
|
|
worksheet.Range[temprow, 1, row-1, 10].CellStyle = cellStyle;
|
|
worksheet.Range[row-1, 1, row-1, 10].CellStyle = kodierungEnde;
|
|
temprow = row;
|
|
worksheet.Range[row, 7].Text = "Zwischensumme";
|
|
worksheet.Range[row, 10].Formula = string.Format("=SUM(J{0}:J{1})", codestart_row, row-1);
|
|
row++;
|
|
worksheet.Range[row, 7].Text = "Baustelleneinrichtung"; //10%
|
|
worksheet.Range[row, 8].Number = 10;
|
|
worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}", row, temprow);
|
|
row++;
|
|
worksheet.Range[row, 7].Text = "Verkehrssicherung"; // 5%
|
|
worksheet.Range[row, 8].Number = 5;
|
|
worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}", row, temprow);
|
|
row++;
|
|
worksheet.Range[row, 7].Text = "Aufrechterhaltung der Vorflut"; // 12%
|
|
worksheet.Range[row, 8].Number = 12;
|
|
worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}", row, temprow);
|
|
row++;
|
|
worksheet.Range[row, 7].Text = "Kanalreinigung"; // 2€ /m
|
|
worksheet.Range[row, 8].Number = Convert.ToDouble(inspizierteLaenge);
|
|
worksheet.Range[row, 9].Number = 2;
|
|
worksheet.Range[row, 10].Formula = string.Format("=H{0}*I{0}", row);
|
|
row++;
|
|
worksheet.Range[row, 7].Text = "Kamerainspektion"; // 3€ /m
|
|
worksheet.Range[row, 8].Number = Convert.ToDouble(inspizierteLaenge);
|
|
worksheet.Range[row, 9].Number = 3;
|
|
worksheet.Range[row, 10].Formula = string.Format("=H{0}*I{0}", row);
|
|
row++;
|
|
worksheet.Range[row, 7].Text = "Reinigung verstopfter Abzweiger"; //250€
|
|
worksheet.Range[row, 9].Number = 250;
|
|
worksheet.Range[row, 10].Formula = string.Format("=H{0}*I{0}", row);
|
|
row++;
|
|
worksheet.Range[row, 7].Text = "Summe netto";
|
|
worksheet.Range[row, 10].Formula = string.Format("=SUM(J{0}:J{1})",temprow,row-1);
|
|
row++;
|
|
worksheet.Range[row, 7].Text = "Mehrwertsteuer"; // 19%
|
|
worksheet.Range[row, 8].Number = 19;
|
|
worksheet.Range[row, 10].Formula = string.Format("=(H{0}/100)*J{1}",row,row-1);
|
|
row++;
|
|
worksheet.Range[row, 7].Text = "Summe brutto";
|
|
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[mainrow+1, 4].Text = inspizierteLaenge.ToString();
|
|
row += 5;
|
|
}
|
|
worksheet.UsedRange.AutofitColumns();
|
|
}
|
|
}
|
|
}
|