Files
Kanalsanierungsverwaltung/SanSystem/MassenStatistik.cs
2020-03-25 13:00:28 +01:00

197 lines
6.5 KiB
C#

using Database;
using KlassenBIB;
using SanShared;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SanSystem
{
class MassenStatistik : IMakeProtokol
{
List<Inspektionsobjekt> inspektionsobjekts = null;
DateTime targetDatum;
public MassenStatistik(List<Inspektionsobjekt> inspektionsobjekts, DateTime datum)
{
this.inspektionsobjekts = inspektionsobjekts;
targetDatum = datum;
BuildBericht(SearchForWaranties());
}
static string ConvertToDecimals(double input, uint kommazahl = 2)
{
return input.ToString("0.00");
}
void BuildBericht(List<Inspektionsobjekt> list)
{
Hashtable grundDaten = MakeProtokoll("",null,DateTime.MinValue);
DataTable inliner = getMassenTableInliner();
double gesamtLiner = 0;
double gesamtHarz = 0;
foreach (Inspektionsobjekt objekt in list)
{
DataRow dr = inliner.NewRow();
dr["hausnummer"] = objekt.Hausnummer;
dr["sanierungsnummer"] = objekt.Sanierungsnummer;
dr["vorbereitet"] = "am " + objekt.HaltungGemessen.ToShortDateString();
int schachtanbindungen = 0;
foreach (AbstractSanieren mainsan in objekt.Sanierung)
{
if (
mainsan.Datum.Day == targetDatum.Day &&
mainsan.Datum.Month == targetDatum.Month &&
mainsan.Datum.Year == targetDatum.Year)
{
if (mainsan is InlinerSanierung)
{
double linerLang = objekt.Haltungslaenge + objekt.Schachtlaenge + 0.5;
gesamtLiner += linerLang;
dr["liner_laenge"] = ConvertToDecimals(linerLang);
dr["kalibrierschlauch"] = ConvertToDecimals(objekt.Haltungslaenge + (objekt.Schachtlaenge * 2) + 0.3);
dr["preliner"] = (mainsan as InlinerSanierung).Preliner ? ConvertToDecimals(linerLang - 0.5): ConvertToDecimals(0.0);
dr["harzmenge"] = ConvertToDecimals(objekt.Haltungslaenge * (mainsan as InlinerSanierung).HarzBedarf);
gesamtHarz += objekt.Haltungslaenge * (mainsan as InlinerSanierung).Harzbedarf;
}
if (mainsan is SchachtAnbindung)
{
schachtanbindungen++;
}
dr["schachtanbindung"] = schachtanbindungen;
}
}
inliner.Rows.Add(dr);
}
grundDaten["gesamtHarz"] = ConvertToDecimals(gesamtHarz);
grundDaten["gesamtliner"] = ConvertToDecimals(gesamtLiner);
grundDaten["Ausdruck_datum"] = targetDatum.ToLongDateString();
grundDaten["Ort"] = inspektionsobjekts.Last().OrtName;
grundDaten["Strasse"] = inspektionsobjekts.Last().StrasseName;
grundDaten["Projektnummer"] = Datenbank.Instance.loadedProjekt.Nummer;
BerichtGen.FrmOptions frmOptions = new BerichtGen.FrmOptions("JUME", "Massenstatistik.docx", ".", "Massenstatistik", grundDaten, null, inliner);
frmOptions.ShowDialog();
}
public Hashtable MakeProtokoll(string destinationPath, IProjekt projekt, DateTime offset)
{
Hashtable grundDaten = new Hashtable()
{
{"Ausdruck_datum","" },
{"Strasse","" },
{"Ort","" },
{"Projektnummer","" },
{"gesamtliner","" },
{"gesamtHarz","" }
};
return grundDaten;
}
DataTable getMassenTableInliner()
{
DataTable dt = new DataTable("Liner");
DataColumn column = new DataColumn("hausnummer")
{
MaxLength = 50
};
dt.Columns.Add(column);
column = new DataColumn("sanierungsnummer")
{
MaxLength = 10
};
dt.Columns.Add(column);
column = new DataColumn("liner_laenge")
{
MaxLength = 50
};
dt.Columns.Add(column);
column = new DataColumn("kalibrierschlauch")
{
MaxLength = 50
};
dt.Columns.Add(column);
column = new DataColumn("preliner")
{
MaxLength = 50
};
dt.Columns.Add(column);
column = new DataColumn("harzmenge")
{
MaxLength = 50
};
dt.Columns.Add(column);
column = new DataColumn("vorbereitet")
{
MaxLength = 50
};
dt.Columns.Add(column);
column = new DataColumn("schachtanbindung")
{
MaxLength = 50
};
dt.Columns.Add(column);
return dt;
}
List<Inspektionsobjekt> SearchForWaranties()
{
if (inspektionsobjekts == null) return null ;
List<Inspektionsobjekt> result = new List<Inspektionsobjekt>();
foreach(Inspektionsobjekt objekt in inspektionsobjekts)
{
bool add = false;
if (
objekt.HaltungGemessen.Year == targetDatum.Year &&
objekt.HaltungGemessen.Month == targetDatum.Month &&
objekt.HaltungGemessen.Day == targetDatum.Day
)
{
add = true;
}
foreach(AbstractSanieren san in objekt.Sanierung)
{
if (san.Fertig &&
san.Datum.Day == targetDatum.Day &&
san.Datum.Month == targetDatum.Month &&
san.Datum.Year == targetDatum.Year
)
add = true;
}
if (add)
result.Add(objekt);
}
return result;
}
}
}