Поиск в интерфейсе клиента

Обсуждение вопросов и решений

Модератор: ykolesnikov

Ответить
ykolesnikov
OTRS Гуру
Сообщения: 3119
Зарегистрирован: 24 дек 2010, 09:27
Откуда: Череповец
Благодарил (а): 4 раза
Поблагодарили: 5 раз
Контактная информация:

Поиск в интерфейсе клиента

Сообщение ykolesnikov » 19 апр 2013, 08:12

Добрый день, коллеги!
Можно ли в состав аргументов поиска заявок у клиента включить атрибуты клиента из MAP в Config.pm?
Мне нужен поиск заявок клиентом по отделу. Компания используется в качестве CustomerID.
P.S. Замечено, что несмотря на отключение показа заявок компании ( пункта меню для показа нет), при поиске - отображаются все заявки компании, удовлетворяющие условию поиска. Видимо надо еще где-то подкрутить. :oops:
С уважением Юрий Колесников
OTRS 5.0.22, ITSM 5.0.22
OpenSuse 13.2, MariaDB 10.0.22
OTRS 5.0.22, ITSM 5.0.22 тестовая

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Поиск в интерфейсе клиента

Сообщение alexus » 19 апр 2013, 23:24

У нас есть модуль, который импортирует параметры клиенты из Map в динамические поля тикета. Далее - просто поиск по дин полям.
С уважением,
Алексей Юсов

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

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

yuri0001
OTRS Бывалый
Сообщения: 492
Зарегистрирован: 11 фев 2011, 20:25
Откуда: Череповец

Re: Поиск в интерфейсе клиента

Сообщение yuri0001 » 20 апр 2013, 04:11

Понятно, спасибо за информацию. Значит нельзя. :(
С уважением
Ю. Колесников
OTRS 3.3.1, ITSM 3.3.1, SUSE 12, MySQL5

ykolesnikov
OTRS Гуру
Сообщения: 3119
Зарегистрирован: 24 дек 2010, 09:27
Откуда: Череповец
Благодарил (а): 4 раза
Поблагодарили: 5 раз
Контактная информация:

Re: Поиск в интерфейсе клиента

Сообщение ykolesnikov » 21 май 2013, 08:21

Возник еще вопрос!
Можно ли ограничить поиск клиентом заявок - только его заявок?
Т.е. при обычном поиске, если клиент не указан - отображаются все заявки компании (CustomerID - компания клиента), удовлетворяющие критерию поиска и клиент может делать с ними, что хочет - писать ответы и т.д., что не есть хорошо! :cry:
С уважением Юрий Колесников
OTRS 5.0.22, ITSM 5.0.22
OpenSuse 13.2, MariaDB 10.0.22
OTRS 5.0.22, ITSM 5.0.22 тестовая

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Поиск в интерфейсе клиента

Сообщение alexus » 21 май 2013, 11:25

Надо подправить CustomerTicketSearch.pm
С уважением,
Алексей Юсов

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

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

ykolesnikov
OTRS Гуру
Сообщения: 3119
Зарегистрирован: 24 дек 2010, 09:27
Откуда: Череповец
Благодарил (а): 4 раза
Поблагодарили: 5 раз
Контактная информация:

Re: Поиск в интерфейсе клиента

Сообщение ykolesnikov » 21 май 2013, 14:20

Спасибо, Алексей!
Посмотрел модуль, но, видимо моих представлений не хватает, чтобы идентифицировать место изменения.
Вижу раздел

Код: Выделить всё

# perform ticket search
и там

Код: Выделить всё

CustomerUserID      => $Self->{UserID},
ну и

Код: Выделить всё

# get search string params (get submitted params)
    else {
        for my $Key (
            qw(TicketNumber From To Cc Subject Body CustomerID ResultForm TimeSearchType StateType
            SearchInArchive
            TicketCreateTimePointFormat TicketCreateTimePoint
            TicketCreateTimePointStart
            TicketCreateTimeStart TicketCreateTimeStartDay TicketCreateTimeStartMonth
            TicketCreateTimeStartYear
            TicketCreateTimeStop TicketCreateTimeStopDay TicketCreateTimeStopMonth
            TicketCreateTimeStopYear
            )
            )
Больше CustomerID не встречается явно нигде. Да и здесь непонятно что править. :cry:
Если только убрать CustomerID из последнего набора считываемых параметров, но, не понимая синтаксиса, можно все "сдвинуть"
С уважением Юрий Колесников
OTRS 5.0.22, ITSM 5.0.22
OpenSuse 13.2, MariaDB 10.0.22
OTRS 5.0.22, ITSM 5.0.22 тестовая

merkushov
OTRS Бывалый
Сообщения: 310
Зарегистрирован: 25 окт 2012, 15:06
Откуда: Воронеж
Поблагодарили: 2 раза

Re: Поиск в интерфейсе клиента

Сообщение merkushov » 21 май 2013, 16:14

В Kernel/Modules/CustomerTicketSearch.pm добавить новый параметр NoCompanySearch

Код: Выделить всё

        # perform ticket search
        my @ViewableTicketIDs = $Self->{TicketObject}->TicketSearch(
            Result              => 'ARRAY',
            SortBy              => $Self->{SortBy},
            OrderBy             => $Self->{Order},
            Limit               => $Self->{SearchLimit},
            CustomerUserID      => $Self->{UserID},
            NoCompanySearch => 1,
            ConditionInline     => $Self->{Config}->{ExtendedSearchCondition},
            ContentSearchPrefix => '*',
            ContentSearchSuffix => '*',
            FullTextIndex       => 1,
            %GetParam,
            %DynamicFieldSearchParameters,
        );
а в Kernel/System/TicketSearch.pm его обрабатывать

Код: Выделить всё

            # get all customer ids
            $SQLExt .= ' AND (';

            unless ( $Param{NoCompanySearch} ) {
                my @CustomerIDs = $Self->{CustomerUserObject}->CustomerIDs(
                    User => $Param{CustomerUserID},
                );

                if (@CustomerIDs) {

                    my $Lower = '';
                    if ( !$Self->{DBObject}->GetDatabaseFunction('CaseInsensitive') ) {
                        $Lower = 'LOWER';
                    }

                    $SQLExt .= "$Lower(st.customer_id) IN (";
                    
                    my $Exists = 0;

                    for (@CustomerIDs) {

                        if ($Exists) {
                            $SQLExt .= ', ';
                        }
                        else {
                            $Exists = 1;
                        }
                        $SQLExt .= "$Lower('" . $Self->{DBObject}->Quote($_) . "')";
                    }
                    $SQLExt .= ') OR ';
                }
            }

            # get all own tickets
            my $CustomerUserIDQuoted = $Self->{DBObject}->Quote( $Param{CustomerUserID} );
            $SQLExt .= "st.customer_user_id = '$CustomerUserIDQuoted') ";
Последний раз редактировалось merkushov 22 май 2013, 09:45, всего редактировалось 2 раза.
Меркушов Виктор, perl программист

yuri0001
OTRS Бывалый
Сообщения: 492
Зарегистрирован: 11 фев 2011, 20:25
Откуда: Череповец

Re: Поиск в интерфейсе клиента

Сообщение yuri0001 » 21 май 2013, 16:46

Большое спасибо, Виктор!
Завтра попробую. :oops:
С уважением
Ю. Колесников
OTRS 3.3.1, ITSM 3.3.1, SUSE 12, MySQL5

spartak
OTRS Новобранец
Сообщения: 56
Зарегистрирован: 12 апр 2011, 17:51
Откуда: UA, Kiev
Контактная информация:

Re: Поиск в интерфейсе клиента

Сообщение spartak » 27 май 2013, 10:49

Добрый день.

Подскажите, пожалуйста, как в интерфейсе клиента в поиске добавить - выбирать по "Тип заявки"?
Пытался добавить блок из меню "приоритет" в /live/customer.pl?Action=CustomerTicketSearch
в /opt/otrs/Kernel/Output/HTML - но к сожалению не отображается.

В Frontend::Customer::Ticket::ViewSearch - функция например Ticket::Frontend::AgentTicketPriority###TicketType - отсутствует.

Спасибо.
ОТРС 3.0
С уважением,
Сергей
OTRS 3.0, ITSM 3.0.5, CentOS, PostgreSQL

merkushov
OTRS Бывалый
Сообщения: 310
Зарегистрирован: 25 окт 2012, 15:06
Откуда: Воронеж
Поблагодарили: 2 раза

Re: Поиск в интерфейсе клиента

Сообщение merkushov » 27 май 2013, 15:00

spartak писал(а):Подскажите, пожалуйста, как в интерфейсе клиента в поиске добавить - выбирать по "Тип заявки"?
Там будет немного изменений в Kernel/Modules/CustomerTicketSearch.pm и Kernel/Output/HTML/Standard/CustomerTicketSearch.dtl
Вам придётся самому в этом разобраться.
Меркушов Виктор, perl программист

spartak
OTRS Новобранец
Сообщения: 56
Зарегистрирован: 12 апр 2011, 17:51
Откуда: UA, Kiev
Контактная информация:

Re: Поиск в интерфейсе клиента

Сообщение spartak » 27 май 2013, 15:25

Виктор,

я могу использовать блок c:
/opt/otrs/Kernel/Output/HTML/Standard/CustomerTicketMessage.dtl

Код: Выделить всё

<!-- dtl:block:TicketType -->
                <div>
<!--<label for="TicketNumber">$Config{"Ticket::Hook"}</label>
                    <input title="Ticket#" type="text" name="TicketNumber" size="30" value="$QData{"TicketNumber"}" />-->
                    <label for="TypeID" class="Mandatory">
                        <span class="Marker">*</span>
                        $Text{"Type"}:
                    </label>
                    $Data{"TypeStrg"}
                    <div id="TypeIDError" class="TooltipErrorMessage" ><p>$Text{"This field is required."}</p></div>
                    <div id="TypeIDServerError" class="TooltipErrorMessage NoJavaScriptMessage$QData{"TypeIDInvalid"}" ><p>$Text{"This field is required."}</p></div>
                    <div class="Clear"></div>
                </div>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
    $('#TypeID').bind('change', function (Event) {
        // make sure the ticket is not yet created on queue change
        $('input#Expand').val(1);
        Core.Form.Validate.DisableValidation($(this).closest('form'));
        $(this).closest('form').submit();
    });
//]]></script>
<!--dtl:js_on_document_complete-->
<!-- dtl:block:TicketType -->
и поместить его в Kernel/Output/HTML/Standard/CustomerTicketSearch.dtl
С уважением,
Сергей
OTRS 3.0, ITSM 3.0.5, CentOS, PostgreSQL

merkushov
OTRS Бывалый
Сообщения: 310
Зарегистрирован: 25 окт 2012, 15:06
Откуда: Воронеж
Поблагодарили: 2 раза

Re: Поиск в интерфейсе клиента

Сообщение merkushov » 27 май 2013, 16:10

Хорошо.

А теперь нужно из Kernel/Modules/CustomerTicketMessage.pm перенести в Kernel/Modules/CustomerTicketSearch.pm логику заполнения данными (отрисовку) этого блока и обработку выбранного в форме значения для формирования правильного поискового запроса.
Меркушов Виктор, perl программист

yuri0001
OTRS Бывалый
Сообщения: 492
Зарегистрирован: 11 фев 2011, 20:25
Откуда: Череповец

Re: Поиск в интерфейсе клиента

Сообщение yuri0001 » 09 июн 2013, 21:21

yuri0001 писал(а):Большое спасибо, Виктор!
Завтра попробую. :oops:
Получилось не завтра, но, главное, получилось!
А потому, еще раз спасибо, Виктор! Работает :D
С уважением
Ю. Колесников
OTRS 3.3.1, ITSM 3.3.1, SUSE 12, MySQL5

Ответить