Иерархия компаний и поля с автокомпиляцией
Модератор: ykolesnikov
Re: Иерархия компаний и поля с автокомпиляцией
Поправил в месте где создаем БД. Забыл написать про создание автоинкремента поля id.
Хочу заметить, что для сообщений и заявок дела с добавлением полей намного лучше. Как добавить поле в заявку можете посмотреть ссылке ниже.
http://doc.otrs.org/3.2/ru/html/dynamicfields.html
Хочу заметить, что для сообщений и заявок дела с добавлением полей намного лучше. Как добавить поле в заявку можете посмотреть ссылке ниже.
http://doc.otrs.org/3.2/ru/html/dynamicfields.html
OTRS 3.2.8, Ubuntu 12.04, Apache, PostgreSQL
Re: Иерархия компаний и поля с автокомпиляцией
Небольшое отступление: сделаем в форме редактирования компании поле "Комментарий" в виде textarea (т. е. не вместо одной строки ввода, многострочное поле ввода).
Во view'шке (верстке страницы) и controller'е (описание логики) разработчики предусмотрели только поля типа input и select.
Для начала поправим view'шку. Копируем Kernel/Output/HTML/AdminCustomerCompany.dtl в Custom/Kernel/Output/HTML/. Правим, скопированный файл:
Ищем:
Это конец блока Input и начало блока Option. Между этими двумя строками вставляем:
Теперь поправим логику. Правим файл Custom/Kernel/Modules/AdminCustomerCompany.pm:
Ищем наше "намыленное" место.
Ищем цикл:
В нем условие:
После вставляем elsif на случай с полем "Комментарий":
Проверяем и радуемся))
Во view'шке (верстке страницы) и controller'е (описание логики) разработчики предусмотрели только поля типа input и select.
Для начала поправим view'шку. Копируем Kernel/Output/HTML/AdminCustomerCompany.dtl в Custom/Kernel/Output/HTML/. Правим, скопированный файл:
Ищем:
Код: Выделить всё
<!-- dtl:block:PreferencesGenericInput -->
<!-- dtl:block:PreferencesGenericOption -->
Код: Выделить всё
<!-- dtl:block:PreferencesGenericText -->
<label for="$QData{"Name"}" $Data{"MandatoryClass"}>
$Data{"StarLabel"}
$Text{"$Data{"Item"}"}:
</label>
<div class="Field">
<textarea id="$QData{"Name"}" class="W50pc $Data{"RequiredClass"} $Data{"InvalidField"} $QData{"Action"}" name="$QData{"Name"}" title="Text" rows="10">$QData{"Value"}</textarea>
<!-- dtl:block:PreferencesGenericTextRequired -->
<div id="$QData{"Name"}Error" class="TooltipErrorMessage">
<p>$Text{"This field is required."}</p>
</div>
<div id="$QData{"Name"}ServerError" class="TooltipErrorMessage">
<p>$Text{"This field is required."}</p>
</div>
<!-- dtl:block:PreferencesGenericTextRequired -->
</div>
<div class="Clear"></div>
<!-- dtl:block:PreferencesGenericText -->
Ищем наше "намыленное" место.
Ищем цикл:
Код: Выделить всё
for my $Entry ( @{ $Self->{ConfigObject}->Get('CustomerCompany')->{Map} } ) {
Код: Выделить всё
if ( $Self->{ConfigObject}->Get('CustomerCompany')->{Selections}->{ $Entry->[0] } ) {
my $OptionRequired = '';
if ( $Entry->[4] ) {
$OptionRequired = 'Validate_Required';
}
# build ValidID string
$Block = 'Option';
$Param{Option} = $Self->{LayoutObject}->BuildSelection(
Data =>
$Self->{ConfigObject}->Get('CustomerCompany')->{Selections}
->{ $Entry->[0] },
Name => $Entry->[0],
Class => $OptionRequired . ' ' .
( $Param{Errors}->{ $Entry->[0] . 'Invalid' } || '' ),
Translation => 0,
SelectedID => $Param{ $Entry->[0] },
Max => 35,
);
}
Код: Выделить всё
elsif ( $Entry->[0] =~ /^CustomerCompanyComment/i ) {
my $OptionRequired = '';
if ( $Entry->[4] ) {
$OptionRequired = 'Validate_Required';
}
$Block = 'Text';
$Param{Value} = $Self->{LayoutObject}->BuildSelection(
Data => $Param{ $Entry->[0] },
Name => $Entry->[0],
Class => $OptionRequired . ' ' .
( $Param{Errors}->{ $Entry->[0] . 'Invalid' } || '' ),
SelectedID => defined( $Param{ $Entry->[0] } ) ? $Param{ $Entry->[0] } : 1,
);
}
OTRS 3.2.8, Ubuntu 12.04, Apache, PostgreSQL
Re: Иерархия компаний и поля с автокомпиляцией
А можно еще пару иллюстраций, так сказать для полноты картины?
Алексей Шульгин
SoftServe Business Systems
OTRS 3.3.12 + ITSM 3.3.12
SoftServe Business Systems
OTRS 3.3.12 + ITSM 3.3.12
Re: Иерархия компаний и поля с автокомпиляцией
Какие именно иллюстрации нужны?
Вот создание компании клиента:
Вот создание компании клиента:
- Вложения
-
- pict.png (24.46 КБ) 12189 просмотров
OTRS 3.2.8, Ubuntu 12.04, Apache, PostgreSQL
Re: Иерархия компаний и поля с автокомпиляцией
Итак, друзья мои, обещанный autocompete поля "Вышестоящая организация" в купе с autocomplete'ом поля "id клиента", а также кнопочкой "Добавить нового клиента от этой организации" при редактировании сведений о компании.
Для начала уберем излишний код. Из файла Custom/Kernel/Modules/AdminCustomerCompany.pm удаляем следующие строки:
Данный код генерировал ниспадающий список полю "Вышестоящая организация". Теперь он нам не нужен.
Далее на скрепке плагин, который необходимо установить. Распаковываем и через "управление плагинами" панели администратора устанавливаем.
Данный плагин взят здесь: http://complemento.net.br/en/products-p ... e-on-otrs/
Он рассчитан на OTRS версии 3.0.х и 3.1.х, поэтому если будете качать с сайта, то после необходимо открыть его в блокноте и добавить строчку:
после строк
Как я уже писал, данный плагин не рассчитан под OTRS 3.2.x, поэтому подправим его. Копируем файл Kernel/Output/HTML/Standart/CustomerCompanyExtensions.dtl в Custom/Kernel/Output/HTML/Standart/. В скопированном файле ищем строку:
Заменяем на:
Плагин добавляет кнопку для создания клиента на странице редактирования компании, но не русифицирует ее. Исправим и это. В файле Kernel/Language/re_Custom.pm после строки
Вставляем строку
Плохо то, что при нажатии на кнопку "Добавить клиента от этой организации", в открывшейся странице автоматом не вбита организация. Возможно, покапавшись, в дальнейшем я это исправлю.
На данный момент у Вас добавилась вышеупомянутая кнопка и autocompete в поле "id клиента" на странице создания/редактирования клиента.
Теперь добавим autocompete к полю "Вышестоящая организация" на странице создания/редактирования компании. В том же файле ищем строки:
Заменяем на
Готово!
Для начала уберем излишний код. Из файла Custom/Kernel/Modules/AdminCustomerCompany.pm удаляем следующие строки:
Код: Выделить всё
elsif ( $Entry->[0] =~ /^CustomerCompanyParent/i ) {
my $OptionRequired = '';
if ( $Entry->[4] ) {
$OptionRequired = 'Validate_Required';
}
$Block = 'Option';
$Param{Option} = $Self->{LayoutObject}->BuildSelection(
Data => { $Self->{CustomerCompanyObject}->CustomerCompanyList(), },
Name => $Entry->[0],
Class => $OptionRequired . ' ' .
( $Param{Errors}->{ $Entry->[0] . 'Invalid' } || '' ),
SelectedID => defined( $Param{ $Entry->[0] } ) ? $Param{ $Entry->[0] } : 1,
);
}
Далее на скрепке плагин, который необходимо установить. Распаковываем и через "управление плагинами" панели администратора устанавливаем.
Данный плагин взят здесь: http://complemento.net.br/en/products-p ... e-on-otrs/
Он рассчитан на OTRS версии 3.0.х и 3.1.х, поэтому если будете качать с сайта, то после необходимо открыть его в блокноте и добавить строчку:
Код: Выделить всё
<Framework>3.2.x</Framework>
Код: Выделить всё
<Framework>3.0.x</Framework>
<Framework>3.1.x</Framework>
Код: Выделить всё
$(".ActionList .Last").before('<li><a class="CallForAction" href="index.pl?Action=AdminCustomerUser;Source=CustomerUser;Subaction=AddAction;UserCustomerID='+$("input[name=CustomerCompanyID]").val()+'"><span>$QData{"ActionText"}</span></a></li>');
Код: Выделить всё
$(".ActionList .Last").before('<li><a class="CallForAction" href="index.pl?Action=AdminCustomerUser;Source=CustomerUser;Subaction=Add;UserCustomerID='+$("input[name=CustomerCompanyID]").val()+'"><span>$QData{"ActionText"}</span></a></li>');
Код: Выделить всё
# own translations
Код: Выделить всё
$Self->{Translation}->{'Add new Contact of this Company'} = 'Добавить нового клиента от этой организации';
На данный момент у Вас добавилась вышеупомянутая кнопка и autocompete в поле "id клиента" на странице создания/редактирования клиента.
Теперь добавим autocompete к полю "Вышестоящая организация" на странице создания/редактирования компании. В том же файле ищем строки:
Код: Выделить всё
if(Core.Config.Get('Action')!="AdminCustomerCompany"){
startCompanySearch('UserCustomerID');
startCompanySearch('CustomerID');
};
Код: Выделить всё
if(Core.Config.Get('Action')!="AdminCustomerCompany"){
startCompanySearch('UserCustomerID');
startCompanySearch('CustomerID');
} else if (Core.Config.Get('Action')=="AdminCustomerCompany") {
startCompanySearch('CustomerCompanyParent');
};
- Вложения
-
- CustomerCompanyExtensions-1.0.0.7z
- (8.09 КБ) 544 скачивания
OTRS 3.2.8, Ubuntu 12.04, Apache, PostgreSQL
Re: Иерархия компаний и поля с автокомпиляцией
Осталось три косяка:
Первое:
Не кэшируются списки, создание которых описано в данном топике.
И третье:
Автокомплит чувствителен к регистру букв, а также выводит все найденные результаты (хорошо бы ограничить).
Я постараюсь данные косяки исправить, не знаю правда когда, в моей компании внедрении OTRS идет полным ходом, пока нет времени на такие маленькие неточности.
И последнее: подскажите, пожалуйста, где посмотреть как собирать свой собственный плагин. Я бы все изложенное в топике в него затолкал и сделал бы настроечки для удобства пользования. Пробежался беглым глазом по просторам Интернета, так и не нашел ничего по этому поводу.
Первое:
Второе:Плохо то, что при нажатии на кнопку "Добавить клиента от этой организации", в открывшейся странице автоматом не вбита организация. Возможно, покапавшись, в дальнейшем я это исправлю.
Не кэшируются списки, создание которых описано в данном топике.
И третье:
Автокомплит чувствителен к регистру букв, а также выводит все найденные результаты (хорошо бы ограничить).
Я постараюсь данные косяки исправить, не знаю правда когда, в моей компании внедрении OTRS идет полным ходом, пока нет времени на такие маленькие неточности.
И последнее: подскажите, пожалуйста, где посмотреть как собирать свой собственный плагин. Я бы все изложенное в топике в него затолкал и сделал бы настроечки для удобства пользования. Пробежался беглым глазом по просторам Интернета, так и не нашел ничего по этому поводу.
OTRS 3.2.8, Ubuntu 12.04, Apache, PostgreSQL