311 lines
9.2 KiB
C#
311 lines
9.2 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.ServiceModel;
|
|
using System.Windows;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using BeWo.Controls;
|
|
using BeWo.Core;
|
|
using BeWo.PasswortSecurity;
|
|
using BeWo.ServiceProxy;
|
|
using BeWo.ViewModel;
|
|
using BS.Shared;
|
|
using BS.Shared.Core;
|
|
using BS.Shared.DataContracts;
|
|
using BS.Shared.DataContracts.Compact;
|
|
using BS.Shared.Extensions;
|
|
|
|
namespace BeWo.View.Detail
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for UserRightsView.xaml
|
|
/// </summary>
|
|
public partial class UserView : BeWoView
|
|
{
|
|
private UserVM _ViewModel;
|
|
|
|
public UserView(UserVM pViewModel)
|
|
{
|
|
InitializeComponent();
|
|
ViewModel = pViewModel;
|
|
|
|
if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.DocumentsAllowViewAll))
|
|
{
|
|
tabitem_documents.Visibility = Visibility.Collapsed;
|
|
}
|
|
}
|
|
|
|
public override bool IsDirty
|
|
{
|
|
get { return ViewModel != null && (ViewModel.IsDirty && !popup_changePassword.IsOpen); }
|
|
}
|
|
|
|
public override string Title
|
|
{
|
|
get { return "Benutzer"; }
|
|
}
|
|
|
|
internal UserVM ViewModel
|
|
{
|
|
get { return _ViewModel; }
|
|
|
|
set
|
|
{
|
|
_ViewModel = value;
|
|
DataContext = value;
|
|
if (!value.IsNew)
|
|
{
|
|
grid_passwordExistingUser.Visibility = Visibility.Visible;
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override UserRightType[] GetSaveDemands()
|
|
{
|
|
return ViewModel.IsNew ? new[] {UserRightType.CreateAll, UserRightType.UserView_Create} : new[] {UserRightType.EditAll, UserRightType.UserView_Edit};
|
|
}
|
|
|
|
protected override void Save()
|
|
{
|
|
if (ViewModel.IsNew)
|
|
{
|
|
if (string.IsNullOrEmpty(passwordbox_password.Password))
|
|
{
|
|
MessageBox.Show("Geben Sie ein Passwort an", "Passwort", MessageBoxButton.OK, MessageBoxImage.Asterisk);
|
|
return;
|
|
}
|
|
|
|
if (passwordbox_password.Password != passwordbox_passwordRepeat.Password)
|
|
{
|
|
MessageBox.Show("Die Passwörter stimmen nicht überein", "Passwort", MessageBoxButton.OK, MessageBoxImage.Asterisk);
|
|
return;
|
|
}
|
|
|
|
if (ViewModel.Employee == null)
|
|
{
|
|
MessageBox.Show("Bitte geben Sie einen Mitarbeiter an.", "Speichern nicht möglich", MessageBoxButton.OK, MessageBoxImage.Asterisk);
|
|
return;
|
|
}
|
|
}
|
|
|
|
UserDC lUser = ViewModel.CommitToDataContract();
|
|
try
|
|
{
|
|
lUser.NewPassword = passwordbox_password.Password;
|
|
if (ViewModel.IsNew)
|
|
{
|
|
ServiceFacade.DoUserServiceAsync(s => s.InsertNewUser(lUser), ReloadViewModel, true);
|
|
}
|
|
else
|
|
{
|
|
ServiceFacade.DoUserServiceAsync(s => s.UpdateUser(lUser), UserUpdated, true);
|
|
}
|
|
BeWoApp.MainControl.ResetView(UIContext.User);
|
|
}
|
|
catch (FaultException<BeWoFault> ex)
|
|
{
|
|
if (ex.Detail.FaultType == BeWoFaultType.LoginNameTaken)
|
|
{
|
|
MessageBox.Show("Der Login Name ist bereits vergeben", "Login", MessageBoxButton.OK, MessageBoxImage.Asterisk);
|
|
return;
|
|
}
|
|
|
|
// TODO
|
|
}
|
|
}
|
|
|
|
private void ClearEditPasswordPopUp()
|
|
{
|
|
textblock_editFailures.Text = string.Empty;
|
|
passwordbox_editOldPassword.Clear();
|
|
passwordbox_editPassword.Clear();
|
|
passwordbox_editPasswordRepeat.Clear();
|
|
}
|
|
|
|
private void EmployeeSearchView_EmployeeSelected(object sender, EventArgs<CompactEmployeeDC> e)
|
|
{
|
|
popup_employee.IsOpen = false;
|
|
ViewModel.Employee = e.Data;
|
|
}
|
|
|
|
private void ReloadViewModel(long pOid)
|
|
{
|
|
if (pOid == -1)
|
|
{
|
|
this.Dispatch(
|
|
delegate { MessageBox.Show("Leider besitzen Sie nicht genügend Lizenzen um einen neuen Benutzer anzulegen!", "Benutzer anlegen", MessageBoxButton.OK, MessageBoxImage.Information); });
|
|
}
|
|
else
|
|
{
|
|
VMFactory.CreateUserVMAsync(
|
|
pOid,
|
|
cb => this.Dispatch(
|
|
delegate
|
|
{
|
|
ViewModel = cb;
|
|
if (BeWoApp.LoggedOnUser.Equals(cb.DataContract))
|
|
{
|
|
BeWoApp.LoggedOnUser = cb.DataContract;
|
|
}
|
|
}));
|
|
}
|
|
}
|
|
|
|
private void UserUpdated(long pOid)
|
|
{
|
|
if (pOid == BeWoApp.LoggedOnUser.UserOid)
|
|
{
|
|
BeWoApp.UserName = ViewModel.DataContract.LoginName;
|
|
}
|
|
|
|
ReloadViewModel(pOid);
|
|
}
|
|
|
|
private void button_addGroup_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
ViewModel.UserGroups.Add((UserGroupDC) listbox_possibleGroups.SelectedItem);
|
|
}
|
|
|
|
private void button_cancelEditPassword_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
popup_changePassword.IsOpen = false;
|
|
ClearEditPasswordPopUp();
|
|
}
|
|
|
|
private void button_changePassword_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.UserView_AllowChangePassword))
|
|
{
|
|
lblOldPassword.Visibility = Visibility.Collapsed;
|
|
passwordbox_editOldPassword.Visibility = Visibility.Collapsed;
|
|
}
|
|
|
|
popup_changePassword.IsOpen = true;
|
|
}
|
|
|
|
private void button_removeGroup_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
ViewModel.UserGroups.Remove((UserGroupDC) listbox_groups.SelectedItem);
|
|
}
|
|
|
|
private void button_saveEditPassword_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
string oldPw = passwordbox_editOldPassword.Password;
|
|
string newPw = passwordbox_editPassword.Password;
|
|
|
|
if (string.IsNullOrWhiteSpace(newPw))
|
|
{
|
|
textblock_editFailures.Text = "Bitte geben Sie ein neues Passwort ein!";
|
|
MessageBox.Show(textblock_editFailures.Text, "Ändern des Passworts fehlgeschlagen", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
return;
|
|
}
|
|
|
|
if (newPw != passwordbox_editPasswordRepeat.Password)
|
|
{
|
|
textblock_editFailures.Text = "Die Passwörter stimmen nicht überein!";
|
|
MessageBox.Show(textblock_editFailures.Text, "Ändern des Passworts fehlgeschlagen", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
return;
|
|
}
|
|
|
|
//neu
|
|
var pwStaerke = BeWoUtils.CheckPasswordSecurity(newPw);
|
|
if (BeWoApp.AppSettings.IsPasswordSecurityActiv && (pwStaerke == PasswortSecurityStrength.SehrSchwach || pwStaerke == PasswortSecurityStrength.Schwach))
|
|
{
|
|
textblock_editFailures.Text = "Das Passwort ist zu schwach!";
|
|
MessageBox.Show(textblock_editFailures.Text, "Ändern des Passworts fehlgeschlagen", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
return;
|
|
}
|
|
|
|
if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.UserView_AllowChangePassword))
|
|
{
|
|
var result = ServiceFacade.DoUserServiceSync(s => s.CheckPassword(ViewModel.DataContract.UserOid.Value, oldPw, newPw));
|
|
|
|
if (!string.IsNullOrEmpty(result))
|
|
{
|
|
textblock_editFailures.Text = result;
|
|
MessageBox.Show(textblock_editFailures.Text, "Ändern des Passworts fehlgeschlagen", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
oldPw = ViewModel.DataContract.HashedPassword;
|
|
}
|
|
|
|
|
|
|
|
|
|
ServiceFacade.DoUserServiceAsync(
|
|
s1 => s1.ChangePassword(ViewModel.DataContract.LoginName, ViewModel.DataContract.UserVersion.Value, oldPw, newPw),
|
|
r1 =>
|
|
{
|
|
if (ViewModel.DataContract.UserOid == BeWoApp.LoggedOnUser.UserOid)
|
|
{
|
|
BeWoApp.UserPassword = newPw;
|
|
}
|
|
|
|
ServiceFacade.DoUserServiceAsync(
|
|
s2 => s2.LoadUser(ViewModel.DataContract.UserOid.Value),
|
|
r2 => this.Dispatch(
|
|
delegate
|
|
{
|
|
ViewModel.DataContract.UserVersion = r2.UserVersion;
|
|
ViewModel.DataContract.HashedPassword = r2.HashedPassword;
|
|
|
|
popup_changePassword.IsOpen = false;
|
|
ClearEditPasswordPopUp();
|
|
|
|
}),
|
|
true);
|
|
},
|
|
true);
|
|
}
|
|
|
|
private void popupedit_employee_DeleteClick(object sender, RoutedEventArgs e)
|
|
{
|
|
ViewModel.Employee = null;
|
|
}
|
|
|
|
private void popupedit_employee_PopUpClick(object sender, RoutedEventArgs e)
|
|
{
|
|
popup_employee.IsOpen = true;
|
|
}
|
|
|
|
private void tabitem_documents_Selected(object sender, RoutedEventArgs e)
|
|
{
|
|
if (ViewModel.IsNew)
|
|
{
|
|
MessageBox.Show("Bevor zu einem Datensatz Dokumente hinterlegt werden können, muss dieser gespeichert werden.", "Erst speichern bitte", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
return;
|
|
}
|
|
|
|
if (tabitem_documents.Content == null)
|
|
{
|
|
tabitem_documents.Content = new BeWoFileView(TableID.ApplicationUser, ViewModel.DataContract.UserOid.Value);
|
|
}
|
|
}
|
|
|
|
private void Popupedit_employee_OnPreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
|
|
{
|
|
if (!BeWoUtils.CheckPopupEditClickableSpace((PopUpEdit) sender, e) || ViewModel.Employee == null || !BeWoApp.LoggedOnUser.HasRight(UserRightType.EmployeeView_View))
|
|
return;
|
|
|
|
VMFactory.CreateEmployeeVMAsync(ViewModel.Employee.EmployeeOid,
|
|
cb => this.Dispatch(
|
|
() => BeWoUtils.OpenModalViewWindow<EmployeeVM, EmployeeDC, UserView>(cb, this, () => this.Dispatch(
|
|
() => BeWoUtils.UpdateAllViews(ViewModel.Employee)))));
|
|
}
|
|
|
|
|
|
#region Passwort - Sicherheits - Anzeige
|
|
|
|
PasswortSicherheit pwS = new PasswortSicherheit();
|
|
|
|
private void Passwordbox_editPassword_OnPasswordChanged(object sender, RoutedEventArgs e)
|
|
{
|
|
passwordbox_StaerkeAnzeige = pwS.ErmittleUndZeigePasswortStaerke(passwordbox_editPassword.Password, passwordbox_StaerkeAnzeige);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |