2016-02-28 19 views
1

我試圖修改hr.contract模型,以便'end_date'字段獲取'effective_date'的值,該值位於另一個模型'resignation_application'中。 這個概念是當員工填寫辭職申請表時更新合同結束日期。Odoo - 如何更新預先定義的日期字段值

這裏是我的代碼:

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字段添加反方法,以便人事主管可以將結束日期添加到員工合同。任何幫助將不勝感激。

回答

0

首先,你是混合v8(裝飾)和v7(osv.osv和_columns)的東西。

此外,在v8中,您不需要返回任何東西,也不需要直接在計算方法中寫入end_date字段,但只需設置字段,就像您已經完成的一樣。你是否試圖刪除回報聲明?

+0

我在沒有返回聲明的情況下嘗試了它,但它需要我填寫辭職表單並在制定員工合同之前獲得批准,這在實際情況下不會發生。我的意思是'end_date'字段不是在生效日期得到驗證的同一時刻更新 – youta