ZKuP/ZKuP/AddVisitorsList.xaml.cs
Marcus a67950371c 5.1.0.0:
Auf SSL umgestellt
Bug behoben der es ermöglicht hat mehere Besucher ohne Namen einzutragen
2025-07-28 13:18:36 +02:00

322 lines
16 KiB
C#

using MahApps.Metro.Controls;
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.RightsManagement;
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;
namespace ZKuP
{
/// <summary>
/// Interaktionslogik für AddVisitorsList.xaml
/// </summary>
public partial class AddVisitorsList : MetroWindow
{
public int GroupID { get; private set; }
int width = 0;
bool _isEdit = false;
int _idBesucher = 0;
public AddVisitorsList(int VisitorCount, bool isEdit = false, int idBesucher = 0)
{
InitializeComponent();
BuildWindow(VisitorCount);
if (isEdit)
{
_isEdit = isEdit;
_idBesucher = idBesucher;
btnAdd.Visibility = Visibility.Visible;
var list = SQL.ReadSingleValue($"SELECT besucherList FROM {MainWindow.table}.besucherGroups WHERE idbesucher = '{idBesucher}'").Split(';');
if (list.Length > 0)
{
var boxes = Helper.FindVisualChildren<TextBox>(spGroup).ToList();
for (var i = 0; i < Helper.FindVisualChildren<TextBox>(spGroup).Count(); i++)
{
if (list.Length > i && !string.IsNullOrWhiteSpace(list[i]))
boxes[i].Text = list[i];
}
}
}
}
private void BuildWindow(int besucherAnzahl)
{
int maxProSpalte = 10; // Maximale Anzahl an Textfeldern pro Spalte
// PanelsContainer soll die WrapPanels halten
spGroup.Children.Clear(); // Vorherige Panels entfernen (falls schon welche existieren)
// Erstelle die WrapPanels und füge sie dem StackPanel hinzu
int columnCount = (int)Math.Ceiling((double)besucherAnzahl / maxProSpalte);
for (int i = 0; i < columnCount; i++)
{
WrapPanel wrapPanel = new WrapPanel
{
Orientation = Orientation.Vertical, // Jedes WrapPanel wird vertikal sein
Margin = new Thickness(10),
Width = 300
};
// Für jedes WrapPanel Textfelder hinzufügen
for (int j = 0; j < maxProSpalte && (i * maxProSpalte + j) < besucherAnzahl; j++)
{
var sp = new StackPanel();
var lbl = new TextBlock() { Text = $"Begleitperson Nr. {i * maxProSpalte + j + 1}:", Margin = new Thickness(5), Height = 20 };
lbl.SetResourceReference(Control.ForegroundProperty, SystemColors.ControlTextBrushKey);
sp.Children.Add(lbl);
var tb = new TextBox() { Margin = new Thickness(10, 0, 10, 0), Height = 30, Width = 280, ToolTip = "Um eine Person zu entfernen, Feld leer lassen" };
ToolTipService.SetInitialShowDelay(tb, 200);
MahApps.Metro.Controls.TextBoxHelper.SetWatermark(tb, "Vorname Nachname");
sp.Children.Add(tb);
wrapPanel.Children.Add(sp);
}
// Das WrapPanel zum StackPanel hinzufügen
spGroup.Children.Add(wrapPanel);
}
width = (columnCount * 320) + 10;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.Height = spGroup.DesiredSize.Height + 40;
this.Width = width;
Helper.CheckWindowIsInScreenSpace(this);
}
private async void btnSend_Click(object sender, RoutedEventArgs e)
{
var legit = await SendIt();
if(legit) this.Close();
}
private async Task<bool> SendIt()
{
var visitors = "";
foreach (var t in this.FindChildren<TextBox>())
{
if (!string.IsNullOrWhiteSpace(t.Text))
{
if (t.Text.ToList<char>().Distinct().Count() < 4)
{
MessageBox.Show("Personen müssen qualifiziert angegeben werden!", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return false;
}
else
visitors += t.Text + ";";
//MessageBox.Show("Alle Besucher müssen eingetragen werden!", "Unzureichende Eingabe", MessageBoxButton.OK, MessageBoxImage.Error);
//return;
}
}
try
{
var count = visitors.Split(';').Count() - 1;
if (count > 0)
{
if (_isEdit)
{
if (Helper.FindVisualChildren<TextBox>(spGroup).Count() > count)
if (MessageBoxResult.OK == MessageBox.Show("Es müssen alle Besucher namentlich angegeben werden\n\nEs wird nur die Anzahl der ausgefüllten Felder als 'Anzahl Begleitpersonen' hinterlegt", "Unzureichende Angaben", MessageBoxButton.OKCancel, MessageBoxImage.Warning))
{
if (SQL.RowExists(MainWindow.table.ToString() + ".besucherGroups", "idbesucher", _idBesucher.ToString()).Result)
{
//await SQL.WriteSQL($"UPDATE {MainWindow.table}.besucherGroups SET besucherList = '{visitors}' WHERE idbesucher = '{_idBesucher}'");
await SQL.CreateAndWriteSQL($"UPDATE {MainWindow.table}.besucherGroups SET besucherList = @visitors WHERE idbesucher = @idbesucher", new List<MySqlParameter>()
{
new MySqlParameter("@visitors", visitors),
new MySqlParameter("@idbesucher", _idBesucher)
});
//await SQL.WriteSQL($"UPDATE {MainWindow.table}.besucher SET Anzahl_Begleitpersonen = '{count}' WHERE idbesucher = '{_idBesucher}'");
await SQL.CreateAndWriteSQL($"UPDATE {MainWindow.table}.besucher SET Anzahl_Begleitpersonen = @count WHERE idbesucher = @idbesucher", new List<MySqlParameter>()
{
new MySqlParameter("@count", count),
new MySqlParameter("@idbesucher", _idBesucher)
});
}
else
{
//await SQL.WriteSQL($"INSERT INTO {MainWindow.table}.besucherGroups (besucherList, idbesucher) VALUES ('{visitors}','{_idBesucher}')");
GroupID = await SQL.CreateAndWriteSQL($"INSERT INTO {MainWindow.table}.besucherGroups (besucherList, idbesucher) VALUES (@visitors,@idbesucher)", new List<MySqlParameter>()
{
new MySqlParameter("@visitors", visitors),
new MySqlParameter("@idbesucher", _idBesucher)
});
//await SQL.WriteSQL($"UPDATE {MainWindow.table}.besucher SET Anzahl_Begleitpersonen = '{count}' WHERE idbesucher = '{_idBesucher}'");
await SQL.CreateAndWriteSQL($"UPDATE {MainWindow.table}.besucher SET Anzahl_Begleitpersonen = @count WHERE idbesucher = @idbesucher", new List<MySqlParameter>()
{
new MySqlParameter("@count", count),
new MySqlParameter("@idbesucher", _idBesucher)
});
}
}
else return false;
else
{
if (SQL.RowExists(MainWindow.table.ToString() + ".besucherGroups", "idbesucher", _idBesucher.ToString()).Result)
{
//await SQL.WriteSQL($"UPDATE {MainWindow.table}.besucherGroups SET besucherList = '{visitors}' WHERE idbesucher = '{_idBesucher}'");
await SQL.CreateAndWriteSQL($"UPDATE {MainWindow.table}.besucherGroups SET besucherList = @visitors WHERE idbesucher = @idbesucher", new List<MySqlParameter>()
{
new MySqlParameter("@visitors", visitors),
new MySqlParameter("@idbesucher", _idBesucher)
});
//await SQL.WriteSQL($"UPDATE {MainWindow.table}.besucher SET Anzahl_Begleitpersonen = '{count}' WHERE idbesucher = '{_idBesucher}'");
await SQL.CreateAndWriteSQL($"UPDATE {MainWindow.table}.besucher SET Anzahl_Begleitpersonen = @count WHERE idbesucher = @idbesucher", new List<MySqlParameter>()
{
new MySqlParameter("@count", count),
new MySqlParameter("@idbesucher", _idBesucher)
});
}
else
{
//await SQL.WriteSQL($"INSERT INTO {MainWindow.table}.besucherGroups (besucherList, idbesucher) VALUES ('{visitors}','{_idBesucher}')");
GroupID = await SQL.CreateAndWriteSQL($"INSERT INTO {MainWindow.table}.besucherGroups (besucherList, idbesucher) VALUES (@visitors,@idbesucher)", new List<MySqlParameter>()
{
new MySqlParameter("@visitors", visitors),
new MySqlParameter("@idbesucher", _idBesucher)
});
//await SQL.WriteSQL($"UPDATE {MainWindow.table}.besucher SET Anzahl_Begleitpersonen = '{count}' WHERE idbesucher = '{_idBesucher}'");
await SQL.CreateAndWriteSQL($"UPDATE {MainWindow.table}.besucher SET Anzahl_Begleitpersonen = @count WHERE idbesucher = @idbesucher", new List<MySqlParameter>()
{
new MySqlParameter("@count", count),
new MySqlParameter("@idbesucher", _idBesucher)
});
}
}
}
else
//await SQL.WriteSQL($"Insert INTO {MainWindow.table}.besucherGroups (besucherList) VALUES ('{visitors}')");
GroupID = await SQL.CreateAndWriteSQL($"INSERT INTO {MainWindow.table}.besucherGroups (besucherList, idbesucher) VALUES (@visitors,@idbesucher)", new List<MySqlParameter>()
{
new MySqlParameter("@visitors", visitors),
new MySqlParameter("@idbesucher", _idBesucher)
});
}
else
{
var msgResult = MessageBox.Show("Es wurden keine Personen angegeben!\nDie Anzahl der Personen wird somit auf 0 gesetzt\nEs wird dann nur die Person die bei 'Name des Besuchers' eingetragen wurde eingelassen!", "Keine Angaben", MessageBoxButton.OKCancel, MessageBoxImage.Error);
if (MessageBoxResult.OK == msgResult)
{
if (SQL.RowExists(MainWindow.table.ToString() + ".besucherGroups", "idbesucher", _idBesucher.ToString()).Result)
{
await SQL.WriteSQL($"DELETE FROM {MainWindow.table}.besucherGroups WHERE idbesucher = '{_idBesucher}'");
//await SQL.WriteSQL($"UPDATE {MainWindow.table}.besucher SET Anzahl_Begleitpersonen = '0' WHERE idbesucher = '{_idBesucher}'");
await SQL.CreateAndWriteSQL($"UPDATE {MainWindow.table}.besucher SET Anzahl_Begleitpersonen = 0 WHERE idbesucher = @_idBesucher", new List<MySqlParameter>()
{
new MySqlParameter("@_idBesucher", _idBesucher)
});
}
}
else if (MessageBoxResult.Cancel == msgResult)
{
return false;
}
}
//GroupID = Convert.ToInt32(SQL.ReadSingleValue($"SELECT LAST_INSERT_ID()"));
this.DialogResult = true;
return true;
}
catch (Exception ex)
{
Log.WriteLog(ex.ToString());
MessageBox.Show("Es ist ein Fehler beim hinzufügen der Besucher aufgetreten, bitte erneut versuchen", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
return false;
}
}
private void btnAdd_Click(object sender, RoutedEventArgs e)
{
bool zeroPanels = false;
WrapPanel wrapPanel = new WrapPanel
{
Orientation = Orientation.Vertical, // Jedes WrapPanel wird vertikal sein
Margin = new Thickness(10),
Width = 300
};
if (Helper.FindVisualChildren<WrapPanel>(spGroup).Count() > 0)
{
wrapPanel = Helper.FindVisualChildren<WrapPanel>(spGroup).Last();
}
else
zeroPanels = true;
var nr = Helper.FindVisualChildren<TextBox>(spGroup).Count();
var sp = new StackPanel();
var lbl = new TextBlock() { Text = $"Begleitperson Nr. {nr + 1}:", Margin = new Thickness(5), Height = 20 };
lbl.SetResourceReference(Control.ForegroundProperty, SystemColors.ControlTextBrushKey);
sp.Children.Add(lbl);
var tb = new TextBox() { Margin = new Thickness(10, 0, 10, 0), Height = 30, Width = 280, ToolTip = "Um eine Person zu entfernen, Feld leer lassen" };
ToolTipService.SetInitialShowDelay(tb, 200);
MahApps.Metro.Controls.TextBoxHelper.SetWatermark(tb, "Vorname Nachname");
sp.Children.Add(tb);
wrapPanel.Children.Add(sp);
this.Height = this.Height + 60;
// Das WrapPanel zum StackPanel hinzufügen
if (zeroPanels)
{
spGroup.Children.Add(wrapPanel);
this.Height = this.Height + 20;
zeroPanels = false;
}
//width = (columnCount * 320) + 10;
}
private void btnRemove_Click(object sender, RoutedEventArgs e)
{
if ((spGroup.Children[0] as WrapPanel).Children.Count > 0)
{
(spGroup.Children[0] as WrapPanel).Children.RemoveAt((spGroup.Children[0] as WrapPanel).Children.Count - 1);
this.Height = this.Height - 60;
}
}
private void Window_LocationChanged(object sender, EventArgs e)
{
Helper.CheckWindowIsInScreenSpace(this);
}
private async void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
var legit = await SendIt();
if (!legit) e.Cancel = true;
}
}
}