Динамическое заполнение editview модуля А, основываясь на записи модуля В

Задача: есть пользователь который будет ежедневно заполнять присутствие подчиненных на рабочем месте. Я вижу это в виде списка подчиненных (закрепленных за текущим пользователем) и например поля status с типом dropdown.

У меня есть два модуля (1.Размещения и 2.Сотрудники для размещений) Во втором модуле записям присвоены определенные группы безопасности(об этом дальше).
Я создал relate field ,относительно второго модуля, в первом модуле Размещения (в этом же модуле у меня есть дропдаун который должен быть связан с этим relate field).

Суть вопроса:
Мне надо продублировать N раз этих два поля (relate и dropdown) в шаблоне editview и сделать некое подобие таблицы. Relate field должны быть заполнены по умолчанию при нажатии кнопки Создать Размещение (возможно легче использовать другой тип поля вместо relate, задача - сделать так, чтобы после заполения вывести из базы соответствие человек - его статус в определенный день). N = количество доступных записей (в модуле Сотрудники для размещений) (думал основоваться на группу безопасности) для залогиненого пользователя .

есть идеи как это реализовать? возможно кто-то уже сталкивался с подобным раньше?

Привет, @vlazaay !

Посмотрите этот пост. Думаю, что это решение вам поможет. На GitHub простая инструкция в картинках и инсталлятор.

Пишите если будут вопросы.

P.S. Там есть небольшой небольшой баг, который возникает если имена модулей очень длинные. Исправить пока не успел.

Решение очень крутое! Оно решает как минимум половину поставленной задачи.

У меня вопрос по поводу заполнения колекции:
Screenshot_1
Выше схема, по которой я бы хотел реализовать то что осталось. А именно:
Есть три модуля. Колекцию создаю в модуле Размещение, связанный модуль - посещаемость. Насколько возможно сделать автоматическое заполнение одного из полей колекции для N строк? Как говорил выше, N - количество доступных записей в модуле Сотрудники для размещений. Заполняется поле тоже из этого модуля.

На скриншоте ниже заполнил name вручную (именно это нужно автоматизировать, N в данном случае = 2 )

@vlazaay
Я бы сделал следующее:

  • одна запись в модуле “размещение” как шаблон (сделать какой-то признак или статус);
  • владелец шаблона вносит в него всех сотрудников (при необходимости редактирует);
  • новая запись создается из шаблонной кнопкой “Дублировать” (все сотрудники подтянутся автоматически, останется только поменять статус);
  • для заполнения поля “name” поменять тип поля с “text” на “relate” или даже добавить “link”.

Просто и эфективно. А я уже скрипт пытаюсь делать. Ваше решение вполне устраивает. Безгранично благодарен Вам за помощь.

@vlazaay
Обращайтесь.

А скрипт можете написать, чтобы заблокировать изменения списка если это запись не является шаблоном. :wink:

Возник вопрос.
Нужно заблокировать возможность редактировать поле в колекции (based on role)
Пробовал делать следующим образом, заблокировать в самом модуле получилось, нужно еще в колекции. Есть идеи?

@vlazaay
Возможны разные варианты. Блокировать нужно всегда или в зависимости от какого-то параметра?

В зависимости от роли, присвоеной текущему пользователю.
Например поле будет заблокировано от редактирования для всех, кроме пользователей с ролью “А”

Можно сделать следующее:

  1. Создать 2 файла editviewdefs.php и editNOEDITviewdefs.php, потом выбирать один из них в зависимости от роли пользователя. Пример можно посмотреть здесь:
    Custom View depending field value
    Custom View depending field value
  2. В файл editNOEDITviewdefs.php добавить вручную полное описание коллекции. Вот пример:
        'lbl_panel_connects' => array (
            0 => array (
                0 => array (
                    'name' => 'bf_connects', // имя поля коллекции
                    'type' => 'collection',
                    'displayParams' => array (
                        'collection_field_list' => array ( // список полей связанного модуля
                            0 => array (
                                'name' => 'title',
                                'displayParams' => array (
                                    'size' => '15%',
                                    'sort'=>true,
                                ),
                                // сделать поле readonly, обратные слеши обязательны
                                'customCode' => '<input type=\"text\" size=\"10px\" class=\"sugar_field\" name=\"title\" id=\"title\" readonly=\"readonly\">', 
                            ),
                            1 => array (
                                'name' => 'address_link',
                                'displayParams' => array (
                                    'size' => '20%',
                                ),
                            ),
                            2 => array (
                                'name' => 'attribute',
                                'displayParams' => array (
                                    'size' => '5%',
                                ),
                            ),
                            3 => array (
                                'name' => 'date_start',
                                'displayParams' => array (
                                    'size' => '15%',
                                ),
                            ),
                            4 => array (
                                'name' => 'description',
                                'displayParams' => array (
                                    'size' => '30%',
                                ),
                            ),
                        ),
                    ),
                ),
            ),
        ),

Не забудьте использовать последнюю версию: