0

我在 OpenERP 中做了一个关于 Timesheet 的项目。我有这个问题:这是 x_luong 表。

class x_luong(osv.osv):
     _name = 'x_luong'
     _description = 'Luong'

     _columns = {'name': fields.many2one('x_nhanvien', 'Mã nhân viên', size=10, required='1'),
                 'ma_luong': fields.integer('ma luong', size=10, required='1'),
                 'giolam': fields.float('Giờ làm', size=100, required='1'),
                 'giolamthuc': fields.char('Gio lam thuc te', size=5, required='1'),
                 'time_in': fields.char('Gio vào', size=20),
                 'time_out' :fields.char('Gio về', size=20),
                 'state' :fields.selection([('dangnhap','Đẳng nhập.'),('rave','Ra về')]),
                 'test': fields.integer('Kiem tra', size=20),
                 'phutvao': fields.integer('Phut vao ', size=20),
                 'phutra': fields.integer('phut ra', size=20),
                }
     _defaults = {'state':'dangnhap',
                 }

这其中的一些功能:

这 2 个功能意味着员工签入或签出系统时的时间

def get_timein(self,cr,uid,ids,context={}):
    obj = self.browse(cr,uid,ids,context=context)[0]
    timein = str(datetime.now())
    self.write(cr, uid, ids, {'time_in':timein }, context=context)
    return 1

def get_timeout(self,cr,uid,ids,context={}):
    obj = self.browse(cr,uid,ids,context=context)[0]
    timeout = str(datetime.now())
    self.write(cr, uid, ids, {'time_out':timeout }, context=context)
    return 1

以及按钮sign_in和sign_out的这2个功能:

def cho_dangnhap(self,cr,uid,ids,context={}):
    self.pool.get('x_luong').write(cr,uid,ids,{'state':'dangnhap'})
    self.get_timein(cr,uid,ids)
    return 1

def cho_rave(self,cr,uid,ids,context={}):
    self.pool.get('x_luong').write(cr,uid,ids,{'state':'rave'})
    self.get_timeout(cr,uid,ids)
    self.tinh_thoigian(cr,uid,ids)
    self.insert(cr,uid,ids) 

函数 tinh_thoigian 表示截断字符串时间以获取 ... 小时或分钟以进行计算

def _thoigianlam(self,cr,uid,ids,context={}):
    obj = self.browse(cr,uid,ids,context=context)[0]
    hour_den = int(obj.time_in[12:13])
    hour_di = int(obj.time_out[12:13])
    min_den = int(obj.time_in[15:16])
    min_di = int(obj.time_out[15:16])
    gl = int(hour_di)-int(hour_den)
    pl = min_di-min_den
    thucte = str(gl)+':'+pl
    self.write(cr, uid, ids, {'giolam':gl }, context=context)
    self.write(cr, uid, ids, {'giolamthuc':thucte }, context=context)
    return 1

最后一个函数 insert() 得到 ma_luong(我认为这与 sql 中的主键相同)和 giolam(员工在公司工作的时间)、time_in、time_out,这是函数 insert()

def insert(self,cr,uid,ids,context={}):
    obj = self.browse(cr,uid,ids,context=context)
    values = {'ma_luong':obj.name.id,
             'giolam':obj.giolam,
             'time_in':time_in,
             'time_out':time_out,

    self.pool.get('x_giolam').create(cr,uid,values,context=context) 

使用此功能,我想在表 x_giolam 中插入数据,因为当工作人员在当天登录或注销系统时...将其数据保存在此表中,另一天当他们再次执行此操作时再次保存。 .. 上个月,如果你想计算他们的薪水,你只需选择 ma_luong=ma_luong(of table x_luong) 和这个 table x_giolam:

class x_giolam(osv.osv):
    _name = 'x_giolam'
    _description = 'Gio Lam'
    _columns = {'name': fields.integer('Lọai',size=64,required="true"),
                'giolam' : fields.float('Gio lam',size=64,required="True"),
                'time_in': fields.char('Gio vào',size=20),
                'time_out' :fields.char('Gio về',size=20),         
                }

我的项目有 3 个问题:

1)函数插入有错误:

AttributeError: 'browse_record_list' object has no attribute 'name'

我该如何解决?我的数据保存在表 x_giolam
2)我如何选择表 x_giolam 的多行,这是员工自己的。给我一些关于这个功能的例子
3)当我显示行时我如何组织 field.Xml

很抱歉给您带来麻烦,因为它太长了……但我希望这里的每个人都可以帮助我。Python 和 open Erp 与 c++ 或 c# 的区别。我的这个项目“使用 OpenErp 研究和编写模块时间表”,下周是截止日期。我英语不好,对不起!!!谢谢!!

4

3 回答 3

1

我可以帮你解答你的第一个问题。问题出在这段代码中:

def insert(self,cr,uid,ids,context={}):
                obj=self.browse(cr,uid,ids,context=context)
                values={'ma_luong':obj.name.id,

错误信息是这样的:

AttributeError:“browse_record_list”对象没有属性“名称”

如果您orm.browse()使用 id 列表调用,您将返回浏览记录列表。然后,您必须枚举列表,或从列表中获取单个条目以使用。

例如:

for luong in self.browse(cr,uid,ids,context=context):
    print luong.name

或者:

luongs = self.browse(cr,uid,ids,context=context)
luong = luongs[0]
print luong.name
于 2011-12-15T22:03:36.150 回答
0

您为什么不看一下标准hr_attendance模块并从那里继续呢?对于您的模型,name是保留字段名称,因此最好将其保留为char. 尝试该更改,看看它是否可以解决您的错误消息。

对于其他两个问题,我认为您应该尝试更好地改写它们...

于 2011-12-15T18:17:10.593 回答
0

obj 的类型是记录列表,因此要浏览记录列表,您必须定义一个元素。在您的情况下,您可以键入:obj[0].giolam --> 对于 obj 的第一条记录的 giolam。原谅我英语不好

于 2015-12-31T10:52:08.870 回答