2011-12-15 73 views
0

我在OpenERP中做了一個關於時間表的項目。我有這個問題: 這是x_luong表。OpenERP:獲取數據庫並以表格形式顯示

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個功能意味着得到一次當參謀sign_in或SIGN_OUT系統

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 

這2功能按鈕sign_in和sign_out:

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 

和最後一個功能插件()得到ma_luong(我想在SQL此相同的主鍵)和giolam( )的公司),time_in,TIME_OUT員工工作小時,這是功能插件(

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)函數插入有AERROR:

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

如何解決它???我的數據是保存在表x_giolam
2)我怎麼能選擇許多行的表x_giolam哪個員工自己..給我一些關於這個功能的例子
3)我怎麼能組織field.XML當我在

對不起你的麻煩,因爲它太長了...但我希望在這裏的每個身體都可以幫助我。 Python並用C++或c#打開Erp等差異。而我的這個項目「研究和編寫一個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' object has no attribute 'name'

如果調用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 
0

爲什麼不看一下標準hr_attendance模塊並從那裏繼續? 對於您的型號,name是保留字段名稱,因此最好將其保留爲char。嘗試更改並查看它是否可以解決您的錯誤消息。

對於其他兩個問題,我想你應該嘗試更好一點改寫他們...

+0

謝謝我的理解 –

0

類型obj的是記錄列表,所以對於瀏覽記錄列表,你必須定義一個元素。 在你的情況下,你可以鍵入:obj [0] .giolam - >爲obj的第一個記錄的giolam。 原諒我因爲我的英語不好

相關問題