Odoo - 如何更新预定义的DATE字段值

时间:2016-02-28 16:21:54

标签: python-2.7 openerp odoo-8

我正在尝试修改hr.contract模型,以便“end_date”字段获取另一个模型“effective_date”中的“resignation_application”值。 这个概念是当员工填写辞职申请时,它会更新合同的结束日期。

这是我的代码:

class resignation_application(osv.osv):
    _name = 'resignation.application'
    _columns = {
        'employee_id': fields.many2one('hr.employee', "Employee", select=True, invisible=False, readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}),
        'effective_date': fields.date('Effective Date', readonly=True, states={'draft':[('readonly',False)], 'confirm':[('readonly',False)]}, select=True, copy=False),

class hr_contract(osv.osv):
    _inherit = 'hr.contract'
     _columns = {         
        'end_date': fields.date('End Date', compute= '_compute_effective_date', store=True),        

    }

    @api.model
    def create(self, values):        
        if 'end_date' in values and not values['end_date']:
            del(values['end_date'])
        return super(hr_contract, self).create(values)

    @api.one
    @api.depends('end_date','employee_id')
    def _compute_effective_date(self):
        recs = self.env['resignation.application'] # retrieve an instance of MODEL
        recs = recs.search([('state', '=', 'validate')]) # search returns a recordset
        for rec in recs: # iterate over the records
            if self.employee_id == rec.employee_id:
                self.end_date = rec.effective_date
        return recs.write({'end_date': rec.effective_date})

但它没有返回结束日期..我知道我的return语句有问题,但我不知道如何解决它..我还想在end_date字段中添加一个反方法因此,人力资源官员可以在员工合同中添加结束日期。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先,你要混合v8(装饰器)和v7(osv.osv和_columns)的东西。

此外,在v8中,您不需要返回任何内容,也不需要直接在compute方法中写入end_date字段,而只需像现在这样设置字段。您是否尝试删除return语句?