在 ODOO V8 中无法以普通用户身份查看计算字段的结果

小亚当

我有一个问题,我有 2 个浮点计算字段。如果我以管理员身份登录,可以看到它们的结果和值,但如果我以普通用户身份登录,则无法看到它们的结果和值。即使我在我的模块中设置了安全性,这里也是字段:

class overtime_details(models.Model):
    _name='overtime.overtime_details'

    ovrtm = fields.Float(compute=attd_check, string='Overtime Hour(s)')
    ttalmtp = fields.Float(compute=overtype_count, string='Total Multiplier')

这是我以普通用户身份登录时的图片: 在此处输入图片说明

然后这是我以管理员身份登录时的图片: 在此处输入图片说明

这是我的安全权限 csv :

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
overtime_formsec,overtime_formsec,model_overtime_overtime,,1,1,1,1
overtime_employee_list,overtime_employee_list,model_overtime_overtime_details,,1,1,1,1
overtime_type_list,overtime_type_list,model_overtime_type_overtime,,1,1,1,1
overtime_type_hours,overtime_type_hours,model_overtime_hour_overtime,,1,1,1,1

这是 attd_check 函数:

@api.model
    def attd_check(self):
        #import pdb;pdb.set_trace()
        for attds in self:
            if attds.id:
                ov = 0.0
                attd = self.env['hr.attendance']
                paratime = (datetime.strptime(attds.overtime_id.start_date, "%Y-%m-%d %H:%M:%S") - relativedelta(days=1, hours=7)).strftime("%Y-%m-%d 23:59:59")
                signin = attd.search([('name','<=',attds.overtime_id.start_date),
                        ('name','>',paratime),
                         ('employee_id','=',attds.employee_id.id), ('action','=','sign_in')])
                signout = attd.search([('name','>=',attds.overtime_id.end_date), 
                        ('employee_id','=',attds.employee_id.id), ('action','=','sign_out')])
                signout2 = attd.search([('name','<',attds.overtime_id.end_date), ('name','>',attds.overtime_id.start_date),
                            ('employee_id','=',attds.employee_id.id), ('action','=','sign_out')])
                if signin:
                    if signout:
                        ov = attds.env['overtime.overtime'].calc_overtime(attds.overtime_id.start_date, attds.overtime_id.end_date)
                    elif signout2:
                        paramtole = datetime.strptime(signout2.name, "%Y-%m-%d %H:%M:%S").strftime("%M:%S")
                        tolerate = datetime.strptime("15:00", "%M:%S").strftime("%M:%S")
                        tolerate2 = datetime.strptime(str(attds.overtime_id.tolerance), "%M.%S").strftime("%M:%S")
                        if paramtole >= tolerate2 :
                            ov = attds.env['vit_overtime.overtime'].calc_overtime(attds.overtime_id.start_date, signout2.name) + 1
                        elif paramtole < tolerate :
                            ov = attds.env['overtime.overtime'].calc_overtime(attds.overtime_id.start_date, signout2.name)
                        else :
                            ov = attds.env['overtime.overtime'].calc_overtime(attds.overtime_id.start_date, signout2.name)
                    else:
                        ov = 0.0
                else:
                    ov = 0.0

                attds.ovrtm = ov

改写计数功能:

@api.model
    def overtype_count(self):
        #import pdb;pdb.set_trace()
        for det in self:
            if det.id:
                check = self.env['overtime.hour_overtime'].search([('hour_id.code','=',det.overtime_id.overtimetype_id.code)])
                if check:
                    if det.overtime_id.state == 'done':
                        ovt=0
                        counter = 1
                        for hou in check:
                            if det.ovrtm <= 0:
                                det.ovrtm = ovt
                            elif counter <= det.ovrtm:
                                ttal = ovt + hou.calc
                                ovt = ttal
                                counter = counter + 1
                            else :
                                det.ttalmtp = ovt
                    else :
                        det.ttalmtp = 0

我应该怎么做才能解决这个问题,谢谢:)

小亚当

我已经解决了这个问题,所以我在我的函数中搜索或浏览之前添加了 sudo(),例如:

前:

signin = attd.search([('name','<=',attds.overtime_id.start_date),
                        ('name','>',paratime),
                         ('employee_id','=',attds.employee_id.id), ('action','=','sign_in')])

添加 sudo() 后:

signin = attd.sudo().search([('name','<=',attds.overtime_id.start_date),
                        ('name','>',paratime),
                         ('employee_id','=',attds.employee_id.id), ('action','=','sign_in')])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

过滤Many2one字段-Odoo v8

Odoo v8中的唯一电子邮件字段

如何检查浮点字段并为 Odoo v8 中的任何操作提供约束

具体过滤器和计算方法映射场景——Odoo v8

将布尔字段从父类更改为子类-Odoo v8

以相同的形式对两个模型的两个Float字段求和-Odoo v8

自定义account.move上的语法错误“日期”字段-Odoo v8

Odoo v8无法从远程服务器安装加载

表单中的创建按钮以从 Odoo v8 中的表单创建新的记录副本

计算从一种模型到另一种模型的字段数量-Odoo v8

将模型的名称索引传递到另一个模型的字段中-Odoo v8

从另一个模型创建模型-具有Many2one字段-Odoo v8

从自定义模块中读取草稿状态上的所有sale.order对象-Odoo v8

在odoo v8中发生错误时发送电子邮件并引发消息错误

NotImplementedError:Frozendict不支持'更新'-Odoo v8

DataError '类型时间戳的语法无效' - Odoo v8

TypeError:'tuple'对象不可调用-Odoo v8

遍历记录行方法-Odoo v8

ValueError:预期的单例:-Odoo v8

通过代码创建account.move-Odoo v8

Odoo v8服务器不会从Eclipse启动

基于日期odoo v8创建域

IndexError:元组索引超出范围 - Odoo v8 到 Odoo v10 社区

为什么我们必须创建一个新的组才能在Odoo v8中向所有用户隐藏菜单项?

计算来自另一个类的每个 sale.order 上的所有项目 - Odoo v8

如何将销售线索(电子邮件)链接到在Odoo v8中发送的市场营销电子邮件?

如何解决此错误-“您尝试访问的文档之一已删除,请尝试刷新”?在Odoo v8中?

Odoo:Odoo 8中的写入功能

无法安装VMWare Workstation v8