Суть в следующем: Стояла задача добавить несколько полей в модуль Сотрудники. Поля добавил, вывел их в макете редактирования и отображения. Но вводимые значения не сохранялись. То есть переходишь в режим редактирования карточки Сотрудника, указываешь значения, нажимаешь кнопку "Сохранить". Карточка сохраняется, но новые указанные значения не применяются. Остаются не заполненнями. В результате, как выяснилось, в модуле Сотрудники есть файл 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. Если такого файла нет, надо его создать:
/**
* 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 также предварительно его создав:
$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 новыми значениями с нашими полями.
Теперь мы можем сохранять значения в полях, и как то дальше с ними работать:
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new account
Sign in
Already have an account? Sign in here.
Sign In Now