Odoo 17 использует many2many для выбора всех сотрудников.

Вопрос или проблема

Я хочу использовать поля many2many для выбора всех сотрудников в моем собственном пользовательском модуле, называемом гоночные команды. У каждого сотрудника будет свой уровень в их команде.

Модель

class RacingTeams (models.Model):
_name = "racing.teams"
_description = "Команды службы поддержки"
_rec_name="name"

name = fields.Char(string="Название", tracking=True)
desc = fields.Char(string="Описание", tracking=True)
employee_ids = fields.Many2many(
    comodel_name="hr.employee",
    relation='hr_teams_rel',
    column1='name',
    column2='employee_id',
    string='Сотрудник',
)

XML

<notebook>
   <page string="Член команды" name="team_member">
       <field name="employee_ids" required="1">
          <tree editable="top">
               <field name="name"/>
               <field name="tier_id"/>                           
          </tree>
        </field>
   </page>
</notebook>

Модель HR Наследование

class HelpdeskHR (models.Model):
_inherit = "hr.employee"

name = fields.Char(string="Имя сотрудника", related='resource_id.name', store=True, readonly=False, tracking=False)
tier_id = fields.Many2one('helpdesk.tier',string="Уровень", ondelete="cascade")

Но моя проблема сейчас в том, что если я добавляю сотрудника в новую команду, tier_id будет показывать с последней команды. Как сделать так, чтобы у сотрудника был другой уровень, если я добавляю его в другую команду?

Ответ или решение

Для решения вашей проблемы с использованием полей many2many в Odoo 17 в вашей пользовательской модели «Команды гонщиков» давайте подробно обсудим, как регистрация сотрудников с различными уровнями (т tier) в каждой команде может быть реализована.

1. Проблема

В текущей структуре каждого сотрудника (hr.employee) есть поле tier_id, которое связано с предыдущими записями. При добавлении сотрудника в новую команду, вы наблюдаете, что уровень (tier) отображается по последнему значению, что не соответствует вашему ожиданию.

2. Решение

Чтобы обеспечить возможность назначения различного уровня для сотрудников в разных командах, вам необходимо создать промежуточную модель. Эта модель будет хранить как ссылку на команду, так и ссылку на сотрудника с его соответствующим уровнем. Таким образом, вы сможете отслеживать, какой уровень применим к каждому сотруднику в каждой команде.

2.1 Создание промежуточной модели

Создайте новую модель, которая будет содержать внешние ключи на обе модели: racing.teams и hr.employee, а также поле для уровня (tier):

class TeamMember(models.Model):
    _name = 'racing.team.member'
    _description = 'Team Member'

    team_id = fields.Many2one('racing.teams', string="Team", required=True, ondelete='cascade')
    employee_id = fields.Many2one('hr.employee', string="Employee", required=True, ondelete='cascade')
    tier_id = fields.Many2one('helpdesk.tier', string="Tier", required=True, ondelete='cascade')

2.2 Изменение модели RacingTeams

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

class RacingTeams(models.Model):
    _name = "racing.teams"
    _description = "Helpdesk Teams"
    _rec_name = "name"

    name = fields.Char(string="Name", tracking=True)
    desc = fields.Char(string="Description", tracking=True)
    team_member_ids = fields.One2many('racing.team.member', 'team_id', string='Team Members')

2.3 Обновление XML-шаблона

Вы также должны обновить XML-шаблон, чтобы отображать новую структуру:

<notebook>
    <page string="Team Member" name="team_member">
        <field name="team_member_ids" required="1">
            <tree editable="top">
                <field name="employee_id"/>
                <field name="tier_id"/>                           
            </tree>
        </field>
    </page>
</notebook>

3. Зачем такое изменение необходимо

Создание промежуточной модели позволяет вам легко управлять уровнями сотрудников в разных командах, обеспечивая их независимость. Это также упрощает дальнейшую модификацию или добавление новых полей или функций, связанных с членами команды, таких как графики, отчеты и т. д.

4. Заключение

Теперь с созданной промежуточной моделью и обновленной архитектурой, каждый сотрудник может иметь разные уровни в рамках разных команд. Это улучшит ваш пользовательский опыт и обеспечит гибкость управления данными о сотрудниках.

Если у вас останутся вопросы или потребуется дополнительная консультация, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...