Sign in to follow this  
Followers 0
SpravkaCRM.ru

Добавление полей в модуль Сотрудники в SuiteCRM

2 posts in this topic

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

567550243d15f_2015-12-1915-39-35CRMHosti

После этого SuiteCRM проверит структуру базы данных, сравнит ее с конфигурационными настройками, указанными в SuiteCRM, и, если найдет расхождения, выдаст список SQL-запрос на устранение этих расхождений. В нашем случае это будет SQL-запрос на добавление 3-х полей в таблицу `users`:

5675515edc165_2015-12-1915-45-04CRMHosti

Нажимаем кнопку "Выполнить". После этого SQL-запросы выполняются, и у таблицы `users` появляются 3 наших поля.

Далее в студии добавляем поля в макеты редактирования и детального просмотра. Я эти три поля вынес в отдельный таб "Зарплата":

5675520c333b8_2015-12-1915-47-50CRMHosti

 

И вот что мы теперь видим при переходе в редактирвание сотрудника:

5675524a46a6a_2015-12-1915-49-05CRMHosti

Нам осталось добавить эти 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 новыми значениями с нашими полями.

Теперь мы можем сохранять значения в полях, и как то дальше с ними работать:

567552f93bc3e_2015-12-1915-51-59CRMHosti


Просмотреть полную запись

Share this post


Link to post
Share on other sites

У меня есть задача на форме редактирования "Предварительных контактов" запретить редактирование Рабочего телефона. Но как это сделать не могу додумать.. Не подскажите в какую сторону копать? 

Share this post


Link to post
Share on other sites

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
Sign in to follow this  
Followers 0