QueueService.pm 6.1 KB
# --
# Kernel/Modules/QueueService.pm - frontend module
#
# Copyright (C) 2014-2018 - SeTIC - UFSC - http://setic.ufsc.br/
#
# Version 2016-06-01 - Adjustments for OTRS 4
# Version 2018-01-03 - Adjustments for OTRS 6
#
package Kernel::Modules::QueueService;

use strict;
use warnings;
use Data::Dumper;

our @ObjectDependencies = (
	"Kernel::System::Web::Request",		
	"Kernel::System::DB",
	"Kernel::System::Ticket",
	"Kernel::Output::HTML::Layout",
	"Kernel::System::Log",
	"Kernel::System::Queue",
	"Kernel::Config",
	"Kernel::System::Encode",
	"Kernel::System::Main",
	"Kernel::System::QueueService", 
	"Kernel::System::Service"		
);

sub new {
	my ( $Type, %Param ) = @_;

	# allocate new hash for object
	my $Self = {%Param};
	bless( $Self, $Type );

	return $Self;
}

sub Run {
	my ( $Self, %Param ) = @_;

	my $ParamObject = $Kernel::OM->Get("Kernel::System::Web::Request");

	my $SubAction = $ParamObject->GetParam( Param => "Subaction" );

	if ( $SubAction eq "ServiceEdit" ) {
		return $Self->ShowChangeService( ID => $ParamObject->GetParam( Param => "ID" ) );
	}
	elsif ( $SubAction eq "QueueEdit" ) {
		return $Self->ShowChangeQueue( ID => $ParamObject->GetParam( Param => "ID" ) );
	}
	elsif ( $SubAction eq "ChangeService" ) {
		$Self->ChangeService();
		return $Self->ShowOverview();
	}
	elsif ( $SubAction eq "ChangeQueue" ) {
		$Self->ChangeQueue();
		return $Self->ShowOverview();
	}
	else {
		return $Self->ShowOverview();
	}
}

sub ShowOverview() {
	my ( $Self, %Param ) = @_;
	my %Data = ();

	my %Queues   = $Kernel::OM->Get("Kernel::System::Queue")->QueueList( Valid => 1 );
	my %Services = $Kernel::OM->Get("Kernel::System::Service")->ServiceList( UserID => 1 );
	my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout");
	my $LanguageObject = $Kernel::OM->Get("Kernel::Language");

	foreach my $service ( sort { uc( $Services{$a} ) cmp uc( $Services{$b} ) } keys %Services ) {
		$LayoutObject->Block(
			Name => 'ListService',
			Data => {
				ServiceID   => $service,
				ServiceName => $Services{$service},
			}
		);
	}

	foreach my $queue ( sort { uc( $Queues{$a} ) cmp uc( $Queues{$b} ) } keys %Queues ) {
		$LayoutObject->Block(
			Name => 'ListQueue',
			Data => {
				QueueID   => $queue,
				QueueName => $Queues{$queue},
			}
		);
	}

	my $Output = $LayoutObject->Header( Title => $LanguageObject->Translate("Services per queue") );
	$Output .= $LayoutObject->NavigationBar();
	$Output .= $LayoutObject->Output(
		Data         => \%Data,
		TemplateFile => 'QueueService'
	);

	$Output .= $LayoutObject->Footer();
	return $Output;
}

=item ShowChangeService()

Show view to change queues associated to a service

=cut
sub ShowChangeService() {
	my ( $Self, %Param ) = @_;
	my %Data          = ();
	my %Service       = $Kernel::OM->Get("Kernel::System::Service")->ServiceGet( ServiceID => $Param{ID}, UserID => 1 );
	my %QueuesService = $Kernel::OM->Get("Kernel::System::QueueService")->GetQueueList( ServiceID => $Param{ID} );
	my %Queues        = $Kernel::OM->Get("Kernel::System::Queue")->QueueList( Valid => 1 );
	my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout");
	my $LanguageObject = $Kernel::OM->Get("Kernel::Language");

	$Data{Type}        = "Queue";
	$Data{Filter}        = "Service";
	$Data{VisibleNeType} = "Service";
	$Data{Name}          = $Service{Name};
	$Data{ID}            = $Service{ServiceID};

	$LayoutObject->Block(
		Name => 'ChangeHeader',
		Data => \%Data
	);

	foreach my $queue ( sort { uc( $Queues{$a} ) cmp uc( $Queues{$b} ) } keys %Queues ) {
		$LayoutObject->Block(
			Name => 'ChangeRow',
			Data => {
				Type	 => "Queue",
				ID       => $queue,
				Name     => $Queues{$queue},
				Selected => ( $QueuesService{$queue} ? 'checked="checked"' : '' )
			}
		);
	}

	my $Output =
	  $LayoutObject->Header( Title => $LanguageObject->Translate("Services per queue") );
	$Output .= $LayoutObject->NavigationBar();
	$Output .= $LayoutObject->Output(
		Data         => \%Data,
		TemplateFile => 'QueueServiceChange'
	);

	$Output .= $LayoutObject->Footer();
	return $Output;
}

=item ShowChangeQueue()

Show view to change services associated to a queue

=cut
sub ShowChangeQueue() {
	my ( $Self, %Param ) = @_;
	my %Data          = ();	
	my %Queue         = $Kernel::OM->Get("Kernel::System::Queue")->QueueGet( ID => $Param{ID} );
	my %ServicesQueue = $Kernel::OM->Get("Kernel::System::QueueService")->GetServiceList( QueueID => $Param{ID} );
	my %Services      = $Kernel::OM->Get("Kernel::System::Service")->ServiceList( UserID => 1 );
	my $LayoutObject = $Kernel::OM->Get("Kernel::Output::HTML::Layout");
	my $LanguageObject = $Kernel::OM->Get("Kernel::Language");

	$Data{Type}        = "Service";
	$Data{Filter}        = "Queue";
	$Data{VisibleNeType} = "Queue";
	$Data{Name}          = $Queue{Name};
	$Data{ID}            = $Queue{QueueID};

	$LayoutObject->Block(
		Name => 'ChangeHeader',
		Data => \%Data
	);

	foreach my $service ( sort { uc( $Services{$a} ) cmp uc( $Services{$b} ) } keys %Services ) {
		$LayoutObject->Block(
			Name => 'ChangeRow',
			Data => {
				Type	 => "Service",
				ID       => $service,
				Name     => $Services{$service},
				Selected => ( $ServicesQueue{$service} ? 'checked="checked"' : '' )
			}
		);
	}

	my $Output =
	  $LayoutObject->Header( Title => $LanguageObject->Translate("Services per queue") );
	$Output .= $LayoutObject->NavigationBar();
	$Output .= $LayoutObject->Output(
		Data         => \%Data,
		TemplateFile => 'QueueServiceChange'
	);

	$Output .= $LayoutObject->Footer();
	return $Output;

}

sub ChangeService() {
	my ( $Self, %Param ) = @_;	
	my @queueIDs = $Kernel::OM->Get("Kernel::System::Web::Request")->GetArray( Param => 'Queue' );
	my $id = $Kernel::OM->Get("Kernel::System::Web::Request")->GetParam( Param => 'ID' );
	$Kernel::OM->Get("Kernel::System::QueueService")->SetServiceQueues(ServiceID => $id, Queues => \@queueIDs);
}

sub ChangeQueue() {
	my ( $Self, %Param ) = @_;
	my @serviceIDs = $Kernel::OM->Get("Kernel::System::Web::Request")->GetArray( Param => 'Service' );
	my $id = $Kernel::OM->Get("Kernel::System::Web::Request")->GetParam( Param => 'ID' );
	$Kernel::OM->Get("Kernel::System::QueueService")->SetQueueServices(QueueID => $id, Services => \@serviceIDs);
	
}

1;