SpravkaCRM.ru Posted December 31, 2015 Report Share Posted December 31, 2015 Суть в следующем: Стояла задача добавить несколько полей в модуль Сотрудники. Поля добавил, вывел их в макете редактирования и отображения. Но вводимые значения не сохранялись. То есть переходишь в режим редактирования карточки Сотрудника, указываешь значения, нажимаешь кнопку "Сохранить". Карточка сохраняется, но новые указанные значения не применяются. Остаются не заполненнями. В результате, как выяснилось, в модуле Сотрудники есть файл Save.php, который собой перехватывает стандартный процесс выполнения сохранения, и задает свой режим этого действа. Вот в этом файле надо было новые поля прописать в массиве разрешенных к сохранению полей. Сделано видимо это было в силу того, что модуль Сотрудники использует ту же самую таблицу, что и доступный только Админам модуль Пользователи. И чтобы рядовые сотрудники, имеющие доступ на запись к модулю Сотрудники, но не имеющие доступ к модулю Пользователи, не насохраняли там чего им сохранять нельзя, сделано было такое ограничение: к изменению принимаются только жестко заданный набор переменных. Ну а теперь по порядку что и как делал: Нужно было добавить 3 поля, характеризующих зарплату сотрудника: Тип зарплатных отношений (тут выпадающий список с единственным значением "Фиксированная ставка в зависимости от выработанных часов" Кол-во часов в день Стоимость месяца Таким образом можно было указать за какое количество отработанных часов тот или иной сотрудник получит определенную сумму денег. Выпадающий список с типом отношений добавил в файл с выпадающими списками custom/include/language/ru_ru.lang.php: $GLOBALS['app_list_strings']['employee_cost_type_list'] = array( '' => '', 'fix_time' => 'Фиксированная ставка в зависимости от выработанных часов', ); 3 новых поля добавил в файл custom/Extension/modules/Users/Ext/Vardefs/employee_payment.php Да, именно в модуле Users, а не Employee. У модулей есть такая вот специфика в силу того, что модуль Employee некоторым образом зависит от модуля User. Если такого файла нет, надо его создать: <?php /** * Created by PhpStorm. * User: evgen * Date: 19.12.15 * Time: 12:56 */ $dictionary["User"]["fields"]["cost_type"] = array( 'required' => false, 'name' => 'cost_type', 'vname' => 'LBL_COST_TYPE', 'type' => 'enum', 'massupdate' => 0, 'no_default' => false, 'comments' => '', 'help' => '', 'importable' => 'true', 'duplicate_merge' => 'disabled', 'duplicate_merge_dom_value' => '0', 'audited' => true, 'inline_edit' => '', 'reportable' => true, 'unified_search' => false, 'merge_filter' => 'disabled', 'len' => 100, 'size' => '20', 'options' => 'employee_cost_type_list', 'studio' => 'visible', 'dependency' => false, ); $dictionary["User"]["fields"]["fix_time_day_count"] = array( 'required' => false, 'name' => 'fix_time_day_count', 'vname' => 'LBL_FIX_TIME_DAY_COUNT', 'type' => 'varchar', 'massupdate' => 0, 'no_default' => false, 'comments' => '', 'help' => '', 'importable' => 'true', 'duplicate_merge' => 'disabled', 'duplicate_merge_dom_value' => '0', 'audited' => true, 'inline_edit' => '', 'reportable' => true, 'unified_search' => false, 'merge_filter' => 'disabled', 'len' => '4', 'size' => '20', ); $dictionary["User"]["fields"]["fix_time_day_count_month_cost"] = array( 'required' => false, 'name' => 'fix_time_day_count_month_cost', 'vname' => 'LBL_FIX_TIME_DAY_COUNT_MONTH_COST', 'type' => 'currency', 'massupdate' => 0, 'no_default' => false, 'comments' => '', 'help' => '', 'importable' => 'true', 'duplicate_merge' => 'disabled', 'duplicate_merge_dom_value' => '0', 'audited' => true, 'inline_edit' => '', 'reportable' => true, 'unified_search' => false, 'merge_filter' => 'disabled', 'len' => 26, 'size' => '20', 'enable_range_search' => false, 'precision' => 6, ); Лейблы LBL_COST_TYPE, LBL_FIX_TIME_DAY_COUNT и LBL_FIX_TIME_DAY_COUNT_MONTH_COST описал в файле custom/Extension/modules/Employees/Ext/Language/ru_ru.employee_payment.php также предварительно его создав: <?php $mod_strings = array_merge($mod_strings, array( 'LBL_COST_TYPE' => "Тип оплаты", 'LBL_FIX_TIME_DAY_COUNT' => "Кол-во часов в день", 'LBL_FIX_TIME_DAY_COUNT_MONTH_COST' => "Стоимость месяца", ) ); ?> А также добавил 3 новых свойства в объект Employee в файле modules/Employees/Employee.php // Employee is used to store customer information. class Employee extends Person { // Stored fields var $name = ''; var $id; var $is_admin; var $first_name; var $last_name; var $full_name; var $user_name; var $title; var $description; var $department; var $reports_to_id; var $reports_to_name; var $phone_home; var $phone_mobile; var $phone_work; var $phone_other; var $phone_fax; var $email1; var $email2; var $address_street; var $address_city; var $address_state; var $address_postalcode; var $address_country; var $date_entered; var $date_modified; var $modified_user_id; var $created_by; var $created_by_name; var $modified_by_name; var $status; var $messenger_id; var $messenger_type; var $employee_status; var $error_string; public $person_id; var $module_dir = "Employees"; var $table_name = "users"; var $object_name = "Employee"; var $user_preferences; var $encodeFields = Array("first_name", "last_name", "description"); // This is used to retrieve related fields from form posts. var $additional_column_fields = Array('reports_to_name'); var $new_schema = true; // Custom fields var $cost_type; var $fix_time_day_count; var $fix_time_day_count_month_cost; Теперь надо обновить базу данных, чтобы в таблице `users` появилось наши новые 3 поля. Для этого переходим в Администрирование -> Восстановление -> Быстрое восстановление: После этого SuiteCRM проверит структуру базы данных, сравнит ее с конфигурационными настройками, указанными в SuiteCRM, и, если найдет расхождения, выдаст список SQL-запрос на устранение этих расхождений. В нашем случае это будет SQL-запрос на добавление 3-х полей в таблицу `users`: Нажимаем кнопку "Выполнить". После этого SQL-запросы выполняются, и у таблицы `users` появляются 3 наших поля. Далее в студии добавляем поля в макеты редактирования и детального просмотра. Я эти три поля вынес в отдельный таб "Зарплата": И вот что мы теперь видим при переходе в редактирвание сотрудника: Нам осталось добавить эти 3 поля в список полей, которые разрешено править в модуле Сотрудники. Для этого переходим в файл /modules/Employees/Save.php, и ищем там такой блок: //only employee specific field values need to be copied. $e_fields=array('first_name','last_name','reports_to_id','description','phone_home','phone_mobile','phone_work','phone_other','phone_fax','address_street','address_city','address_state','address_country','address_country', 'address_postalcode', 'messenger_id','messenger_type'); И прям под ним добавляем такую строку: $e_fields = array_merge($e_fields, ['cost_type','fix_time_day_count','fix_time_day_count_month_cost']); тем самым мы расширили массив e_fields новыми значениями с нашими полями. Теперь мы можем сохранять значения в полях, и как то дальше с ними работать: Просмотреть полную запись Quote Link to comment Share on other sites More sharing options...
Delphin Posted September 8, 2016 Report Share Posted September 8, 2016 У меня есть задача на форме редактирования "Предварительных контактов" запретить редактирование Рабочего телефона. Но как это сделать не могу додумать.. Не подскажите в какую сторону копать? Quote Link to comment Share on other sites More sharing options...
IBlasterus Posted May 28, 2019 Report Share Posted May 28, 2019 В 08.09.2016 at 14:54, Delphin сказал: У меня есть задача на форме редактирования "Предварительных контактов" запретить редактирование Рабочего телефона. Но как это сделать не могу додумать.. Не подскажите в какую сторону копать? Я бы копал в сторону того, чтобы просто сделать поле не активным с помощью html-параметра. Quote Link to comment Share on other sites More sharing options...
LesGueply Posted January 23 Report Share Posted January 23 Things get in the way [url=https://priligy.skin]want to buy priligy in pakistan[/url] Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.