OpenERP: получить базу данных и показать ее в форме - PullRequest
0 голосов
/ 15 декабря 2011

Я делаю проект о расписании в OpenERP.У меня есть такая проблема: это таблица 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

и эта функция 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

и последняя функция 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) функция вставки есть Aerror:

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

Как я могу это исправить ???я сохраняю эти данные в таблице x_giolam
2) как я могу выбрать много строк таблицы x_giolam, которые принадлежат сотруднику .. приведите пример этой функции
3) как я могу организовать field.Xmlкогда я показываю строки в

Извините за ваши неприятности, потому что это так долго ... но я надеюсь, что каждое тело здесь может помочь мне.Python и открытый Erp, поэтому разница с c ++ или c #.И этот мой проект "исследуй и напиши расписание модуля с OpenErp" от меня и на следующей неделе крайний срок.Английский из меня не очень хороший, мне очень жаль !!!Спасибо !!

Ответы [ 3 ]

1 голос
/ 16 декабря 2011

Я могу помочь с вашим первым вопросом.Проблема в этом коде:

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'

Если вы позвоните 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
0 голосов
/ 31 декабря 2015

Тип obj - это список записей, поэтому для просмотра списка записей вы должны определить один элемент. в вашем случае вы можете ввести: obj [0] .giolam -> для giolam первой записи obj. прости меня за мой плохой английский

0 голосов
/ 15 декабря 2011

Почему бы вам не взглянуть на стандартный модуль hr_attendance и идти дальше? Для вашей модели name является зарезервированным именем поля, поэтому было бы лучше сохранить его как char. Попробуйте это изменение и посмотрите, решит ли оно ваше сообщение об ошибке.

Что касается двух других вопросов, я думаю, вы должны попытаться перефразировать их немного лучше ...

...