643 lines
17 KiB
C#
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;
|
|
}
|
|
}
|
|
|
|
}
|