init III
This commit is contained in:
223
Perl OTRS/Kernel/Output/HTML/Dashboard/TicketStatsGeneric.pm
Normal file
223
Perl OTRS/Kernel/Output/HTML/Dashboard/TicketStatsGeneric.pm
Normal file
@@ -0,0 +1,223 @@
|
||||
# --
|
||||
# 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::Dashboard::TicketStatsGeneric;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Kernel::System::DateTime qw(:all);
|
||||
|
||||
our $ObjectManagerDisabled = 1;
|
||||
|
||||
sub new {
|
||||
my ( $Type, %Param ) = @_;
|
||||
|
||||
# allocate new hash for object
|
||||
my $Self = {%Param};
|
||||
bless( $Self, $Type );
|
||||
|
||||
# get needed parameters
|
||||
for my $Needed (qw(Config Name UserID)) {
|
||||
die "Got no $Needed!" if !$Self->{$Needed};
|
||||
}
|
||||
|
||||
return $Self;
|
||||
}
|
||||
|
||||
sub Preferences {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
sub Config {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
return (
|
||||
%{ $Self->{Config} },
|
||||
|
||||
# Don't cache this globally as it contains JS that is not inside of the HTML.
|
||||
CacheTTL => undef,
|
||||
CacheKey => undef,
|
||||
);
|
||||
}
|
||||
|
||||
sub Run {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
# get layout object
|
||||
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
||||
|
||||
my $Key = $LayoutObject->{UserLanguage} . '-' . $Self->{Name};
|
||||
my $CacheKey = 'TicketStats' . '-' . $Self->{UserID} . '-' . $Key;
|
||||
|
||||
my $Cache = $Kernel::OM->Get('Kernel::System::Cache')->Get(
|
||||
Type => 'Dashboard',
|
||||
Key => $CacheKey,
|
||||
);
|
||||
|
||||
if ( ref $Cache ) {
|
||||
|
||||
# send data to JS
|
||||
$LayoutObject->AddJSData(
|
||||
Key => 'DashboardTicketStats',
|
||||
Value => $Cache,
|
||||
);
|
||||
|
||||
return $LayoutObject->Output(
|
||||
TemplateFile => 'AgentDashboardTicketStats',
|
||||
Data => $Cache,
|
||||
AJAX => $Param{AJAX},
|
||||
);
|
||||
}
|
||||
|
||||
my %Axis = (
|
||||
'7Day' => {
|
||||
0 => 'Sun',
|
||||
1 => 'Mon',
|
||||
2 => 'Tue',
|
||||
3 => 'Wed',
|
||||
4 => 'Thu',
|
||||
5 => 'Fri',
|
||||
6 => 'Sat',
|
||||
},
|
||||
);
|
||||
|
||||
my $ClosedText = $LayoutObject->{LanguageObject}->Translate('Closed');
|
||||
my $CreatedText = $LayoutObject->{LanguageObject}->Translate('Created');
|
||||
my $StateText = $LayoutObject->{LanguageObject}->Translate('State');
|
||||
my @TicketsCreated = ();
|
||||
my @TicketsClosed = ();
|
||||
my @TicketWeekdays = ();
|
||||
my $Max = 0;
|
||||
|
||||
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
|
||||
|
||||
my $TimeZone = $Self->{UserTimeZone} || OTRSTimeZoneGet();
|
||||
|
||||
for my $DaysBack ( 0 .. 6 ) {
|
||||
|
||||
# cache results for 30 min. for todays stats
|
||||
my $CacheTTL = 60 * 30;
|
||||
|
||||
my $DateTimeObject = $Kernel::OM->Create(
|
||||
'Kernel::System::DateTime',
|
||||
ObjectParams => {
|
||||
TimeZone => $TimeZone,
|
||||
}
|
||||
);
|
||||
if ($DaysBack) {
|
||||
$DateTimeObject->Subtract( Days => $DaysBack );
|
||||
|
||||
# for past 6 days cache results for 8 days (should not change)
|
||||
$CacheTTL = 60 * 60 * 24 * 8;
|
||||
}
|
||||
$DateTimeObject->ToOTRSTimeZone();
|
||||
|
||||
my $DateTimeValues = $DateTimeObject->Get();
|
||||
my $WeekDay = $DateTimeValues->{DayOfWeek} == 7 ? 0 : $DateTimeValues->{DayOfWeek};
|
||||
|
||||
unshift(
|
||||
@TicketWeekdays,
|
||||
$LayoutObject->{LanguageObject}->Translate( $Axis{'7Day'}->{$WeekDay} )
|
||||
);
|
||||
|
||||
my $TimeStart = $DateTimeObject->Format( Format => '%Y-%m-%d 00:00:00' );
|
||||
my $TimeStop = $DateTimeObject->Format( Format => '%Y-%m-%d 23:59:59' );
|
||||
|
||||
my $CountCreated = $TicketObject->TicketSearch(
|
||||
|
||||
# cache search result
|
||||
CacheTTL => $CacheTTL,
|
||||
|
||||
# tickets with create time after ... (ticket newer than this date) (optional)
|
||||
TicketCreateTimeNewerDate => $TimeStart,
|
||||
|
||||
# tickets with created time before ... (ticket older than this date) (optional)
|
||||
TicketCreateTimeOlderDate => $TimeStop,
|
||||
|
||||
CustomerID => $Param{Data}->{UserCustomerID},
|
||||
Result => 'COUNT',
|
||||
|
||||
# search with user permissions
|
||||
Permission => $Self->{Config}->{Permission} || 'ro',
|
||||
UserID => $Self->{UserID},
|
||||
) || 0;
|
||||
if ( $CountCreated && $CountCreated > $Max ) {
|
||||
$Max = $CountCreated;
|
||||
}
|
||||
push @TicketsCreated, $CountCreated;
|
||||
|
||||
my $CountClosed = $TicketObject->TicketSearch(
|
||||
|
||||
# cache search result
|
||||
CacheTTL => $CacheTTL,
|
||||
|
||||
# tickets with create time after ... (ticket newer than this date) (optional)
|
||||
TicketCloseTimeNewerDate => $TimeStart,
|
||||
|
||||
# tickets with created time before ... (ticket older than this date) (optional)
|
||||
TicketCloseTimeOlderDate => $TimeStop,
|
||||
|
||||
CustomerID => $Param{Data}->{UserCustomerID},
|
||||
Result => 'COUNT',
|
||||
|
||||
# search with user permissions
|
||||
Permission => $Self->{Config}->{Permission} || 'ro',
|
||||
UserID => $Self->{UserID},
|
||||
) || 0;
|
||||
if ( $CountClosed && $CountClosed > $Max ) {
|
||||
$Max = $CountClosed;
|
||||
}
|
||||
push @TicketsClosed, $CountClosed;
|
||||
}
|
||||
|
||||
unshift(
|
||||
@TicketWeekdays,
|
||||
$StateText
|
||||
);
|
||||
|
||||
my @ChartData = (
|
||||
$LayoutObject->{LanguageObject}->Translate('7 Day Stats'),
|
||||
\@TicketWeekdays,
|
||||
[ $CreatedText, reverse @TicketsCreated ],
|
||||
[ $ClosedText, reverse @TicketsClosed ],
|
||||
);
|
||||
|
||||
my %Data = (
|
||||
%{ $Self->{Config} },
|
||||
Key => int rand 99999,
|
||||
ChartData => \@ChartData,
|
||||
);
|
||||
|
||||
if ( $Self->{Config}->{CacheTTLLocal} ) {
|
||||
$Kernel::OM->Get('Kernel::System::Cache')->Set(
|
||||
Type => 'Dashboard',
|
||||
Key => $CacheKey,
|
||||
Value => \%Data,
|
||||
TTL => $Self->{Config}->{CacheTTLLocal} * 60,
|
||||
);
|
||||
}
|
||||
|
||||
# send data to JS
|
||||
$LayoutObject->AddJSData(
|
||||
Key => 'DashboardTicketStats',
|
||||
Value => \%Data
|
||||
);
|
||||
|
||||
my $Content = $LayoutObject->Output(
|
||||
TemplateFile => 'AgentDashboardTicketStats',
|
||||
Data => \%Data,
|
||||
AJAX => $Param{AJAX},
|
||||
);
|
||||
|
||||
return $Content;
|
||||
}
|
||||
|
||||
1;
|
||||
Reference in New Issue
Block a user