Files
BeWoPlaner/BeWo/View/Detail/WohnheimView.xaml.cs

453 lines
17 KiB
C#

using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Input;
using BeWo.Controls;
using BeWo.Core;
using BeWo.Core.Service;
using BeWo.ServiceProxy;
using BeWo.Validation;
using BeWo.ViewModel;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
using BS.Shared.Translation;
using DevExpress.Xpf.Editors;
using DevExpress.Xpf.Grid;
namespace BeWo.View.Detail
{
public partial class WohnheimView : BeWoView
{
private WohnheimVM _ViewModel;
private bool initTabIndex;
private List<CompactEmployeeDC> regelmaessigeDiensteVonMitarbeiternLoeschen;
private CompactTeamDC gewaehltesTeam;
public WohnheimView(WohnheimVM pWohnheimDC)
{
InitializeComponent();
ViewModel = pWohnheimDC;
regelmaessigeDiensteVonMitarbeiternLoeschen = new List<CompactEmployeeDC>();
// HACK: Force the devexpress grid to end editing when the mouse is over savebutton
// by setting the focus to another element.
MouseMove += (s, e) =>
{
if ((grid_EmployeeRelation == null || !grid_EmployeeRelation.IsVisible) &&
(grid_CustomerRelation == null || !grid_CustomerRelation.IsVisible))
{
return;
}
var p = e.GetPosition(btnSave);
if (p.X >= 0 && p.X < btnSave.ActualWidth && p.Y >= 0 && p.Y < btnSave.ActualHeight)
{
root.Focus();
}
};
//ich glaub es ist alles gesagt
if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.Wohnheim_AllowArchiving))
{
lblArchiviert.Visibility = Visibility.Hidden;
chkArchiviert.Visibility = Visibility.Hidden;
}
var b = Convert.ToBoolean(ViewModel.PflichtbesetzungEinblenden);
if (!b)
{
textedit_pflichtStart.IsEnabled = false;
textedit_pflichtEnde.IsEnabled = false;
textedit_pflichtStart.Opacity = 50;
textedit_pflichtEnde.Opacity = 50;
}
List<string> sortierungsartenFuerCombobox = new List<string>();
foreach (var e in Enum.GetValues(typeof(Sortierungsarten)))
{
sortierungsartenFuerCombobox.Add(e.ToString());
}
combobox_Sortierungsarten.ItemsSource = sortierungsartenFuerCombobox;
if (combobox_Sortierungsarten.SelectedIndex == -1)
combobox_Sortierungsarten.SelectedIndex = 0;
}
private void UserControl_GotFocus(object sender, RoutedEventArgs e)
{
if (e.OriginalSource.Equals(this))
{
textbox_first.Focus();
}
}
public override bool IsDirty
{
get { return ViewModel != null && ViewModel.IsDirty; }
}
public override string Title
{
get { return Translator.Translate("Wohnprojekt"); }
}
internal override DependencyObject ValidationOnSaveRootElement
{
get { return grid_details; }
}
internal WohnheimVM ViewModel
{
get { return _ViewModel; }
set
{
_ViewModel = value;
DataContext = value;
}
}
protected override UserRightType[] GetSaveDemands()
{
return ViewModel.IsNew ? new[] {UserRightType.CreateAll, UserRightType.WohnheimView_Create} : new[] {UserRightType.EditAll, UserRightType.WohnheimView_Edit};
}
protected override void Save()
{
var lDataContract = ViewModel.CommitToDataContract();
//Abfrage if Name is null or empty -> Message Bitte den Namen eingeben
if(textbox_first.Text.Equals("")){
textbox_first.Focus();
MessageBox.Show("Bitte dem Wohnprojekt einen Namen geben.");
}
else{
//sonst
try
{
if (ViewModel.IsNew)
{
IsDoneWithInsertOrUpdate = false;
ServiceFacade.DoCustomerServiceAsync(s => s.InsertNewWohnheim(lDataContract), ReloadViewModel);
}
else
{
IsDoneWithInsertOrUpdate = false;
ServiceFacade.DoCustomerServiceAsync(s => s.UpdateWohnheim(lDataContract, regelmaessigeDiensteVonMitarbeiternLoeschen), ReloadViewModel);
}
//if (regelmaessigeDiensteVonMitarbeiternLoeschen.Count > 0 && ViewModel.DataContract.WohnheimOid != null)
//{
// ServiceFacade.DoOperationsServiceSync(s => s.DeleteRegelmaessigeDiensteOfRemovedEmployee(regelmaessigeDiensteVonMitarbeiternLoeschen, (long)ViewModel.DataContract.WohnheimOid));
//}
Cache.GetInstance().ClearEmployees();
BeWoApp.MainControl.ResetView(UIContext.Wohnheim);
}
catch (FaultException<BeWoFault>)
{
MessageBox.Show(
"Dieser Datensatz wurde in der Zwischenzeit von " + Translator.Translate("einem anderen Benutzer") + " geändert. Klicken Sie Ok um den Datensatz erneut zu laden. Ihre Änderungen gehen dabei leider verloren.");
ReloadViewModel(lDataContract.WohnheimOid.Value);
}
}
}
private void ReloadViewModel(long pOid)
{
VMFactory.CreateWohnheimVMAsync(pOid, cb => this.Dispatch(delegate { ViewModel = cb; }));
IsDoneWithInsertOrUpdate = true;
}
private void button_addMitarbeiterRelation_Klick(object sender, RoutedEventArgs e)
{
popup_newEmployeeRel.IsOpen = true;
}
private void button_addKlientRelation_Klick(object sender, RoutedEventArgs e)
{
popup_newKlientRel.IsOpen = true;
}
private void button_addEmployeeRelation_Click(object sender, RoutedEventArgs e)
{
if (ValidationTrigger.Validate(groupbox_newEmployeeRel))
{
bool contains = false;
foreach (var item in ViewModel.WohnheimEmployeeRelations.VMList)
{
if (item.Employee.EmployeeOid == ViewModel.WohnheimEmployeeRelations.NewVM.Employee.EmployeeOid)
{
contains = true;
break;
}
}
if (contains)
return;
popup_newEmployeeRel.IsOpen = false;
ViewModel.WohnheimEmployeeRelations.AddNewVMToList();
}
}
private void button_addTeamRelation_Click(object sender, RoutedEventArgs e) //TEAM
{
if (ValidationTrigger.Validate(groupbox_newTeamRel))
{
popup_newTeamRel.IsOpen = false;
var empsInTeam = ServiceFacade.DoOperationsServiceSync(s => s.GetCompactEmployeesForTeam(gewaehltesTeam.TeamOid));
var notice = textbox_teamRelations_Notice.Text;
foreach (var emp in empsInTeam)
{
bool contains = false;
foreach (var item in ViewModel.WohnheimEmployeeRelations.VMList)
{
if (item.Employee.EmployeeOid == emp.EmployeeOid)
{
contains = true;
break;
}
}
if (contains)
continue;
ViewModel.WohnheimEmployeeRelations.NewVM.Employee = emp;
ViewModel.WohnheimEmployeeRelations.NewVM.Notice= notice;
ViewModel.WohnheimEmployeeRelations.AddNewVMToList();
}
}
}
private void button_openTeamRelation_Click(object sender, RoutedEventArgs e) // TEAM
{
popup_newTeamRel.IsOpen = true;
}
private void button_cancelEmployeeRelation_Click(object sender, RoutedEventArgs e)
{
popup_newEmployeeRel.IsOpen = false;
}
private void button_cancelTeamRelation_Click(object sender, RoutedEventArgs e)
{
popup_newTeamRel.IsOpen = false;
}
private void Employeesearchview_EnvironmentEmployeeSelected(object sender, EventArgs<CompactEmployeeDC> e)
{
popup_employee.IsOpen = false;
employeesearchview.ItemSelected -= Employeesearchview_EnvironmentEmployeeSelected;
ViewModel.WohnheimEmployeeRelations.NewVM.Employee = e.Data;
popup_employee.Focus();
}
private void popupedit_EmployeeRelations_PopUpClick(object sender, RoutedEventArgs e)
{
employeesearchview.ItemSelected += Employeesearchview_EnvironmentEmployeeSelected;
popup_employee.IsOpen = true;
}
private void Teamsearchview_EnvironmentTeamSelected(object sender, EventArgs<CompactTeamDC> e)
{
popup_team.IsOpen = false;
teamsearchview.ItemSelected -= Teamsearchview_EnvironmentTeamSelected;
ViewModel.WohnheimTeamRelations = e.Data;
ViewModel.WohnheimTeamRelations.Name = e.Data.Name;
gewaehltesTeam = e.Data;
popup_team.Focus();
}
private void popupedit_TeamRelations_PopUpClick(object sender, RoutedEventArgs e) // First
{
teamsearchview.ItemSelected += Teamsearchview_EnvironmentTeamSelected;
popup_team.IsOpen = true;
}
private void Popupedit_EmployeeRelations_OnPreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (!BeWoUtils.CheckPopupEditClickableSpace((PopUpEdit)sender, e) || !BeWoApp.LoggedOnUser.HasRight(UserRightType.EmployeeView_View))
{
return;
}
CreateModalViewWindow(ViewModel.WohnheimEmployeeRelations.NewVM.Employee);
}
private void Popupedit_TeamRelations_OnPreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) // TEAM
{
if (!BeWoUtils.CheckPopupEditClickableSpace((PopUpEdit)sender, e) || !BeWoApp.LoggedOnUser.HasRight(UserRightType.EmployeeView_View))
{
return;
}
// Läuft durch aber ruft nichts auf
CreateModalViewWindow(ViewModel.WohnheimTeamRelations);
}
private void popupedit_TeamRelations_SelectionChanged(object sender, RoutedEventArgs e)
{
popup_team.IsOpen = false;
//popupedit_TeamRelations.Text = popupedit_TeamRelations.SelectedText;
}
public void button_removeEmployeeRelation_Click(object sender, RoutedEventArgs e)
{
//if (ViewModel.DataContract.WohnheimOid.HasValue)
//{
regelmaessigeDiensteVonMitarbeiternLoeschen.Add(grid_EmployeeRelation.GetCurrentValue<WohnheimEmployeeRelationVM>().Employee);
// ServiceFacade.DoOperationsServiceSync(s => s.DeleteRegelmaessigeDiensteOfRemovedEmployee(regelmaessigeDiensteVonMitarbeiternLoeschen, (long)ViewModel.DataContract.WohnheimOid));
// //regelmaessigeDiensteVonMitarbeiternLoeschen = new List<CompactEmployeeDC>();
//}
ViewModel.WohnheimEmployeeRelations.VMList.Remove(grid_EmployeeRelation.GetCurrentValue<WohnheimEmployeeRelationVM>());
BeWoWpfUtils.RefreshDXGrid(grid_EmployeeRelation);
}
private void button_addKlientRelation_Click(object sender, RoutedEventArgs e)
{
bool contains = false;
foreach (var item in ViewModel.WohnheimCustomerRelations.VMList)
{
if (item.Customer.Oid == ViewModel.WohnheimCustomerRelations.NewVM.Customer.CustomerOid)
{
contains = true;
break;
}
}
if (contains)
return;
popup_newKlientRel.IsOpen = false;
ViewModel.WohnheimCustomerRelations.AddNewVMToList();
}
private void button_cancelKlientRelation_Click(object sender, RoutedEventArgs e)
{
popup_newKlientRel.IsOpen = false;
}
private void Klientsearchview_EnvironmentKlientSelected(object sender, EventArgs<CompactCustomerDC> e)
{
popup_klient.IsOpen = false;
klientsearchview.ItemSelected -= Klientsearchview_EnvironmentKlientSelected;
ViewModel.WohnheimCustomerRelations.NewVM.Customer = e.Data;
popup_klient.Focus();
}
private void popupedit_KlientRelations_PopUpClick(object sender, RoutedEventArgs e)
{
klientsearchview.ItemSelected += Klientsearchview_EnvironmentKlientSelected;
popup_klient.IsOpen = true;
}
private void Popupedit_KlientRelations_OnPreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (!BeWoUtils.CheckPopupEditClickableSpace((PopUpEdit) sender, e) || !BeWoApp.LoggedOnUser.HasRight(UserRightType.WohnheimView_View))
{
return;
}
CreateModalViewWindow(ViewModel.WohnheimCustomerRelations.NewVM.Customer);
}
public void Button_RemoveCustomerRelation_Click(object sender, RoutedEventArgs e)
{
ViewModel.WohnheimCustomerRelations.VMList.Remove(grid_CustomerRelation.GetCurrentValue<WohnheimCustomerRelationVM>());
BeWoWpfUtils.RefreshDXGrid(grid_CustomerRelation);
}
private void TableViewCustomer_OnRowDoubleClick(object sender, RowDoubleClickEventArgs e)
{
var tableView = (TableView)sender;
var selectedVM = (WohnheimCustomerRelationVM)tableView.Grid.GetRow(e.HitInfo.RowHandle);
if (selectedVM == null)
{
return;
}
CreateModalViewWindow((selectedVM).Customer);
}
private void TableViewEmployee_OnRowDoubleClick(object sender, RowDoubleClickEventArgs e)
{
var tableView = (TableView) sender;
var selectedVM = (WohnheimEmployeeRelationVM) tableView.Grid.GetRow(e.HitInfo.RowHandle);
if (selectedVM == null)
{
return;
}
CreateModalViewWindow((selectedVM).Employee);
}
private void CreateModalViewWindow<T>(T pDC) where T : IDataContract
{
if (pDC == null)
return;
var pDCType = pDC.GetType();
if (pDCType == typeof(CompactEmployeeDC))
{
VMFactory.CreateEmployeeVMAsync((pDC as CompactEmployeeDC).EmployeeOid,
cb => this.Dispatch(
() => BeWoUtils.OpenModalViewWindow<EmployeeVM, EmployeeDC, WohnheimView>(cb, this, () => this.Dispatch(
() => BeWoUtils.UpdateAllViews((pDC as CompactEmployeeDC))))));
}
if (pDCType == typeof (CompactCustomerDC))
{
VMFactory.CreateCustomerVMAsync((pDC as CompactCustomerDC).CustomerOid,
cb => this.Dispatch(
() => BeWoUtils.OpenModalViewWindow<CustomerVM, CustomerDC, WohnheimView>(cb, this, () => this.Dispatch(
() => BeWoUtils.UpdateAllViews((pDC as CompactCustomerDC))))));
}
}
private void chkStatuszeile_Checked(object sender, RoutedEventArgs e)
{
//textedit_pflichtStart.IsEnabled = true;
//textedit_pflichtEnde.IsEnabled = true;
//textedit_pflichtStart.Opacity = 100;
//textedit_pflichtEnde.Opacity = 100;
}
private void chkStatuszeile_Unchecked(object sender, RoutedEventArgs e)
{
//textedit_pflichtStart.IsEnabled = false;
//textedit_pflichtEnde.IsEnabled = false;
//textedit_pflichtStart.Opacity = 50;
//textedit_pflichtEnde.Opacity = 50;
}
private void chkStatuszeile_EditValueChanged(object sender, DevExpress.Xpf.Editors.EditValueChangedEventArgs e)
{
var checkbox = sender as CheckEdit;
if ((bool)checkbox.EditValue == false)
{
textedit_pflichtStart.IsEnabled = false;
textedit_pflichtEnde.IsEnabled = false;
textedit_pflichtStart.Opacity = 50;
textedit_pflichtEnde.Opacity = 50;
}
else
{
textedit_pflichtStart.IsEnabled = true;
textedit_pflichtEnde.IsEnabled = true;
textedit_pflichtStart.Opacity = 100;
textedit_pflichtEnde.Opacity = 100;
}
}
}
}