Bugs bei der Rechtebeachtung im Auswertungsmodul behoben
This commit is contained in:
2023-05-17 13:58:10 +02:00
parent d6b1a9cb00
commit 8f4235cb3c
11 changed files with 254 additions and 197 deletions

View File

@@ -83,7 +83,13 @@ namespace BeWo.View.Master
// tabitem_annualReport.Visibility = Visibility.Visible;
// }
if (BeWoApp.Tenant == "3010479871" || (!BeWoApp.LoggedOnUser.HasRight(UserRightType.Mitarbeiterstundenkonto_ViewAll) && !BeWoApp.LoggedOnUser.HasRight(UserRightType.Mitarbeiterstundenkonto_ViewSelf) && !BeWoApp.LoggedOnUser.HasRight(UserRightType.Mitarbeiterstundenkonto_ViewTeams)))
if (BeWoApp.Tenant == "3010479871" ||
(
!BeWoApp.LoggedOnUser.HasRight(UserRightType.Mitarbeiterstundenkonto_ViewAll) &&
!BeWoApp.LoggedOnUser.HasRight(UserRightType.Mitarbeiterstundenkonto_ViewSelf) &&
!BeWoApp.LoggedOnUser.HasRight(UserRightType.Mitarbeiterstundenkonto_ViewTeams)
)
)
{
//Aachener Verein
tabitem_makonto.Visibility = Visibility.Collapsed;

View File

@@ -5,121 +5,115 @@
xmlns:localSearchView="clr-namespace:BeWo.View.Search"
xmlns:uc="clr-namespace:BeWo.Controls;assembly=BeWo.Controls"
xmlns:dxp="http://schemas.devexpress.com/winfx/2008/xaml/printing"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars"
xmlns:dxpbars="http://schemas.devexpress.com/winfx/2008/xaml/printing/bars"
xmlns:markup="clr-namespace:BeWo.MultiLanguage.Markup"
Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Focusable="True">
<GroupBox Header="Stundenkonto" Style="{StaticResource ObjectEditGroupBox}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<GroupBox Header="Stundenkonto" Style="{StaticResource ObjectEditGroupBox}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<RadioButton x:Name="radioEmployeeReport" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="2" Content="{markup:Translate Nach Mitarbeiter auswerten}"
GroupName="radioReportType" IsChecked="True" Margin="4,3,0,3" Checked="RadioButton_Checked" Height="22" />
<RadioButton x:Name="radioTeamReport" Grid.Column="2" Grid.Row="0" Grid.ColumnSpan="3" GroupName="radioReportType"
Content="Nach Team auswerten" Margin="-10,3,0,3" Checked="RadioButton_Checked" />
<RadioButton x:Name="radioEmployeeReport" Grid.Column="0" Grid.ColumnSpan="2" Content="{markup:Translate Nach Mitarbeiter auswerten}" GroupName="radioReportType" IsChecked="True" Margin="4,3,0,3" Checked="RadioButton_Checked" Height="22" />
<RadioButton x:Name="radioTeamReport" Grid.Column="2" Grid.ColumnSpan="3" GroupName="radioReportType" Content="Nach Team auswerten" Margin="-10,3,0,3" Checked="RadioButton_Checked" />
<CheckBox Margin="3" Name="checkbox_all" Grid.Row="1" Grid.Column="0" IsChecked="False" Content="{markup:Translate Alle Mitarbeiter}"
Checked="CheckBox_Checked" Unchecked="CheckBox_Checked" VerticalAlignment="Center" />
<CheckBox Margin="3" Name="checkbox_all" Grid.Row="1" IsChecked="False" Content="{markup:Translate Alle Mitarbeiter}" Checked="CheckBox_Checked" Unchecked="CheckBox_Checked" VerticalAlignment="Center"/>
<uc:PopUpEdit Grid.Row="1" IsReadOnly="True" Grid.Column="1" Grid.ColumnSpan="3"
x:Name="popupedit_employee" DeleteButtonVisibility="Collapsed"
<uc:PopUpEdit Grid.Row="1" IsReadOnly="True" Grid.Column="1" Grid.ColumnSpan="3" x:Name="popupedit_employee" DeleteButtonVisibility="Collapsed"
Margin="3" Height="22" VerticalAlignment="Top" PopUpClick="popupedit_employee_PopUpClick" Cursor="Arrow" />
<CheckBox Grid.Column="0" Grid.Row="1" Margin="3" x:Name="checkbox_all_teams" IsChecked="True" Content="Alle Teams" Checked="CheckBoxAllTeams_Checked" Unchecked="CheckBoxAllTeams_Checked" VerticalAlignment="Center" Visibility="Collapsed" />
<CheckBox Grid.Column="0" Grid.Row="1" Margin="3" x:Name="checkbox_all_teams" IsChecked="True" Content="Alle Teams" Checked="CheckBoxAllTeams_Checked"
Unchecked="CheckBoxAllTeams_Checked" VerticalAlignment="Center" Visibility="Collapsed" />
<uc:PopUpEdit Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" IsReadOnly="True" Visibility="Collapsed"
x:Name="popupedit_team" DeleteButtonVisibility="Collapsed" PopUpClick="popupedit_team_PopUpClick" HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left" Height="22" Margin="3"
Cursor="Arrow" />
<uc:PopUpEdit Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="3" IsReadOnly="True" Visibility="Collapsed"
x:Name="popupedit_team" DeleteButtonVisibility="Collapsed" PopUpClick="popupedit_team_PopUpClick" HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left" Height="22" Margin="3" Cursor="Arrow" />
<!--<CheckBox Margin="3" Name="checkbox_showTeamReport" Height="22" Grid.Row="2" Grid.ColumnSpan="2" IsChecked="False" Content="Nach Teams sortieren" VerticalContentAlignment="Center"/>-->
<!--<CheckBox Margin="3" Grid.Column="0" Grid.Row="3" Height="22" Grid.ColumnSpan="2" Content="Klienten auflisten" VerticalAlignment="Center" x:Name="chkShowCustomer" />-->
<!--<CheckBox Margin="3" Name="checkbox_showTeamReport" Height="22" Grid.Row="2" Grid.ColumnSpan="2" IsChecked="False" Content="Nach Teams sortieren" VerticalContentAlignment="Center"/>-->
<!--<CheckBox Margin="3" Grid.Column="0" Grid.Row="3" Height="22" Grid.ColumnSpan="2" Content="Klienten auflisten" VerticalAlignment="Center" x:Name="chkShowCustomer" />-->
<!--<Label Content="Startdatum:" Grid.Column="0" VerticalAlignment="Center" Grid.Row="4"/>
<dxe:DateEdit MaskType="DateTimeAdvancingCaret" Grid.Column="1" Grid.Row="4" x:Name="datePickerStartDate" Width="120" HorizontalAlignment="Left" Margin="3,0,0,0" Height="22"/>
<Label Content="Enddatum:" Grid.Column="0" Grid.Row="5" VerticalAlignment="Center" />
<dxe:DateEdit MaskType="DateTimeAdvancingCaret" Grid.Column="1" Grid.Row="5" x:Name="datePickerEndDate" HorizontalAlignment="Left" Width="120" Margin="3,0,0,0" Height="22"/>-->
<!--<Label Content="Startdatum:" Grid.Column="0" VerticalAlignment="Center" Grid.Row="4"/>
<dxe:DateEdit MaskType="DateTimeAdvancingCaret" Grid.Column="1" Grid.Row="4" x:Name="datePickerStartDate" Width="120" HorizontalAlignment="Left" Margin="3,0,0,0" Height="22"/>
<Label Content="Enddatum:" Grid.Column="0" Grid.Row="5" VerticalAlignment="Center" />
<dxe:DateEdit MaskType="DateTimeAdvancingCaret" Grid.Column="1" Grid.Row="5" x:Name="datePickerEndDate" HorizontalAlignment="Left" Width="120" Margin="3,0,0,0" Height="22"/>-->
<!--<Label Grid.Row="0" Content="Intervall" Margin="15,0,0,0" Grid.Column="2" Padding="0,5,0,0" />
<StackPanel Grid.ColumnSpan="1" Grid.Row="1" Grid.Column="2" HorizontalAlignment="Left" Orientation="Vertical" Margin="15,8,0,0" Grid.RowSpan="6" VerticalAlignment="Stretch">
<RadioButton Content="Tag" Height="23" GroupName="interval" x:Name="radioButtonIntervalDay" />
<RadioButton Content="Woche" Height="23" IsChecked="True" GroupName="interval" x:Name="radioButtonIntervalWeek" Margin="0,0,0,0" />
<RadioButton Content="Monat" Height="23" GroupName="interval" x:Name="radioButtonIntervalMonth" Margin="0,0,0,0" />
<RadioButton Content="Quartal" Height="23" GroupName="interval" x:Name="radioButtonIntervalQuarter" Margin="0,0,0,0" />
<RadioButton Content="Jahr" Height="23" GroupName="interval" x:Name="radioButtonIntervalYear" Margin="0,0,0,0" />
</StackPanel>-->
<!--<Label Grid.Row="0" Content="Intervall" Margin="15,0,0,0" Grid.Column="2" Padding="0,5,0,0" />
<StackPanel Grid.ColumnSpan="1" Grid.Row="1" Grid.Column="2" HorizontalAlignment="Left" Orientation="Vertical" Margin="15,8,0,0" Grid.RowSpan="6" VerticalAlignment="Stretch">
<RadioButton Content="Tag" Height="23" GroupName="interval" x:Name="radioButtonIntervalDay" />
<RadioButton Content="Woche" Height="23" IsChecked="True" GroupName="interval" x:Name="radioButtonIntervalWeek" Margin="0,0,0,0" />
<RadioButton Content="Monat" Height="23" GroupName="interval" x:Name="radioButtonIntervalMonth" Margin="0,0,0,0" />
<RadioButton Content="Quartal" Height="23" GroupName="interval" x:Name="radioButtonIntervalQuarter" Margin="0,0,0,0" />
<RadioButton Content="Jahr" Height="23" GroupName="interval" x:Name="radioButtonIntervalYear" Margin="0,0,0,0" />
</StackPanel>-->
<Label Margin="0 2" Content="Monat" Grid.Row="3" />
<ComboBox Height="23" x:Name="combobox_month" Grid.Row="3" Grid.Column="1" Margin="3" VerticalAlignment="Top" Width="90" />
<Label Margin="0 2" Content="Monat" Grid.Row="3" Grid.Column="0" />
<ComboBox Height="23" x:Name="combobox_month" Grid.Row="3" Grid.Column="1" Margin="3" VerticalAlignment="Top" Width="90" />
<TextBlock Margin="0 7,3,0" Text=" Jahr" Grid.Row="3" Grid.Column="2" Foreground="Black"/>
<ComboBox Height="23" x:Name="combobox_year" Grid.Row="3" Grid.Column="3" VerticalAlignment="Top" Margin="3" Width="60" />
<TextBlock Margin="0 7,3,0" Text=" Jahr" Grid.Row="3" Grid.Column="2" Foreground="Black"/>
<ComboBox Height="23" x:Name="combobox_year" Grid.Row="3" Grid.Column="3" VerticalAlignment="Top" Margin="3" Width="60" />
<StackPanel x:Name="AnsichtPanel" Orientation="Horizontal" Grid.Row="4" Grid.ColumnSpan="5">
<StackPanel x:Name="AnsichtPanel" Orientation="Horizontal" Grid.Row="4" Grid.ColumnSpan="5" Grid.Column="0">
<Label Margin="0,3,3,3" Content="Ansicht: " />
<RadioButton Margin="3" GroupName="RadioAnsicht" Name="radio_tagesansicht" IsChecked="False" Content="Tag" VerticalAlignment="Center" />
<RadioButton Margin="6,3,3,3" GroupName="RadioAnsicht" Name="radio_monatsansicht" IsChecked="True" Content="Monat" VerticalAlignment="Center" />
<RadioButton Margin="6,3,3,3" GroupName="RadioAnsicht" Name="radio_jahresansicht" IsChecked="False" Content="Jahr" VerticalAlignment="Center" />
</StackPanel>
<Label Margin="0,3,3,3" Content="Ansicht: " />
<RadioButton Margin="3" GroupName="RadioAnsicht" Name="radio_tagesansicht" IsChecked="False" Content="Tag" VerticalAlignment="Center">
<CheckBox Margin="3" Name="checkbox_tagesansicht" Grid.Row="4" Grid.ColumnSpan="5" Grid.Column="0"
IsChecked="False" Content="StundenkontoTagesansicht" VerticalAlignment="Center" Visibility="Collapsed"/>
</RadioButton>
<Button Name="button_generate" Grid.Row="5" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" FontWeight="Bold" Content="Erstellen"
Click="button_generate_Click" Height="23" Margin="3" />
<RadioButton Margin="6,3,3,3" GroupName="RadioAnsicht" Name="radio_monatsansicht" IsChecked="True" Content="Monat" VerticalAlignment="Center">
</RadioButton>
<RadioButton Margin="6,3,3,3" GroupName="RadioAnsicht" Name="radio_jahresansicht" IsChecked="False" Content="Jahr" VerticalAlignment="Center">
</RadioButton>
</StackPanel>
<CheckBox Margin="3" Name="checkbox_tagesansicht" Grid.Row="4" Grid.ColumnSpan="5" IsChecked="False" Content="StundenkontoTagesansicht" VerticalAlignment="Center" Visibility="Collapsed"/>
<Button Name="button_generate" Grid.Row="5" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" FontWeight="Bold" Content="Erstellen" Click="button_generate_Click" Height="23" Margin="3" />
<dxp:DocumentPreviewControl x:Name="docPrevControl" Grid.Row="6" Grid.ColumnSpan="5" Grid.Column="0" Visibility="Collapsed" CommandBarStyle="Bars">
<dxp:DocumentPreviewControl.CommandProvider>
<dxp:DocumentCommandProvider>
<dxp:DocumentCommandProvider.Actions>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.ExportCsv}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.ExportMht}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.ExportTxt}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Open}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.DocumentMap}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Watermark}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Scale}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.PrintDirect}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.PageSetup}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Save}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Send}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Parameters}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Thumbnails}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.EditingFields}"/>
</dxp:DocumentCommandProvider.Actions>
</dxp:DocumentCommandProvider>
</dxp:DocumentPreviewControl.CommandProvider>
</dxp:DocumentPreviewControl>
<Popup Margin="10" Name="popup_employee" StaysOpen="False" Placement="MousePoint" Width="400" Grid.Row="7" Height="400" Grid.ColumnSpan="5" Closed="popup_Closed" Opened="popup_Opened">
<localSearchView:EmployeeSearchView ItemSelected="EmployeeSearchView_EmployeeSelected" x:Name="employeesearchview" />
</Popup>
<Popup Margin="10" Name="popup_team" StaysOpen="False" Placement="MousePoint" Width="400" Grid.Row="7" Grid.ColumnSpan="5" Height="400" Closed="popup_Closed" Opened="popup_Opened">
<localSearchView:TeamSearchView ItemSelected="TeamSearchView_TeamSelected" x:Name="teamsearchview" />
</Popup>
</Grid>
</GroupBox>
<dxp:DocumentPreviewControl x:Name="docPrevControl" Grid.Row="6" Grid.ColumnSpan="5" Grid.Column="0" Visibility="Collapsed" CommandBarStyle="Bars">
<dxp:DocumentPreviewControl.CommandProvider>
<dxp:DocumentCommandProvider>
<dxp:DocumentCommandProvider.Actions>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.ExportCsv}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.ExportMht}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.ExportTxt}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Open}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.DocumentMap}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Watermark}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Scale}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.PrintDirect}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.PageSetup}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Save}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Send}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Parameters}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.Thumbnails}"/>
<dxb:RemoveAction ElementName="{x:Static dxpbars:DefaultPreviewBarItemNames.EditingFields}"/>
</dxp:DocumentCommandProvider.Actions>
</dxp:DocumentCommandProvider>
</dxp:DocumentPreviewControl.CommandProvider>
</dxp:DocumentPreviewControl>
<Popup Margin="10" Name="popup_employee" StaysOpen="False" Placement="MousePoint" Width="400" Grid.Row="7"
Height="400" Grid.ColumnSpan="5" Grid.Column="0" Closed="popup_Closed" Opened="popup_Opened">
<localSearchView:EmployeeSearchView ItemSelected="EmployeeSearchView_EmployeeSelected" x:Name="employeesearchview" />
</Popup>
<Popup Margin="10" Name="popup_team" StaysOpen="False" Placement="MousePoint" Width="400" Grid.Row="7" Grid.ColumnSpan="5"
Grid.Column="0" Height="400" Closed="popup_Closed" Opened="popup_Opened">
<localSearchView:TeamSearchView ItemSelected="TeamSearchView_TeamSelected" x:Name="teamsearchview" />
</Popup>
</Grid>
</GroupBox>
</localView:BeWoView>

View File

@@ -5,36 +5,28 @@ using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using BeWo.Controls;
using BeWo.Core;
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;
using BS.Shared.Translation;
using DevExpress.Xpf.Core;
using DevExpress.Xpf.Printing;
using DevExpress.XtraReports.UI;
namespace BeWo.View.Report.Employee
{
/// <summary>
/// Interaction logic for EmployeeHourReportView.xaml
/// </summary>
public partial class EmployeeHourReportView : BeWoView
public partial class EmployeeHourReportView
{
private CompactEmployeeDC _SelectedEmployee;
private CompactTeamDC _SelectedTeam;
public CompactEmployeeDC Employee { get { return _SelectedEmployee; } set { _SelectedEmployee = value; } }
public CompactEmployeeDC Employee
{
get => _SelectedEmployee;
set { _SelectedEmployee = value; }
}
public EmployeeHourReportView()
{
@@ -48,8 +40,7 @@ namespace BeWo.View.Report.Employee
checkbox_all.IsEnabled = false;
checkbox_all.IsChecked = false;
popupedit_employee.Text = String.Format("{0}, {1}", BeWoApp.LoggedOnEmployee.LastName,
BeWoApp.LoggedOnEmployee.FirstName);
popupedit_employee.Text = $"{BeWoApp.LoggedOnEmployee.LastName}, {BeWoApp.LoggedOnEmployee.FirstName}";
}
}
@@ -68,8 +59,6 @@ namespace BeWo.View.Report.Employee
}
ChangeReportType();
ThemeManager.SetTheme(BeWoApp.CurrentBeWo.MainWindow, Theme.Office2010Black);
//ThemeManager.SetTheme(docPrevControl, Theme.Office2010Black);
@@ -83,8 +72,10 @@ namespace BeWo.View.Report.Employee
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
if (popupedit_employee == null)
if (popupedit_employee is null)
{
return;
}
popupedit_employee.Text = string.Empty;
_SelectedEmployee = null;
@@ -125,37 +116,37 @@ namespace BeWo.View.Report.Employee
//datePickerEndDate.DateTime = start.AddMonths(1).AddDays(-1);
InitDateCombos();
}
private void InitDateCombos()
{
this.combobox_month.ItemsSource = DateTimeFormatInfo.CurrentInfo.MonthNames.Where(s => !string.IsNullOrEmpty(s));
int monthIdx = DateTime.Now.Month - 1;
var monthIdx = DateTime.Now.Month - 1;
//if (DateTime.Now.Day < 15)
//{
monthIdx--;
if (monthIdx < 0)
{
monthIdx = 11;
}
//}
this.combobox_month.SelectedIndex = monthIdx;
combobox_month.SelectedIndex = monthIdx;
var years = new List<int>();
for (int i = -1; i <= 10; i++)
for (var i = -1; i <= 10; i++)
{
years.Add(DateTime.Now.Year - i);
}
this.combobox_year.ItemsSource = years;
combobox_year.ItemsSource = years;
if (monthIdx == 11)
{
this.combobox_year.SelectedItem = DateTime.Now.Year - 1;
combobox_year.SelectedItem = DateTime.Now.Year - 1;
}
else
this.combobox_year.SelectedItem = DateTime.Now.Year;
{
combobox_year.SelectedItem = DateTime.Now.Year;
}
}
private void button_generate_Click(object sender, RoutedEventArgs e)
{
@@ -165,7 +156,7 @@ namespace BeWo.View.Report.Employee
var auswertungNachTeam = radioTeamReport.IsChecked.Value;
var auswertungNachMa = !auswertungNachTeam;
var url = string.Format("{0}/ReportView.aspx?type={1}", BeWoApp.SiteOfOrigin, Utils.EnumName(ReportTypes.EmployeeHourReport));
var url = $"{BeWoApp.SiteOfOrigin}/ReportView.aspx?type={Utils.EnumName(ReportTypes.EmployeeHourReport)}";
if (auswertungNachMa)
{
@@ -210,11 +201,13 @@ namespace BeWo.View.Report.Employee
return;
}
StringBuilder sb = new StringBuilder();
var sb = new StringBuilder();
sb.Append("&toid=");
if (_SelectedTeam != null)
{
teamOid = _SelectedTeam.TeamOid;
}
if (teamOid > 0 && !checkbox_all_teams.IsChecked.Value)
{
@@ -226,13 +219,14 @@ namespace BeWo.View.Report.Employee
var ol = teamsearchview.ObjectList;
if (ol != null)
{
bool first = true;
var first = true;
foreach (var t in ol)
{
if (!first)
{
sb.Append(",");
}
sb.Append(t.TeamOid);
first = false;
}
@@ -294,12 +288,8 @@ namespace BeWo.View.Report.Employee
{
if (radioTeamReport != null && popupedit_team != null)
{
bool isEmployee = true;
var isEmployee = !(radioTeamReport.IsChecked != null && radioTeamReport.IsChecked.Value);
if (radioTeamReport.IsChecked != null && radioTeamReport.IsChecked.Value)
{
isEmployee = false;
}
checkbox_all.Visibility = isEmployee ? Visibility.Visible : Visibility.Hidden;
popupedit_employee.Visibility = isEmployee ? Visibility.Visible : Visibility.Hidden;
@@ -316,7 +306,6 @@ namespace BeWo.View.Report.Employee
popupedit_team.Visibility = checkbox_all_teams.IsChecked.Value ? Visibility.Hidden : Visibility.Visible;
}
if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.Mitarbeiterstundenkonto_ViewAll))
{
if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.Mitarbeiterstundenkonto_ViewTeams))
@@ -346,7 +335,7 @@ namespace BeWo.View.Report.Employee
var ol = teamsearchview.ObjectList;
if (ol != null)
{
List<CompactTeamDC> teams = new List<CompactTeamDC>();
var teams = new List<CompactTeamDC>();
var emp = BeWoApp.LoggedOnUser.Employee;
if (emp.LeadingTeamOids != null && emp.LeadingTeamOids.Count > 0)
{

View File

@@ -11,6 +11,7 @@ using BeWoPlanerMobil.Util;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using DevExpress.XtraReports.UI;
namespace BeWoPlanerMobil.Controllers
@@ -55,22 +56,50 @@ namespace BeWoPlanerMobil.Controllers
Model.SelectedYear = Model.SelectedYear ?? first.Year;
Model.SelectedMonth = Model.SelectedMonth ?? first.Month;
Model.AllEmployees = EmployeeService.GetActiveCompactEmployeesForEmployee(MobileSessionFacade.LoggedInCompactEmployee.EmployeeOid);
Model.AllTeams = EmployeeService.GetAllActiveCompactTeamsForEmployee(MobileSessionFacade.LoggedInEmployee.EmployeeOid);
Model.AllEmployees = AbstractModel.HasRightMitarbeiterstundenkontoViewAll
? EmployeeService.GetActiveCompactEmployeesForEmployee(MobileSessionFacade.LoggedInCompactEmployee.EmployeeOid)
: new List<CompactEmployeeDC> { MobileSessionFacade.LoggedInCompactEmployee };
Model.ReportTypes = new List<SelectListItem>
// Alle Teams darf man nur sehen, wenn man das Recht "HasRightMitarbeiterstundenkontoViewAll" hat.
// Hat man weder das Recht "HasRightMitarbeiterstundenkontoViewAll" noch "HasRightMitarbeiterstundenkontoViewTeams", sieht man die Teams gar nicht.
// Hat man das Recht "HasRightMitarbeiterstundenkontoViewTeams", aber nicht das Recht "HasRightMitarbeiterstundenkontoViewAll", sieht man nur die Teams, deren Teamleiter man ist.
var test = EmployeeService.FindLeadingCompactTeamsOfEmployee(MobileSessionFacade.LoggedInCompactEmployee.EmployeeOid);
Model.AllTeams = AbstractModel.HasRightMitarbeiterstundenkontoViewAll
? EmployeeService.GetAllActiveCompactTeamsForEmployee(MobileSessionFacade.LoggedInEmployee.EmployeeOid)
: EmployeeService.FindLeadingCompactTeamsOfEmployee(MobileSessionFacade.LoggedInCompactEmployee.EmployeeOid);
if(!AbstractModel.HasRightMitarbeiterstundenkontoViewAll)
{
new SelectListItem
Model.SelectedEmployeeOid = MobileSessionFacade.LoggedInCompactEmployee.EmployeeOid;
}
// ToDo: Hat man das Recht "Nur Team" nicht, kann man nur die Teams sehen, bei denen man auch Leiter ist.
if(!AbstractModel.HasRightMitarbeiterstundenkontoViewTeams)
{
}
Model.ReportTypes = new List<SelectListItem>();
if(AbstractModel.HasRightToViewReports)
{
Model.ReportTypes.Add(new SelectListItem
{
Text = "Berichte",
Value = "0"
},
new SelectListItem
});
}
if(AbstractModel.HasRightToViewMitarbeiterstundenkonto)
{
Model.ReportTypes.Add(new SelectListItem
{
Text = "Mitarbeiterstundenkonto",
Value = "1"
}
};
});
}
Model.SelectedReportType = ReportType.Berichte;
@@ -86,12 +115,6 @@ namespace BeWoPlanerMobil.Controllers
return PartialView("DocumentWebViewerPartial", Model);
}
[Authorize]
public ActionResult ExportDocumentViewer()
{
throw new NotImplementedException("Service dafür implementieren!");
}
[Authorize]
public ActionResult LoadCustomReport(long? reportOid)
{
@@ -207,7 +230,13 @@ namespace BeWoPlanerMobil.Controllers
var year = int.Parse(splitParameters[1]);
var isEmployee = bool.Parse(splitParameters[2]);
var all = bool.Parse(splitParameters[3]);
var oid = long.Parse(splitParameters[4]);
long? oid = null;
if(long.TryParse(splitParameters[4], out var oOid))
{
oid = oOid;
}
var ansicht = int.Parse(splitParameters[5]);
var siteOfOrigin = GetSiteOfOrigin();
@@ -216,7 +245,7 @@ namespace BeWoPlanerMobil.Controllers
if(isEmployee)
{
long? employeeOid = oid;
var employeeOid = oid;
if(all || !AbstractModel.HasRightMitarbeiterstundenkontoViewAll)
{
@@ -240,9 +269,9 @@ namespace BeWoPlanerMobil.Controllers
}
else
{
long? teamOid = oid;
var teamOid = oid;
if(all || !AbstractModel.HasRightMitarbeiterstundenkontoViewAll)
if(all || (!AbstractModel.HasRightMitarbeiterstundenkontoViewAll && !AbstractModel.HasRightMitarbeiterstundenkontoViewTeams))
{
teamOid = null;
}

View File

@@ -115,6 +115,11 @@ namespace BeWoPlanerMobil.Models
return MobileSessionFacade.CheckForUserRight(userRightType);
}
public static bool CheckForAtLeastOneRight(UserRightType[] rights)
{
return rights.Any(MobileSessionFacade.CheckForUserRight);
}
public static bool HasRightToInsertEmployeeAppointments => CheckRight(UserRightType.KalenderMitarbeitertermineAnlegen) ||
CheckRight(UserRightType.CreateAll);
@@ -147,5 +152,15 @@ namespace BeWoPlanerMobil.Models
public static bool HasRightMitarbeiterstundenkontoViewAll => CheckRight(UserRightType.Mitarbeiterstundenkonto_ViewAll);
public static bool HasRightMitarbeiterstundenkontoViewTeams => CheckRight(UserRightType.Mitarbeiterstundenkonto_ViewTeams);
public static bool HasRightMitarbeiterstundenkontoViewSelf => CheckRight(UserRightType.Mitarbeiterstundenkonto_ViewSelf);
public static bool HasRightToViewReports => CheckRight(UserRightType.QueryView_View);
public static bool HasRightToViewMitarbeiterstundenkonto
{
get
{
return MobileSessionFacade.Tenant != "3010479871" && CheckForAtLeastOneRight(new[] { UserRightType.Mitarbeiterstundenkonto_ViewAll, UserRightType.Mitarbeiterstundenkonto_ViewTeams, UserRightType.Mitarbeiterstundenkonto_ViewSelf });
}
}
}
}

View File

@@ -7,14 +7,4 @@
settings.Name = "webDocumentViewer1";
settings.SettingsMobile.ReaderMode = true;
}).Bind(Model.Report).GetHtml()
@*@Html.DevExpress().DocumentViewer(settings =>{
// The following settings are required for a Document Viewer.
settings.Name = "documentViewer1";
settings.Report = Model.Report;
// Callback and export route values specify corresponding controllers and their actions.
// These settings are also required.
settings.CallbackRouteValues = new { Controller="ReportViewer", Action="DocumentWebViewerPartial" };
settings.ExportRouteValues = new { Controller="ReportViewer", Action="ExportDocumentWebViewer" };
}).GetHtml()*@
}).Bind(Model.Report).GetHtml()

View File

@@ -63,7 +63,7 @@ Mitarbeiterstundenkonto
<div class="container-fluid my-3">
<div class="row">
<div class="col-sm-12 col-md-4 col-lg-3 col-xl-2">
<div class="col-sm-12 col-md-4 col-lg-4 col-xl-3">
<div class="row">
<div class="col">
@Html.DropDownListFor(model => model.SelectedReportType, Model.ReportTypes, new { @class = "custom-select", onchange = "updateForm()", id = "msk-report-type-select" })
@@ -76,7 +76,7 @@ Mitarbeiterstundenkonto
</div>
</div>
</div>
<div class="col-sm-12 col-md-8 col-lg-9 col-xl-10" id="msk-report-container">
<div class="col-sm-12 col-md-8 col-lg-8 col-xl-9" id="msk-report-container">
@if(!(Model.Report is null))
{
@Html.Partial("DocumentWebViewerPartial", Model)

View File

@@ -73,7 +73,10 @@
}
}
var isEmployeeFormSelected = $("#msk-employee-form").css("display") === "block";
var teamForm = $("#msk-team-form");
var employeeForm = $("#msk-employee-form");
var isEmployeeFormSelected = employeeForm.css("display") === "block" || employeeForm.css("display") === "none" && (teamForm.css("display") === "none" || teamForm.length === 0);
var parameterString = month + ";" + year + ";" + isEmployeeFormSelected + ";";
@@ -114,7 +117,7 @@
@Html.DropDownListFor(model => model.SelectedCustomReport, Model.CustomReports, new { @class = "custom-select", id = "msk-customReportSelect", onchange = "loadCustomReport()" })
}
@if(Model.SelectedReportType == ReportType.Mitarbeiterstundenkonto)
@if(Model.SelectedReportType == ReportType.Mitarbeiterstundenkonto && AbstractModel.HasRightToViewMitarbeiterstundenkonto)
{
<div id="report-form-container">
<div class="form-row">
@@ -124,22 +127,26 @@
</div>
</div>
</div>
<div class="form-row">
<div class="col">
<div class="form-check">
<input class="form-check-input" type="radio" name="filterRadio" id="msk-filterForEmployeesRadio" onchange="reportFilterOnChange()" checked/>
<label for="msk-filterForEmployeesRadio">Nach Mitarbeiter filtern</label>
@if(AbstractModel.HasRightMitarbeiterstundenkontoViewAll || AbstractModel.HasRightMitarbeiterstundenkontoViewTeams)
{
<div class="form-row">
<div class="col">
<div class="form-check">
<input class="form-check-input" type="radio" name="filterRadio" id="msk-filterForEmployeesRadio" onchange="reportFilterOnChange()" checked/>
<label for="msk-filterForEmployeesRadio">Nach Mitarbeiter filtern</label>
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col">
<div class="form-check">
<input class="form-check-input" type="radio" name="filterRadio" id="msk-filterForTeamsRadio" onchange="reportFilterOnChange()"/>
<label for="msk-filterForTeamsRadio">Nach Teams filtern</label>
<div class="form-row">
<div class="col">
<div class="form-check">
<input class="form-check-input" type="radio" name="filterRadio" id="msk-filterForTeamsRadio" onchange="reportFilterOnChange()"/>
<label for="msk-filterForTeamsRadio">Nach Teams filtern</label>
</div>
</div>
</div>
</div>
}
<div id="msk-employee-form">
@if(AbstractModel.HasRightMitarbeiterstundenkontoViewAll)
{
@@ -158,20 +165,17 @@
</div>
</div>
</div>
@if(AbstractModel.HasRightMitarbeiterstundenkontoViewTeams)
@if(AbstractModel.HasRightMitarbeiterstundenkontoViewAll || AbstractModel.HasRightMitarbeiterstundenkontoViewTeams)
{
<div id="msk-team-form">
@if(AbstractModel.HasRightMitarbeiterstundenkontoViewAll)
{
<div class="form-row">
<div class="col">
<div class="form-group form-check">
<input type="checkbox" class="form-check-input" id="msk-all-teams-cb" />
<label class="form-check-label" for="msk-all-teams-cb" onclick="allTeamsCbOnClick()">Alle Teams</label>
</div>
<div class="form-row">
<div class="col">
<div class="form-group form-check">
<input type="checkbox" class="form-check-input" id="msk-all-teams-cb" />
<label class="form-check-label" for="msk-all-teams-cb" onclick="allTeamsCbOnClick()">Alle Teams</label>
</div>
</div>
}
</div>
<div class="form-row" id="msk-team-list">
<div class="col">

View File

@@ -364,15 +364,13 @@
}
}
@if(Html.IsInDebugMode())
@if(AbstractModel.HasRightToViewReports)
{
using(Html.BeginForm("RedirectToReportViewer", "Main", FormMethod.Post))
{
<li class="nav-item bg-bewo-dev">
<li class="nav-item">
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
<i class="fas fa-chart-bar text-bewo-report">
</i>
<i class="fas fa-chart-bar text-bewo-report"></i>
Auswertungen
</button>
</li>

View File

@@ -506,5 +506,13 @@ namespace BeWo.Service.ServiceContracts
[FaultContract(typeof(BeWoFault))]
[OperationContract]
List<EmployeeDC> GetAbsenceOverview(AbsenceOverviewFilterDC filter);
[FaultContract(typeof(BeWoFault))]
[OperationContract]
List<CompactTeamDC> LoadCompactTeamsByOid(List<long> teamOids);
[FaultContract(typeof(BeWoFault))]
[OperationContract]
List<CompactTeamDC> FindLeadingCompactTeamsOfEmployee(long employeeOid);
}
}

View File

@@ -2365,5 +2365,29 @@ namespace BeWo.Service.ServiceImplementations
throw Utils.CreateBeWoFaultException(ex);
}
}
public List<CompactTeamDC> LoadCompactTeamsByOid(List<long> teamOids)
{
try
{
return teamOids is null ? new List<CompactTeamDC>() : MapperFactory.CompactTeamDC_Team.MapToNewDCs(DAOFactory.GenericDAO.GetActiveByIDs<Team>(teamOids));
}
catch(Exception ex)
{
throw Utils.CreateBeWoFaultException(ex);
}
}
public List<CompactTeamDC> FindLeadingCompactTeamsOfEmployee(long employeeOid)
{
try
{
return MapperFactory.CompactTeamDC_Team.MapToNewDCs(DAOFactory.SearchDAO.FindLeadingTeams(employeeOid));
}
catch(Exception ex)
{
throw Utils.CreateBeWoFaultException(ex);
}
}
}
}