Bewertungssystem angefangen

This commit is contained in:
2023-09-11 20:39:23 +02:00
parent f41cfff5c0
commit 560ac6246b
32 changed files with 9504 additions and 51 deletions

8627
RW.xml Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -14,7 +14,7 @@ namespace dcnsanplanung.DAL.Helper
public WriteToDatabase(string XMLFile, string connectionstring = "Host = localhost; Database = sanplaner; Username = dcnsanplaner; Password = sanplaner") public WriteToDatabase(string XMLFile, string connectionstring = "Host = localhost; Database = sanplaner; Username = dcnsanplaner; Password = sanplaner")
{ {
haltungen = new shared.Helper.ImportToSoftware(XMLFile).haltungen; haltungen = new shared.Helper.ImportToSoftware(XMLFile).haltungen;
LVPositionen = new shared.Helper.ImportLVToSoftware(@"C:\Users\damia\source\repos\dcnsanplanung\BE-BS-AWN DW_0001_OOWV_Stamm_LV_Kanalsanierung_xml33.X81").LVPositionen; //LVPositionen = new shared.Helper.ImportLVToSoftware(@"C:\Users\damia\source\repos\dcnsanplanung\BE-BS-AWN DW_0001_OOWV_Stamm_LV_Kanalsanierung_xml33.X81").LVPositionen;
} }

View File

@@ -19,14 +19,16 @@ namespace dcnsanplanung.DAL.Services.PostgresqlData
public async Task<Haltung> Create(Haltung entity) public async Task<Haltung> Create(Haltung entity)
{ {
string command = "INSERT INTO " + tableName + " (guid, ref_projekt_guid, objektbezeichnung, bewertungklasse) VALUES " + string command = "INSERT INTO " + tableName + " (guid, ref_projekt_guid, objektbezeichnung, bewertungklasse, dn, material) VALUES " +
"(@1,@2,@3,@4) RETURNING id"; "(@1,@2,@3,@4,@5,@6) RETURNING id";
using (var cmd = new NpgsqlCommand(command, conn)) using (var cmd = new NpgsqlCommand(command, conn))
{ {
cmd.Parameters.AddWithValue("1", entity.Guid.ToString()); cmd.Parameters.AddWithValue("1", entity.Guid.ToString());
cmd.Parameters.AddWithValue("2", entity.Ref_Projekt_Guid.ToString()); cmd.Parameters.AddWithValue("2", entity.Ref_Projekt_Guid.ToString());
cmd.Parameters.AddWithValue("3", entity.Objektbezeichnung); cmd.Parameters.AddWithValue("3", entity.Objektbezeichnung);
cmd.Parameters.AddWithValue("4", NpgsqlTypes.NpgsqlDbType.Oid, entity.Bewertungklasse); cmd.Parameters.AddWithValue("4", NpgsqlTypes.NpgsqlDbType.Oid, entity.Bewertungklasse);
cmd.Parameters.AddWithValue("5", NpgsqlTypes.NpgsqlDbType.Oid, entity.DN);
cmd.Parameters.AddWithValue("6", entity.Material);
using var reader = await cmd.ExecuteReaderAsync(); using var reader = await cmd.ExecuteReaderAsync();
reader.Read(); reader.Read();
@@ -69,6 +71,8 @@ namespace dcnsanplanung.DAL.Services.PostgresqlData
Objektbezeichnung = reader.GetString(3), Objektbezeichnung = reader.GetString(3),
Bewertungklasse = Convert.ToUInt32(reader.GetValue(4)), Bewertungklasse = Convert.ToUInt32(reader.GetValue(4)),
DN = Convert.ToUInt32(reader.GetValue(5)),
Material = reader.GetString(6)
}; };
return result; return result;

View File

@@ -14,17 +14,65 @@ namespace dcnsanplanung.DAL.Services.PostgresqlData
{ {
} }
public async Task<IEnumerable<Schaden>> GetAllByHaltung(Haltung haltung)
{
return await GetAllByHaltung(haltung.Guid.ToString());
}
public async Task<IEnumerable<Schaden>> GetAllByHaltung(string haltungs_guid)
{
List<Schaden> result = new List<Schaden>();
string command = "SELECT * FROM " + tableName + " WHERE ref_haltung_guid = @1;";
using (var cmd = new NpgsqlCommand(command, conn))
{
cmd.Parameters.AddWithValue("1", haltungs_guid);
using (var reader = await cmd.ExecuteReaderAsync())
{
while (reader.Read())
{
Schaden adding = parseSchaden(reader);
result.Add(adding);
}
}
}
return result;
}
private Schaden parseSchaden(NpgsqlDataReader reader)
{
return new Schaden()
{
ID = reader.GetInt32(0),
Guid = Guid.Parse(reader.GetString(1)),
Ref_Haltung_Guid = Guid.Parse(reader.GetString(2)),
Entfernung = reader.GetDecimal(3),
Hauptcode = reader.GetString(4),
CH1 = reader.GetString(5),
CH2 = reader.GetString(6),
Q1 = reader.GetString(7),
Q2 = reader.GetString(8),
KD = reader.GetDataTypeOID(9),
KB = reader.GetDataTypeOID(10),
KS = reader.GetDataTypeOID(11),
};
}
public async Task<Schaden> Create(Schaden entity) public async Task<Schaden> Create(Schaden entity)
{ {
string command = "INSERT INTO " + tableName + " (guid, ref_haltung_guid, entfernung, kodierung, schadensklasse) VALUES " + string command = "INSERT INTO " + tableName + " (guid, ref_haltung_guid, entfernung, hauptcode, ch1,ch2,q1,q2) VALUES " +
"(@1,@2,@3,@4,@5) RETURNING id"; "(@1,@2,@3,@4,@5,@6,@7,@8) RETURNING id";
using(var cmd = new NpgsqlCommand(command,conn)) using(var cmd = new NpgsqlCommand(command,conn))
{ {
cmd.Parameters.AddWithValue("1", entity.Guid.ToString()); cmd.Parameters.AddWithValue("1", entity.Guid.ToString());
cmd.Parameters.AddWithValue("2", entity.Ref_Haltung_Guid.ToString()); cmd.Parameters.AddWithValue("2", entity.Ref_Haltung_Guid.ToString());
cmd.Parameters.AddWithValue("3", entity.Entfernung); cmd.Parameters.AddWithValue("3", entity.Entfernung);
cmd.Parameters.AddWithValue("4", entity.Kodierung); cmd.Parameters.AddWithValue("4", entity.Hauptcode);
cmd.Parameters.AddWithValue("5", NpgsqlTypes.NpgsqlDbType.Oid, entity.Schadensklasse); cmd.Parameters.AddWithValue("5", entity.CH1);
cmd.Parameters.AddWithValue("6", entity.CH2);
cmd.Parameters.AddWithValue("7", entity.Q1);
cmd.Parameters.AddWithValue("8", entity.Q2);
//cmd.Parameters.AddWithValue("5", NpgsqlTypes.NpgsqlDbType.Oid, entity.Schadensklasse);
using var reader = await cmd.ExecuteReaderAsync(); using var reader = await cmd.ExecuteReaderAsync();
reader.Read(); reader.Read();
entity.ID = reader.GetInt32(0); entity.ID = reader.GetInt32(0);

View File

@@ -0,0 +1,7 @@
namespace dcnsanplanung.bewertung
{
public class Class1
{
}
}

View File

@@ -0,0 +1,118 @@
using System;
using System.Collections.Generic;
using System.Net.Http.Headers;
using System.Text;
namespace dcnsanplanung.bewertung.M149_3
{
public enum CalculateMethods
{
Dichtheit = 1,
Standsicherheit = 2,
Betriebsicherheit = 4
}
public enum Geltungsbereich
{
biegesteif,
biegeweich
}
public abstract class AbstractCode
{
private CalculateMethods VerfügbareMethoden;
string beschreibung;
protected string Ch1 = "";
protected string Ch2 = "";
protected float Q1;
protected float Q2;
protected int DN;
public AbstractCode(string beschreibung, CalculateMethods calculateMethods, int DN = -1)
{
this.beschreibung = beschreibung;
this.VerfügbareMethoden = calculateMethods;
}
protected virtual int CalculateSK()
{
return 6;
}
protected virtual int CalculateDK()
{
return 6;
}
protected virtual int CalculateBK()
{
return 6;
}
public virtual void WriteCH1(string Ch1)
{
this.Ch1 = Ch1;
}
public virtual void WriteCH2(string Ch2)
{
this.Ch2 = Ch2;
}
public virtual void WriteQ1(float Q1)
{
this.Q1 = Q1;
}
public virtual void WriteQ2(float Q2)
{
this.Q2 = Q2;
}
}
public class BAA : AbstractCode
{
Geltungsbereich geltungsbereich;
public BAA(Geltungsbereich geltungsbereich) : base("Verformung", CalculateMethods.Standsicherheit | CalculateMethods.Betriebsicherheit)
{
this.geltungsbereich = geltungsbereich;
}
protected override int CalculateSK()
{
switch(geltungsbereich)
{
case Geltungsbereich.biegesteif:
{
switch (Q1)
{
case >= 7: return 0;
case >= 4: return 1;
case >= 3: return 2;
case >= 1: return 3;
default: return 4;
}
}
case Geltungsbereich.biegeweich:
{
switch (Q1)
{
case >= 15: return 0;
case >= 10: return 1;
case >= 6: return 2;
case >= 2: return 3;
default: return 4;
}
}
default: return 6;
}
}
protected override int CalculateBK()
{
switch(Q1)
{
case >= 50: return 0;
case >= 40: return 1;
case >= 25: return 2;
case >= 10: return 3;
default: return 4;
}
}
}
}

View File

@@ -0,0 +1,109 @@
namespace dcnsanplanung.bewertung.M149_3
{
public class BAB : AbstractCode
{
public BAB() : base("Rissbildung", CalculateMethods.Standsicherheit | CalculateMethods.Dichtheit)
{
}
protected override int CalculateDK()
{
switch(Ch1)
{
case "B":
case "C":
{
switch(Ch2)
{
case "A":
case "B":
case "C":
case "D":
case "E":
{
switch(Q1)
{
case >= 3: return 1;
case >= 2: return 2;
default: return 3;
}
}
}
}
break;
}
return 10;
}
protected override int CalculateSK()
{
switch(Ch1)
{
case "A": return 4;
case "B":
case "C":
{
switch(Ch2)
{
case "A":
{
switch(DN)
{
case <= 300:
{
switch (Q1)
{
case >= 3: return 0;
case >= 2: return 1;
case >= 1: return 2;
case >= 0.5f: return 3;
default: return 5;
}
}
case <= 500:
{
switch (Q1)
{
case >= 5: return 0;
case >= 3: return 1;
case >= 2: return 2;
case >= 1: return 3;
default: return 4;
}
}
case <= 700:
{
switch (Q1)
{
case >= 8: return 0;
case >= 4: return 1;
case >= 3: return 2;
case >= 2: return 3;
default: return 4;
}
}
default:
{
switch(Q1)
{
case >= 8: return 0;
case >= 5: return 1;
case >= 3: return 2;
case >= 1: return 3;
default: return 4;
}
}
}
}
case "B": return 4;
default: return 7;
}
}
default: return 7;
}
}
}
}

View File

@@ -0,0 +1,38 @@
namespace dcnsanplanung.bewertung.M149_3
{
public class BAC : AbstractCode
{
public BAC() : base("Rohrbruch", CalculateMethods.Dichtheit | CalculateMethods.Standsicherheit | CalculateMethods.Betriebsicherheit)
{
}
protected override int CalculateBK()
{
switch (Ch1)
{
case "A": return 7;
case "C": return 0;
}
return 10;
}
protected override int CalculateSK()
{
switch(Ch1)
{
case "A": return 7;
case "B": return 7;
default: return 0;
}
}
protected override int CalculateDK()
{
switch (Ch1)
{
case "A":
case "B":
return 1;
default: return 0;
}
}
}
}

View File

@@ -0,0 +1,10 @@
namespace dcnsanplanung.bewertung.M149_3
{
public class BAD : AbstractCode
{
public BAD() : base("Defektes Mauerwerk", CalculateMethods.Dichtheit | CalculateMethods.Standsicherheit | CalculateMethods.Betriebsicherheit)
{
throw new NotImplementedException();
}
}
}

View File

@@ -0,0 +1,10 @@
namespace dcnsanplanung.bewertung.M149_3
{
public class BAE : AbstractCode
{
public BAE() : base("Fehlender Mörtel", CalculateMethods.Dichtheit | CalculateMethods.Standsicherheit)
{
throw new NotImplementedException();
}
}
}

View File

@@ -0,0 +1,10 @@
namespace dcnsanplanung.bewertung.M149_3
{
public class BAF : AbstractCode
{
public BAF() : base("Oberflächenschaden", CalculateMethods.Dichtheit | CalculateMethods.Standsicherheit | CalculateMethods.Betriebsicherheit)
{
throw new NotImplementedException();
}
}
}

View File

@@ -0,0 +1,10 @@
namespace dcnsanplanung.bewertung.M149_3
{
public class BAG : AbstractCode
{
public BAG() : base("Einragender Anschluss", CalculateMethods.Betriebsicherheit)
{
throw new NotImplementedException ();
}
}
}

View File

@@ -0,0 +1,10 @@
namespace dcnsanplanung.bewertung.M149_3
{
public class BAH : AbstractCode
{
public BAH() : base("Schadhafter Anschluss", CalculateMethods.Dichtheit | CalculateMethods.Standsicherheit | CalculateMethods.Betriebsicherheit)
{
throw new NotImplementedException () ;
}
}
}

View File

@@ -0,0 +1,10 @@
namespace dcnsanplanung.bewertung.M149_3
{
public class BAI : AbstractCode
{
public BAI() : base("Einragendes Dichtungsmaterial", CalculateMethods.Dichtheit | CalculateMethods.Betriebsicherheit)
{
throw new NotImplementedException () ;
}
}
}

View File

@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@@ -24,6 +24,8 @@ namespace dcnsanplanung.shared.Helper
Model.Haltung haltung = new Model.Haltung(); Model.Haltung haltung = new Model.Haltung();
haltung.Guid = Guid.NewGuid(); haltung.Guid = Guid.NewGuid();
haltung.Objektbezeichnung = src.Stammdaten.Objektbezeichnung; haltung.Objektbezeichnung = src.Stammdaten.Objektbezeichnung;
haltung.Material = src.Inspektionsdaten.OptischeInspektion.Rohrleitung.Grunddaten.Material;
haltung.DN = Convert.ToUInt32(src.Inspektionsdaten.OptischeInspektion.Rohrleitung.Grunddaten.Profilbreite);
haltung.Bewertungklasse = src.Inspektionsdaten.OptischeInspektion.Rohrleitung.Bewertung == null ? 6 : src.Inspektionsdaten.OptischeInspektion.Rohrleitung.Bewertung.KlasseAutomatisch; haltung.Bewertungklasse = src.Inspektionsdaten.OptischeInspektion.Rohrleitung.Bewertung == null ? 6 : src.Inspektionsdaten.OptischeInspektion.Rohrleitung.Bewertung.KlasseAutomatisch;
List<Model.Schaden> kodierungen = new List<Model.Schaden>(); List<Model.Schaden> kodierungen = new List<Model.Schaden>();
@@ -33,8 +35,14 @@ namespace dcnsanplanung.shared.Helper
kodierung.Guid = Guid.NewGuid(); kodierung.Guid = Guid.NewGuid();
kodierung.Ref_Haltung_Guid = haltung.Guid; kodierung.Ref_Haltung_Guid = haltung.Guid;
kodierung.Entfernung = src_kodierung.Station; kodierung.Entfernung = src_kodierung.Station;
kodierung.Kodierung = string.Format("{0}#{1}#{2}#{3}", src_kodierung.Inspektionskode ,src_kodierung.Charakterisierung1 , src_kodierung.Charakterisierung2 , src_kodierung.Quantifizierung1); kodierung.Hauptcode = src_kodierung.Inspektionskode;
kodierung.Schadensklasse = src_kodierung.Klassifizierung == null ? 6 : src_kodierung.Klassifizierung.MaxSKeAuto; kodierung.CH1 = src_kodierung.Charakterisierung1 != null ? src_kodierung.Charakterisierung1 : "";
kodierung.CH2 = src_kodierung.Charakterisierung2 != null ? src_kodierung.Charakterisierung2 : "";
kodierung.Q1 = src_kodierung.Quantifizierung1.Numerisch.ToString();
kodierung.Q2 = src_kodierung.Quantifizierung2.Numerisch.ToString();
//string.Format("{0}#{1}#{2}#{3}", src_kodierung.Inspektionskode ,src_kodierung.Charakterisierung1 , src_kodierung.Charakterisierung2 , src_kodierung.Quantifizierung1);
//kodierung.Schadensklasse = src_kodierung.Klassifizierung == null ? 6 : src_kodierung.Klassifizierung.MaxSKeAuto;
kodierungen.Add(kodierung); kodierungen.Add(kodierung);
} }
haltung.Kodierungen = kodierungen; haltung.Kodierungen = kodierungen;

View File

@@ -11,14 +11,8 @@ namespace dcnsanplanung.shared.Model
public Guid Ref_Projekt_Guid; public Guid Ref_Projekt_Guid;
public string Objektbezeichnung { get; set; } = ""; public string Objektbezeichnung { get; set; } = "";
public uint Bewertungklasse { get; set; } public uint Bewertungklasse { get; set; }
public uint DN { get; set; }
public string Material { get; set; } = "";
public List<Schaden> Kodierungen = new List<Schaden>(); public List<Schaden> Kodierungen = new List<Schaden>();
} }
public class Schaden : DBObjekt
{
public Guid Ref_Haltung_Guid;
public decimal Entfernung;
public string Kodierung = "";
public uint Schadensklasse;
}
} }

View File

@@ -0,0 +1,24 @@
namespace dcnsanplanung.shared.Model
{
public class Schaden : DBObjekt
{
public Guid Ref_Haltung_Guid { get; set; }
public decimal Entfernung { get; set; }
public string Hauptcode { get; set; } = string.Empty;
public string CH1 { get; set; } = string.Empty;
public string CH2 { get; set; } = string.Empty;
public string Q1 { get; set; } = string.Empty;
public string Q2 { get; set; } = string.Empty;
public uint Schadensklasse { get; set; }
public uint KD { get; set; }
public uint KS { get; set; }
public uint KB { get; set; }
public List<Sanierungsvorgabe> Sanierungsvorgaben { get; set; }
}
public class Sanierungsvorgabe
{
public string Vorgabe { get; set; } = "";
}
}

View File

@@ -0,0 +1,32 @@
using dcnsanplanung.shared.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace dcnsanplanung.wpf.DesignViewModel
{
internal class DesignHaltungObjektViewModel
{
public string Objektbezeichnung { get; set; } = "SW01";
public string SK { get; set; } = "0";
public string DN { get; set; } = "200";
public string Material { get; set; } = "STZ";
static List<Sanierungsvorgabe> sanierung = new List<Sanierungsvorgabe>()
{
new Sanierungsvorgabe() { Vorgabe = "Fräsen"},
new Sanierungsvorgabe() { Vorgabe = "Reinigen"},
};
/*
public List<Schaden> Schaeden { get; set; } = new List<Schaden>()
{
new Schaden() { Entfernung = 10, Kodierung="BCA#D#A##", Schadensklasse=0, Sanierungsvorgaben = sanierung},
new Schaden() { Entfernung = 20, Kodierung="BCA#D#A##", Schadensklasse=0, Sanierungsvorgaben = sanierung},
new Schaden() { Entfernung = 30, Kodierung="BCA#D#A##", Schadensklasse=0, Sanierungsvorgaben = sanierung},
new Schaden() { Entfernung = 40, Kodierung="BCA#D#A##", Schadensklasse=0, Sanierungsvorgaben = sanierung},
};
*/
}
}

View File

@@ -4,11 +4,12 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:dcnsanplanung.wpf" xmlns:local="clr-namespace:dcnsanplanung.wpf"
xmlns:viewmodel="clr-namespace:dcnsanplanung.wpf.ViewModel"
mc:Ignorable="d" mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded"> Title="MainWindow" Height="450" Width="800">
<Grid> <Grid>
<StackPanel> <StackPanel>
<ComboBox Name="Items" SelectionChanged="Items_SelectionChanged"> <ComboBox ItemsSource="{Binding VerfügbareHaltungen}" SelectedItem="{Binding SelectedHaltung}" SelectionChanged="Items_SelectionChanged">
<ComboBox.ItemTemplate> <ComboBox.ItemTemplate>
<DataTemplate> <DataTemplate>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
@@ -20,7 +21,7 @@
</ComboBox.ItemTemplate> </ComboBox.ItemTemplate>
</ComboBox> </ComboBox>
<Button Name="LoadXML" Click="LoadXML_Click" Content="LoadXML" /> <Button Name="LoadXML" Command="{Binding LoadXMLFile}" Content="LoadXML" />
</StackPanel> </StackPanel>
</Grid> </Grid>

View File

@@ -1,4 +1,5 @@
using dcnsanplanung.shared.Model; using dcnsanplanung.shared.Model;
using dcnsanplanung.wpf.ViewModel;
using Schnittstelle.Import.XML.v2013.Model; using Schnittstelle.Import.XML.v2013.Model;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -25,34 +26,20 @@ namespace dcnsanplanung.wpf
public MainWindow() public MainWindow()
{ {
InitializeComponent(); InitializeComponent();
this.DataContext = new MainWindowViewModel();
} }
private async void LoadXML_Click(object sender, RoutedEventArgs e)
{
DAL.Helper.WriteToDatabase writer = new DAL.Helper.WriteToDatabase(@"C:\Users\damia\source\repos\dcnsanplanung\test_code.xml");
//await writer.WriteInHaltung();
await writer.WriteInLV();
}
private void Items_SelectionChanged(object sender, SelectionChangedEventArgs e) private void Items_SelectionChanged(object sender, SelectionChangedEventArgs e)
{ {
Haltung? selectedItem = Items.SelectedItem as Haltung; MainWindowViewModel mwvd = (MainWindowViewModel)this.DataContext;
if (selectedItem == null) return; if (mwvd == null || mwvd.SelectedHaltung == null) return;
W_ObjektView w_ObjektView = new W_ObjektView(selectedItem);
W_ObjektView w_ObjektView = new W_ObjektView();
w_ObjektView.DataContext = new HaltungObjektViewModel(mwvd.SelectedHaltung);
w_ObjektView.ShowDialog(); w_ObjektView.ShowDialog();
}
private async void Window_Loaded(object sender, RoutedEventArgs e)
{
//
DAL.Services.PostgresqlData.HaltungDataService haltungsdataservice = new DAL.Services.PostgresqlData.HaltungDataService("Host = localhost; Database = sanplaner; Username = dcnsanplaner; Password = sanplaner");
var s = await haltungsdataservice.GetAllByProjekt(0);
foreach(var item in s)
{
Items.Items.Add(item);
}
} }
} }
} }

View File

@@ -8,11 +8,11 @@ using System.Threading.Tasks;
namespace dcnsanplanung.wpf.ViewModel namespace dcnsanplanung.wpf.ViewModel
{ {
internal class BaseViewModel : INotifyPropertyChanged internal abstract class BaseViewModel : INotifyPropertyChanged
{ {
public event PropertyChangedEventHandler? PropertyChanged; public event PropertyChangedEventHandler? PropertyChanged;
void OnPropertyChanged([CallerMemberName] string propertyName = "") protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
{ {
if(PropertyChanged != null) if(PropertyChanged != null)
{ {

View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace dcnsanplanung.wpf.ViewModel
{
internal class CellViewModel : BaseViewModel, ICellViewModel
{
private ICell _cell;
public ICell Cell {
get { return _cell; }
set {
_cell = value;
OnPropertyChanged(nameof(_cell));
}
}
public ICommand ChangeCellStateCommand { get; }
}
}

View File

@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using System.Windows.Media;
namespace dcnsanplanung.wpf.ViewModel
{
internal class DesignDynamicGridViewModel : BaseViewModel
{
public ObservableCollection<ObservableCollection<ICellViewModel>> Cells { get; } = null;
public int GridWidth { get; } = 5;
public int GridHeight { get; } = 5;
public Color StartColor { get; set; } = Colors.AliceBlue;
public Color FinishColor { get; set; } = Colors.DarkBlue;
public Color BorderColor { get; set; } = Colors.DarkGray;
public DesignDynamicGridViewModel()
{
Cells = new ObservableCollection<ObservableCollection<ICellViewModel>>();
ICellViewModel cell = new CellViewModel();
Cells.Add(new ObservableCollection<ICellViewModel>()
{
});
}
}
public interface ICellViewModel
{
ICell Cell { get; set; }
ICommand ChangeCellStateCommand { get; }
}
public interface ICell
{
/// <summary>
/// State of the cell.
/// </summary>
bool State { get; set; }
}
}

View File

@@ -0,0 +1,45 @@
using CommunityToolkit.Mvvm.Input;
using dcnsanplanung.DAL.Services.PostgresqlData;
using dcnsanplanung.shared.Model;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace dcnsanplanung.wpf.ViewModel
{
internal class HaltungObjektViewModel : BaseViewModel
{
private Haltung model;
public string Objektbezeichnung { get => model.Objektbezeichnung; }
public string SK { get => model.Bewertungklasse.ToString(); }
public string DN { get => model.DN.ToString(); }
public string Material { get => model.Material; }
public List<Schaden> Schaeden { get => model.Kodierungen; }
public HaltungObjektViewModel(Haltung selectedHaltung)
{
model = selectedHaltung;
LadeSchaeden();
}
private async void LadeSchaeden()
{
SchadenDataService schadenDataService = new SchadenDataService("Host = localhost; Database = sanplaner; Username = dcnsanplaner; Password = sanplaner");
IEnumerable<Schaden> src_kodierung = await schadenDataService.GetAllByHaltung(model);
model.Kodierungen = src_kodierung.ToList();
OnPropertyChanged(nameof(Schaeden));
}
}
}

View File

@@ -0,0 +1,61 @@
using CommunityToolkit.Mvvm.Input;
using dcnsanplanung.shared.Model;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace dcnsanplanung.wpf.ViewModel
{
internal class MainWindowViewModel : BaseViewModel
{
public List<Haltung> VerfügbareHaltungen { get; set; } = new List<Haltung>();
public ICommand LoadXMLFile { get; set; }
private Haltung? selectedHaltung;
public Haltung? SelectedHaltung
{
get => selectedHaltung;
set
{
if(selectedHaltung != value)
{
selectedHaltung = value;
OnPropertyChanged();
}
}
}
public MainWindowViewModel()
{
LoadHaltungen();
LoadXMLFile = new RelayCommand(() => dooAsync());
}
async Task dooAsync()
{
DAL.Helper.WriteToDatabase writer = new DAL.Helper.WriteToDatabase(@"D:\Airbus\Airbus Nordenham RW Viewer für Sanierungskonzept\Airbus Nordenham RW.xml");
await writer.WriteInHaltung();
//Debugger.Break();
await writer.WriteInLV();
}
private async void LoadHaltungen()
{
DAL.Services.PostgresqlData.HaltungDataService haltungDataService = new DAL.Services.PostgresqlData.HaltungDataService("Host = localhost; Database = sanplaner; Username = dcnsanplaner; Password = sanplaner");
var s = await haltungDataService.GetAllByProjekt(0);
foreach(var item in s)
{
VerfügbareHaltungen.Add(item);
}
OnPropertyChanged(nameof(VerfügbareHaltungen));
}
}
}

View File

@@ -0,0 +1,44 @@
<UserControl x:Class="dcnsanplanung.wpf.Views.DynamicGridView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:viewModels="clr-namespace:dcnsanplanung.wpf.ViewModel"
xmlns:local="clr-namespace:dcnsanplanung.wpf.Views"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<DataTemplate x:Key="CellTemplate">
<Border BorderBrush="Transparent"
BorderThickness="1 0 1 0"
DataContext="{Binding}"></Border>
</DataTemplate>
</UserControl.Resources>
<Grid
d:DataContext="{d:DesignInstance Type=viewModels:DesignDynamicGridViewModel, IsDesignTimeCreatable=True}">
<DataGrid Name="DynamicGrid"
DataContext="{Binding}"
ItemsSource="{Binding Path=Cells}"
IsEnabled="True"
IsTabStop="False"
>
<DataGrid.Columns>
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding}"
ItemTemplate="{DynamicResource CellTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace dcnsanplanung.wpf.Views
{
/// <summary>
/// Interaktionslogik für DynamicGridView.xaml
/// </summary>
public partial class DynamicGridView : UserControl
{
public DynamicGridView()
{
InitializeComponent();
}
}
}

View File

@@ -3,11 +3,148 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:designViewModel="clr-namespace:dcnsanplanung.wpf.DesignViewModel"
xmlns:local="clr-namespace:dcnsanplanung.wpf" xmlns:local="clr-namespace:dcnsanplanung.wpf"
mc:Ignorable="d" mc:Ignorable="d"
Title="W_ObjektView" Height="450" Width="800"> xmlns:views="clr-namespace:dcnsanplanung.wpf.Views"
Title="W_ObjektView" Height="450" Width="800" d:DataContext="{d:DesignInstance Type=designViewModel:DesignHaltungObjektViewModel, IsDesignTimeCreatable=True}">
<Grid> <Grid>
<Label Name="Schadensklasse" /> <Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition />
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Label Content="Objektbezeichnung" />
<Label Grid.Column="1" Content="{Binding Objektbezeichnung}" />
<Label Grid.Row="1" Content="Schadenklasse" />
<Label Grid.Row="1" Grid.Column="1" Content="{Binding SK}" />
<Label Grid.Row="2" Content="Durchmesser" />
<Label Grid.Row="2" Grid.Column="1" Content="{Binding DN}" />
<Label Grid.Row="3" Content="Material" />
<Label Grid.Row="3" Grid.Column="1" Content="{Binding Material}" />
</Grid>
<!--<views:DynamicGridView Grid.Row="1" x:Name="DynamicGridView" DataContext="{Binding Schaeden}"></views:DynamicGridView>-->
<ListView Grid.Row="1" ItemsSource="{Binding Schaeden}" AlternationCount="2">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border BorderBrush="WhiteSmoke">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="80" />
<ColumnDefinition Width="10" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="80" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Entfernung}" />
<TextBlock Grid.Column="1" Text="{Binding Kodierung}" />
<TextBlock Grid.Column="2" Text="{Binding Schadensklasse}" />
<ItemsControl Grid.Column="3" ItemsSource="{Binding Sanierungsvorgaben}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Vorgabe}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<Button Grid.Column="4" Content="Editieren" />
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Background" Value="White" />
</Trigger>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="LightGray" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="LightBlue" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="DeepSkyBlue" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
<ListView.Style>
<Style TargetType="ListView">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListView">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ItemsControl Background="Green" ItemsSource="{Binding Schaeden}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" Grid.Row="1">
<ItemsPresenter />
</ScrollViewer>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.Style>
</ListView>
<!--<DataGrid Grid.Row="1" ItemsSource="{Binding Schaeden}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Entfernung" Binding="{Binding Entfernung}" />
<DataGridTextColumn Header="Kodierung" Binding="{Binding Kodierung}" />
<DataGridTextColumn Header="Schadensklasse" Binding="{Binding Schadensklasse}" />
</DataGrid.Columns>
</DataGrid>-->
</Grid> </Grid>
</Window> </Window>

View File

@@ -21,11 +21,9 @@ namespace dcnsanplanung.wpf
/// </summary> /// </summary>
public partial class W_ObjektView : Window public partial class W_ObjektView : Window
{ {
public W_ObjektView(Haltung haltung) public W_ObjektView()
{ {
InitializeComponent(); InitializeComponent();
Schadensklasse.Content = haltung.Bewertungklasse;
} }
} }
} }

View File

@@ -7,6 +7,10 @@
<UseWPF>true</UseWPF> <UseWPF>true</UseWPF>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.0" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\dcnsanplanung.DAL\dcnsanplanung.DAL.csproj" /> <ProjectReference Include="..\dcnsanplanung.DAL\dcnsanplanung.DAL.csproj" />
<ProjectReference Include="..\dcnsanplanung.shared\dcnsanplanung.shared.csproj" /> <ProjectReference Include="..\dcnsanplanung.shared\dcnsanplanung.shared.csproj" />