dashboard - добавить столбец с именем клиента

Moderator: DenisBY

Locked
Suslik
Znuny newbie
Posts: 5
Joined: 25 Mar 2011, 16:59
Znuny Version: 3.0.6

dashboard - добавить столбец с именем клиента

Post by Suslik »

доброго времени суток всем.

задача - в дашборде в блоках отображения заявок необходимо добавить столбец с именем клиента, к кому данная заявка прикреплена.

очередь, пользователей, статус заявки нашел как сделать, а вот с клиентом пока никак. кто-нибудь делал подобное?

для добавления вышеуказанного правил AgentDashboardTicketGeneric.dtl
например добавить очередь:

Code: Select all

<td class="W40pc">
  <div title="$QData{"Title"}">$QData{"Queue","25"}</div>
</td>
где-то в шаблонах находил подстановку для имени клиента $QData{"Realname"}, но фишка не прошла))
alexus
Znuny wizard
Posts: 380
Joined: 20 Sep 2010, 16:54
Znuny Version: OTRS 6 CE
Real Name: Alexey Yusov
Company: Radiant System Group s.r.o
Location: Prague
Contact:

Re: dashboard - добавить столбец с именем клиента

Post by alexus »

http://otrs.ru/forum/viewtopic.php?f=4&t=3
Можно подставлять только поля, которые есть в тикете. По ссылке описывается, как добавить CustomerID.
Alexey Yusov

Production: OTRS CE ITSM 6.0.28 on CentOS 7 + Apache 2.4 + MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator
RS4OTRS marketplace
Stay tuned on our Facebook
((OTRS)) Community Edition - what next?
Suslik
Znuny newbie
Posts: 5
Joined: 25 Mar 2011, 16:59
Znuny Version: 3.0.6

Re: dashboard - добавить столбец с именем клиента

Post by Suslik »

alexus wrote:http://otrs.ru/forum/viewtopic.php?f=4&t=3
Можно подставлять только поля, которые есть в тикете. По ссылке описывается, как добавить CustomerID.
это я уже делал :? id - не то, что нужно. нужно именно название клиента.

если поле "имя клиента" не входит в состав полей, принадлежащих тикетам, то наверное как то можно подставлять название клиент вместо его id, делая запрос, как раз по его id? если это возможно, то как? если нет, то будет обидно немного
alexus
Znuny wizard
Posts: 380
Joined: 20 Sep 2010, 16:54
Znuny Version: OTRS 6 CE
Real Name: Alexey Yusov
Company: Radiant System Group s.r.o
Location: Prague
Contact:

Re: dashboard - добавить столбец с именем клиента

Post by alexus »

Возможно всё! Всё дело в цене на билет :D . Надо делать отдельный запрос в базу к таблице с клиентами, ну или в AD, в зависимости от ситуации.
Alexey Yusov

Production: OTRS CE ITSM 6.0.28 on CentOS 7 + Apache 2.4 + MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator
RS4OTRS marketplace
Stay tuned on our Facebook
((OTRS)) Community Edition - what next?
lelikflegma
Znuny newbie
Posts: 18
Joined: 24 Feb 2012, 18:53
Znuny Version: OTRS3011

Re: dashboard - добавить столбец с именем клиента

Post by lelikflegma »

1. А мне нужно добавить столбец с названием компании в списке клиентов. По дефолту выводится только столбец "ID клиента". Я понимаю, что выводятся только те поля, которые есть в таблице customer_user и нужно писать еще один запрос на выборку из таблицы customer_company и по ключу customer_id найти название компании.
Вопрос: как добавить запрос? Не могу найти в каком месте они вообще хранятся...
2. Аналогично, хотелось бы расширить возможности функции Autocomplete которая используется для заполнения почтового адреса при создании тикета, чтобы она искала не только по таблице customer_user но и по customer_company, если например вводить не данные клиента, а например, название компании, чтоб получить список ее пользователей. В этом случае наверно так же нужно добавлять запрос, подскажите в каком месте.
yuri0001
Znuny superhero
Posts: 631
Joined: 17 Mar 2011, 14:40
Znuny Version: 5.0.6
Real Name: Yuri Kolesnikov
Location: Russia

Re: dashboard - добавить столбец с именем клиента

Post by yuri0001 »

Скажу крамольную вещь, но я ее использую. Сделайте, чтобы в CustomerID у Вас был Company name (OrganizationUnit/Organization из AD) и все Ваши мучения кончатся. На самом деле - это именно и правильно. Это не противоречит ни AD ни OTRS. Тогда Вы увидите в Dashbord какой компании принадлежат заявки, а не только имя клиента и без лишнего программирования
Ну и во вложении AgentDashboardTicketGeneric.dtl с дополнительными столбцами и заголовками столбцов. Несколько коряво, но кто может пусть сделает лучше и покажет.
You do not have the required permissions to view the files attached to this post.
Best regards Yuri Kolesnikov
OTRS 5.0.14, ITSM 5.0.14
SUSE 13.2, MariaDB 10.0.22(productive)
OTRS 5.0.14, ITSM 5.0.14(test)
lelikflegma
Znuny newbie
Posts: 18
Joined: 24 Feb 2012, 18:53
Znuny Version: OTRS3011

Re: dashboard - добавить столбец с именем клиента

Post by lelikflegma »

Я думал о таком варианте, но он не устраивает, т.к. данные в базу ОТРС вносятся из другой базы и в качестве ключа используется ID компании.
В таком случае лучше, наверно, использовать вариант избыточности данных и добавить в таблицу customer_user поле названия компании, тогда будет работать и AutoComplete по ID и по названию компании, и столбец с названием компании можно вывести...
Но все же, не думаю что так сложно модифицировать запрос и сделать его связным по двум таблицам... Ткните только где они строятся эти запросы...
yuri0001
Znuny superhero
Posts: 631
Joined: 17 Mar 2011, 14:40
Znuny Version: 5.0.6
Real Name: Yuri Kolesnikov
Location: Russia

Re: dashboard - добавить столбец с именем клиента

Post by yuri0001 »

Посмотрите в AgentDashboardGeneric.pm
Best regards Yuri Kolesnikov
OTRS 5.0.14, ITSM 5.0.14
SUSE 13.2, MariaDB 10.0.22(productive)
OTRS 5.0.14, ITSM 5.0.14(test)
lelikflegma
Znuny newbie
Posts: 18
Joined: 24 Feb 2012, 18:53
Znuny Version: OTRS3011

Re: dashboard - добавить столбец с именем клиента

Post by lelikflegma »

Не нашел такого файла.
yuri0001
Znuny superhero
Posts: 631
Joined: 17 Mar 2011, 14:40
Znuny Version: 5.0.6
Real Name: Yuri Kolesnikov
Location: Russia

Re: dashboard - добавить столбец с именем клиента

Post by yuri0001 »

Попробуйте DashboardTicketGeneric.pm
Best regards Yuri Kolesnikov
OTRS 5.0.14, ITSM 5.0.14
SUSE 13.2, MariaDB 10.0.22(productive)
OTRS 5.0.14, ITSM 5.0.14(test)
lelikflegma
Znuny newbie
Posts: 18
Joined: 24 Feb 2012, 18:53
Znuny Version: OTRS3011

Re: dashboard - добавить столбец с именем клиента

Post by lelikflegma »

Разобрался. Кому интересно: для добавления столбца названия компании в списке клиентов, необходимо сделать следующее:
файл Kernel/System/CustomerUser/DB.pm
подпрограмма CustomerUserDataGet
строка 456
$SQL .= " $Entry->[2], ";
заменяем на
$SQL.= " $Self->{CustomerTable}.$Entry->[2], ";

строка 458
$SQL .= $Self->{CustomerKey} . " FROM $Self->{CustomerTable} WHERE ";
заменяем на
$SQL .= $Self->{CustomerTable}.".".$Self->{CustomerKey} . ", ".$Self->{ConfigObject}->Get('CustomerCompany')->{Params}->{Table}.".name FROM $Self->{CustomerTable}, ".$Self->{ConfigObject}->Get('CustomerCompany')->{Params}->{Table}." WHERE ";

добавлена строка 487
$SQL .= " and $Self->{CustomerTable}.customer_ID=".$Self->{ConfigObject}->Get('CustomerCompany')->{Params}->{Table}.".customer_ID";

добавлена строка 500
$Data{UserCompanyName} = $Row[17];

В фале Kernel/Output/HTML/Standard/AdminCustomerUser.dtl
Добавлена строка 94
<th>$Text{"Company"}</th>

Добавлена строка 119
<td>$QData{"UserCompanyName"}</td>

В результате получим запрос:
SELECT customer_user.title, customer_user.first_name, customer_user.last_name, customer_user.login, customer_user.pw, customer_user.email, customer_user.customer_id, customer_user.phone, customer_user.fax, customer_user.mobile, customer_user.street, customer_user.zip, customer_user.city, customer_user.country, customer_user.comments, customer_user.valid_id, customer_user.login, customer_company.name
FROM customer_user, customer_company
WHERE LOWER(login) = LOWER('ivan.ivanov') and customer_user.customer_ID=customer_company.customer_ID
Last edited by lelikflegma on 28 Feb 2012, 18:10, edited 1 time in total.
lelikflegma
Znuny newbie
Posts: 18
Joined: 24 Feb 2012, 18:53
Znuny Version: OTRS3011

Re: dashboard - добавить столбец с именем клиента

Post by lelikflegma »

Далее, если хотим добавить поиск по названию компании:
файл 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 добавить название компании и подставить в результат автопоиска...
catty
Znuny newbie
Posts: 3
Joined: 23 Mar 2012, 11:34
Znuny Version: ver3010

Re: dashboard - добавить столбец с именем клиента

Post by catty »

Добрый день! После того, как внесла необходимые правки, в таблице клиентов перестали отображаться те, что без компании.
Что можно с этим сделать? Или я ошиблась где-то при редактировании?
Заранее благодарю.
lelikflegma
Znuny newbie
Posts: 18
Joined: 24 Feb 2012, 18:53
Znuny Version: OTRS3011

Re: dashboard - добавить столбец с именем клиента

Post by lelikflegma »

Надо перестроить запрос:
SELECT customer_user.title, customer_user.first_name, customer_user.last_name, customer_user.login, customer_user.pw, customer_user.email, customer_user.customer_id, customer_user.phone, customer_user.fax, customer_user.mobile, customer_user.street, customer_user.zip, customer_user.city, customer_user.country, customer_user.comments, customer_user.valid_id, customer_user.login, customer_company.name
FROM customer_user, customer_company
WHERE LOWER(login) = LOWER('ivan.ivanov') and customer_user.customer_ID=customer_company.customer_ID

с использованием LEFT JOIN. Просто в моем случае клиентов без компаний не бывает.
Locked