2016-02-28 2 views
1

Я пытаюсь изменить модель hr.contract, поэтому поле 'end_date' получает значение 'effective_date', которое находится в другой модели 'resignation_application'. Концепция - когда сотрудник заполняет заявление об отставке, он обновляет дату окончания контракта.Odoo - Как обновить предварительно заданное значение поля DATE

Вот мой код:

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}) 

Но это не возвращало дату окончания .. Я знаю, что есть что-то не так с моим возвращением заявлением, но я не знаю, как это исправить .. Кроме того, я хочу добавить обратный метод в поле end_date, чтобы офицер hr мог добавить дату окончания контракта работнику. Любая помощь будет оценена.

ответ

0

Во-первых, вы смешиваете материалы v8 (декораторы) и v7 (osv.osv и _columns).

Кроме того, в v8 вам не нужно ничего возвращать и не писать прямо в поле end_date в методе вычисления, но просто установите поле, как вы уже делали. Вы пытались просто удалить оператор return?

+0

Я пробовал его без заявления о возврате, но он требует от меня заполнить форму отставки и получить одобрение до того, как вы сделаете контракт с работником, которого не происходит в реальном сценарии. Я имею в виду, что поле 'end_date' не является обновлен в тот же момент, когда была утверждена дата вступления в силу – youta

Смежные вопросы