diff --git a/WGneu/App.xaml b/WGneu/App.xaml
index 1ce4aae..eb0d788 100644
--- a/WGneu/App.xaml
+++ b/WGneu/App.xaml
@@ -19,5 +19,15 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/WGneu/Models/Branch.cs b/WGneu/Models/Branch.cs
new file mode 100644
index 0000000..3066f25
--- /dev/null
+++ b/WGneu/Models/Branch.cs
@@ -0,0 +1,20 @@
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WGneu.Models
+{
+ [Table("branch"), PrimaryKey("ZwstId")]
+ public class Branch
+ {
+ [Column("zwstid")]
+ public string ZwstId { get; set; }
+
+ [Column("name")]
+ public string Name { get; set; }
+ }
+}
diff --git a/WGneu/Models/Member.cs b/WGneu/Models/Member.cs
index 35d0bc9..d51712d 100644
--- a/WGneu/Models/Member.cs
+++ b/WGneu/Models/Member.cs
@@ -21,7 +21,7 @@ namespace WGneu.Models
public string FamilyName { get; set; }
[Column("zwstid")]
- public string Zweigstelle { get; set; }
+ public string ZwstId { get; set; }
[Column("country")]
public string CountryCode { get; set; }
@@ -43,5 +43,8 @@ namespace WGneu.Models
[ForeignKey("DefaultKgNr")]
public virtual AT_Kg DefaultKg { get; set; }
+
+ [ForeignKey("ZwstId")]
+ public virtual Branch Branch { get; set; }
}
}
diff --git a/WGneu/Models/WbKg.cs b/WGneu/Models/WbKg.cs
new file mode 100644
index 0000000..a6497f5
--- /dev/null
+++ b/WGneu/Models/WbKg.cs
@@ -0,0 +1,23 @@
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WGneu.Models
+{
+ [Table("wb_kg"), PrimaryKey("KgNr")]
+ public class WbKg
+ {
+ [Column("kgnr")]
+ public int KgNr { get; set; }
+
+ [Column("glnr")]
+ public int? GlNr { get; set; }
+
+ [ForeignKey("KgNr")]
+ public virtual AT_Kg Kg { get; set; }
+ }
+}
diff --git a/WGneu/WGContext.cs b/WGneu/WGContext.cs
index 2d696fe..c149264 100644
--- a/WGneu/WGContext.cs
+++ b/WGneu/WGContext.cs
@@ -17,6 +17,8 @@ namespace WGneu
public DbSet Orte { get; set; }
public DbSet Postleitzahlen { get; set; }
public DbSet PostalDestinations { get; set; }
+ public DbSet Branches { get; set; }
+ public DbSet WbKgs { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
diff --git a/WGneu/Windows/MemberAddWindow.xaml b/WGneu/Windows/MemberAddWindow.xaml
deleted file mode 100644
index 8c36334..0000000
--- a/WGneu/Windows/MemberAddWindow.xaml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/WGneu/Windows/MemberAddWindow.xaml.cs b/WGneu/Windows/MemberAddWindow.xaml.cs
deleted file mode 100644
index bb26971..0000000
--- a/WGneu/Windows/MemberAddWindow.xaml.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-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.Shapes;
-using WGneu.Models;
-
-
-namespace WGneu.Windows
-{
- ///
- /// Interaction logic for MemberAddWindow.xaml
- ///
- public partial class MemberAddWindow : Window
- {
- private WgContext _context;
- private readonly Member member = new Member();
- public event EventHandler Event;
-
- public MemberAddWindow(WgContext context)
- {
- this._context = context;
-
- InitializeComponent();
- }
-
- private void Window_Loaded(object sender, RoutedEventArgs e)
- {
- MgNr.Text = member.MgNr.ToString();
- GivenName.Text = member.GivenName;
- FamilyName.Text = member.FamilyName;
- Zweigstelle.Text = member.Zweigstelle;
- Country.Text = member.Country.Alpha2;
- // PostalDest.Text= member.PostalDest;
- Address.Text = member.Address;
- DefaultKgnr.Text = member.DefaultKg.ToString();
- }
-
- private void Save_Button_Click(object sender, RoutedEventArgs e)
- {
- member.MgNr = Int32.Parse(MgNr.Text);
- member.GivenName = GivenName.Text;
- member.FamilyName = FamilyName.Text;
- member.Zweigstelle = Zweigstelle.Text;
- member.Country.Alpha2 = Country.Text;
- // member.PostalDest = PostalDest.Text;
- member.Address= Address.Text;
- member.DefaultKg.KgNr = Int32.Parse(DefaultKgnr.Text);
-
- _context.Add(member);
-
- try
- {
- _context.SaveChanges();
- }
- catch
- {
- SaveError.Content = "There was an Error!";
- return;
- }
- this.Call_Event();
- this.Close();
- }
-
- private void Call_Event()
- {
- if (this.Event != null)
- {
- this.Event(this, EventArgs.Empty);
- }
- }
- }
-}
diff --git a/WGneu/Windows/MemberEditWindow.xaml b/WGneu/Windows/MemberEditWindow.xaml
deleted file mode 100644
index 76c2079..0000000
--- a/WGneu/Windows/MemberEditWindow.xaml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/WGneu/Windows/MemberEditWindow.xaml.cs b/WGneu/Windows/MemberEditWindow.xaml.cs
deleted file mode 100644
index e67badc..0000000
--- a/WGneu/Windows/MemberEditWindow.xaml.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-using Microsoft.EntityFrameworkCore;
-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.Shapes;
-using WGneu.Models;
-
-
-namespace WGneu.Windows
-{
- ///
- /// Interaction logic for MemberEditWindow.xaml
- ///
- public partial class MemberEditWindow : Window
- {
- private WgContext _context;
- private readonly Member member;
- public event EventHandler Event;
-
- public MemberEditWindow(Member member, WgContext context)
- {
- this._context= context;
- this.member = member;
-
- InitializeComponent();
- }
-
- private void Window_Loaded(object sender, RoutedEventArgs e)
- {
- MgNr.Text = member.MgNr.ToString();
- GivenName.Text = member.GivenName;
- FamilyName.Text = member.FamilyName;
- Zweigstelle.Text = member.Zweigstelle;
- // Country.Text = member.Country;
- // PostalDest.Text = member.PostalDest;
- Address.Text = member.Address;
- // DefaultKgnr.Text = member.DefaultKgnr.ToString();
- }
-
- private void Save_Button_Click(object sender, RoutedEventArgs e)
- {
- member.MgNr = Int32.Parse(MgNr.Text);
- member.GivenName = GivenName.Text;
- member.FamilyName = FamilyName.Text;
- member.Zweigstelle = Zweigstelle.Text;
- // member.Country = Country.Text;
- // member.PostalDest = PostalDest.Text;
- member.Address = Address.Text;
- // member.DefaultKgnr = Int32.Parse(DefaultKgnr.Text);
-
- _context.Update(member);
- _context.SaveChanges();
- this.Call_Event();
- this.Close();
- }
-
- private void Call_Event()
- {
- if (this.Event != null)
- {
- this.Event(this, EventArgs.Empty);
- }
- }
- }
-}
diff --git a/WGneu/Windows/MemberListWindow.xaml b/WGneu/Windows/MemberListWindow.xaml
index edb1de2..d460329 100644
--- a/WGneu/Windows/MemberListWindow.xaml
+++ b/WGneu/Windows/MemberListWindow.xaml
@@ -10,20 +10,49 @@
Title="Mitglieder" Height="500" Width="800" MinHeight="500" MinWidth="800"
Loaded="Window_Loaded">
-
+
-
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/WGneu/Windows/MemberListWindow.xaml.cs b/WGneu/Windows/MemberListWindow.xaml.cs
index a2f1f0b..4523261 100644
--- a/WGneu/Windows/MemberListWindow.xaml.cs
+++ b/WGneu/Windows/MemberListWindow.xaml.cs
@@ -1,8 +1,11 @@
-using Microsoft.EntityFrameworkCore;
+using Microsoft.Data.Sqlite;
+using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel;
+using System.Diagnostics.Metrics;
using System.Linq;
+using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
@@ -18,12 +21,11 @@ using WGneu.Models;
namespace WGneu.Windows
{
- ///
- /// Interaktionslogik für Window1.xaml
- ///
public partial class MemberListWindow : Window
{
- private readonly WgContext _context = new WgContext();
+ private bool isEditing = false;
+ private bool isCreating = false;
+ private readonly WgContext context = new();
public MemberListWindow()
{
@@ -32,79 +34,255 @@ namespace WGneu.Windows
private void Window_Loaded(object sender, RoutedEventArgs e)
{
- Refresh_Member_Data();
+ RefreshMemberList();
+ BranchInput.ItemsSource = context.Branches.ToList();
+ DefaultKgInput.ItemsSource = context.WbKgs.Select(k => k.Kg).ToList();
}
protected override void OnClosing(CancelEventArgs e)
{
- _context.Dispose();
+ context.Dispose();
base.OnClosing(e);
}
+ private void RefreshMemberList()
+ {
+ context.Members.Load();
+ MemberList.ItemsSource = context.Members.ToList();
+
+ Member m = (Member)MemberList.SelectedItem;
+ if (m != null)
+ {
+ EditMemberButton.IsEnabled = true;
+ FillInputs(m);
+ }
+ }
+
private void MemberList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Member m = (Member) MemberList.SelectedItem;
- MgNr.Text = m.MgNr.ToString();
- GivenName.Text = m.GivenName;
- FamilyName.Text = m.FamilyName;
+ if (m == null)
+ return;
- AT_Plz? p = m.PostalDest.Plz(_context);
+ FillInputs(m);
+ EditMemberButton.IsEnabled = true;
+ }
+
+ private void PlzInput_TextChanged(object sender, RoutedEventArgs e)
+ {
+ if (PlzInput.Text.Length == 4 && PlzInput.Text.All(char.IsDigit))
+ {
+ int plz = int.Parse(PlzInput.Text);
+ var o = context.Postleitzahlen.Where(p => p.Plz == plz).ToHashSet();
+ OrtInput.ItemsSource = o;
+ OrtInput.SelectedItem = null;
+ }
+ }
+
+ private void NewMemberButton_Click(object sender, RoutedEventArgs e)
+ {
+ isCreating = true;
+ MemberList.IsEnabled = false;
+
+ // TODO fill input fields
+
+ ClearInputs();
+ MgNrInput.Text = (context.Members.Select(m => m.MgNr).Max() + 1).ToString();
+
+ HideNewEditDeleteButtons();
+ ShowSaveResetCancelButtons();
+ UnlockInputs();
+ }
+
+ private void EditMemberButton_Click(object sender, RoutedEventArgs e)
+ {
+ if (MemberList.SelectedItem == null)
+ return;
+
+ isEditing = true;
+ MemberList.IsEnabled = false;
+
+ HideNewEditDeleteButtons();
+ ShowSaveResetCancelButtons();
+ UnlockInputs();
+ }
+
+ private void DeleteMemberButton_Click(object sender, RoutedEventArgs e)
+ {
+ // TODO delete member button
+ }
+
+ private void SaveButton_Click(object sender, RoutedEventArgs e)
+ {
+ // TODO only allow to click button, if values were checked
+
+ int originalMgNr = -1;
+ Member? m = null;
+ if (isEditing)
+ {
+ m = (Member)MemberList.SelectedItem;
+ originalMgNr = m.MgNr;
+ }
+ else if (isCreating)
+ {
+ m = new();
+ }
+
+ m.MgNr = int.Parse(MgNrInput.Text);
+ m.GivenName = GivenNameInput.Text;
+ m.FamilyName = FamilyNameInput.Text;
+ m.ZwstId = ((Branch)BranchInput.SelectedItem).ZwstId;
+ m.CountryCode = "AT";
+ m.PostalDestId = ((AT_Plz)OrtInput.SelectedItem).Id;
+ m.Address = AddressInput.Text;
+ m.DefaultKgNr = ((AT_Kg)DefaultKgInput.SelectedItem).KgNr;
+
+ try
+ {
+ if (isEditing)
+ {
+ context.Update(m);
+ }
+ else if (isCreating)
+ {
+ context.Add(m);
+ }
+
+ context.SaveChanges();
+ }
+ catch (Exception exc)
+ {
+ MessageBox.Show(
+ "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message.ToString(),
+ "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
+ finally
+ {
+ isEditing = false;
+ isCreating = false;
+ MemberList.IsEnabled = true;
+ HideSaveResetCancelButtons();
+ ShowNewEditDeleteButtons();
+ LockInputs();
+ RefreshMemberList();
+ }
+ }
+
+ private void ResetButton_Click(object sender, RoutedEventArgs e)
+ {
+ // TODO reset button
+ }
+
+ private void CancelButton_Click(object sender, RoutedEventArgs e)
+ {
+ isEditing = false;
+ isCreating = false;
+ MemberList.IsEnabled = true;
+ HideSaveResetCancelButtons();
+ ShowNewEditDeleteButtons();
+ LockInputs();
+ }
+
+ private void ShowSaveResetCancelButtons()
+ {
+ SaveButton.IsEnabled = true;
+ ResetButton.IsEnabled = false;
+ CancelButton.IsEnabled = true;
+ SaveButton.Visibility = Visibility.Visible;
+ ResetButton.Visibility = Visibility.Visible;
+ CancelButton.Visibility = Visibility.Visible;
+ }
+
+ private void HideSaveResetCancelButtons()
+ {
+ SaveButton.IsEnabled = false;
+ ResetButton.IsEnabled = false;
+ CancelButton.IsEnabled = false;
+ SaveButton.Visibility = Visibility.Hidden;
+ ResetButton.Visibility = Visibility.Hidden;
+ CancelButton.Visibility = Visibility.Hidden;
+ }
+
+ private void ShowNewEditDeleteButtons()
+ {
+ NewMemberButton.IsEnabled = true;
+ EditMemberButton.IsEnabled = MemberList.SelectedItem != null;
+ DeleteMemberButton.IsEnabled = true;
+ NewMemberButton.Visibility = Visibility.Visible;
+ EditMemberButton.Visibility = Visibility.Visible;
+ DeleteMemberButton.Visibility = Visibility.Visible;
+ }
+
+ private void HideNewEditDeleteButtons()
+ {
+ NewMemberButton.IsEnabled = false;
+ EditMemberButton.IsEnabled = false;
+ DeleteMemberButton.IsEnabled = false;
+ NewMemberButton.Visibility = Visibility.Hidden;
+ EditMemberButton.Visibility = Visibility.Hidden;
+ DeleteMemberButton.Visibility = Visibility.Hidden;
+ }
+
+ private void LockInputs()
+ {
+ MgNrInput.IsReadOnly = true;
+ GivenNameInput.IsReadOnly = true;
+ FamilyNameInput.IsReadOnly = true;
+ AddressInput.IsReadOnly = true;
+ PlzInput.IsReadOnly = true;
+ OrtInput.IsEnabled = false;
+ BranchInput.IsEnabled = false;
+ DefaultKgInput.IsEnabled = false;
+ }
+
+ private void UnlockInputs()
+ {
+ MgNrInput.IsReadOnly = false;
+ GivenNameInput.IsReadOnly = false;
+ FamilyNameInput.IsReadOnly = false;
+ AddressInput.IsReadOnly = false;
+ PlzInput.IsReadOnly = false;
+ OrtInput.IsEnabled = true;
+ BranchInput.IsEnabled = true;
+ DefaultKgInput.IsEnabled = true;
+ }
+
+ private void FillInputs(Member m)
+ {
+ MgNrInput.Text = m.MgNr.ToString();
+ GivenNameInput.Text = m.GivenName;
+ FamilyNameInput.Text = m.FamilyName;
+ BranchInput.SelectedItem = m.Branch;
+ DefaultKgInput.SelectedItem = m.DefaultKg;
+ AddressInput.Text = m.Address;
+
+ // TODO PostalDest may be null after creation?
+ AT_Plz? p = m.PostalDest.Plz(context);
if (p != null)
{
- Plz.Text = p.Plz.ToString();
+ PlzInput.Text = p.Plz.ToString();
- var o = p.Orte(_context);
- Ort.ItemsSource = o;
- Ort.SelectedItem = p;
+ var o = p.Orte(context);
+ OrtInput.ItemsSource = o;
+ OrtInput.SelectedItem = p;
}
else
{
- Ort.ItemsSource = null;
- Ort.SelectedItem = null;
- }
-
-
- Edit_Member.IsEnabled = true;
- }
-
- private void Plz_TextChanged(object sender, RoutedEventArgs e)
- {
- if (Plz.Text.Length == 4 && Plz.Text.All(char.IsDigit))
- {
- int plz = int.Parse(Plz.Text);
- var o = _context.Postleitzahlen.Where(p => p.Plz == plz).ToHashSet();
- Ort.ItemsSource = o;
- Ort.SelectedItem = null;
+ OrtInput.ItemsSource = null;
+ OrtInput.SelectedItem = null;
}
}
- private void Edit_Member_Button_Click(object sender, RoutedEventArgs e)
+ private void ClearInputs()
{
- Member m = (Member)MemberList.SelectedItem;
-
- if (m == null) return;
-
- MemberEditWindow w = new MemberEditWindow(m, _context);
- w.Event += new EventHandler(Refresh_Member_Data_Event);
- w.Show();
- }
-
- private void Add_Member_Button_Click(object sender, RoutedEventArgs e)
- {
- MemberAddWindow w = new MemberAddWindow(_context);
- w.Event += new EventHandler(Refresh_Member_Data_Event);
- w.Show();
- }
-
- private void Refresh_Member_Data()
- {
- _context.Members.Load();
- MemberList.ItemsSource = _context.Members.ToList();
- }
-
- private void Refresh_Member_Data_Event(object sender, EventArgs e)
- {
- Refresh_Member_Data();
+ MgNrInput.Text = "";
+ GivenNameInput.Text = "";
+ FamilyNameInput.Text = "";
+ BranchInput.SelectedItem = null;
+ PlzInput.Text = "";
+ OrtInput.SelectedItem = null;
+ AddressInput.Text = "";
+ DefaultKgInput.SelectedItem = null;
}
}
}