Далее, если хотим добавить поиск по названию компании:
файл Kernel/System/CustomerUser/DB.pm
подпрограмма CustomerSearch
строка
my $SQL = "SELECT $Self->{CustomerKey} ";
заменяем на
my $SQL = "SELECT $Self->{CustomerTable}.$Self->{CustomerKey} ";
строка
$SQL .= ", $Entry";
заменяем на
$SQL .= ", $Self->{CustomerTable}.$Entry";
строка
$SQL .= " , first_name, last_name, email ";
заменяем на
$SQL .= " , $Self->{CustomerTable}.first_name, $Self->{CustomerTable}.last_name, $Self->{CustomerTable}.email ";
строка
$SQL .= " FROM $Self->{CustomerTable} WHERE ";
заменяем на
$SQL .= " FROM $Self->{CustomerTable} LEFT JOIN ".$Self->{ConfigObject}->Get('CustomerCompany')->{Params}->{Table}." ON $Self->{CustomerTable}.customer_ID=".$Self->{ConfigObject}->Get('CustomerCompany')->{Params}->{Table}.".customer_ID WHERE ";
блок
$SQL .= $Self->{DBObject}->QueryCondition(
Key => $Self->{CustomerUserMap}->{CustomerUserSearchFields},
Value => $Param{Search},
SearchPrefix => $Self->{SearchPrefix},
SearchSuffix => $Self->{SearchSuffix},
) . ' ';
заменяем на
my ($Fields,@Fields);
my $i=0;
for my $Field ( @{ $Self->{CustomerUserMap}->{CustomerUserSearchFields} } ) {
$Fields[$i++] = $Self->{CustomerTable}.".".$Field;
}
$Fields[$i] = $Self->{ConfigObject}->Get('CustomerCompany')->{Params}->{Table}.".name";
@Fields=([@Fields]);
$SQL .= $Self->{DBObject}->QueryCondition(
Key => @Fields,
Value => $Param{Search},
SearchPrefix => $Self->{SearchPrefix},
SearchSuffix => $Self->{SearchSuffix},
) . ' ';
строка
. $Self->{CustomerUserMap}->{CustomerValid}
заменяем на
. $Self->{CustomerTable}.".".$Self->{CustomerUserMap}->{CustomerValid}
В результате будет запрос:
SELECT customer_user.login , customer_user.first_name, customer_user.last_name, customer_user.customer_id, customer_user.email
FROM customer_user
LEFT JOIN customer_company ON customer_user.customer_ID=customer_company.customer_ID
WHERE ((customer_user.login LIKE '%ivan%' OR customer_user.first_name LIKE '%ivan%' OR customer_user.last_name LIKE '%ivan%' OR customer_user.customer_id LIKE '%ivan%' OR customer_user.email LIKE '%ivan%' OR customer_company.name LIKE '%ivan%' ) ) AND customer_user.valid_id IN (1)
Все. Теперь работает поиск по компании как в списке клиентов, так и при автопоиске при создании тикетов, в адресной книге и т.д.
Остался один минус - при автопоиске выдаются результаты в виде:
"Иван Иванов 00000001" <email@email.com> (ivan.ivanov)
Т.е. название компании не отображается. Не могу расковырять где форматируется результат запроса (я подозреваю что это делается уже яваскриптами и AJAX-ом...). Запрос используется тот же самый, из
Kernel/System/CustomerUser/DB.pm подпрограмма
CustomerSearch, можно в запросе в SELECT добавить название компании и подставить в результат автопоиска...