Files
BeWoPlaner/BeWo/SchulbegleitenderDienst/VertretenderKlientSearchView.xaml.cs
2025-11-28 13:15:38 +01:00

643 lines
17 KiB
C#

using System;
using System.Linq;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using BeWo.ServiceProxy;
using BeWo.ViewModel;
using BS.Shared.Extensions;
using System.Windows.Controls;
using System.Net.Sockets;
using System.Threading;
using System.Windows.Threading;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Globalization;
using System.IO;
using System.Net;
using System.Text;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Media.Imaging;
using BeWo.Controls;
using BeWo.Core;
using BeWo.Core.Service;
using BeWo.ViewModel.ListViewModel;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts.Compact;
using DevExpress.Xpf.Core;
using DevExpress.Xpf.Editors;
using DevExpress.XtraPrinting.Native;
using DevExpress.XtraPrinting.XamlExport;
using Color = System.Drawing.Color;
using KeyEventArgs = System.Windows.Input.KeyEventArgs;
using MessageBox = System.Windows.MessageBox;
using TextBox = System.Windows.Controls.TextBox;
namespace BeWo.SchulbegleitenderDienst
{
public partial class VertretenderKlientSearchView
{
public event EventHandler<CustomKlientEventArgs> RaiseCustomEvent;
//public event EventHandler<CustomKlientEventArgs> RaiseKlientCustomEvent;
private DateTime? _startDate;
private DateTime? _endDate;
private List<SearchKlientViewDaten> _dataListEmployee = new List<SearchKlientViewDaten>();
private readonly long? _employeeOid;
List<SearchKlientViewDaten> aktuelleDaten = new List<SearchKlientViewDaten>();
List<SearchKlientViewDaten> alleMitarbeiterDaten = new List<SearchKlientViewDaten>();
private Dictionary<string, CompactTokenDC> verfuegbareW = new Dictionary<string, CompactTokenDC>();
private Dictionary<string, CompactTokenDC> gesetzteW = new Dictionary<string, CompactTokenDC>();
private Dictionary<string, CompactTokenDC> verfuegbareA = new Dictionary<string, CompactTokenDC>();
private Dictionary<string, CompactTokenDC> gesetzteA = new Dictionary<string, CompactTokenDC>();
public VertretenderKlientSearchView(DateTime? startdate, DateTime? enddate, DateTime currentDate, long? employeeOid)
{
InitializeComponent();
CloseWindow();
SetMitarbeiterKriteria();
SetMitarbeiterInformationen();
GetAllKlienttokens();
LoadAllKlientenIngridData();
rootGroupBox.Header += " / " + currentDate.ToString("dddd dd.MM.yyyy");
_startDate = startdate;
_endDate = enddate;
_employeeOid = employeeOid;
if (_startDate != null)
KVDatepickerVon.EditValue = _startDate;
if (_endDate != null)
KVDatepickerBis.EditValue = _endDate;
KVCheckBox.IsChecked = true;
//Width = System.Windows.SystemParameters.PrimaryScreenWidth / 2;
//Height = System.Windows.SystemParameters.PrimaryScreenWidth / 2;
}
private void RootGroupBox_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
try
{
DragMove();
}
catch (Exception)
{
}
}
private void CloseWindow()
{
CommandBindings.Add(
new CommandBinding(
ApplicationCommands.Close,
(s, e) =>
{
Close();
}));
}
private void SetMitarbeiterKriteria()
{
var tokenlist = ServiceFacade.DoOperationsServiceSync(r => r.GetAllTokens(SchulbegleitenderZugehoerigkeitsTyp.Mitarbeiter, _employeeOid));
foreach (var tkList in tokenlist)
{
if (tkList.TokenType == TokenTyp.WunschKriterium)
{
MitarbeiterWunschAnzeige.Text = tkList.Beschreibung + "; ";
}
else if (tkList.TokenType == TokenTyp.AusschlussKriterium)
{
MitarbeiterAussschlussAnzeige.Text = tkList.Beschreibung + "; ";
}
}
}
private void GetAllKlienttokens()
{
verfuegbareW.Clear();
gesetzteW.Clear();
verfuegbareA.Clear();
gesetzteA.Clear();
ServiceFacade.DoOperationsServiceAsync(
r => r.GetAllTokens(SchulbegleitenderZugehoerigkeitsTyp.Klient, 0), x => this.Dispatch(delegate
{
List<string> wunschliste = new List<string>();
List<string> ausschlussliste = new List<string>();
foreach (var token in x)
{
if (token.TokenType == TokenTyp.WunschKriterium)
{
if (!verfuegbareW.ContainsKey(token.Beschreibung))
verfuegbareW.Add(token.Beschreibung, token);
wunschliste.Add(token.Beschreibung);
}
if (token.TokenType == TokenTyp.AusschlussKriterium)
{
if (!verfuegbareA.ContainsKey(token.Beschreibung))
verfuegbareA.Add(token.Beschreibung, token);
ausschlussliste.Add(token.Beschreibung);
}
}
KlientWunschAuswahl.ItemsSource = wunschliste;
KlientAussschlussAuswahl.ItemsSource = ausschlussliste;
}));
}
private void KlientWunschAuswahl_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var item = sender as NullItemComboBox;
if (item.SelectedItem != null && !item.SelectedItem.ToString().Equals(""))
{
KlientWunschAnzeige.Text += item.SelectedItem + "; ";
KlientWunschAuswahl.SelectedIndex = 0;
SortKlientliste();
}
}
private void KlientAussschlussAuswahl_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var item = sender as NullItemComboBox;
if (item.SelectedItem != null && !item.SelectedItem.ToString().Equals(""))
{
KlientAussschlussAnzeige.Text += item.SelectedItem + "; ";
KlientAussschlussAuswahl.SelectedIndex = 0;
SortKlientliste();
}
}
public void SortKlientliste()
{
List<SearchKlientViewDaten> nSVD = new List<SearchKlientViewDaten>();
var x = ServiceFacade.DoOperationsServiceSync(r => r.GetCustomer2TokenList());
bool isAusschluss = false;
foreach (var daten in alleMitarbeiterDaten)
{
foreach (var item in x)
{
if (daten.CustomerDC.CustomerOid == item.Customer.CustomerOid)
{
foreach (var gesA in gesetzteA)
{
if (item.Token.TokenOid == gesA.Value.TokenOid)
{
if (!nSVD.Contains(daten))
nSVD.Add(daten);
isAusschluss = true;
}
}
foreach (var gesW in gesetzteW)
{
if (item.Token.TokenOid == gesW.Value.TokenOid)
{
if (isAusschluss)
{
isAusschluss = false;
}
else
{
if (!nSVD.Contains(daten))
nSVD.Add(daten);
}
}
}
if (isAusschluss)
{
isAusschluss = false;
}
}
}
}
GridDataControlKlientVertretungsearchview.ItemsSource = nSVD;
GridDataControlKlientVertretungsearchview.RefreshData();
GridDataControlKlientVertretungsearchview.RefreshUI();
aktuelleDaten = nSVD;
}
private void RBMaennlich_OnClick(object sender, RoutedEventArgs e)
{
bool isOtherActive = RBWeiblich.IsChecked.Value;
if (RBMaennlich.IsChecked.Value)
{
GeschlechtsUmwandlung(3, isOtherActive);
}
else
{
GeschlechtsUmwandlung(1, isOtherActive);
}
}
private void RBWeiblich_OnClick(object sender, RoutedEventArgs e)
{
bool isOtherActive = RBMaennlich.IsChecked.Value;
if (RBWeiblich.IsChecked.Value)
{
GeschlechtsUmwandlung(4, isOtherActive);
}
else
{
GeschlechtsUmwandlung(2, isOtherActive);
}
}
private void GeschlechtsUmwandlung(int i, bool isOtherActive)
{
List<SearchKlientViewDaten> newItems = new List<SearchKlientViewDaten>();
// 1 == entferne jungs | 2 == entferne mädels | 3 füge jungs hinzu | 4 füge mädels hinzu
if (i == 1)
{
foreach (var item in aktuelleDaten)
{
if (item.Geschlecht.Equals("Weiblich") && isOtherActive)
{
newItems.Add(item);
}
}
}
else if (i == 2)
{
foreach (var item in aktuelleDaten)
{
if (item.Geschlecht.Equals("Männlich") && isOtherActive)
{
newItems.Add(item);
}
}
}
else if (i == 3)
{
foreach (var item in aktuelleDaten)
{
if (!item.Geschlecht.Equals("Weiblich") && isOtherActive == false)
{
newItems.Add(item);
}
else if (isOtherActive)
{
newItems.Add(item);
}
}
}
else if (i == 4)
{
foreach (var item in aktuelleDaten)
{
if (!item.Geschlecht.Equals("Männlich") && isOtherActive == false)
{
newItems.Add(item);
}
else if (isOtherActive)
{
newItems.Add(item);
}
}
}
GridDataControlKlientVertretungsearchview.ItemsSource = newItems;
GridDataControlKlientVertretungsearchview.RefreshData();
GridDataControlKlientVertretungsearchview.RefreshUI();
}
private void SetMitarbeiterInformationen()
{
var employee = ServiceFacade.DoEmployeeServiceSync(r => r.GetEmployeeByID(_employeeOid.Value));
LabelPlzMitarbeiter.Content = employee.PostalCode;
LabelOrtMitarbeiter.Content = employee.Town;
}
private void PlzMitarbeiter_OnEditValueChanged(object sender, EditValueChangedEventArgs e)
{
bool ruecksetzpunkt = false;
List<SearchKlientViewDaten> ndaten = new List<SearchKlientViewDaten>();
foreach (var daten in alleMitarbeiterDaten)
{
if (daten.Postleitzahl != null)
{
if (daten.Postleitzahl.StartsWith(PlzMitarbeiter.Text))
{
ndaten.Add(daten);
}
}
if (daten.Postleitzahl != null && PlzMitarbeiter.Text.Length == 0)
{
if (!ruecksetzpunkt)
ruecksetzpunkt = true;
}
}
if (ruecksetzpunkt)
{
GridDataControlKlientVertretungsearchview.ItemsSource = alleMitarbeiterDaten;
//aktuelleDaten = alleMitarbeiterDaten; // sollte sich so verhalten wie bei geschlecht
}
else
{
GridDataControlKlientVertretungsearchview.ItemsSource = ndaten;
// aktuelleDaten = ndaten;
}
GridDataControlKlientVertretungsearchview.RefreshData();
GridDataControlKlientVertretungsearchview.RefreshUI();
}
private void OrtMitarbeiter_OnTextChanged(object sender, TextChangedEventArgs e)
{
bool ruecksetzpunkt = false;
List<SearchKlientViewDaten> ndaten = new List<SearchKlientViewDaten>();
foreach (var daten in alleMitarbeiterDaten)
{
if (daten.Stadt != null)
{
if (daten.Stadt.StartsWith(OrtMitarbeiter.Text))
{
ndaten.Add(daten);
}
}
if (daten.Stadt != null && OrtMitarbeiter.Text.Length == 0)
{
if (!ruecksetzpunkt)
ruecksetzpunkt = true;
}
}
if (ruecksetzpunkt)
{
GridDataControlKlientVertretungsearchview.ItemsSource = alleMitarbeiterDaten;
//aktuelleDaten = alleMitarbeiterDaten;
}
else
{
GridDataControlKlientVertretungsearchview.ItemsSource = ndaten;
// aktuelleDaten = ndaten;
}
GridDataControlKlientVertretungsearchview.RefreshData();
GridDataControlKlientVertretungsearchview.RefreshUI();
}
// ################ Vertretungszeitraumswahl ##############################################
private void KVCheckBox_OnUnchecked(object sender, RoutedEventArgs e)
{
KVDatepicker_UhrzeitBis.Text = "";
KVDatepicker_UhrzeitBis.Visibility = Visibility.Visible;
KVLabelUhrzeitVon.Visibility = Visibility.Visible;
KVDatepicker_UhrzeitVon.Text = "";
KVDatepicker_UhrzeitVon.Visibility = Visibility.Visible;
KVLabelUhrzeitBis.Visibility = Visibility.Visible;
}
private void KVCheckBox_OnChecked(object sender, RoutedEventArgs e)
{
KVDatepicker_UhrzeitBis.Visibility = Visibility.Collapsed;
KVLabelUhrzeitVon.Visibility = Visibility.Collapsed;
KVDatepicker_UhrzeitVon.Visibility = Visibility.Collapsed;
KVLabelUhrzeitBis.Visibility = Visibility.Collapsed;
}
private void KVDatepickerVon_OnEditValueChanged(object sender, EditValueChangedEventArgs e)
{
DateEdit ed = (DateEdit)sender;
DateTime date = ed.DateTime;
if (date > _endDate.Value || date < _startDate.Value)
{
KVDatepickerVon.EditValue = _startDate.Value;
}
}
private void KVDatepickerBis_OnEditValueChanged(object sender, EditValueChangedEventArgs e)
{
DateEdit ed = (DateEdit)sender;
DateTime date = ed.DateTime;
if (date < _startDate.Value || date > _endDate.Value)
{
KVDatepickerBis.EditValue = _endDate.Value;
}
}
//################################################################################################
private void LoadAllKlientenIngridData()
{
ServiceFacade.DoCustomerServiceAsync(s => s.GetAllActiveCompactCustomers(), customerList => this.Dispatch(
delegate
{
foreach (var cus in customerList)
{
var geschlecht = cus.Sex == Sex.Male ? "Männlich" : "Weiblich";
_dataListEmployee.Add(
new SearchKlientViewDaten(cus.FirstName + " " + cus.LastName, cus.PostalCode, cus.Street, cus.Town, cus, geschlecht));
}
GridDataControlKlientVertretungsearchview.ItemsSource = _dataListEmployee;
aktuelleDaten = _dataListEmployee;
alleMitarbeiterDaten = _dataListEmployee;
}));
}
private void ButtonClose_OnClick(object sender, RoutedEventArgs e)
{
Close();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
//Rückgabe der Daten
var item = GridDataControlKlientVertretungsearchview.SelectedItem as SearchKlientViewDaten;
CompactCustomerDC x = item.CustomerDC;
if (GridDataControlKlientVertretungsearchview.SelectedItem != null)
{
if (_startDate.HasValue && _endDate.HasValue && KVCheckBox.IsChecked.Value)
{
RaiseCustomEvent(this, new CustomKlientEventArgs(x, _startDate, _endDate));
Close();
}
else if (!KVDatepickerVon.Text.Equals("") && !KVDatepickerBis.Text.Equals("") && _startDate.HasValue && _endDate.HasValue && !KVDatepicker_UhrzeitVon.Text.Equals("") && !KVDatepicker_UhrzeitBis.Text.Equals(""))
{
var von = KVDatepicker_UhrzeitVon.Text;
var bis = KVDatepicker_UhrzeitBis.Text;
if (von.Length < 5)
{
von = "0" + von;
}
if (bis.Length < 5)
{
bis = "0" + bis;
}
DateTime dateVon = DateTime.ParseExact(von, "HH:mm", CultureInfo.CurrentCulture);
DateTime dateBis = DateTime.ParseExact(bis, "HH:mm", CultureInfo.CurrentCulture);
if (dateVon > dateBis)
{
MessageBox.Show("Die Startzeit darf nicht größer sein als die Endzeit.");
}
else
{
DateTime? xVon = new DateTime(_startDate.Value.Year, _startDate.Value.Month, _startDate.Value.Day, dateVon.Hour, dateVon.Minute, dateVon.Second);
DateTime? xBis = new DateTime(_endDate.Value.Year, _endDate.Value.Month, _endDate.Value.Day, dateBis.Hour, dateBis.Minute, dateBis.Second);
RaiseCustomEvent(this, new CustomKlientEventArgs(x, xVon, xBis));
Close();
}
}
else
{
if (_startDate.HasValue && _endDate.HasValue && (KVDatepicker_UhrzeitVon.Text.Equals("") || KVDatepicker_UhrzeitBis.Text.Equals("")) && !KVCheckBox.IsChecked.Value)
{
MessageBox.Show("Bitte Geben sie eine Start Uhrzeit und eine End Uhrzeit an.");
}
else
{
MessageBox.Show("Bitte Geben sie ein Start und ein Enddatum an.");
}
}
}
else
{
MessageBox.Show("Bitte wählen sie zuerst " + BS.Shared.Translation.Translator.Translate("einen Klienten") + " aus.");
}
}
}
public class CustomKlientEventArgs : EventArgs
{
private CompactCustomerDC dc;
private DateTime? startdt;
private DateTime? enddt;
public CustomKlientEventArgs(CompactCustomerDC s, DateTime? start, DateTime? ende)
{
dc = s;
startdt = start;
enddt = ende;
}
public CompactCustomerDC Message
{
get { return dc; }
}
public DateTime? StartDate
{
get { return startdt; }
}
public DateTime? EndDate
{
get { return enddt; }
}
}
public class SearchKlientViewDaten
{
public string Name { get; set; }
public string Postleitzahl { get; set; }
public string Straße { get; set; }
public string Stadt { get; set; }
public string Geschlecht { get; set; }
public CompactCustomerDC CustomerDC { get; set; }
public SearchKlientViewDaten(string name, string postleitzahl, string strasse, string stadt, CompactCustomerDC comcudc, string geschlecht)
{
Name = name;
Postleitzahl = postleitzahl;
Straße = strasse;
Stadt = stadt;
CustomerDC = comcudc;
Geschlecht = geschlecht;
}
}
}