Python Openerp验证在普通用户上不起作用

Python Openerp验证在普通用户上不起作用,python,python-2.7,openerp,openerp-7,Python,Python 2.7,Openerp,Openerp 7,我已经在我的一个模块中的on change函数中编写了一些验证规则,它在管理员帐户中运行良好,但在任何其他用户帐户中都没有运行。请帮我做这个 功能 def onchange_sub_被提名人(self、cr、uid、id、employee_id、date_to、date_from、sub_被提名人、半天、半天状态): #员工数据 DATETIME_FORMAT=“%Y-%m-%d%H:%m:%S” from_dt=datetime.datetime.strtime(date_from,datet

我已经在我的一个模块中的on change函数中编写了一些验证规则,它在管理员帐户中运行良好,但在任何其他用户帐户中都没有运行。请帮我做这个

功能

def onchange_sub_被提名人(self、cr、uid、id、employee_id、date_to、date_from、sub_被提名人、半天、半天状态):
#员工数据
DATETIME_FORMAT=“%Y-%m-%d%H:%m:%S”
from_dt=datetime.datetime.strtime(date_from,datetime_格式).date()
to_dt=datetime.datetime.strtime(date_to,datetime格式).date()
sub_name=self.pool.get('hr.employee')。浏览(cr、uid、sub_提名人)。名称
hol_obj=self.pool.get('hr.holidays'))
如果员工id==次级被提名人:
提高osv。除了osv(‘警告’),‘拒绝离开:你不能代替你自己’)
#如果日期从==日期到:
hol_objs=hol_obj.search(cr、uid、[('employee_id'、'='、sub_nameden)、('type'、'='、'remove')、('state'、'not in'、['draft'、'dense']))
#提名人数据
如果是hol_objs:
对于在hol_obj.browse(cr、uid、hol_objs)中的对象:
sub_from_dt=a.date_to
sub_to_dt=a.日期自
无天数=a.天数
sub_半天=a.半天
sub_半天状态=a.半天状态
f_dt=datetime.datetime.strtime(来自_dt的sub_,datetime格式).date()
t_dt=datetime.datetime.strtime(sub_to_dt,datetime格式).date()
如果((from_dt==to_dt)和(to_dt==f_dt==t_dt)和(半天!=True)):
提高osv。除了osv(u('Warning!'))、u('%s已在%s休假。请提名另一个人')%(子名,来自_dt))
如果((从_dt==to _dt)和(to _dt==f _dt==t _dt)和(半天==True)和(半天状态==sub _半天sts)):
提高osv。除osv('Warning!')外,''s('%s已在%s休假,%s。请指定另一个人')%(sub_姓名,来自sub_dt,sub_半天)

如果((from_dt!=to_dt))和(no_daysIt看起来像是记录规则问题,您需要检查访问仪式和记录规则。只是验证函数也应用于记录规则吗?如果是,请解释一下,因为到目前为止,我认为这些验证函数通常是针对每个用户调用的
def onchange_sub_nominee(self, cr, uid,ids,employee_id,date_to, date_from,sub_nominee,half_day,half_day_status):
    #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 employee_id==sub_nominee:
        raise osv.except_osv(_('Warning!'),_('Leave Denied: You can not be substitute to yourself '))

    #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)and (half_day != True)):

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

                    if ((from_dt==to_dt)and(to_dt==f_dt==t_dt)and (half_day == True) and (half_day_status==sub_half_day_sts) ):
                            raise osv.except_osv(_('Warning!'),_(' %s already on leave on %s , %s. Please nominate another person ')%(sub_name,from_dt,sub_half_day_sts))

                    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  . Please 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')%(sub_name))

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

    return True