python - 将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)]}}
解决方案
您可以通过将 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
)
推荐阅读
- python - 在上传 wagtail 时将文件扩展名转换为小写
- python - 如何获取多个文件的平均加载时间
- c++ - 有没有办法不使用命名空间中的项目?
- google-bigquery - 如何查看 BigQuery Storage API 日志?
- javascript - 使用 nodejs 和 mongodb 的原子事务
- flutter - 如何在 Flutter App 中正确使用 BlocListener 和 BlocProvider
- java - 如何更改膨胀视图组的子项
- node.js - 如何在 React 中实现视频流功能?
- android - Kivy to Android apk 在 Ubuntu 上使用 Buildozer 不起作用
- c - 在 C 中实现 ls -t 选项