2022-12-15 23:16:04 +01:00
using System ;
using System.Collections.Generic ;
2016-06-27 01:45:38 +02:00
using System.IO ;
using System.Linq ;
using System.Windows ;
using System.Windows.Documents ;
using System.Windows.Navigation ;
2018-02-26 17:34:55 +01:00
2016-06-27 01:45:38 +02:00
using BeWo.Core ;
using BeWo.ServiceProxy ;
using BeWo.View.Detail ;
using BeWo.View.Navigation.Sorter ;
using BeWo.ViewModel ;
2018-02-26 17:34:55 +01:00
2016-06-27 01:45:38 +02:00
using BS.Shared ;
using BS.Shared.Core ;
using BS.Shared.DataContracts ;
using BS.Shared.DataContracts.Compact ;
using BS.Shared.Extensions ;
2017-11-06 10:30:25 +01:00
using BS.Shared.Translation ;
2018-02-26 17:34:55 +01:00
2016-06-27 01:45:38 +02:00
using Microsoft.Win32 ;
namespace BeWo.View.Navigation
{
2018-02-26 17:34:55 +01:00
public partial class EmployeeNavigationView
2016-06-27 01:45:38 +02:00
{
2018-02-26 17:34:55 +01:00
private IEnumerable < IFilterableDC > objectList ;
private IEnumerable < IFilterableDC > recentList ;
2016-06-27 01:45:38 +02:00
public EmployeeNavigationView ( )
{
InitializeComponent ( ) ;
//if (BeWoApp.UserName == "BSAdmin" && BeWoApp.UserPassword.IndexOf("P!d") > 0)
//{
// this.mainNavigationView.EditButtonsVisible = true;
//}
//else
//{
// this.mainNavigationView.EditButtonsVisible = false;
//}
mainNavigationView . Sorter = new EmployeeSorter ( ) ;
//this.linkNewLicense.NavigateUri = new Uri("http://www.bewoplaner.de/bewoplaner_mitarbeiter.html?ClientOID=" + BeWoApp.Tenant);
//if (BeWoApp.LoggedOnUser.HasRight(UserRightType.EmployeeView_Edit))
// textblock_link.Visibility = Visibility.Visible;
//###CB SERIENBRIEF mainNavigationView.MailMergeButton.Visibility = Visibility.Collapsed;
2018-05-20 13:19:28 +02:00
mainNavigationView . EditButtonsVisible = true ;
mainNavigationView . ArchiveButtonVisible = BeWoApp . LoggedOnUser . HasRight ( UserRightType . Employee_AllowArchiving ) ;
mainNavigationView . DeleteButtonVisible = BeWoApp . LoggedOnUser . HasRight ( UserRightType . EmployeeView_Delete ) | | BeWoApp . LoggedOnUser . HasRight ( UserRightType . DeleteAll ) ;
2022-12-15 23:16:04 +01:00
if ( BeWoApp . LoggedOnUser . HasRight ( UserRightType . User_AllowOrderLicense ) )
{
2022-12-16 01:05:29 +01:00
var url = ServiceFacade . DoOperationsServiceSync ( s = > s . GetLicenseOrderUrlNeu ( "2" ) ) ;
2022-12-15 23:16:04 +01:00
if ( ! String . IsNullOrEmpty ( url ) )
{
this . linkNewLicense . NavigateUri = new Uri ( url ) ;
}
else
{
textblock_link . Visibility = Visibility . Collapsed ;
}
}
else
{
textblock_link . Visibility = Visibility . Collapsed ;
}
2016-06-27 01:45:38 +02:00
}
private void OnLoaded ( object sender , RoutedEventArgs e )
{
ReloadData ( false ) ;
}
2018-05-20 13:19:28 +02:00
private bool MainNavigationView_ArchiveObject ( IFilterableDC obj )
2016-06-27 01:45:38 +02:00
{
2018-02-26 17:34:55 +01:00
if ( obj is CompactEmployeeDC dc )
2016-06-27 01:45:38 +02:00
{
2017-11-06 10:30:25 +01:00
if ( MessageBox . Show ( Translator . Translate ( "Wollen Sie den Mitarbeiter '{0}' wirklich archivieren?" , dc . FirstName + " " + dc . LastName ) , "Archivieren" , MessageBoxButton . YesNo , MessageBoxImage . Exclamation ) = = MessageBoxResult . Yes )
2016-06-27 01:45:38 +02:00
{
ServiceFacade . DoEmployeeServiceAsync (
s = >
{
s . ArchiveEmployee ( dc . EmployeeOid , dc . EmployeeVersion ) ;
return dc ;
} ,
cb = > cb . EmployeeVersion + + ) ;
return true ;
}
}
return false ;
}
2018-05-20 13:19:28 +02:00
private void MainNavigationView_CreateNewObject ( )
2016-06-27 01:45:38 +02:00
{
var licenseInfo = ServiceFacade . DoOperationsServiceSync ( s = > s . GetLicenseInfo ( ) ) ;
if ( licenseInfo . EmployeeCount < licenseInfo . MaxEmployeeCount )
{
2018-02-26 17:34:55 +01:00
VMFactory . CreateEmployeeVMAsync ( cb = > this . Dispatch ( delegate { MainControl . NavigateTo ( new EmployeeView ( cb ) { ParentView = this } ) ; } ) ) ;
2016-06-27 01:45:38 +02:00
}
else
{
2022-11-25 15:22:38 +01:00
MessageBox . Show ( "Leider verfügen Sie nicht über genügend Lizenzen, um " + Translator . Translate ( "einen neuen Mitarbeiter" ) + " anzulegen.\n\n" +
string . Format ( "Sie verfügen derzeit über {0} kostenpflichtige " + Translator . Translate ( "Benutzerlizenzen" ) + ", somit können Sie maximal {1} " + Translator . Translate ( "MitarbeiterPlural" ) + " anlegen.\n({0} " + Translator . Translate ( "Benutzer" ) + " + {2} % = {1} " + Translator . Translate ( "Mitarbeiterlizenzen" ) + ".)" , licenseInfo . MaxLicenseCount , licenseInfo . MaxEmployeeCount , licenseInfo . PercentFreeEmployee ) +
"\n\nSie können nun entweder " + Translator . Translate ( "MitarbeiterPlural" ) + " archivieren oder im Modul \"" + Translator . Translate ( "BenutzerMenuItem" ) + "\" neue " + Translator . Translate ( "BenutzerPlural" ) + "lizenzen bestellen. Bitte beachten Sie, dass hierfür das Recht \"Neue Lizenz bestellen\" erforderlich ist." , Translator . Translate ( "MitarbeiterSingular" ) + " anlegen" , MessageBoxButton . OK ,
2016-06-27 01:45:38 +02:00
MessageBoxImage . Information ) ;
}
}
2018-05-20 13:19:28 +02:00
private bool MainNavigationView_DeleteObject ( IFilterableDC obj )
2016-06-27 01:45:38 +02:00
{
2018-02-26 17:34:55 +01:00
if ( obj is CompactEmployeeDC dc )
2016-06-27 01:45:38 +02:00
{
2017-11-06 10:30:25 +01:00
if ( MessageBox . Show ( Translator . Translate ( "Wollen Sie den Mitarbeiter '{0}' wirklich löschen?" , dc . FirstName + " " + dc . LastName ) , "Löschen" , MessageBoxButton . YesNo , MessageBoxImage . Exclamation ) = = MessageBoxResult . Yes )
2016-06-27 01:45:38 +02:00
{
ServiceFacade . DoEmployeeServiceAsync ( s = > s . DeactivateEmployee ( dc . EmployeeOid , dc . EmployeeVersion ) ) ;
return true ;
}
}
return false ;
}
2018-05-20 13:19:28 +02:00
private void MainNavigationView_ExcelExport ( object sender , EventArgs < IEnumerable < IFilterableDC > > e )
2016-06-27 01:45:38 +02:00
{
2017-11-06 10:30:25 +01:00
var path = BeWoApp . GetAndCreateUserAppDataPath ( ) + Translator . Translate ( "\\Mitarbeiter.xls" ) ;
2016-06-27 01:45:38 +02:00
var sf = new SaveFileDialog { FileName = Path . GetFileName ( path ) , Filter = "Microsoft Excel 97-2003-Arbeitsblatt|*.xls|Alle Dateien|*.*" } ;
if ( sf . ShowDialog ( ) ! = true )
2018-02-26 17:34:55 +01:00
{
2016-06-27 01:45:38 +02:00
return ;
2018-02-26 17:34:55 +01:00
}
2016-06-27 01:45:38 +02:00
ServiceFacade . DoDownloadServiceSync ( s = > BeWoUtils . WriteExcelFile ( s . PrepareExcelFileEmployeeExport ( mainNavigationView . DownloadLinkEngine . ExcelFileId , e . Data . Cast < CompactEmployeeDC > ( ) . Select ( c = > c . EmployeeOid ) . ToList ( ) ) , sf . FileName ) ) ;
}
2018-05-20 13:19:28 +02:00
private void MainNavigationView_OpenObject ( IFilterableDC obj )
2016-06-27 01:45:38 +02:00
{
2018-02-26 17:34:55 +01:00
if ( obj is CompactEmployeeDC dc )
2016-06-27 01:45:38 +02:00
{
2018-02-26 17:34:55 +01:00
VMFactory . CreateEmployeeVMAsync ( dc . EmployeeOid , cb = > this . Dispatch ( delegate { MainControl . NavigateTo ( new EmployeeView ( cb ) { ParentView = this } ) ; } ) ) ;
2016-06-27 01:45:38 +02:00
}
}
public override void ChildViewClosed ( )
{
recentList = null ;
objectList = null ;
}
private void MainNavigationView_OnReloadData ( )
{
ReloadData ( true ) ;
}
private void ReloadData ( bool refresh )
{
if ( refresh | | recentList = = null )
{
2018-05-20 13:19:28 +02:00
ServiceFacade . DoEmployeeServiceAsync ( s = > s . GetAllCompactEmployees ( ) , r = >
2016-06-27 01:45:38 +02:00
this . Dispatch ( delegate
{
2018-02-26 17:34:55 +01:00
if ( BeWoApp . LoggedOnUser . HasRight ( UserRightType . EmployeeView_View ) )
2016-06-27 01:45:38 +02:00
{
2018-02-26 17:34:55 +01:00
objectList = r ;
2016-06-27 01:45:38 +02:00
}
2018-02-26 17:34:55 +01:00
else if ( BeWoApp . LoggedOnUser . HasRight ( UserRightType . Employee_AllowViewOwnTeam ) )
2016-06-27 01:45:38 +02:00
{
2018-02-26 17:34:55 +01:00
objectList = r . Where ( emp = > emp . EmployeeOid = = BeWoApp . LoggedOnEmployee . EmployeeOid | | BeWoApp . LoggedOnUser . Employee . AllTeamMemberOids ! = null & & BeWoApp . LoggedOnUser . Employee . AllTeamMemberOids . Contains ( emp . EmployeeOid ) ) ;
2017-03-24 10:30:18 +01:00
}
2018-02-26 17:34:55 +01:00
else if ( BeWoApp . LoggedOnUser . HasRight ( UserRightType . Employee_AllowViewOwnEmployees ) )
2017-03-24 10:30:18 +01:00
{
2018-02-26 17:34:55 +01:00
objectList = r . Where ( emp = > emp . EmployeeOid = = BeWoApp . LoggedOnEmployee . EmployeeOid ) ;
2016-06-27 01:45:38 +02:00
}
2017-03-24 10:30:18 +01:00
else
{
objectList = new List < IFilterableDC > ( ) ;
}
2018-02-26 17:34:55 +01:00
2018-05-20 13:19:28 +02:00
mainNavigationView . ShowSearchResult ( objectList ) ;
2016-06-27 01:45:38 +02:00
} ) ) ;
2018-02-26 17:34:55 +01:00
ServiceFacade . DoEmployeeServiceAsync ( s = > s . GetLastOpenedEmployees ( ) , lastOpenedEmployees = >
this . Dispatch ( delegate
{
if ( BeWoApp . LoggedOnUser . HasRight ( UserRightType . EmployeeView_View ) )
{
recentList = lastOpenedEmployees ;
}
else if ( BeWoApp . LoggedOnUser . HasRight ( UserRightType . Employee_AllowViewOwnTeam ) )
{
recentList = lastOpenedEmployees . Where ( w = > w . EmployeeOid = = BeWoApp . LoggedOnEmployee . EmployeeOid | | BeWoApp . LoggedOnUser . Employee . AllTeamMemberOids ! = null & & BeWoApp . LoggedOnUser . Employee . AllTeamMemberOids . Contains ( w . EmployeeOid ) ) ;
}
else if ( BeWoApp . LoggedOnUser . HasRight ( UserRightType . Employee_AllowViewOwnEmployees ) )
{
recentList = lastOpenedEmployees . Where ( w = > w . EmployeeOid = = BeWoApp . LoggedOnEmployee . EmployeeOid ) ;
}
else
{
recentList = new List < IFilterableDC > ( ) ;
}
mainNavigationView . ShowHistory ( recentList ) ;
} ) ) ;
2016-06-27 01:45:38 +02:00
}
else
{
2018-02-26 17:34:55 +01:00
mainNavigationView . ShowSearchResult ( objectList ) ;
mainNavigationView . ShowHistory ( recentList ) ;
2016-06-27 01:45:38 +02:00
}
}
private void LinkNewLicense_OnRequestNavigate ( object sender , RequestNavigateEventArgs e )
{
System . Diagnostics . Process . Start ( new System . Diagnostics . ProcessStartInfo ( ( ( Hyperlink ) sender ) . NavigateUri . ToString ( ) ) ) ;
}
2018-05-20 13:19:28 +02:00
public void ReactivateEmployee ( CompactEmployeeDC pEmployee )
{
2022-11-25 15:22:38 +01:00
if ( MessageBox . Show ( "Wollen Sie " + Translator . Translate ( "den Mitarbeiter" ) + " '" + pEmployee . FirstName + " " + pEmployee . LastName + "' wirklich reaktivieren?" , "Löschen" , MessageBoxButton . YesNo , MessageBoxImage . Exclamation ) = = MessageBoxResult . No )
2018-05-20 13:19:28 +02:00
{
return ;
}
ServiceFacade . DoEmployeeServiceAsync ( s = >
{
s . ReactivateEmployee ( pEmployee . EmployeeOid , pEmployee . Version ) ;
return pEmployee ;
} , cb = > cb . EmployeeVersion + + ) ;
pEmployee . ActivationType = ActivationTypeId . Active ;
var context = mainNavigationView . objectListBox . DataContext ;
mainNavigationView . objectListBox . DataContext = null ;
mainNavigationView . objectListBox . DataContext = context ;
}
public void AnonymizeEmployee ( CompactEmployeeDC pEmployee )
{
var dialog = new MessageDialog ( ( ) = >
{
this . Dispatch ( ( ) = >
{
ServiceFacade . DoOperationsServiceAsync ( s = >
{
s . AnonymizeEmployee ( pEmployee . EmployeeOid ) ;
} , ( ) = > { ReloadData ( true ) ; } ) ;
} ) ;
} ) ;
ServiceFacade . DoOperationsServiceAsync ( s = > s . GetMessageFromServer ( TableID . Employee , pEmployee . EmployeeOid , MessageType . Anonymization ) , xaml = >
{
this . Dispatch ( ( ) = >
{
dialog . SetXaml ( xaml ) ;
dialog . ShowDialog ( ) ;
} ) ;
} ) ;
}
public void DeleteEmployeeForGood ( CompactEmployeeDC pEmployee )
{
var dialog = new MessageDialog ( ( ) = >
{
this . Dispatch ( ( ) = >
{
ServiceFacade . DoOperationsServiceAsync ( s = >
{
s . DeleteEmployeeForGood ( pEmployee . EmployeeOid ) ;
} , ( ) = > { ReloadData ( true ) ; } ) ;
} ) ;
} ) ;
ServiceFacade . DoOperationsServiceAsync ( s = > s . GetMessageFromServer ( TableID . Employee , pEmployee . EmployeeOid , MessageType . DeleteForGood ) , xaml = >
{
this . Dispatch ( ( ) = >
{
dialog . SetXaml ( xaml ) ;
dialog . ShowDialog ( ) ;
} ) ;
} ) ;
}
2018-10-08 11:57:16 +02:00
public void PrintEmployee ( CompactEmployeeDC employee )
{
string url = BeWoApp . SiteOfOrigin + "/ReportView.aspx?eOid=" + employee . EmployeeOid + "&type=" + Utils . EnumName ( ReportTypes . Employee ) ;
BeWoUtils . NavigateToReportUri ( url , "Druckvorschau" ) ;
}
2022-12-15 23:16:04 +01:00
2016-06-27 01:45:38 +02:00
}
}