Files
Kanalsanierungsverwaltung/SanSystem/frmStrassenList.cs
Damian Wessels 215f0e4dd9 Merge branch 'SQLite'
# Conflicts:
#	SanSystem/Database/Datenbank.cs
2023-01-15 12:19:09 +01:00

207 lines
6.9 KiB
C#

using Database;
using KlassenBIB;
using SanSystem.Einstellungen;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SanSystem
{
/// <summary>
///
/// </summary>
public partial class frmStrassenList : Form
{
StreetListSettings streetListSetting = new StreetListSettings();
string aktuallStreetName = string.Empty;
/// <summary>
///
/// </summary>
public frmStrassenList()
{
InitializeComponent();
}
bool mehrereOrteAktiv()
{
return Datenbank.Instance.loadedProjekt.Objekte.Select(x => x.OrtName).Distinct().Count() > 1;
}
private void buildStreetList()
{
trv_street.Nodes.Clear();
if (Datenbank.Instance.loadedProjekt == null) return;
rdbtn_ort.Enabled = mehrereOrteAktiv();
if (!mehrereOrteAktiv()) rdbtn_street.Checked = true;
if (rdbtn_street.Checked) buildUnsortedStreetList();
if (rdbtn_ort.Checked) buildSortedSteetList();
}
private void buildSortedSteetList()
{
List<string> ortteile = Datenbank.Instance.loadedProjekt.Objekte.Select(x => x.OrtName).Distinct().ToList();
int aktuellOpened = -1;
bool aktuelleStrasse = false;
foreach (string ort in ortteile)
{
List<string> strassen = Datenbank.Instance.loadedProjekt.Objekte.Where(y => y.OrtName != null && y.OrtName.Equals(ort)).Select(x => x.StrasseName).Distinct().ToList();
TreeNode[] streetnodes = new TreeNode[strassen.Count];
for(int i = 0; i < strassen.Count; i++)
{
streetnodes[i] = new TreeNode();
Tuple<int, int> x = getStatikFromStreet(strassen[i]);
streetnodes[i].Text = string.Format("{0} ({1} / {2})", strassen[i], x.Item1, x.Item2);
if (strassen[i].Equals(aktuallStreetName))
aktuelleStrasse = true;
streetnodes[i].Tag = strassen[i];
}
TreeNode node = new TreeNode(ort, streetnodes);
int looper = trv_street.Nodes.Add(node);
if(aktuelleStrasse)
{
aktuelleStrasse = false;
aktuellOpened = looper;
}
}
if(aktuellOpened != -1)
{
trv_street.Nodes[aktuellOpened].ExpandAll();
}
}
private Tuple<int,int> getStatikFromStreet(string strassename)
{
IEnumerable<KlassenBIB.Inspektionsobjekt> objekte = Datenbank.Instance.loadedProjekt.Objekte.Where(x => x.StrasseName.Equals(strassename));
int counter = 0;
foreach (var objekt in objekte)
{
bool fertig = false;
foreach (var x in objekt.Sanierung)
{
AbstractSanieren abstractSanieren = (AbstractSanieren)x;
if (abstractSanieren.Fertig == true)
{
fertig = true;
}
else
{
fertig = false;
break;
}
}
if (fertig)
{
counter++;
}
}
return new Tuple<int, int>(counter,objekte.Count());
}
private void buildUnsortedStreetList()
{
List<string> strassen = Datenbank.Instance.loadedProjekt.Objekte.Select(x => x.StrasseName).Distinct().ToList();
List<string> streets = new List<string>();
foreach (string strassename in strassen)
{
string streetname = string.Empty;
Tuple<int, int> x = getStatikFromStreet(strassename);
trv_street.Nodes.Add(new TreeNode()
{
Text = string.Format("{0} ({1} / {2})", strassename, x.Item1, x.Item2),
Tag = strassename
});
}
}
private void frmStrassenList_Load(object sender, EventArgs e)
{
this.Height = this.MdiParent.Height - 120;
if(streetListSetting.SortedSelected())
{
rdbtn_street.Checked = false;
rdbtn_ort.Checked = true;
}
else
{
rdbtn_street.Checked = true;
rdbtn_ort.Checked = false;
}
buildStreetList();
}
private void btn_add_Click(object sender, EventArgs e)
{
if(Datenbank.Instance.loadedProjekt == null)
{
MessageBox.Show("Es wurde kein Projekt geladen");
return;
}
KlassenBIB.Inspektionsobjekt inspektionsobjekt = new KlassenBIB.Inspektionsobjekt();
inspektionsobjekt.Projektnummer = Global.Instance.ProjektNummer;
Datenbank.Instance.loadedProjekt.Objekte.Add(inspektionsobjekt);
frmObjektEdit frmObjektEdit = new frmObjektEdit(inspektionsobjekt,true);
frmObjektEdit.MdiParent = this.MdiParent;
frmObjektEdit.FormClosed += FrmObjekt_FormClosed;
frmObjektEdit.Show();
}
private void FrmObjekt_FormClosed(object sender, FormClosedEventArgs e)
{
buildStreetList();
}
private void trv_street_DoubleClick(object sender, EventArgs e)
{
if ((sender as TreeView).SelectedNode == null) return;
string selectedStreetName = (string)(sender as TreeView).SelectedNode.Tag;
if (selectedStreetName == null || selectedStreetName.Equals("")) return;
aktuallStreetName = selectedStreetName;
frmObjekteList frmObjekteList = new frmObjekteList(selectedStreetName);
frmObjekteList.MdiParent = this.MdiParent;
frmObjekteList.FormClosed += FrmObjekt_FormClosed;
frmObjekteList.Show();
}
private void rdbtn_street_CheckedChanged(object sender, EventArgs e)
{
if (rdbtn_ort.Checked)
{
streetListSetting.SetRadioButton("Sorted");
}
else if (rdbtn_street.Checked)
{
streetListSetting.SetRadioButton("Unsorted");
}
buildStreetList();
}
private void frmStrassenList_FormClosing(object sender, FormClosingEventArgs e)
{
streetListSetting.SaveSettings();
}
}
}