886 lines
31 KiB
Perl
886 lines
31 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::AdminCustomerCompany;
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Kernel::Language qw(Translatable);
|
|
|
|
our $ObjectManagerDisabled = 1;
|
|
|
|
use Kernel::System::VariableCheck qw(:all);
|
|
|
|
sub new {
|
|
my ( $Type, %Param ) = @_;
|
|
|
|
# allocate new hash for object
|
|
my $Self = {%Param};
|
|
bless( $Self, $Type );
|
|
|
|
my $DynamicFieldConfigs = $Kernel::OM->Get('Kernel::System::DynamicField')->DynamicFieldListGet(
|
|
ObjectType => 'CustomerCompany',
|
|
);
|
|
|
|
$Self->{DynamicFieldLookup} = { map { $_->{Name} => $_ } @{$DynamicFieldConfigs} };
|
|
|
|
return $Self;
|
|
}
|
|
|
|
sub Run {
|
|
my ( $Self, %Param ) = @_;
|
|
|
|
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
|
|
my $ConfigObject = $Kernel::OM->Get('Kernel::Config');
|
|
|
|
my $Nav = $ParamObject->GetParam( Param => 'Nav' ) || 0;
|
|
my $NavigationBarType = $Nav eq 'Agent' ? 'Customers' : 'Admin';
|
|
my $Search = $ParamObject->GetParam( Param => 'Search' );
|
|
$Search
|
|
||= $ConfigObject->Get('AdminCustomerCompany::RunInitialWildcardSearch') ? '*' : '';
|
|
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
|
my $CustomerCompanyObject = $Kernel::OM->Get('Kernel::System::CustomerCompany');
|
|
|
|
my %GetParam;
|
|
$GetParam{Source} = $ParamObject->GetParam( Param => 'Source' ) || 'CustomerCompany';
|
|
|
|
# ------------------------------------------------------------ #
|
|
# change
|
|
# ------------------------------------------------------------ #
|
|
if ( $Self->{Subaction} eq 'Change' ) {
|
|
my $CustomerID
|
|
= $ParamObject->GetParam( Param => 'CustomerID' ) || $ParamObject->GetParam( Param => 'ID' ) || '';
|
|
my $Notification = $ParamObject->GetParam( Param => 'Notification' ) || '';
|
|
my %Data = $CustomerCompanyObject->CustomerCompanyGet(
|
|
CustomerID => $CustomerID,
|
|
);
|
|
$Data{CustomerCompanyID} = $CustomerID;
|
|
my $Output = $LayoutObject->Header();
|
|
$Output .= $LayoutObject->NavigationBar(
|
|
Type => $NavigationBarType,
|
|
);
|
|
$Output .= $LayoutObject->Notify( Info => Translatable('Customer company updated!') )
|
|
if ( $Notification && $Notification eq 'Update' );
|
|
$Self->_Edit(
|
|
Action => 'Change',
|
|
Nav => $Nav,
|
|
%Data,
|
|
);
|
|
$Output .= $LayoutObject->Output(
|
|
TemplateFile => 'AdminCustomerCompany',
|
|
Data => \%Param,
|
|
);
|
|
$Output .= $LayoutObject->Footer();
|
|
return $Output;
|
|
}
|
|
|
|
# ------------------------------------------------------------ #
|
|
# change action
|
|
# ------------------------------------------------------------ #
|
|
elsif ( $Self->{Subaction} eq 'ChangeAction' ) {
|
|
|
|
# challenge token check for write action
|
|
$LayoutObject->ChallengeTokenCheck();
|
|
|
|
my $Note = '';
|
|
my %Errors;
|
|
$GetParam{CustomerCompanyID} = $ParamObject->GetParam( Param => 'CustomerCompanyID' );
|
|
|
|
# Get dynamic field backend object.
|
|
my $DynamicFieldBackendObject = $Kernel::OM->Get('Kernel::System::DynamicField::Backend');
|
|
|
|
ENTRY:
|
|
for my $Entry ( @{ $ConfigObject->Get( $GetParam{Source} )->{Map} } ) {
|
|
|
|
# check dynamic fields
|
|
if ( $Entry->[5] eq 'dynamic_field' ) {
|
|
|
|
my $DynamicFieldConfig = $Self->{DynamicFieldLookup}->{ $Entry->[2] };
|
|
|
|
if ( !IsHashRefWithData($DynamicFieldConfig) ) {
|
|
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
|
Priority => 'error',
|
|
Message => "DynamicField $Entry->[2] not found!",
|
|
);
|
|
next ENTRY;
|
|
}
|
|
|
|
my $ValidationResult = $DynamicFieldBackendObject->EditFieldValueValidate(
|
|
DynamicFieldConfig => $DynamicFieldConfig,
|
|
ParamObject => $ParamObject,
|
|
Mandatory => $Entry->[4],
|
|
);
|
|
|
|
if ( $ValidationResult->{ServerError} ) {
|
|
$Errors{ $Entry->[0] } = $ValidationResult;
|
|
}
|
|
else {
|
|
|
|
# generate storable value of dynamic field edit field
|
|
$GetParam{ $Entry->[0] } = $DynamicFieldBackendObject->EditFieldValueGet(
|
|
DynamicFieldConfig => $DynamicFieldConfig,
|
|
ParamObject => $ParamObject,
|
|
LayoutObject => $LayoutObject,
|
|
);
|
|
}
|
|
}
|
|
|
|
# check remaining non-dynamic-field mandatory fields
|
|
else {
|
|
$GetParam{ $Entry->[0] } = $ParamObject->GetParam( Param => $Entry->[0] ) // '';
|
|
if ( !$GetParam{ $Entry->[0] } && $Entry->[4] ) {
|
|
$Errors{ $Entry->[0] . 'Invalid' } = 'ServerError';
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( !defined $GetParam{CustomerID} ) {
|
|
$GetParam{CustomerID} = $ParamObject->GetParam( Param => 'CustomerID' ) || '';
|
|
}
|
|
|
|
# check for duplicate entries
|
|
if ( $GetParam{CustomerCompanyID} ne $GetParam{CustomerID} ) {
|
|
|
|
# get CustomerCompany list
|
|
my %List = $CustomerCompanyObject->CustomerCompanyList(
|
|
Search => $Param{Search},
|
|
Valid => 0,
|
|
);
|
|
|
|
# check duplicate field
|
|
if ( %List && $List{ $GetParam{CustomerID} } ) {
|
|
$Errors{Duplicate} = 'ServerError';
|
|
}
|
|
}
|
|
|
|
# if no errors occurred
|
|
if ( !%Errors ) {
|
|
|
|
# update group
|
|
my $Update = $CustomerCompanyObject->CustomerCompanyUpdate( %GetParam, UserID => $Self->{UserID} );
|
|
|
|
if ($Update) {
|
|
|
|
my $SetDFError;
|
|
|
|
# set dynamic field values
|
|
my $DynamicFieldObject = $Kernel::OM->Get('Kernel::System::DynamicField');
|
|
|
|
ENTRY:
|
|
for my $Entry ( @{ $ConfigObject->Get( $GetParam{Source} )->{Map} } ) {
|
|
next ENTRY if $Entry->[5] ne 'dynamic_field';
|
|
|
|
my $DynamicFieldConfig = $Self->{DynamicFieldLookup}->{ $Entry->[2] };
|
|
|
|
if ( !IsHashRefWithData($DynamicFieldConfig) ) {
|
|
$SetDFError .= $LayoutObject->Notify(
|
|
Info => $LayoutObject->{LanguageObject}->Translate(
|
|
'Dynamic field %s not found!',
|
|
$Entry->[2],
|
|
)
|
|
);
|
|
next ENTRY;
|
|
}
|
|
|
|
my $ValueSet = $DynamicFieldBackendObject->ValueSet(
|
|
DynamicFieldConfig => $DynamicFieldConfig,
|
|
ObjectName => $GetParam{CustomerID},
|
|
Value => $GetParam{ $Entry->[0] },
|
|
UserID => $Self->{UserID},
|
|
);
|
|
|
|
if ( !$ValueSet ) {
|
|
$SetDFError
|
|
.= $LayoutObject->Notify(
|
|
Info => $LayoutObject->{LanguageObject}->Translate(
|
|
'Unable to set value for dynamic field %s!',
|
|
$Entry->[2],
|
|
),
|
|
);
|
|
next ENTRY;
|
|
}
|
|
}
|
|
|
|
my $ContinueAfterSave = $ParamObject->GetParam( Param => 'ContinueAfterSave' ) || 0;
|
|
|
|
# if set DF error exists, create notification
|
|
if ($SetDFError) {
|
|
|
|
# if the user would like to continue editing the customer company, just redirect to the edit screen
|
|
if ( $ContinueAfterSave eq '1' ) {
|
|
$Self->_Edit(
|
|
Action => 'Change',
|
|
Nav => $Nav,
|
|
Errors => \%Errors,
|
|
%GetParam,
|
|
);
|
|
}
|
|
else {
|
|
$Self->_Overview(
|
|
Nav => $Nav,
|
|
Search => $Search,
|
|
%GetParam,
|
|
);
|
|
}
|
|
my $Output = $LayoutObject->Header();
|
|
$Output .= $LayoutObject->NavigationBar(
|
|
Type => $NavigationBarType,
|
|
);
|
|
$Output .= $LayoutObject->Notify( Info => Translatable('Customer company updated!') );
|
|
$Output .= $SetDFError;
|
|
$Output .= $LayoutObject->Output(
|
|
TemplateFile => 'AdminCustomerCompany',
|
|
Data => \%Param,
|
|
);
|
|
$Output .= $LayoutObject->Footer();
|
|
return $Output;
|
|
}
|
|
|
|
# if the user would like to continue editing the customer company, just redirect to the edit screen
|
|
if ( $ContinueAfterSave eq '1' ) {
|
|
my $CustomerID = $ParamObject->GetParam( Param => 'CustomerID' ) || '';
|
|
return $LayoutObject->Redirect(
|
|
OP =>
|
|
"Action=$Self->{Action};Subaction=Change;CustomerID=$CustomerID;Nav=$Nav;Notification=Update"
|
|
);
|
|
}
|
|
else {
|
|
|
|
# otherwise return to overview
|
|
return $LayoutObject->Redirect( OP => "Action=$Self->{Action};Notification=Update" );
|
|
}
|
|
}
|
|
}
|
|
|
|
# something went wrong
|
|
my $Output = $LayoutObject->Header();
|
|
$Output .= $LayoutObject->NavigationBar(
|
|
Type => $NavigationBarType,
|
|
);
|
|
|
|
$Output .= $LayoutObject->Notify( Priority => 'Error' );
|
|
|
|
# set notification for duplicate entry
|
|
if ( $Errors{Duplicate} ) {
|
|
$Output .= $LayoutObject->Notify(
|
|
Priority => 'Error',
|
|
Info => $LayoutObject->{LanguageObject}->Translate(
|
|
'Customer Company %s already exists!',
|
|
$GetParam{CustomerID},
|
|
),
|
|
);
|
|
}
|
|
|
|
$Self->_Edit(
|
|
Action => 'Change',
|
|
Nav => $Nav,
|
|
Errors => \%Errors,
|
|
%GetParam,
|
|
);
|
|
$Output .= $LayoutObject->Output(
|
|
TemplateFile => 'AdminCustomerCompany',
|
|
Data => \%Param,
|
|
);
|
|
$Output .= $LayoutObject->Footer();
|
|
return $Output;
|
|
}
|
|
|
|
# ------------------------------------------------------------ #
|
|
# add
|
|
# ------------------------------------------------------------ #
|
|
elsif ( $Self->{Subaction} eq 'Add' ) {
|
|
$GetParam{Name} = $ParamObject->GetParam( Param => 'Name' );
|
|
my $Output = $LayoutObject->Header();
|
|
$Output .= $LayoutObject->NavigationBar(
|
|
Type => $NavigationBarType,
|
|
);
|
|
$Self->_Edit(
|
|
Action => 'Add',
|
|
Nav => $Nav,
|
|
%GetParam,
|
|
);
|
|
$Output .= $LayoutObject->Output(
|
|
TemplateFile => 'AdminCustomerCompany',
|
|
Data => \%Param,
|
|
);
|
|
$Output .= $LayoutObject->Footer();
|
|
return $Output;
|
|
}
|
|
|
|
# ------------------------------------------------------------ #
|
|
# add action
|
|
# ------------------------------------------------------------ #
|
|
elsif ( $Self->{Subaction} eq 'AddAction' ) {
|
|
|
|
# challenge token check for write action
|
|
$LayoutObject->ChallengeTokenCheck();
|
|
|
|
my $Note = '';
|
|
my %Errors;
|
|
|
|
my $CustomerCompanyKey = $ConfigObject->Get( $GetParam{Source} )->{CustomerCompanyKey};
|
|
my $CustomerCompanyID;
|
|
|
|
# Get dynamic field backend object.
|
|
my $DynamicFieldBackendObject = $Kernel::OM->Get('Kernel::System::DynamicField::Backend');
|
|
|
|
ENTRY:
|
|
for my $Entry ( @{ $ConfigObject->Get( $GetParam{Source} )->{Map} } ) {
|
|
|
|
# check dynamic fields
|
|
if ( $Entry->[5] eq 'dynamic_field' ) {
|
|
|
|
my $DynamicFieldConfig = $Self->{DynamicFieldLookup}->{ $Entry->[2] };
|
|
|
|
if ( !IsHashRefWithData($DynamicFieldConfig) ) {
|
|
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
|
Priority => 'error',
|
|
Message => "DynamicField $Entry->[2] not found!",
|
|
);
|
|
next ENTRY;
|
|
}
|
|
|
|
my $ValidationResult = $DynamicFieldBackendObject->EditFieldValueValidate(
|
|
DynamicFieldConfig => $DynamicFieldConfig,
|
|
ParamObject => $ParamObject,
|
|
Mandatory => $Entry->[4],
|
|
);
|
|
|
|
if ( $ValidationResult->{ServerError} ) {
|
|
$Errors{ $Entry->[0] } = $ValidationResult;
|
|
}
|
|
else {
|
|
|
|
# generate storable value of dynamic field edit field
|
|
$GetParam{ $Entry->[0] } = $DynamicFieldBackendObject->EditFieldValueGet(
|
|
DynamicFieldConfig => $DynamicFieldConfig,
|
|
ParamObject => $ParamObject,
|
|
LayoutObject => $LayoutObject,
|
|
);
|
|
}
|
|
}
|
|
|
|
# check remaining non-dynamic-field mandatory fields
|
|
else {
|
|
$GetParam{ $Entry->[0] } = $ParamObject->GetParam( Param => $Entry->[0] ) // '';
|
|
if ( !$GetParam{ $Entry->[0] } && $Entry->[4] ) {
|
|
$Errors{ $Entry->[0] . 'Invalid' } = 'ServerError';
|
|
}
|
|
}
|
|
|
|
# save customer company key for checking duplicate
|
|
if ( $Entry->[2] eq $CustomerCompanyKey ) {
|
|
$CustomerCompanyID = $GetParam{ $Entry->[0] };
|
|
}
|
|
}
|
|
|
|
# get CustomerCompany list
|
|
my %List = $CustomerCompanyObject->CustomerCompanyList(
|
|
Search => $Param{Search},
|
|
Valid => 0,
|
|
);
|
|
|
|
# check duplicate field
|
|
if ( %List && $List{$CustomerCompanyID} ) {
|
|
$Errors{Duplicate} = 'ServerError';
|
|
}
|
|
|
|
# if no errors occurred
|
|
if ( !%Errors ) {
|
|
|
|
# add company
|
|
if (
|
|
$CustomerCompanyObject->CustomerCompanyAdd(
|
|
%GetParam,
|
|
UserID => $Self->{UserID},
|
|
)
|
|
)
|
|
{
|
|
|
|
$Self->_Overview(
|
|
Nav => $Nav,
|
|
Search => $Search,
|
|
%GetParam,
|
|
);
|
|
my $Output = $LayoutObject->Header();
|
|
$Output .= $LayoutObject->NavigationBar(
|
|
Type => $NavigationBarType,
|
|
);
|
|
$Output .= $LayoutObject->Notify(
|
|
Info => Translatable('Customer company added!'),
|
|
);
|
|
|
|
# set dynamic field values
|
|
my $DynamicFieldObject = $Kernel::OM->Get('Kernel::System::DynamicField');
|
|
|
|
ENTRY:
|
|
for my $Entry ( @{ $ConfigObject->Get( $GetParam{Source} )->{Map} } ) {
|
|
next ENTRY if $Entry->[5] ne 'dynamic_field';
|
|
|
|
my $DynamicFieldConfig = $Self->{DynamicFieldLookup}->{ $Entry->[2] };
|
|
|
|
if ( !IsHashRefWithData($DynamicFieldConfig) ) {
|
|
$Output .= $LayoutObject->Notify(
|
|
Info => $LayoutObject->{LanguageObject}->Translate(
|
|
'Dynamic field %s not found!',
|
|
$Entry->[2],
|
|
),
|
|
);
|
|
next ENTRY;
|
|
}
|
|
|
|
my $ValueSet = $DynamicFieldBackendObject->ValueSet(
|
|
DynamicFieldConfig => $DynamicFieldConfig,
|
|
ObjectName => $GetParam{CustomerID},
|
|
Value => $GetParam{ $Entry->[0] },
|
|
UserID => $Self->{UserID},
|
|
);
|
|
|
|
if ( !$ValueSet ) {
|
|
$Output
|
|
.= $LayoutObject->Notify(
|
|
Info => $LayoutObject->{LanguageObject}->Translate(
|
|
'Unable to set value for dynamic field %s!',
|
|
$Entry->[2],
|
|
),
|
|
);
|
|
next ENTRY;
|
|
}
|
|
}
|
|
|
|
$Output .= $LayoutObject->Output(
|
|
TemplateFile => 'AdminCustomerCompany',
|
|
Data => \%Param,
|
|
);
|
|
$Output .= $LayoutObject->Footer();
|
|
return $Output;
|
|
}
|
|
}
|
|
|
|
# something went wrong
|
|
my $Output = $LayoutObject->Header();
|
|
$Output .= $LayoutObject->NavigationBar(
|
|
Type => $NavigationBarType,
|
|
);
|
|
|
|
$Output .= $LayoutObject->Notify( Priority => 'Error' );
|
|
|
|
# set notification for duplicate entry
|
|
if ( $Errors{Duplicate} ) {
|
|
$Output .= $LayoutObject->Notify(
|
|
Priority => 'Error',
|
|
Info => $LayoutObject->{LanguageObject}->Translate(
|
|
'Customer Company %s already exists!',
|
|
$CustomerCompanyID,
|
|
),
|
|
);
|
|
}
|
|
|
|
$Self->_Edit(
|
|
Action => 'Add',
|
|
Nav => $Nav,
|
|
Errors => \%Errors,
|
|
%GetParam,
|
|
);
|
|
$Output .= $LayoutObject->Output(
|
|
TemplateFile => 'AdminCustomerCompany',
|
|
Data => \%Param,
|
|
);
|
|
$Output .= $LayoutObject->Footer();
|
|
return $Output;
|
|
}
|
|
|
|
# ------------------------------------------------------------
|
|
# overview
|
|
# ------------------------------------------------------------
|
|
else {
|
|
$Self->_Overview(
|
|
Nav => $Nav,
|
|
Search => $Search,
|
|
%GetParam,
|
|
);
|
|
my $Output = $LayoutObject->Header();
|
|
my $Notification = $ParamObject->GetParam( Param => 'Notification' ) || '';
|
|
$Output .= $LayoutObject->NavigationBar(
|
|
Type => $NavigationBarType,
|
|
);
|
|
$Output .= $LayoutObject->Notify( Info => Translatable('Customer company updated!') )
|
|
if ( $Notification && $Notification eq 'Update' );
|
|
|
|
$Output .= $LayoutObject->Output(
|
|
TemplateFile => 'AdminCustomerCompany',
|
|
Data => \%Param,
|
|
);
|
|
|
|
$Output .= $LayoutObject->Footer();
|
|
return $Output;
|
|
}
|
|
}
|
|
|
|
sub _Edit {
|
|
my ( $Self, %Param ) = @_;
|
|
|
|
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
|
|
|
$LayoutObject->Block(
|
|
Name => 'Overview',
|
|
Data => \%Param,
|
|
);
|
|
|
|
$LayoutObject->Block( Name => 'ActionList' );
|
|
$LayoutObject->Block(
|
|
Name => 'ActionOverview',
|
|
Data => \%Param,
|
|
);
|
|
|
|
$LayoutObject->Block(
|
|
Name => 'OverviewUpdate',
|
|
Data => \%Param,
|
|
);
|
|
|
|
# get config object
|
|
my $ConfigObject = $Kernel::OM->Get('Kernel::Config');
|
|
|
|
# send parameter ReadOnly to JS object
|
|
$LayoutObject->AddJSData(
|
|
Key => 'ReadOnly',
|
|
Value => $ConfigObject->{ $Param{Source} }->{ReadOnly},
|
|
);
|
|
|
|
# Get valid object.
|
|
my $ValidObject = $Kernel::OM->Get('Kernel::System::Valid');
|
|
|
|
$Param{'ValidOption'} = $LayoutObject->BuildSelection(
|
|
Data => { $ValidObject->ValidList(), },
|
|
Name => 'ValidID',
|
|
Class => 'Modernize',
|
|
SelectedID => $Param{ValidID},
|
|
);
|
|
|
|
# Get needed objects.
|
|
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
|
|
my $DynamicFieldBackendObject = $Kernel::OM->Get('Kernel::System::DynamicField::Backend');
|
|
|
|
ENTRY:
|
|
for my $Entry ( @{ $ConfigObject->Get( $Param{Source} )->{Map} } ) {
|
|
if ( $Entry->[0] ) {
|
|
|
|
# Handle dynamic fields
|
|
if ( $Entry->[5] eq 'dynamic_field' ) {
|
|
|
|
my $DynamicFieldConfig = $Self->{DynamicFieldLookup}->{ $Entry->[2] };
|
|
|
|
next ENTRY if !IsHashRefWithData($DynamicFieldConfig);
|
|
|
|
# Get HTML for dynamic field
|
|
my $DynamicFieldHTML = $DynamicFieldBackendObject->EditFieldRender(
|
|
DynamicFieldConfig => $DynamicFieldConfig,
|
|
Value => $Param{ $Entry->[0] } ? $Param{ $Entry->[0] } : undef,
|
|
Mandatory => $Entry->[4],
|
|
LayoutObject => $LayoutObject,
|
|
ParamObject => $ParamObject,
|
|
|
|
# Server error, if any
|
|
%{ $Param{Errors}->{ $Entry->[0] } },
|
|
);
|
|
|
|
# skip fields for which HTML could not be retrieved
|
|
next ENTRY if !IsHashRefWithData($DynamicFieldHTML);
|
|
|
|
$LayoutObject->Block(
|
|
Name => 'PreferencesGeneric',
|
|
Data => {},
|
|
);
|
|
|
|
$LayoutObject->Block(
|
|
Name => 'DynamicField',
|
|
Data => {
|
|
Name => $DynamicFieldConfig->{Name},
|
|
Label => $DynamicFieldHTML->{Label},
|
|
Field => $DynamicFieldHTML->{Field},
|
|
},
|
|
);
|
|
|
|
next ENTRY;
|
|
}
|
|
|
|
my $Block = 'Input';
|
|
|
|
# build selections or input fields
|
|
if ( $ConfigObject->Get( $Param{Source} )->{Selections}->{ $Entry->[0] } ) {
|
|
my $OptionRequired = '';
|
|
if ( $Entry->[4] ) {
|
|
$OptionRequired = 'Validate_Required';
|
|
}
|
|
|
|
# build ValidID string
|
|
$Block = 'Option';
|
|
$Param{Option} = $LayoutObject->BuildSelection(
|
|
Data =>
|
|
$ConfigObject->Get( $Param{Source} )->{Selections}
|
|
->{ $Entry->[0] },
|
|
Name => $Entry->[0],
|
|
Class => "$OptionRequired Modernize " .
|
|
( $Param{Errors}->{ $Entry->[0] . 'Invalid' } || '' ),
|
|
Translation => 0,
|
|
SelectedID => $Param{ $Entry->[0] },
|
|
Max => 35,
|
|
);
|
|
|
|
}
|
|
elsif ( $Entry->[0] =~ /^CustomerCompanyCountry/i ) {
|
|
my $OptionRequired = '';
|
|
if ( $Entry->[4] ) {
|
|
$OptionRequired = 'Validate_Required';
|
|
}
|
|
|
|
# build Country string
|
|
my $CountryList = $Kernel::OM->Get('Kernel::System::ReferenceData')->CountryList();
|
|
|
|
$Block = 'Option';
|
|
$Param{Option} = $LayoutObject->BuildSelection(
|
|
Data => $CountryList,
|
|
PossibleNone => 1,
|
|
Sort => 'AlphanumericValue',
|
|
Name => $Entry->[0],
|
|
Class => "$OptionRequired Modernize " .
|
|
( $Param{Errors}->{ $Entry->[0] . 'Invalid' } || '' ),
|
|
SelectedID => defined( $Param{ $Entry->[0] } ) ? $Param{ $Entry->[0] } : 1,
|
|
);
|
|
}
|
|
elsif ( $Entry->[0] =~ /^ValidID/i ) {
|
|
my $OptionRequired = '';
|
|
if ( $Entry->[4] ) {
|
|
$OptionRequired = 'Validate_Required';
|
|
}
|
|
|
|
# build ValidID string
|
|
$Block = 'Option';
|
|
$Param{Option} = $LayoutObject->BuildSelection(
|
|
Data => { $ValidObject->ValidList(), },
|
|
Name => $Entry->[0],
|
|
Class => "$OptionRequired Modernize " .
|
|
( $Param{Errors}->{ $Entry->[0] . 'Invalid' } || '' ),
|
|
SelectedID => defined( $Param{ $Entry->[0] } ) ? $Param{ $Entry->[0] } : 1,
|
|
);
|
|
}
|
|
else {
|
|
$Param{Value} = $Param{ $Entry->[0] } || '';
|
|
}
|
|
|
|
# show required flag
|
|
if ( $Entry->[4] ) {
|
|
$Param{MandatoryClass} = 'class="Mandatory"';
|
|
$Param{StarLabel} = '<span class="Marker">*</span>';
|
|
$Param{RequiredClass} = 'Validate_Required';
|
|
}
|
|
else {
|
|
$Param{MandatoryClass} = '';
|
|
$Param{StarLabel} = '';
|
|
$Param{RequiredClass} = '';
|
|
}
|
|
|
|
# show required flag
|
|
if ( $Entry->[7] ) {
|
|
$Param{ReadOnlyType} = 'readonly="readonly"';
|
|
}
|
|
else {
|
|
$Param{ReadOnlyType} = '';
|
|
}
|
|
|
|
# add form option
|
|
if ( $Param{Type} && $Param{Type} eq 'hidden' ) {
|
|
$Param{Preferences} .= $Param{Value};
|
|
}
|
|
else {
|
|
$LayoutObject->Block(
|
|
Name => 'PreferencesGeneric',
|
|
Data => {
|
|
Item => $Entry->[1],
|
|
%Param
|
|
},
|
|
);
|
|
$LayoutObject->Block(
|
|
Name => "PreferencesGeneric$Block",
|
|
Data => {
|
|
%Param,
|
|
Item => $Entry->[1],
|
|
Name => $Entry->[0],
|
|
Value => $Param{ $Entry->[0] },
|
|
InvalidField => $Param{Errors}->{ $Entry->[0] . 'Invalid' } || '',
|
|
},
|
|
);
|
|
if ( $Entry->[4] ) {
|
|
$LayoutObject->Block(
|
|
Name => "PreferencesGeneric${Block}Required",
|
|
Data => {
|
|
Name => $Entry->[0],
|
|
},
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
sub _Overview {
|
|
my ( $Self, %Param ) = @_;
|
|
|
|
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
|
|
|
$LayoutObject->Block(
|
|
Name => 'Overview',
|
|
Data => \%Param,
|
|
);
|
|
|
|
$LayoutObject->Block( Name => 'ActionList' );
|
|
$LayoutObject->Block(
|
|
Name => 'ActionSearch',
|
|
Data => \%Param,
|
|
);
|
|
|
|
my $CustomerCompanyObject = $Kernel::OM->Get('Kernel::System::CustomerCompany');
|
|
|
|
# get writable data sources
|
|
my %CustomerCompanySource = $CustomerCompanyObject->CustomerCompanySourceList(
|
|
ReadOnly => 0,
|
|
);
|
|
|
|
# only show Add option if we have at least one writable backend
|
|
if ( scalar keys %CustomerCompanySource ) {
|
|
$Param{SourceOption} = $LayoutObject->BuildSelection(
|
|
Data => { %CustomerCompanySource, },
|
|
Name => 'Source',
|
|
SelectedID => $Param{Source} || '',
|
|
Class => 'Modernize',
|
|
);
|
|
|
|
$LayoutObject->Block(
|
|
Name => 'ActionAdd',
|
|
Data => \%Param,
|
|
);
|
|
}
|
|
|
|
# if there are any registries to search, the table is filled and shown
|
|
if ( $Param{Search} ) {
|
|
|
|
# get config object
|
|
my $ConfigObject = $Kernel::OM->Get('Kernel::Config');
|
|
|
|
# same Limit as $Self->{CustomerCompanyMap}->{'CustomerCompanySearchListLimit'}
|
|
# smallest Limit from all sources
|
|
my $Limit = 400;
|
|
SOURCE:
|
|
for my $Count ( '', 1 .. 10 ) {
|
|
next SOURCE if !$ConfigObject->Get("CustomerCompany$Count");
|
|
my $CustomerUserMap = $ConfigObject->Get("CustomerCompany$Count");
|
|
next SOURCE if !$CustomerUserMap->{CustomerCompanySearchListLimit};
|
|
if ( $CustomerUserMap->{CustomerCompanySearchListLimit} < $Limit ) {
|
|
$Limit = $CustomerUserMap->{CustomerCompanySearchListLimit};
|
|
}
|
|
}
|
|
|
|
my %ListAllItems = $CustomerCompanyObject->CustomerCompanyList(
|
|
Search => $Param{Search},
|
|
Limit => $Limit + 1,
|
|
Valid => 0,
|
|
);
|
|
|
|
if ( keys %ListAllItems <= $Limit ) {
|
|
my $ListAllItems = keys %ListAllItems;
|
|
$LayoutObject->Block(
|
|
Name => 'OverviewHeader',
|
|
Data => {
|
|
ListAll => $ListAllItems,
|
|
Limit => $Limit,
|
|
},
|
|
);
|
|
}
|
|
|
|
my %List = $CustomerCompanyObject->CustomerCompanyList(
|
|
Search => $Param{Search},
|
|
Valid => 0,
|
|
);
|
|
|
|
if ( keys %ListAllItems > $Limit ) {
|
|
my $ListAllItems = keys %ListAllItems;
|
|
my $SearchListSize = keys %List;
|
|
|
|
$LayoutObject->Block(
|
|
Name => 'OverviewHeader',
|
|
Data => {
|
|
SearchListSize => $SearchListSize,
|
|
ListAll => $ListAllItems,
|
|
Limit => $Limit,
|
|
},
|
|
);
|
|
}
|
|
|
|
$LayoutObject->Block(
|
|
Name => 'OverviewResult',
|
|
Data => \%Param,
|
|
);
|
|
|
|
# get valid list
|
|
my %ValidList = $Kernel::OM->Get('Kernel::System::Valid')->ValidList();
|
|
|
|
if ( !$ConfigObject->Get( $Param{Source} )->{Params}->{ForeignDB} ) {
|
|
$LayoutObject->Block( Name => 'LocalDB' );
|
|
}
|
|
|
|
# if there are results to show
|
|
if (%List) {
|
|
for my $ListKey ( sort { $List{$a} cmp $List{$b} } keys %List ) {
|
|
|
|
my %Data = $CustomerCompanyObject->CustomerCompanyGet( CustomerID => $ListKey );
|
|
$LayoutObject->Block(
|
|
Name => 'OverviewResultRow',
|
|
Data => {
|
|
%Data,
|
|
Search => $Param{Search},
|
|
Nav => $Param{Nav},
|
|
},
|
|
);
|
|
|
|
if ( !$ConfigObject->Get( $Param{Source} )->{Params}->{ForeignDB} ) {
|
|
$LayoutObject->Block(
|
|
Name => 'LocalDBRow',
|
|
Data => {
|
|
Valid => $ValidList{ $Data{ValidID} },
|
|
%Data,
|
|
},
|
|
);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
# otherwise it displays a no data found message
|
|
else {
|
|
$LayoutObject->Block(
|
|
Name => 'NoDataFoundMsg',
|
|
Data => {},
|
|
);
|
|
}
|
|
}
|
|
|
|
# if there is nothing to search it shows a message
|
|
else
|
|
{
|
|
$LayoutObject->Block(
|
|
Name => 'NoSearchTerms',
|
|
Data => {},
|
|
);
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
1;
|