0

我有一个从“hr.employee”继承的模型,并且我有一个只显示特殊部门的员工的操作。

我希望该列表顶部的“创建”按钮允许我在 hr.employee 中创建一个记录,其中部门字段已设置为该特殊部门。

当然,标准“hr”模块中的另一个“Create”按钮不应该为部门设置默认值。

这是模型:

# -*- coding: utf-8 -*-
from openerp import models, fields

class Patient(models.Model):
    _inherit = 'hr.employee'

    date_debut_contrat = fields.Date('Début Contrat de Prise en Charge')
    date_fin_contrat   = fields.Date('Fin Contrat de Prise en Charge')

这是行动:

<record id="action_liste_patients" model="ir.actions.act_window">
    <field name="name">Patients</field>
    <field name="res_model">hr.employee</field>
    <field name="view_mode">kanban,tree,form</field>
    <field name="domain">[('department_id.is_patients', '=', 'true')]</field>
</record>

我有办法告诉 Odoo 从那个动作中,department_id 字段应该有一个默认值,而不改变标准动作的行为吗?

非常感谢大家。

马克

4

2 回答 2

2

您可以使用

<field name="context">{'department_id': 'special department'}</field>

现在在创建 Patient 时,在 create() 中,您可以从上下文中获取值并采取相应的行动。

于 2016-01-30T11:20:55.490 回答
0

根据 Jamin 的评论,这是我应用的完整解决方案:

1) 为动作添加上下文。上下文将有一个名为“create_as_patient”的值,它是 True 或 False。

<record id="action_liste_patients" model="ir.actions.act_window">
    <field name="name">Patients</field>
    <field name="res_model">hr.employee</field>
    <field name="view_mode">kanban,tree,form</field>
    <field name="domain">[('department_id.is_patients', '=', 'true')]</field>
    <field name="context">{'create_as_patient': True}</field>
</record>

2) 在我的模型的 create() 方法中,我从上下文中获取值(如果存在)。然后我在“hr.department”模型中搜索标记为患者默认科室的科室。然后,如果找到了默认部门,我将新记录的部门 ID 设置为它。

# -*- coding: utf-8 -*-
from openerp import models, fields, api

class Patient(models.Model):
    _inherit = 'hr.employee'

    date_debut_contrat = fields.Date('Début Contrat de Prise en Charge')
    date_fin_contrat   = fields.Date('Fin Contrat de Prise en Charge')

    @api.model
    def create(self, vals):
        if 'create_as_patient' in self.env.context:
            if self.env.context['create_as_patient']:
                departmentId = self.env['hr.department'].search([('is_patients', '=', True)], limit=1).id
                if departmentId is not None:
                    vals['department_id'] = departmentId

        record = super(Patient, self).create(vals)
        return record

这符合我的要求:

  • 在 Employee 操作中,它的上下文中没有“create_as_patient”标志,新创建的员工不会设置默认部门。
  • 另一方面,如果我从我的 Patient 操作创建记录,则该标志将出现,并且默认部门将添加到新记录中。

再次感谢jamin为我指出正确的方向:-)

马克

于 2016-02-02T19:41:10.110 回答