Files
BeWoPlaner/BeWo/View/Detail/UserGroupView.xaml.cs
Lyndon Jetten 4bd9dffd0b FaC:
Klienten meiner Teams werden im Kalender angezeigt, auch wenn man sonst keine sehen darf.
Nach der Änderung von Benutzergruppen in denen der angemeldete Mitarbeiter ist, wird der Cache geleert, um den Änderungen entsprechende Objekte aus der Datenbank neuzuladen.
2023-03-06 15:56:50 +01:00

148 lines
5.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Windows;
using BeWo.Core.Service;
using BeWo.ServiceProxy;
using BeWo.ViewModel;
using BS.Shared;
using BS.Shared.Extensions;
namespace BeWo.View.Detail
{
public partial class UserGroupView
{
private UserGroupVM _ViewModel;
public UserGroupView(UserGroupVM pViewModel)
{
InitializeComponent();
ViewModel = pViewModel;
}
public override bool IsDirty
{
get { return ViewModel != null && ViewModel.IsDirty; }
}
public override String Title
{
get { return BS.Shared.Translation.Translator.Translate("Benutzergruppen"); }
}
private UserGroupVM ViewModel
{
get { return _ViewModel; }
set
{
_ViewModel = value;
DataContext = value;
}
}
protected override UserRightType[] GetSaveDemands()
{
return ViewModel.IsNew ?
new[] {UserRightType.CreateAll, UserRightType.UserGroupView_Create} :
new[] {UserRightType.EditAll, UserRightType.UserGroupView_Edit};
}
protected override void Save()
{
var lDataContract = ViewModel.CommitToDataContract();
try
{
if (ViewModel.IsNew)
{
ServiceFacade.DoUserServiceAsync(s => s.InsertNewUserGroup(lDataContract), ReloadViewModel, true);
}
else
{
ServiceFacade.DoUserServiceAsync(s => s.UpdateUserGroup(lDataContract), ReloadViewModel, true);
}
BeWoApp.MainControl.ResetView(UIContext.UserGroup);
}
catch (FaultException<BeWoFault>)
{
MessageBox.Show("Dieser Datensatz wurde in der Zwischenzeit von " + BS.Shared.Translation.Translator.Translate("einem anderen Benutzer") + " geändert. Klicken Sie Ok um den Datansatz erneut zu laden. Ihre Änderungen gehen dabei leider verloren.");
ReloadViewModel(lDataContract.UserGroupOid.Value);
}
}
private void ReloadViewModel(long pOID)
{
VMFactory.CreateUserGroupVMAsync(
pOID,
cb => this.Dispatch(
delegate
{
ViewModel = cb;
if(BeWoApp.LoggedOnUser.UserGroups.Contains(cb.DataContract))
{
ServiceFacade.DoUserServiceAsync(s => s.LoadUser(BeWoApp.LoggedOnUser.UserOid.Value), cb2 =>
{
BeWoApp.LoggedOnUser = cb2;
Cache.GetInstance().ClearAll();
}, true);
}
}));
}
private void button_addRight_Click(object sender, RoutedEventArgs e)
{
var addedItems = listbox_possibleRights.SelectedItems.Cast<KeyValuePair<UserRightType, String>>().ToList();
foreach (var item in addedItems)
{
ViewModel.Rights.Add(item.Key);
}
ViewModel.Rights.Sort();
}
private void button_removeRight_Click(object sender, RoutedEventArgs e)
{
var removedItems = listbox_rights.SelectedItems.Cast<KeyValuePair<UserRightType, String>>().ToList();
var userGroupViewRights = new List<UserRightType> { UserRightType.UserGroupView_Edit, UserRightType.UserGroupView_View };
var globalRights = new List<UserRightType> { UserRightType.EditAll, UserRightType.ViewAll };
var removedRights = removedItems.Select(s => s.Key).ToList();
var anyUserGroupRights2Remove = userGroupViewRights.Intersect(removedRights).Any();
var anyGlobalRights2Remove = globalRights.Intersect(removedRights).Any();
// sind alle globalRights oder alle userGroupViewRights in der Liste noch vorhanden, kann gelöscht werden
// mindestens ein Edit-Recht und ein View-Rechts
var intersection = ViewModel.Rights.Except(removedRights).ToList();
var minRights = intersection.Contains(UserRightType.UserGroupView_Edit) && intersection.Contains(UserRightType.ViewAll) ||
intersection.Contains(UserRightType.UserGroupView_Edit) && intersection.Contains(UserRightType.UserGroupView_View) ||
intersection.Contains(UserRightType.EditAll) && intersection.Contains(UserRightType.ViewAll) ||
intersection.Contains(UserRightType.EditAll) && intersection.Contains(UserRightType.UserGroupView_View);
if ((anyUserGroupRights2Remove || anyGlobalRights2Remove) && ViewModel.DataContract.UserGroupOid != null && (!minRights))
{
if (ServiceFacade.DoUserServiceSync(a => a.CheckUserGroupIsLastWithUserGroupEditRights(ViewModel.DataContract.UserGroupOid.Value)))
{
MessageBox.Show("Die ausgewählten Rechte können der " + BS.Shared.Translation.Translator.Translate("Benutzergruppe") + " nicht entfernt werden, da sie die einzige " + BS.Shared.Translation.Translator.Translate("Benutzergruppe") + " ist, die dazu berechtigt ist, " + BS.Shared.Translation.Translator.Translate("Benutzergruppen") + " zu verwalten.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return;
}
}
foreach (var item in removedItems)
{
ViewModel.Rights.Remove(item.Key);
}
ViewModel.Rights.Sort();
}
}
}