Search the Community

Showing results for tags 'добавление поля'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Found 2 results

  1. Суть в следующем:Стояла задача добавить несколько полей в модуль Сотрудники. Поля добавил, вывел их в макете редактирования и отображения. Но вводимые значения не сохранялись. То есть переходишь в режим редактирования карточки Сотрудника, указываешь значения, нажимаешь кнопку "Сохранить". Карточка сохраняется, но новые указанные значения не применяются. Остаются не заполненнями. В результате, как выяснилось, в модуле Сотрудники есть файл 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новыми значениями с нашими полями. Теперь мы можем сохранять значения в полях, и как то дальше с ними работать: Просмотреть полную запись
  2. Суть в следующем:Стояла задача добавить несколько полей в модуль Сотрудники. Поля добавил, вывел их в макете редактирования и отображения. Но вводимые значения не сохранялись. То есть переходишь в режим редактирования карточки Сотрудника, указываешь значения, нажимаешь кнопку "Сохранить". Карточка сохраняется, но новые указанные значения не применяются. Остаются не заполненнями. В результате, как выяснилось, в модуле Сотрудники есть файл 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новыми значениями с нашими полями. Теперь мы можем сохранять значения в полях, и как то дальше с ними работать: