Files
scripts/Perl OTRS/Kernel/Output/HTML/Notification/AgentTicketEscalation.pm
2024-10-14 00:08:40 +02:00

210 lines
7.0 KiB
Perl

# --
# 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::Notification::AgentTicketEscalation;
use parent 'Kernel::Output::HTML::Base';
use strict;
use warnings;
use Kernel::Language qw(Translatable);
our @ObjectDependencies = (
'Kernel::Output::HTML::Layout',
'Kernel::System::Cache',
'Kernel::System::Ticket',
);
sub Run {
my ( $Self, %Param ) = @_;
# get layout object
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
# only show the escalations on ticket overviews
return ''
if $LayoutObject->{Action}
!~ /^AgentTicket(Queue|Service|(Status|Locked|Watch|Responsible)View)/;
# get cache object
my $CacheObject = $Kernel::OM->Get('Kernel::System::Cache');
# check result cache
my $CacheTime = $Param{Config}->{CacheTime} || 40;
if ($CacheTime) {
my $Output = $CacheObject->Get(
Type => 'TicketEscalation',
Key => 'EscalationResult::' . $Self->{UserID} . '::' . $LayoutObject->{UserLanguage},
);
return $Output if defined $Output;
}
# get ticket object
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
# get all overtime tickets
my $ShownMax = $Param{Config}->{ShownMax} || 25;
my $EscalationInMinutes = $Param{Config}->{EscalationInMinutes} || 120;
my @TicketIDs = $TicketObject->TicketSearch(
Result => 'ARRAY',
Limit => $ShownMax,
TicketEscalationTimeOlderMinutes => -$EscalationInMinutes,
Permission => 'rw',
UserID => $Self->{UserID},
);
# get escalations
my $ResponseTime = '';
my $UpdateTime = '';
my $SolutionTime = '';
my $Comment = '';
my $Count = 0;
for my $TicketID (@TicketIDs) {
my %Ticket = $TicketObject->TicketGet(
TicketID => $TicketID,
DynamicFields => 0,
);
# check response time
if ( defined $Ticket{FirstResponseTime} ) {
$Ticket{FirstResponseTimeHuman} = $LayoutObject->CustomerAgeInHours(
Age => $Ticket{FirstResponseTime},
Space => ' ',
);
if ( $Ticket{FirstResponseTimeEscalation} ) {
$LayoutObject->Block(
Name => 'TicketEscalationFirstResponseTimeOver',
Data => \%Ticket,
);
my $Data = $LayoutObject->Output(
TemplateFile => 'AgentTicketEscalation',
Data => \%Param,
);
$ResponseTime .= $LayoutObject->Notify(
Priority => 'Error',
Data => $Data,
);
$Count++;
}
elsif ( $Ticket{FirstResponseTimeNotification} ) {
$LayoutObject->Block(
Name => 'TicketEscalationFirstResponseTimeWillBeOver',
Data => \%Ticket,
);
my $Data = $LayoutObject->Output(
TemplateFile => 'AgentTicketEscalation',
Data => \%Param,
);
$ResponseTime .= $LayoutObject->Notify(
Priority => 'Notice',
Data => $Data,
);
$Count++;
}
}
# check update time
if ( defined $Ticket{UpdateTime} ) {
$Ticket{UpdateTimeHuman} = $LayoutObject->CustomerAgeInHours(
Age => $Ticket{UpdateTime},
Space => ' ',
);
if ( $Ticket{UpdateTimeEscalation} ) {
$LayoutObject->Block(
Name => 'TicketEscalationUpdateTimeOver',
Data => \%Ticket,
);
my $Data = $LayoutObject->Output(
TemplateFile => 'AgentTicketEscalation',
Data => \%Param,
);
$UpdateTime .= $LayoutObject->Notify(
Priority => 'Error',
Data => $Data,
);
$Count++;
}
elsif ( $Ticket{UpdateTimeNotification} ) {
$LayoutObject->Block(
Name => 'TicketEscalationUpdateTimeWillBeOver',
Data => \%Ticket,
);
my $Data = $LayoutObject->Output(
TemplateFile => 'AgentTicketEscalation',
Data => \%Param,
);
$UpdateTime .= $LayoutObject->Notify(
Priority => 'Notice',
Data => $Data,
);
$Count++;
}
}
# check solution
if ( defined $Ticket{SolutionTime} ) {
$Ticket{SolutionTimeHuman} = $LayoutObject->CustomerAgeInHours(
Age => $Ticket{SolutionTime},
Space => ' ',
);
if ( $Ticket{SolutionTimeEscalation} ) {
$LayoutObject->Block(
Name => 'TicketEscalationSolutionTimeOver',
Data => \%Ticket,
);
my $Data = $LayoutObject->Output(
TemplateFile => 'AgentTicketEscalation',
Data => \%Param,
);
$SolutionTime .= $LayoutObject->Notify(
Priority => 'Error',
Data => $Data,
);
$Count++;
}
elsif ( $Ticket{SolutionTimeNotification} ) {
$LayoutObject->Block(
Name => 'TicketEscalationSolutionTimeWillBeOver',
Data => \%Ticket,
);
my $Data = $LayoutObject->Output(
TemplateFile => 'AgentTicketEscalation',
Data => \%Param,
);
$SolutionTime .= $LayoutObject->Notify(
Priority => 'Notice',
Data => $Data,
);
$Count++;
}
}
}
if ( $Count == $ShownMax ) {
$Comment .= $LayoutObject->Notify(
Priority => 'Error',
Info => Translatable('There are more escalated tickets!'),
);
}
my $Output = $ResponseTime . $UpdateTime . $SolutionTime . $Comment;
# cache result
if ($CacheTime) {
$CacheObject->Set(
Type => 'TicketEscalation',
Key => 'EscalationResult::' . $Self->{UserID} . '::' . $LayoutObject->{UserLanguage},
Value => $Output,
TTL => $CacheTime,
);
}
return $Output;
}
1;