Files
2024-10-14 00:08:40 +02:00

291 lines
7.5 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::ITSMChange::ITSMCondition::Object::ITSMWorkOrder;
use strict;
use warnings;
use Kernel::Language qw(Translatable);
our @ObjectDependencies = (
'Kernel::System::ITSMChange::ITSMCondition',
'Kernel::System::ITSMChange::ITSMWorkOrder',
'Kernel::System::Log',
'Kernel::System::User',
);
=head1 NAME
Kernel::System::ITSMChange::ITSMCondition::Object::ITSMWorkOrder - condition itsm C<workorder> object lib
=head1 PUBLIC INTERFACE
=head2 new()
create an object
use Kernel::System::ObjectManager;
local $Kernel::OM = Kernel::System::ObjectManager->new();
my $ConditionObjectITSMWorkOrder = $Kernel::OM->Get('Kernel::System::ITSMChange::ITSMCondition::Object::ITSMWorkOrder');
=cut
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {};
bless( $Self, $Type );
return $Self;
}
=head2 DataGet()
Returns C<workorder> data in an array reference.
my $WorkOrderDataRef = $ConditionObjectITSMWorkOrder->DataGet(
Selector => 1234,
UserID => 2345,
);
=cut
sub DataGet {
my ( $Self, %Param ) = @_;
# check needed stuff
for my $Argument (qw(Selector UserID)) {
if ( !exists $Param{$Argument} || !defined $Param{$Argument} ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => "Need $Argument!",
);
return;
}
}
# handle 'any' or 'all' in a special case
return $Self->_DataGetAll(%Param) if $Param{Selector} eq 'any';
return $Self->_DataGetAll(%Param) if $Param{Selector} eq 'all';
# remap params
my %WorkOrderGet = (
WorkOrderID => $Param{Selector},
UserID => $Param{UserID},
);
# get workorder as anon hash ref
my $WorkOrder = $Kernel::OM->Get('Kernel::System::ITSMChange::ITSMWorkOrder')->WorkOrderGet(%WorkOrderGet);
# check for workorder
return if !$WorkOrder;
# build array ref
my $WorkOrderData = [$WorkOrder];
return $WorkOrderData;
}
=head2 CompareValueList()
Returns a list of available CompareValues for the given attribute id of a C<workorder> object as hash reference.
my $CompareValueList = $ConditionObjectITSMWorkOrder->CompareValueList(
AttributeName => 'WorkOrderStateID',
UserID => 1,
);
Returns a hash reference like this, for the C<workorder> attribute 'WorkOrderStateID':
$CompareValueList = {
10 => 'created',
12 => 'accepted',
13 => 'ready',
14 => 'in progress',
15 => 'closed',
16 => 'canceled',
}
=cut
sub CompareValueList {
my ( $Self, %Param ) = @_;
# check needed stuff
for my $Argument (qw(AttributeName UserID)) {
if ( !$Param{$Argument} ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => "Need $Argument!",
);
return;
}
}
# to store the list
my $CompareValueList = {};
# WorkOrderStateID
if ( $Param{AttributeName} eq 'WorkOrderStateID' ) {
# get workorder state list
$CompareValueList = $Kernel::OM->Get('Kernel::System::ITSMChange::ITSMWorkOrder')->WorkOrderPossibleStatesGet(
UserID => $Param{UserID},
);
}
# WorkOrderTypeID
elsif ( $Param{AttributeName} eq 'WorkOrderTypeID' ) {
# get workorder type list
$CompareValueList = $Kernel::OM->Get('Kernel::System::ITSMChange::ITSMWorkOrder')->WorkOrderTypeList(
UserID => $Param{UserID},
);
}
elsif ( $Param{AttributeName} eq 'WorkOrderAgentID' ) {
# get a complete list of users
my %Users = $Kernel::OM->Get('Kernel::System::User')->UserList(
Type => 'Long',
Valid => 1,
);
$CompareValueList = \%Users;
}
return $CompareValueList;
}
=head2 SelectorList()
Returns a list of all selectors available for the given C<workorder> object id and condition id as hash reference
my $SelectorList = $ConditionObjectITSMWorkOrder->SelectorList(
ObjectID => 1234,
ConditionID => 5,
UserID => 1,
);
Returns a hash reference like this:
$SelectorList = {
10 => '1 - WorkorderTitle of Workorder 1',
12 => '2 - WorkorderTitle of Workorder 2',
34 => '3 - WorkorderTitle of Workorder 3',
'any' => 'any',
'all' => 'all',
}
=cut
sub SelectorList {
my ( $Self, %Param ) = @_;
# get all workorder ids of change
my $WorkOrderIDs = $Kernel::OM->Get('Kernel::System::ITSMChange::ITSMWorkOrder')->WorkOrderList(
ChangeID => $Param{ChangeID},
UserID => $Param{UserID},
);
# check for workorder ids
return if !$WorkOrderIDs;
return if ref $WorkOrderIDs ne 'ARRAY';
# build selector list
my %SelectorList;
for my $WorkOrderID ( @{$WorkOrderIDs} ) {
# get workorder data
my $WorkOrderData = $Kernel::OM->Get('Kernel::System::ITSMChange::ITSMWorkOrder')->WorkOrderGet(
WorkOrderID => $WorkOrderID,
UserID => $Param{UserID},
);
$SelectorList{ $WorkOrderData->{WorkOrderID} }
= $WorkOrderData->{WorkOrderNumber} . ' - ' . $WorkOrderData->{WorkOrderTitle};
}
# add 'all' selector (for expressions and actions)
$SelectorList{'all'} = Translatable('all');
# add 'any' selector only for expressions
if ( $Param{ExpressionID} ) {
$SelectorList{'any'} = Translatable('any');
}
return \%SelectorList;
}
=head1 PRIVATE INTERFACE
=head2 _DataGetAll()
my $WorkOrderDataArrayRef = $ConditionObjectITSMWorkOrder->_DataGetAll(
ConditionID => 123,
UserID => 1,
);
=cut
sub _DataGetAll {
my ( $Self, %Param ) = @_;
# get condition
my $ConditionData = $Kernel::OM->Get('Kernel::System::ITSMChange::ITSMCondition')->ConditionGet(
ConditionID => $Param{ConditionID},
UserID => $Param{UserID},
);
# check for condition
return if !$ConditionData;
# get all workorder ids of change
my $WorkOrderIDs = $Kernel::OM->Get('Kernel::System::ITSMChange::ITSMWorkOrder')->WorkOrderList(
ChangeID => $ConditionData->{ChangeID},
UserID => $Param{UserID},
);
# check for workorder ids
return if !$WorkOrderIDs;
return if ref $WorkOrderIDs ne 'ARRAY';
return if !@{$WorkOrderIDs};
# get workorder data
my @WorkOrderData;
WORKORDERID:
for my $WorkOrderID ( @{$WorkOrderIDs} ) {
my $WorkOrder = $Kernel::OM->Get('Kernel::System::ITSMChange::ITSMWorkOrder')->WorkOrderGet(
WorkOrderID => $WorkOrderID,
UserID => $Param{UserID},
);
# check workorder
next WORKORDERID if !$WorkOrder;
# add workorder to return array
push @WorkOrderData, $WorkOrder;
}
# return workorder data
return \@WorkOrderData;
}
1;
=head1 TERMS AND CONDITIONS
This software is part of the OTRS project (L<https://otrs.org/>).
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 L<https://www.gnu.org/licenses/gpl-3.0.txt>.
=cut