2011-12-15 3 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 

とボタンsign_inため、この2機能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) 

計算の取得...時間または分の文字列時間をカット意味

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(tinh_thoigian機能)ma_luong(私はSQLでこれと同じ主キーを思う)とgiolam(取得私はスタッフの中に記号や日中のシステムをサインアウトする際ため、表x_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) 

...このテーブルに保存したデータと、もう一度やり直す先日

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質問があります:あなたはちょうどma_luong = ma_luong(テーブルx_luongの)を選択し、それらの給与について計算し、このテーブルx_giolamをしたい場合には、先月再びそれを保存...とと:

1)関数insertはAERROR持っている:

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

私はそれを修正することができますどのように?私のデータはテーブルx_giolamに保存されています
2)どのように私はこのテーブルのx_giolamテーブルの多くの行を選択することができます自分自身..この関数についていくつかの例を教えてください
3)どのように組織field.Xml私はできる

あなたのお困りのために申し訳ありませんが、それは非常に長いためです...しかし、私はここにすべての体が私を助けることを願っています。 Pythonと開いているErpのでC + +またはCとの違い#。そして、この私のプロジェクト「OpenErpでモジュールのタイムシートを研究して書く」と私と来週の締め切りは終わりです。 私の英語は良い、私はそれについてのソーリーです! ありがとうございます!

+0

質問を上に移動すると、より良い回答が得られるかもしれません。彼らにあなたの質問を伝える前に、すべての詳細を人が読ませないようにしてください。 –

答えて

1

私はあなたの最初の質問を支援することができます。問題は、このコードである:あなたがIDのリストでorm.browse()を呼び出すと、あなたがブラウズレコードのリストを取り戻すだろう

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

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

エラーメッセージは、このようなものでした。その後、リストを列挙したり、リストから1つのエントリを取得して作業する必要があります。例えば

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の最初のレコードのジオラムを入力します。 私の悪い英語を私に許してください

関連する問題