2017-04-13 48 views
0

如何在檢查之前的記錄是否處於「打開」狀態後,針對「開放」狀態的患者創建新的檢查記錄。如果存在,則顯示錯誤,否則創建新記錄。如何根據id和odoo中的狀態來檢查記錄存在

下面的代碼沒有正確地檢查'if record.id:'中的記錄存在,因此直接引發錯誤消息。

這裏是我的代碼:

@api.multi 
@api.constrains('status', 'patient_id') 
def _checkstatus(self): 
    res = [] 

    for record in self: 
     if record.id: 
      if record.status == 'open': 
       raise ValidationError(_('You can not create new visit until patient checked out !')) 
      else: 
       res = self.status  
     else: 
       res = self.status 

    return res    

回答

1

你必須先提取所有記錄與患者和狀態==開放。然後 這樣,

self.env['your.model.name'].search([('patient_id', '=', patient_id), ('status', '=', 'open')]) 

如果有符合條件的記錄提出一個錯誤。 這裏寫一個代碼爲ex。根據您的代碼更改名稱。

@api.multi 
@api.constrains('status', 'patient_id') 
def _checkstatus(self): 
    res = [] 

    modelObj = self.env['your.model.name'] 
    for record in self: 
     rec = modelObj.search([('patient_id', '=', record.patient_id), ('status', '=', 'open')]) 
     if rec: 
      raise ValidationError(_('You can not create new visit until patient checked out !')) 
     else: 
      // write a login if there is not found any open record with patient 

    return res 
0

在Odoo,評估約束的時候,記錄已經被創建/更新。

這意味着,在你的情況下,你需要排除當前記錄集從你的查找數據(你想知道其他病人的條目是否處於「打開」狀態)。

此處產生錯誤會導致Odoo以其交易數據爲rollback,並阻止任何持續修改。

@api.multi 
@api.constrains('status', 'patient_id') 
def _checkstatus(self): 
    # retrieve patients in the current records 
    patients_tocheck = self.mapped('patient_id') 
    duplicates == self.search([('patient_id', 'in', patients_tocheck.ids), ('id', 'not in', self.ids), ('status', '=', 'open')]) 
    if duplicates: 
     raise ValidationError(_('You can not create new visit until patient checked out !')) 
    # moreover, you don't need to return any value, Odoo only see if you raise any error, or not 
+0

它爲我的案件工作,非常感謝你 – majid

+0

不客氣^^你可以只將你的問題設置爲回答? 謝謝你^^ –

相關問題