init III
This commit is contained in:
315
Perl OTRS/Kernel/Modules/AgentAppointmentList.pm
Normal file
315
Perl OTRS/Kernel/Modules/AgentAppointmentList.pm
Normal file
@@ -0,0 +1,315 @@
|
||||
# --
|
||||
# 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::Modules::AgentAppointmentList;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Kernel::System::VariableCheck qw(:all);
|
||||
|
||||
our $ObjectManagerDisabled = 1;
|
||||
|
||||
sub new {
|
||||
my ( $Type, %Param ) = @_;
|
||||
|
||||
# allocate new hash for object
|
||||
my $Self = {%Param};
|
||||
bless( $Self, $Type );
|
||||
|
||||
return $Self;
|
||||
}
|
||||
|
||||
sub Run {
|
||||
my ( $Self, %Param ) = @_;
|
||||
|
||||
my $Output;
|
||||
|
||||
# get param object
|
||||
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
|
||||
|
||||
# get names of all parameters
|
||||
my @ParamNames = $ParamObject->GetParamNames();
|
||||
|
||||
# get params
|
||||
my %GetParam;
|
||||
|
||||
KEY:
|
||||
for my $Key (@ParamNames) {
|
||||
next KEY if $Key eq 'AppointmentIDs';
|
||||
$GetParam{$Key} = $ParamObject->GetParam( Param => $Key );
|
||||
}
|
||||
|
||||
my $ConfigObject = $Kernel::OM->Get('Kernel::Config');
|
||||
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
||||
my $CalendarObject = $Kernel::OM->Get('Kernel::System::Calendar');
|
||||
my $AppointmentObject = $Kernel::OM->Get('Kernel::System::Calendar::Appointment');
|
||||
my $PluginObject = $Kernel::OM->Get('Kernel::System::Calendar::Plugin');
|
||||
|
||||
my $JSON = $LayoutObject->JSONEncode( Data => [] );
|
||||
|
||||
$LayoutObject->ChallengeTokenCheck();
|
||||
|
||||
# check request
|
||||
if ( $Self->{Subaction} eq 'ListAppointments' ) {
|
||||
|
||||
if ( $GetParam{CalendarID} ) {
|
||||
|
||||
# append midnight to the timestamps
|
||||
for my $Timestamp (qw(StartTime EndTime)) {
|
||||
if ( $GetParam{$Timestamp} && !( $GetParam{$Timestamp} =~ /\s\d{2}:\d{2}:\d{2}$/ ) ) {
|
||||
$GetParam{$Timestamp} = $GetParam{$Timestamp} . ' 00:00:00';
|
||||
}
|
||||
}
|
||||
|
||||
my $StartTimeObject = $Kernel::OM->Create(
|
||||
'Kernel::System::DateTime',
|
||||
ObjectParams => {
|
||||
String => $GetParam{StartTime},
|
||||
TimeZone => $Self->{UserTimeZone} // undef,
|
||||
},
|
||||
);
|
||||
my $EndTimeObject = $Kernel::OM->Create(
|
||||
'Kernel::System::DateTime',
|
||||
ObjectParams => {
|
||||
String => $GetParam{EndTime},
|
||||
TimeZone => $Self->{UserTimeZone} // undef,
|
||||
},
|
||||
);
|
||||
|
||||
if ( $Self->{UserTimeZone} ) {
|
||||
$StartTimeObject->ToOTRSTimeZone();
|
||||
$EndTimeObject->ToOTRSTimeZone();
|
||||
}
|
||||
|
||||
$GetParam{StartTime} = $StartTimeObject->ToString();
|
||||
$GetParam{EndTime} = $EndTimeObject->ToString();
|
||||
|
||||
# reset empty parameters
|
||||
for my $Param ( sort keys %GetParam ) {
|
||||
if ( !$GetParam{$Param} ) {
|
||||
$GetParam{$Param} = undef;
|
||||
}
|
||||
}
|
||||
|
||||
my @Appointments = $AppointmentObject->AppointmentList(
|
||||
%GetParam,
|
||||
);
|
||||
|
||||
# go through all appointments
|
||||
for my $Appointment (@Appointments) {
|
||||
|
||||
# check for notification date
|
||||
if (
|
||||
!$Appointment->{NotificationDate}
|
||||
|| $Appointment->{NotificationDate} eq '0000-00-00 00:00:00'
|
||||
)
|
||||
{
|
||||
$Appointment->{NotificationDate} = '';
|
||||
}
|
||||
|
||||
my $StartTimeObject = $Kernel::OM->Create(
|
||||
'Kernel::System::DateTime',
|
||||
ObjectParams => {
|
||||
String => $Appointment->{StartTime},
|
||||
},
|
||||
);
|
||||
my $EndTimeObject = $Kernel::OM->Create(
|
||||
'Kernel::System::DateTime',
|
||||
ObjectParams => {
|
||||
String => $Appointment->{EndTime},
|
||||
},
|
||||
);
|
||||
|
||||
# save time stamps for display before calculation
|
||||
$Appointment->{StartDate} = $Appointment->{StartTime};
|
||||
$Appointment->{EndDate} = $Appointment->{EndTime};
|
||||
|
||||
# End times for all day appointments are inclusive, subtract whole day.
|
||||
if ( $Appointment->{AllDay} ) {
|
||||
$EndTimeObject->Subtract(
|
||||
Days => 1,
|
||||
);
|
||||
if ( $EndTimeObject < $StartTimeObject ) {
|
||||
$EndTimeObject = $StartTimeObject->Clone();
|
||||
}
|
||||
$Appointment->{EndDate} = $EndTimeObject->ToString();
|
||||
}
|
||||
|
||||
# calculate local times for control
|
||||
else {
|
||||
if ( $Self->{UserTimeZone} ) {
|
||||
$StartTimeObject->ToTimeZone( TimeZone => $Self->{UserTimeZone} );
|
||||
$EndTimeObject->ToTimeZone( TimeZone => $Self->{UserTimeZone} );
|
||||
}
|
||||
|
||||
$Appointment->{StartTime} = $StartTimeObject->ToString();
|
||||
$Appointment->{EndTime} = $EndTimeObject->ToString();
|
||||
}
|
||||
|
||||
# formatted date/time strings used in display
|
||||
$Appointment->{StartDate} = $LayoutObject->{LanguageObject}->FormatTimeString(
|
||||
$Appointment->{StartDate},
|
||||
'DateFormat' . ( $Appointment->{AllDay} ? 'Short' : '' )
|
||||
);
|
||||
$Appointment->{EndDate} = $LayoutObject->{LanguageObject}->FormatTimeString(
|
||||
$Appointment->{EndDate},
|
||||
'DateFormat' . ( $Appointment->{AllDay} ? 'Short' : '' )
|
||||
);
|
||||
if ( $Appointment->{NotificationDate} ) {
|
||||
$Appointment->{NotificationDate} = $LayoutObject->{LanguageObject}->FormatTimeString(
|
||||
$Appointment->{NotificationDate},
|
||||
'DateFormat'
|
||||
);
|
||||
}
|
||||
|
||||
# include resource data
|
||||
$Appointment->{TeamName} = '';
|
||||
$Appointment->{ResourceNames} = '';
|
||||
|
||||
if (
|
||||
$Kernel::OM->Get('Kernel::System::Main')->Require(
|
||||
'Kernel::System::Calendar::Team',
|
||||
Silent => 1,
|
||||
)
|
||||
)
|
||||
{
|
||||
if ( $Appointment->{TeamID} ) {
|
||||
my $TeamObject = $Kernel::OM->Get('Kernel::System::Calendar::Team');
|
||||
my @TeamNames;
|
||||
TEAMID:
|
||||
for my $TeamID ( @{ $Appointment->{TeamID} } ) {
|
||||
next TEAMID if !$TeamID;
|
||||
my %Team = $TeamObject->TeamGet(
|
||||
TeamID => $TeamID,
|
||||
UserID => $Self->{UserID},
|
||||
);
|
||||
push @TeamNames, $Team{Name} if %Team;
|
||||
}
|
||||
|
||||
# truncate more than three elements
|
||||
my $TeamCount = scalar @TeamNames;
|
||||
if ( $TeamCount > 4 ) {
|
||||
splice @TeamNames, 3;
|
||||
push @TeamNames, $LayoutObject->{LanguageObject}->Translate( '+%s more', $TeamCount - 3 );
|
||||
}
|
||||
|
||||
$Appointment->{TeamNames} = join( '\n', @TeamNames );
|
||||
}
|
||||
if ( $Appointment->{ResourceID} ) {
|
||||
my $UserObject = $Kernel::OM->Get('Kernel::System::User');
|
||||
my @ResourceNames;
|
||||
RESOURCEID:
|
||||
for my $ResourceID ( @{ $Appointment->{ResourceID} } ) {
|
||||
next RESOURCEID if !$ResourceID;
|
||||
my %User = $UserObject->GetUserData(
|
||||
UserID => $ResourceID,
|
||||
);
|
||||
push @ResourceNames, $User{UserFullname};
|
||||
}
|
||||
|
||||
# truncate more than three elements
|
||||
my $ResourceCount = scalar @ResourceNames;
|
||||
if ( $ResourceCount > 4 ) {
|
||||
splice @ResourceNames, 3;
|
||||
push @ResourceNames,
|
||||
$LayoutObject->{LanguageObject}->Translate( '+%s more', $ResourceCount - 3 );
|
||||
}
|
||||
|
||||
$Appointment->{ResourceNames} = join( '\n', @ResourceNames );
|
||||
}
|
||||
}
|
||||
|
||||
# include plugin (link) data
|
||||
my $PluginList = $PluginObject->PluginList();
|
||||
PLUGINKEY:
|
||||
for my $PluginKey ( sort keys %{$PluginList} ) {
|
||||
my $LinkList = $PluginObject->PluginLinkList(
|
||||
AppointmentID => $Appointment->{AppointmentID},
|
||||
PluginKey => $PluginKey,
|
||||
UserID => $Self->{UserID},
|
||||
);
|
||||
my @LinkArray;
|
||||
for my $LinkID ( sort keys %{$LinkList} ) {
|
||||
push @LinkArray, $LinkList->{$LinkID}->{LinkName};
|
||||
}
|
||||
last PLUGINKEY if !@LinkArray;
|
||||
|
||||
# truncate more than three elements
|
||||
my $LinkCount = scalar @LinkArray;
|
||||
if ( $LinkCount > 4 ) {
|
||||
splice @LinkArray, 3;
|
||||
push @LinkArray, $LayoutObject->{LanguageObject}->Translate( '+%s more', $LinkCount - 3 );
|
||||
}
|
||||
|
||||
$Appointment->{PluginData}->{$PluginKey} = join( '\n', @LinkArray );
|
||||
}
|
||||
|
||||
# check if dealing with ticket appointment
|
||||
if ( $Appointment->{TicketAppointmentRuleID} ) {
|
||||
my $Rule = $CalendarObject->TicketAppointmentRuleGet(
|
||||
CalendarID => $Appointment->{CalendarID},
|
||||
RuleID => $Appointment->{TicketAppointmentRuleID},
|
||||
);
|
||||
|
||||
# get types from the ticket appointment rule
|
||||
if ( IsHashRefWithData($Rule) ) {
|
||||
$Appointment->{TicketAppointmentStartDate} = $Rule->{StartDate};
|
||||
$Appointment->{TicketAppointmentEndDate} = $Rule->{EndDate};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# build JSON output
|
||||
$JSON = $LayoutObject->JSONEncode(
|
||||
Data => (
|
||||
\@Appointments,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
elsif ( $Self->{Subaction} eq 'AppointmentDays' ) {
|
||||
|
||||
# append midnight to the timestamps
|
||||
for my $Timestamp (qw(StartTime EndTime)) {
|
||||
if ( $GetParam{$Timestamp} && !( $GetParam{$Timestamp} =~ /\s\d{2}:\d{2}:\d{2}$/ ) ) {
|
||||
$GetParam{$Timestamp} = $GetParam{$Timestamp} . ' 00:00:00';
|
||||
}
|
||||
}
|
||||
|
||||
# reset empty parameters
|
||||
for my $Param ( sort keys %GetParam ) {
|
||||
if ( !$GetParam{$Param} ) {
|
||||
$GetParam{$Param} = undef;
|
||||
}
|
||||
}
|
||||
|
||||
my %AppointmentDays = $AppointmentObject->AppointmentDays(
|
||||
%GetParam,
|
||||
UserID => $Self->{UserID},
|
||||
);
|
||||
|
||||
# build JSON output
|
||||
$JSON = $LayoutObject->JSONEncode(
|
||||
Data => (
|
||||
\%AppointmentDays,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
# send JSON response
|
||||
return $LayoutObject->Attachment(
|
||||
ContentType => 'application/json; charset=' . $LayoutObject->{Charset},
|
||||
Content => $JSON,
|
||||
Type => 'inline',
|
||||
NoCache => 1,
|
||||
);
|
||||
}
|
||||
|
||||
1;
|
||||
Reference in New Issue
Block a user