2016-09-04 2 views
0

Я в настоящее время работаю с hr_holidays (aka Leave Management) Модуль и мне нужно добавить распределение отпуска в качестве уникальной записи для данного типа отпуска.Openerp, как сделать уникальную запись

Я добавил одно дополнительное условие в функцию create(), и это приводит к тому, что вы не разрешаете делать запрос на отпуск.

Ниже моя create() функция:

def create(self, cr, uid, values, context=None): 

    #-------what I have added starting from here------ 

    hol_stat=values['holiday_status_id'] 
    emp_id=values['employee_id'] 
    n_allo=values['test_allocation'] 

    ids=self.pool.get('hr.holidays').search(cr, uid, [('holiday_status_id','=', hol_stat),('employee_id','=', emp_id),('type','=','add')], context=context) 
     if ids: 
      raise osv.except_osv(_('Warning!'),_('Already allocated leaves .')) 
    # ------end from here----- 


     """ Override to avoid automatic logging of creation """ 
     if context is None: 
      context = {} 
     context = dict(context, mail_create_nolog=True) 

     if ('date_from' in values and 'date_to' in values): 
      define_holidays = self.pool.get('company.holidays').search(cr, uid, ['|',('date', '=', values['date_from']),('date', '=', values['date_to'])]) 

      if define_holidays: 
       raise osv.except_osv(_('Warning!'),_('You need not to apply leaves one Company holidays.')) 
      else: 
       return super(hr_holidays, self).create(cr, uid, values, context=context) 
     else:#mani 
      return super(hr_holidays, self).create(cr, uid, values, context=context) 

Вопрос

Как я могу изменить мою create() функции для достижения уникального требования записи?

ответ

1

Вместо того, чтобы делать поиск в любое время вы хотите создать новую запись, исполнение в UniqueConstraint в базе данных, которая не позволит дублирующие записи, которые будут созданы с этой

_sql_constraints = [ 
     ('unique_hol_empid_type', 'unique(holiday_status_id, employee_id, type)', 'Error: Already allocated leaves'), 
    ] 

единственным ограничением является комбинация из трех столбцов, которые вы хотите, и unique_hol_empid_type - это имя, которое мы дали ограничению (на уровне базы данных), и ошибка будет поднята в любое время, когда запись нарушает это ограничение.

+0

Разве это не работает над новой базой данных? –

+0

Я не понимаю, что вы имеете в виду ... он будет работать в любой новой или старой базе данных, при условии, что никакая запись в db не нарушает ограничение – danidee

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