【发布时间】:2020-09-02 05:50:22
【问题描述】:
我安排了一个每个月 1 日执行的 cron,目的是根据所有员工的标签分配休假。这是我的代码示例:
for leave in leave_type_ids:
for employee_tag in employee_tag_ids:
values = {
'name': 'Allocation mensuelle %s %s' % (now.strftime('%B'), now.strftime('%Y')),
'holiday_status_id': leave.id,
'number_of_days': employee_tag.allocation,
'holiday_type': 'category',
'category_id': employee_tag.id,
}
try:
self.create(values).action_approve()
except Exception as e:
_logger.critical(e)
我想指出 self 是 'hr.leave.allocation' 的实例。
问题是当我创建记录时,字段employee_id 会自动填充用户/员工OdooBot(在cron 中执行程序的人),这还不是全部,员工OdooBot 被分配了一个叶子。
这种行为是由于 odoo 原生模块中的那些代码造成的:
def _default_employee(self):
return self.env.context.get('default_employee_id') or self.env['hr.employee'].search([('user_id', '=', self.env.uid)], limit=1)
employee_id = fields.Many2one(
'hr.employee', string='Employee', index=True, readonly=True,
states={'draft': [('readonly', False)], 'confirm': [('readonly', False)]}, default=_default_employee, track_visibility='onchange')
所以我的问题是当它是 cron 时如何防止这种情况,并在它处于表单视图时将其设置为正常?
此处的“employé”字段应为空(如下图所示),因为它是按标签分配的。
【问题讨论】:
-
您不应该通过循环访问每个员工来创建分配吗?
-
@CZoellner odoo 通过使用每个标签/类别的分配来做同样的事情。通过标签更方便,如果有错误,我们可以一键修改/取消/...
-
你有Odoo的一些示例代码吗?我不太了解 Odoo 代码中的人力资源问题:D
-
@CZoellner 你可以在这个文件 addons/hr_holidays/models/hr_leave_allocation.py 中检查这个方法“_action_validate_create_childs”
-
@CZoellner 如何设置 'employee_id': False inside values?
标签: python-3.x odoo