274 lines
8.5 KiB
Perl
274 lines
8.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::Modules::AgentITSMChangePIR;
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
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 ) = @_;
|
|
|
|
# get config of frontend module
|
|
$Self->{Config} = $Kernel::OM->Get('Kernel::Config')->Get("ITSMChange::Frontend::$Self->{Action}");
|
|
|
|
# check permissions
|
|
my $Access = $Kernel::OM->Get('Kernel::System::ITSMChange')->Permission(
|
|
Type => $Self->{Config}->{Permission},
|
|
Action => $Self->{Action},
|
|
UserID => $Self->{UserID},
|
|
);
|
|
|
|
# get layout object
|
|
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
|
|
|
# error screen
|
|
if ( !$Access ) {
|
|
return $LayoutObject->NoPermission(
|
|
Message =>
|
|
$LayoutObject->{LanguageObject}->Translate( 'You need %s permissions!', $Self->{Config}->{Permission} ),
|
|
WithHeader => 'yes',
|
|
);
|
|
}
|
|
|
|
# store last screen, used for backlinks
|
|
$Kernel::OM->Get('Kernel::System::AuthSession')->UpdateSessionID(
|
|
SessionID => $Self->{SessionID},
|
|
Key => 'LastScreenWorkOrders',
|
|
Value => $Self->{RequestedURL},
|
|
);
|
|
|
|
# get param object
|
|
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
|
|
|
|
# get sorting parameters
|
|
my $SortBy = $ParamObject->GetParam( Param => 'SortBy' )
|
|
|| $Self->{Config}->{'SortBy::Default'}
|
|
|| 'PlannedStartTime';
|
|
|
|
# get ordering parameters
|
|
my $OrderBy = $ParamObject->GetParam( Param => 'OrderBy' )
|
|
|| $Self->{Config}->{'Order::Default'}
|
|
|| 'Up';
|
|
|
|
my @SortByArray = ($SortBy);
|
|
my @OrderByArray = ($OrderBy);
|
|
|
|
# sort by change number first if user wants to sort by workorder number
|
|
if ( $SortBy eq 'WorkOrderNumber' ) {
|
|
@SortByArray = ( 'ChangeNumber', 'WorkOrderNumber' );
|
|
@OrderByArray = ( $OrderBy, $OrderBy );
|
|
}
|
|
|
|
# investigate refresh
|
|
my $Refresh = $Self->{UserRefreshTime} ? 60 * $Self->{UserRefreshTime} : undef;
|
|
|
|
# starting with page ...
|
|
my $Output = $LayoutObject->Header( Refresh => $Refresh );
|
|
$Output .= $LayoutObject->NavigationBar();
|
|
$LayoutObject->Print( Output => \$Output );
|
|
$Output = '';
|
|
|
|
# find out which columns should be shown
|
|
my @ShowColumns;
|
|
if ( $Self->{Config}->{ShowColumns} ) {
|
|
|
|
# get all possible columns from config
|
|
my %PossibleColumn = %{ $Self->{Config}->{ShowColumns} };
|
|
|
|
# get the column names that should be shown
|
|
COLUMNNAME:
|
|
for my $Name ( sort keys %PossibleColumn ) {
|
|
next COLUMNNAME if !$PossibleColumn{$Name};
|
|
push @ShowColumns, $Name;
|
|
}
|
|
}
|
|
|
|
# get work order object
|
|
my $WorkOrderObject = $Kernel::OM->Get('Kernel::System::ITSMChange::ITSMWorkOrder');
|
|
|
|
# find out which workorder types should be used to show PIR
|
|
my @WorkOrderTypes;
|
|
if ( $Self->{Config}->{WorkOrderTypes} ) {
|
|
WORKORDERTYPE:
|
|
for my $WorkOrderType ( @{ $Self->{Config}->{WorkOrderTypes} } ) {
|
|
|
|
# check if workorder type is valid by looking up the type id
|
|
my $WorkOrderTypeID = $WorkOrderObject->WorkOrderTypeLookup(
|
|
WorkOrderType => $WorkOrderType,
|
|
);
|
|
|
|
# do not use invalid workorder types
|
|
next WORKORDERTYPE if !$WorkOrderTypeID;
|
|
|
|
push @WorkOrderTypes, $WorkOrderType;
|
|
}
|
|
}
|
|
|
|
# to store the filters
|
|
my %Filters;
|
|
|
|
# set other filters based on workorder state
|
|
if ( $Self->{Config}->{'Filter::WorkOrderStates'} ) {
|
|
|
|
# define position of the filter in the frontend
|
|
my $PrioCounter = 1000;
|
|
|
|
# get all workorder states that should be used as filters
|
|
WORKORDERSTATE:
|
|
for my $WorkOrderState ( @{ $Self->{Config}->{'Filter::WorkOrderStates'} } ) {
|
|
|
|
# do not use empty workorder states
|
|
next WORKORDERSTATE if !$WorkOrderState;
|
|
|
|
# check if state is valid by looking up the state id
|
|
my $WorkOrderStateID = $WorkOrderObject->WorkOrderStateLookup(
|
|
WorkOrderState => $WorkOrderState,
|
|
);
|
|
|
|
# do not use invalid workorder states
|
|
next WORKORDERSTATE if !$WorkOrderStateID;
|
|
|
|
# increase the PrioCounter
|
|
$PrioCounter++;
|
|
|
|
# add filter for the current workorder state
|
|
$Filters{$WorkOrderState} = {
|
|
Name => $WorkOrderState,
|
|
Prio => $PrioCounter,
|
|
Search => {
|
|
WorkOrderTypes => \@WorkOrderTypes,
|
|
WorkOrderStates => [$WorkOrderState],
|
|
OrderBy => \@SortByArray,
|
|
OrderByDirection => \@OrderByArray,
|
|
Limit => 1000,
|
|
UserID => $Self->{UserID},
|
|
},
|
|
};
|
|
}
|
|
}
|
|
|
|
# get filter and view params
|
|
$Self->{Filter} = $ParamObject->GetParam( Param => 'Filter' ) || 'All';
|
|
$Self->{View} = $ParamObject->GetParam( Param => 'View' ) || '';
|
|
|
|
# if only one filter exists
|
|
if ( scalar keys %Filters == 1 ) {
|
|
|
|
# get the name of the only filter
|
|
my ($FilterName) = sort keys %Filters;
|
|
|
|
# activate this filter
|
|
$Self->{Filter} = $FilterName;
|
|
}
|
|
else {
|
|
# limit to configured states
|
|
my @WorkOrderStates = sort keys %Filters;
|
|
|
|
# add default filter
|
|
$Filters{All} = {
|
|
Name => 'All',
|
|
Prio => 1000,
|
|
Search => {
|
|
WorkOrderStates => \@WorkOrderStates,
|
|
WorkOrderTypes => \@WorkOrderTypes,
|
|
OrderBy => \@SortByArray,
|
|
OrderByDirection => \@OrderByArray,
|
|
Limit => 1000,
|
|
UserID => $Self->{UserID},
|
|
},
|
|
};
|
|
}
|
|
|
|
# check if filter is valid
|
|
if ( !$Filters{ $Self->{Filter} } ) {
|
|
$LayoutObject->FatalError(
|
|
Message => $LayoutObject->{LanguageObject}->Translate( 'Invalid Filter: %s!', $Self->{Filter} ),
|
|
);
|
|
}
|
|
|
|
# search workorders which match the selected filter
|
|
my $WorkOrderIDsRef = $WorkOrderObject->WorkOrderSearch(
|
|
%{ $Filters{ $Self->{Filter} }->{Search} },
|
|
);
|
|
|
|
# display all navbar filters
|
|
my %NavBarFilter;
|
|
for my $Filter ( sort keys %Filters ) {
|
|
|
|
# count the number of workorders for each filter
|
|
my $Count = $WorkOrderObject->WorkOrderSearch(
|
|
%{ $Filters{$Filter}->{Search} },
|
|
Result => 'COUNT',
|
|
);
|
|
|
|
# display the navbar filter
|
|
$NavBarFilter{ $Filters{$Filter}->{Prio} } = {
|
|
Count => $Count,
|
|
Filter => $Filter,
|
|
%{ $Filters{$Filter} },
|
|
};
|
|
}
|
|
|
|
# show changes
|
|
my $LinkPage = 'Filter='
|
|
. $LayoutObject->Ascii2Html( Text => $Self->{Filter} )
|
|
. ';View=' . $LayoutObject->Ascii2Html( Text => $Self->{View} )
|
|
. ';SortBy=' . $LayoutObject->Ascii2Html( Text => $SortBy )
|
|
. ';OrderBy=' . $LayoutObject->Ascii2Html( Text => $OrderBy )
|
|
. ';';
|
|
my $LinkSort = 'Filter='
|
|
. $LayoutObject->Ascii2Html( Text => $Self->{Filter} )
|
|
. ';View=' . $LayoutObject->Ascii2Html( Text => $Self->{View} )
|
|
. ';';
|
|
my $LinkFilter = 'SortBy=' . $LayoutObject->Ascii2Html( Text => $SortBy )
|
|
. ';OrderBy=' . $LayoutObject->Ascii2Html( Text => $OrderBy )
|
|
. ';View=' . $LayoutObject->Ascii2Html( Text => $Self->{View} )
|
|
. ';';
|
|
$Output .= $LayoutObject->ITSMChangeListShow(
|
|
|
|
WorkOrderIDs => $WorkOrderIDsRef,
|
|
Total => scalar @{$WorkOrderIDsRef},
|
|
|
|
View => $Self->{View},
|
|
|
|
Filter => $Self->{Filter},
|
|
Filters => \%NavBarFilter,
|
|
FilterLink => $LinkFilter,
|
|
|
|
TitleName => $LayoutObject->{LanguageObject}->Translate('Overview: PIR'),
|
|
|
|
TitleValue => $Self->{Filter},
|
|
|
|
Env => $Self,
|
|
LinkPage => $LinkPage,
|
|
LinkSort => $LinkSort,
|
|
|
|
ShowColumns => \@ShowColumns,
|
|
SortBy => $LayoutObject->Ascii2Html( Text => $SortBy ),
|
|
OrderBy => $LayoutObject->Ascii2Html( Text => $OrderBy ),
|
|
);
|
|
|
|
$Output .= $LayoutObject->Footer();
|
|
return $Output;
|
|
}
|
|
|
|
1;
|