init III
This commit is contained in:
161
Perl OTRS/Kernel/Output/HTML/ToolBar/IncompleteWorkingDays.pm
Normal file
161
Perl OTRS/Kernel/Output/HTML/ToolBar/IncompleteWorkingDays.pm
Normal file
@@ -0,0 +1,161 @@
|
||||
# --
|
||||
# Copyright (C) 2001-2019 OTRS AG, https://otrs.com/
|
||||
# --
|
||||
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
|
||||
# the enclosed file COPYING for license information (GPL). If you
|
||||
# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt.
|
||||
# --
|
||||
|
||||
package Kernel::Output::HTML::ToolBar::IncompleteWorkingDays;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Kernel::Language qw(Translatable);
|
||||
|
||||
our @ObjectDependencies = (
|
||||
'Kernel::Config',
|
||||
'Kernel::Output::HTML::Layout',
|
||||
'Kernel::System::Group',
|
||||
'Kernel::System::TimeAccounting',
|
||||
);
|
||||
|
||||
sub new {
|
||||
my ( $Type, %Param ) = @_;
|
||||
|
||||
my $Self = {};
|
||||
bless( $Self, $Type );
|
||||
|
||||
$Self->{UserID} = $Param{UserID} || die "Got no UserID!";
|
||||
|
||||
return $Self;
|
||||
}
|
||||
|
||||
sub Run {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# Define action and get its frontend module registration.
|
||||
my $Action = 'AgentTimeAccountingEdit';
|
||||
my $Config = $Kernel::OM->Get('Kernel::Config')->Get('Frontend::Module')->{$Action};
|
||||
|
||||
# Do not show icon if frontend module is not registered.
|
||||
return if !$Config;
|
||||
|
||||
# Get group names from config.
|
||||
my @GroupNames = @{ $Config->{Group} || [] };
|
||||
|
||||
# If access is restricted, allow access only if user has appropriate permissions in configured group(s).
|
||||
if (@GroupNames) {
|
||||
|
||||
my $GroupObject = $Kernel::OM->Get('Kernel::System::Group');
|
||||
|
||||
# Get user groups, where the user has the appropriate permissions.
|
||||
my %GroupList = $GroupObject->GroupMemberList(
|
||||
UserID => $Self->{UserID},
|
||||
Type => 'rw',
|
||||
Result => 'HASH',
|
||||
);
|
||||
|
||||
my $Permission = 0;
|
||||
|
||||
GROUP:
|
||||
for my $GroupName (@GroupNames) {
|
||||
next GROUP if !$GroupName;
|
||||
|
||||
# Get the group ID.
|
||||
my $GroupID = $GroupObject->GroupLookup(
|
||||
Group => $GroupName,
|
||||
);
|
||||
next GROUP if !$GroupID;
|
||||
|
||||
# Stop checking if membership in at least one group is found.
|
||||
if ( $GroupList{$GroupID} ) {
|
||||
$Permission = 1;
|
||||
last GROUP;
|
||||
}
|
||||
}
|
||||
|
||||
# Deny access if the agent doesn't have the appropriate permissions.
|
||||
return if !$Permission;
|
||||
}
|
||||
|
||||
my $DateTimeObject = $Kernel::OM->Create('Kernel::System::DateTime');
|
||||
my $DateTimeSettings = $DateTimeObject->Get();
|
||||
|
||||
my $TimeAccountingObject = $Kernel::OM->Get('Kernel::System::TimeAccounting');
|
||||
|
||||
my %UserCurrentPeriod = $TimeAccountingObject->UserCurrentPeriodGet(
|
||||
Year => $DateTimeSettings->{Year},
|
||||
Month => $DateTimeSettings->{Month},
|
||||
Day => $DateTimeSettings->{Day},
|
||||
);
|
||||
|
||||
# Deny access, if user has no valid period.
|
||||
return if !$UserCurrentPeriod{ $Self->{UserID} };
|
||||
|
||||
# Get the number of incomplete working days.
|
||||
my $Count = 0;
|
||||
my %IncompleteWorkingDays = $TimeAccountingObject->WorkingUnitsCompletnessCheck(
|
||||
UserID => $Self->{UserID},
|
||||
);
|
||||
|
||||
YEARID:
|
||||
for my $YearID ( sort keys %{ $IncompleteWorkingDays{Incomplete} } ) {
|
||||
|
||||
next YEARID if !$YearID;
|
||||
next YEARID if !$IncompleteWorkingDays{Incomplete}{$YearID};
|
||||
next YEARID if ref $IncompleteWorkingDays{Incomplete}{$YearID} ne 'HASH';
|
||||
|
||||
# Extract year.
|
||||
my %Year = %{ $IncompleteWorkingDays{Incomplete}{$YearID} };
|
||||
|
||||
MONTH:
|
||||
for my $MonthID ( sort keys %Year ) {
|
||||
|
||||
next MONTH if !$MonthID;
|
||||
next MONTH if !$Year{$MonthID};
|
||||
next MONTH if ref $Year{$MonthID} ne 'HASH';
|
||||
|
||||
# extract month
|
||||
my %Month = %{ $Year{$MonthID} };
|
||||
|
||||
$Count += scalar keys %Month;
|
||||
|
||||
# Remove current day because it makes no sense to show the current day as incomplete.
|
||||
if (
|
||||
$DateTimeSettings->{Year} eq $YearID
|
||||
&& $MonthID eq sprintf( '%02d', $DateTimeSettings->{Month} )
|
||||
&& defined $Month{ sprintf( '%02d', $DateTimeSettings->{Day} ) }
|
||||
)
|
||||
{
|
||||
$Count--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
||||
|
||||
# Get toolbar object parameters.
|
||||
my $Class = $Param{Config}->{CssClass};
|
||||
my $Text = Translatable('Incomplete working days');
|
||||
my $URL = $LayoutObject->{Baselink};
|
||||
my $Icon = $Param{Config}->{Icon};
|
||||
|
||||
return () if !$Count;
|
||||
|
||||
my %Return = (
|
||||
1000810 => {
|
||||
Block => 'ToolBarItem',
|
||||
Description => $Text,
|
||||
Count => $Count,
|
||||
Class => $Class,
|
||||
Icon => $Icon,
|
||||
Link => $URL . 'Action=' . $Action,
|
||||
AccessKey => '',
|
||||
},
|
||||
);
|
||||
|
||||
return %Return;
|
||||
}
|
||||
|
||||
1;
|
||||
Reference in New Issue
Block a user