首页 > 解决方案 > 将python函数添加到特定动作odoo

问题描述

我想将此功能添加到操作“hr_holidays.open_allocation_holidays”中,以使“holiday_status_id”字段每次根据“employee_id”动态更改

@api.onchange('employee_id')
def change_leave_type(self):
    for holiday_type in self:
        if holiday_type.env.uid == holiday_type.user_id.id and not holiday_type.env.user.has_group(
                'hr_holidays.group_hr_holidays_user'):
            allocate_type = holiday_type.env['hr.holidays.status'].search([('name', '=', 'Compensatory Days')]).id
            return {'domain': {'holiday_status_id': [('id', '=', allocate_type)]}}
        elif holiday_type.env.user.has_group(
                'hr_holidays.group_hr_holidays_user') and not holiday_type.env.user.has_group(
                'hr_holidays.group_hr_holidays_manager'):
            ids = []
            allocation_types = holiday_type.env['hr.holidays.status'].search([])
            for allocate in allocation_types:
                if allocate.name != 'Unpaid':
                    ids.append(allocate.id)
            return {'domain': {'holiday_status_id': [('id', '=', ids)]}}

标签: pythonpython-3.xxmlodooodoo-11

解决方案


您可以通过将 domain-get 函数添加到该字段的域来将生成的域传递给该字段。


@api.model
def _get_holiday_status_id_domain(self):
    if self.env.uid == self.user_id.id and not self.env.user.has_group('hr_holidays.group_hr_holidays_user'):
        allocate_type = self.env['hr.holidays.status'].search([('name', '=', 'Compensatory Days')], limit=1)
        return [('id', '=', allocate_type.id)]
    elif self.env.user.has_group('hr_holidays.group_hr_holidays_user') and not self.env.user.has_group('hr_holidays.group_hr_holidays_manager'):
        allocation_types = self.env['hr.holidays.status'].search([('name', '!=', 'Unpaid')])
        return [('id', 'in', allocation_types.mapped('id'))]

holiday_status_id = fields.Many2one(
    comodel_name='hr.holidays.status', 
    string='Holiday Status',
    domain=_get_holiday_status_id_domain,
    # and your other settings
    )

推荐阅读