Files
scripts/Perl OTRS/Kernel/Output/HTML/Dashboard/CustomerIDList.pm
2024-10-14 00:08:40 +02:00

259 lines
7.4 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::Output::HTML::Dashboard::CustomerIDList;
use strict;
use warnings;
use Kernel::Language qw(Translatable);
our $ObjectManagerDisabled = 1;
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {%Param};
bless( $Self, $Type );
# get needed parameters
for my $Needed (qw(Config Name UserID)) {
die "Got no $Needed!" if ( !$Self->{$Needed} );
}
# get param object
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
# get current filter
my $Name = $ParamObject->GetParam( Param => 'Name' ) || '';
my $PreferencesKey = 'UserDashboardCustomerIDListFilter' . $Self->{Name};
$Self->{PrefKey} = 'UserDashboardPref' . $Self->{Name} . '-Shown';
$Self->{PageShown} = $Kernel::OM->Get('Kernel::Output::HTML::Layout')->{ $Self->{PrefKey} }
|| $Self->{Config}->{Limit};
$Self->{StartHit} = int( $ParamObject->GetParam( Param => 'StartHit' ) || 1 );
return $Self;
}
sub Preferences {
my ( $Self, %Param ) = @_;
my @Params = (
{
Desc => Translatable('Shown customer ids'),
Name => $Self->{PrefKey},
Block => 'Option',
# Block => 'Input',
Data => {
5 => ' 5',
10 => '10',
15 => '15',
20 => '20',
25 => '25',
},
SelectedID => $Self->{PageShown},
Translation => 0,
},
);
return @Params;
}
sub Config {
my ( $Self, %Param ) = @_;
return (
%{ $Self->{Config} },
# remember, do not allow to use page cache
# (it's not working because of internal filter)
CacheTTL => undef,
CacheKey => undef,
);
}
sub Run {
my ( $Self, %Param ) = @_;
return if !$Param{CustomerUserID};
# get needed objects
my $CustomerUserObject = $Kernel::OM->Get('Kernel::System::CustomerUser');
my $CustomerCompanyObject = $Kernel::OM->Get('Kernel::System::CustomerCompany');
# get all customer ids of this customer user
my @CustomerIDs = $CustomerUserObject->CustomerIDs(
User => $Param{CustomerUserID},
);
# add page nav bar
my $Total = scalar @CustomerIDs;
# get layout object
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
my $LinkPage = 'Subaction=Element;Name='
. $Self->{Name} . ';'
. 'CustomerUserID='
. $LayoutObject->LinkEncode( $Param{CustomerUserID} ) . ';';
my %PageNav = $LayoutObject->PageNavBar(
StartHit => $Self->{StartHit},
PageShown => $Self->{PageShown},
AllHits => $Total || 1,
Action => 'Action=' . $LayoutObject->{Action},
Link => $LinkPage,
AJAXReplace => 'Dashboard' . $Self->{Name},
IDPrefix => 'Dashboard' . $Self->{Name},
AJAX => $Param{AJAX},
);
$LayoutObject->Block(
Name => 'ContentLargeCustomerIDNavBar',
Data => {
%{ $Self->{Config} },
Name => $Self->{Name},
%PageNav,
},
);
# get config object
my $ConfigObject = $Kernel::OM->Get('Kernel::Config');
# show change customer relations button if the agent has permission
my $ChangeCustomerReleationsAccess = $LayoutObject->Permission(
Action => 'AdminCustomerUserCustomer',
Type => 'rw', # ro|rw possible
);
if ($ChangeCustomerReleationsAccess) {
$LayoutObject->Block(
Name => 'ContentLargeCustomerIDAdd',
Data => {
CustomerUserID => $Param{CustomerUserID},
},
);
}
# show links to edit customer id if the agent has permission
my $EditCustomerIDPermission = $LayoutObject->Permission(
Action => 'AdminCustomerCompany',
Type => 'rw', # ro|rw possible
);
@CustomerIDs = splice @CustomerIDs, $Self->{StartHit} - 1, $Self->{PageShown};
for my $CustomerID (@CustomerIDs) {
# get customer company data
my %CustomerCompany = $CustomerCompanyObject->CustomerCompanyGet(
CustomerID => $CustomerID,
);
$LayoutObject->Block(
Name => 'ContentLargeCustomerIDListRow',
Data => {
%Param,
%CustomerCompany,
CustomerID => $CustomerID,
EditCustomerIDPermission => %CustomerCompany ? $EditCustomerIDPermission : 0,
},
);
# get ticket object
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
my $TicketCountOpen = $TicketObject->TicketSearch(
StateType => 'Open',
CustomerID => $CustomerID,
Result => 'COUNT',
Permission => $Self->{Config}->{Permission},
UserID => $Self->{UserID},
CacheTTL => $Self->{Config}->{CacheTTLLocal} * 60,
) || 0;
my $CustomerIDSQL = $Kernel::OM->Get('Kernel::System::DB')->QueryStringEscape( QueryString => $CustomerID );
$LayoutObject->Block(
Name => 'ContentLargeCustomerIDListRowCustomerIDTicketsOpen',
Data => {
%Param,
Count => $TicketCountOpen,
CustomerID => $CustomerID,
CustomerIDSQL => $CustomerIDSQL,
},
);
my $TicketCountClosed = $TicketObject->TicketSearch(
StateType => 'Closed',
CustomerID => $CustomerID,
Result => 'COUNT',
Permission => $Self->{Config}->{Permission},
UserID => $Self->{UserID},
CacheTTL => $Self->{Config}->{CacheTTLLocal} * 60,
) || 0;
$LayoutObject->Block(
Name => 'ContentLargeCustomerIDListRowCustomerIDTicketsClosed',
Data => {
%Param,
Count => $TicketCountClosed,
CustomerID => $CustomerID,
CustomerIDSQL => $CustomerIDSQL,
},
);
}
# show "none" if there are no customers
if ( !@CustomerIDs ) {
$LayoutObject->Block(
Name => 'ContentLargeCustomerIDListNone',
Data => {},
);
}
# check for refresh time
my $Refresh = '';
if ( $Self->{UserRefreshTime} ) {
$Refresh = 60 * $Self->{UserRefreshTime};
my $NameHTML = $Self->{Name};
$NameHTML =~ s{-}{_}xmsg;
# send data to JS
$LayoutObject->AddJSData(
Key => 'CustomerIDRefresh',
Value => {
%{ $Self->{Config} },
Name => $Self->{Name},
NameHTML => $NameHTML,
RefreshTime => $Refresh,
CustomerID => $Param{CustomerID},
},
);
}
my $Content = $LayoutObject->Output(
TemplateFile => 'AgentDashboardCustomerIDList',
Data => {
%{ $Self->{Config} },
Name => $Self->{Name},
EditCustomerIDPermission => $EditCustomerIDPermission,
},
AJAX => $Param{AJAX},
);
return $Content;
}
1;