Jump to content
SpravkaCRM.ru - Ваш справочник по CRM
Sign in to follow this  
SpravkaCRM.ru

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

Recommended Posts

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

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

Я бы копал в сторону того, чтобы просто сделать поле не активным с помощью html-параметра.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...