Openerp-如何在“创建”功能中调用自定义功能?

时间:2017-02-06 05:47:27

标签: python openerp

请帮我解决这个问题, 我有一个函数,用于检查输入的验证术语,我想在“创建”函数内调用它作为嵌套函数。一旦我以正常方式调用它,它会不断给出参数不匹配错误。请帮我。 在create函数中我称之为

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

#There are 219 lines in side the create function but I just showing you the invoke for this particular fucntion.

   date_from = values['date_from']
   date_to=values['date_to']
   sub_nominee= values['sub_nominee']

   self.onchange_sub_nominee(self, cr, uid, date_to, date_from,sub_nominee)

  return super(hr_holidays, self).create(cr, uid, values, context=context)

功能就是这样,

def onchange_sub_nominee(self, cr, uid,ids, date_to, date_from,sub_nominee):
    #Employees data
    DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
    from_dt = datetime.datetime.strptime(date_from, DATETIME_FORMAT).date()
    to_dt=datetime.datetime.strptime(date_to, DATETIME_FORMAT).date()

    sub_name=self.pool.get('hr.employee').browse(cr, uid, sub_nominee).name

    hol_obj=self.pool.get('hr.holidays')

    #if date_from==date_to:
    hol_objs=hol_obj.search(cr, uid, [('employee_id','=',sub_nominee),('type','=','remove'),('state','not in',['draft','refuse'])])
    #nominees data
    if hol_objs:
        for a in hol_obj.browse(cr, uid, hol_objs):
                    sub_from_dt = a.date_to                                            
                    sub_to_dt=a.date_from
                    no_days=a.number_of_days_temp
                    sub_half_day=a.half_day
                    sub_half_day_sts=a.half_day_status

                    f_dt = datetime.datetime.strptime(sub_from_dt, DATETIME_FORMAT).date()
                    t_dt=datetime.datetime.strptime(sub_to_dt, DATETIME_FORMAT).date()

                    if ((from_dt==to_dt)and(to_dt==f_dt==t_dt)):

                         raise osv.except_osv(_('Warning!'),_(' %s already on leave on %s . Please nominate another person 111')%(sub_name,from_dt))


                    if ((from_dt!=to_dt)) and(no_days<=2): 

                        while from_dt <= to_dt :                         
                              new_con=self.search(cr, uid, [('date_from', '<=', date_to), ('date_to', '>=', date_from), ('employee_id', '=', sub_nominee)])
                              if new_con:
                                  raise osv.except_osv(_('Warning!'),_(' %s has/have already on leave(s) on that period  . 55555Please nominate another person')%(sub_name))
                              from_dt = from_dt + datetime.timedelta(days=1)

                    if ((f_dt!=t_dt)):                                                         
                        while t_dt <= f_dt:                                
                            if (from_dt==t_dt)or(to_dt==t_dt):
                                raise osv.except_osv(_('Warning!'),_(' %s has/have already on leave(s) on that period  . Please nominate another person 2222')%(sub_name))

                            t_dt=t_dt+datetime.timedelta(days=1)

    return True

1 个答案:

答案 0 :(得分:1)

错误是不言自明的。调用参数不匹配。 onchange_sub_nominee方法接受参数

cr, uid, ids, date_to, date_from,sub_nominee

但被调用为,

self.onchange_sub_nominee(self, cr, uid, date_to, date_from,sub_nominee)

您需要在调用id之后添加参数uid的值,或从onchange_sub_nominee定义中删除该参数。