我在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(表x_luong)和这个表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)当我在
对不起你的麻烦,因为它太长了......但我希望这里的每个人都可以帮助我。 Python和开放的Erp与c ++或c#的区别。这个我的项目“用OpenErp研究和编写模块时间表”和我下周的截止日期。 我的英语不好,我是关于它的! 谢谢!
答案 0 :(得分: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'对象没有属性'name'
如果使用ID列表调用orm.browse()
,您将获得浏览记录列表。然后,您必须通过列表进行枚举,或从列表中获取单个条目以便使用。
例如:
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
答案 1 :(得分:0)
为什么不看一下标准hr_attendance
模块并从那里继续?
对于您的模型,name
是保留字段名称,因此最好将其保留为char
。尝试更改,看看它是否解决了您的错误消息。
对于其他两个问题,我认为你应该尝试将它们改写一下......
答案 2 :(得分:0)
obj的类型是记录列表,因此要浏览记录列表,必须定义一个元素。 在你的情况下,你可以输入:obj [0] .giolam - >对于第一个obj记录的giolam。 原谅我的英语不好