Files
scripts/Perl OTRS/Kernel/System/Stats/Dynamic/ITSMChangeManagementHistory.pm
2024-10-14 00:08:40 +02:00

192 lines
5.3 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::System::Stats::Dynamic::ITSMChangeManagementHistory;
use strict;
use warnings;
our @ObjectDependencies = (
'Kernel::System::DateTime',
'Kernel::System::ITSMChange',
'Kernel::System::ITSMChange::History',
'Kernel::System::Log',
);
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {};
bless( $Self, $Type );
return $Self;
}
sub GetObjectName {
my ( $Self, %Param ) = @_;
return 'ITSMChangeManagementHistory';
}
sub GetObjectBehaviours {
my ( $Self, %Param ) = @_;
my %Behaviours = (
ProvidesDashboardWidget => 1,
);
return %Behaviours;
}
sub GetObjectAttributes {
my ( $Self, %Param ) = @_;
# get change state list
my $ChangeStates = $Kernel::OM->Get('Kernel::System::ITSMChange')->ChangePossibleStatesGet(
UserID => 1,
);
my %ChangeStateList = map { $_->{Key} => $_->{Value} } @{$ChangeStates};
# get current time to fix bug#4870
my $Today = $Kernel::OM->Create('Kernel::System::DateTime')->Format( Format => '%Y-%m-%d 23:59:59' );
my @ObjectAttributes = (
{
Name => 'Change State',
UseAsXvalue => 1,
UseAsValueSeries => 1,
UseAsRestriction => 1,
Element => 'NewValues',
Block => 'MultiSelectField',
Values => \%ChangeStateList,
},
{
Name => 'Timeperiod',
UseAsXvalue => 1,
UseAsValueSeries => 1,
UseAsRestriction => 1,
Element => 'TimePeriod',
TimePeriodFormat => 'DateInputFormat', # 'DateInputFormatLong',
Block => 'Time',
TimeStop => $Today,
Values => {
TimeStart => 'ChangeTimeNewerDate',
TimeStop => 'ChangeTimeOlderDate',
},
},
);
return @ObjectAttributes;
}
sub GetStatElementPreview {
my ( $Self, %Param ) = @_;
return int rand 50;
}
sub GetStatElement {
my ( $Self, %Param ) = @_;
# search history
my $IDs = $Kernel::OM->Get('Kernel::System::ITSMChange::History')->HistorySearch(
UserID => 1,
Type => 'Change',
Attribute => 'ChangeStateID',
Limit => 100_000_000,
%Param,
);
my @ChangeNumbers;
if ( $IDs && ref $IDs eq 'ARRAY' ) {
ID:
for my $ID ( @{$IDs} ) {
my $Change = $Kernel::OM->Get('Kernel::System::ITSMChange')->ChangeGet(
ChangeID => $ID,
UserID => 1,
);
next ID if !$Change;
push @ChangeNumbers, $Change->{ChangeNumber};
}
}
return join "\n", @ChangeNumbers;
}
sub ExportWrapper {
my ( $Self, %Param ) = @_;
# wrap ids to used spelling
for my $Use (qw(UseAsValueSeries UseAsRestriction UseAsXvalue)) {
ELEMENT:
for my $Element ( @{ $Param{$Use} } ) {
next ELEMENT if !$Element || !$Element->{SelectedValues};
my $ElementName = $Element->{Element};
my $Values = $Element->{SelectedValues};
if ( $ElementName eq 'NewValues' ) {
my $StateList = $Kernel::OM->Get('Kernel::System::ITSMChange')->ChangePossibleStatesGet( UserID => 1 );
ID:
for my $ID ( @{$Values} ) {
next ID if !$ID;
STATE:
for my $State ( @{$StateList} ) {
next STATE if $ID->{Content} ne $State->{Key};
$ID->{Content} = $State->{Value};
}
}
}
}
}
return \%Param;
}
sub ImportWrapper {
my ( $Self, %Param ) = @_;
# wrap used spelling to ids
for my $Use (qw(UseAsValueSeries UseAsRestriction UseAsXvalue)) {
ELEMENT:
for my $Element ( @{ $Param{$Use} } ) {
next ELEMENT if !$Element || !$Element->{SelectedValues};
my $ElementName = $Element->{Element};
my $Values = $Element->{SelectedValues};
if ( $ElementName eq 'NewValues' ) {
ID:
for my $ID ( @{$Values} ) {
next ID if !$ID;
my $ChangeStateID = $Kernel::OM->Get('Kernel::System::ITSMChange')->ChangeStateLookup(
ChangeState => $ID->{Content},
Cache => 1,
);
if ($ChangeStateID) {
$ID->{Content} = $ChangeStateID;
}
else {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => "Import: Can' find state $ID->{Content}!"
);
$ID = undef;
}
}
}
}
}
return \%Param;
}
1;