I have a function that process some data and the result od this need save in a database.
All process of data work fine, but the problem is when i want save the data in a database, not have any error in process.
When i use "ids" in create(), as self.pool.get('hr.attendance').create(cr,uid,ids,datas) this give me an error(see below)
What I do wrong?
This is my function:
def import_time(self, cr, uid, ids, context=None):
def see_time(x1, x2, x3, z1):
x21 = str(timedelta(hours=x2))
x31 = str(timedelta(hours=x3))
res1 = (datetime.strptime(x1, '%H:%M:%S') - timedelta(hours=3)) - datetime.strptime(x21, '%H:%M:%S')
res2 = (datetime.strptime(x1, '%H:%M:%S') - timedelta(hours=3)) - datetime.strptime(x31, '%H:%M:%S')
zz = 'action'
if (z1%2)==0:
zz = 'sign_in'
else:
zz = 'sign_out'
return zzfor lines in self.browse(cr, uid, ids):
attendance_obj = self.pool.get('hr.attendance')
mess = []
cr.execute('SELECT user_time, hr_employee.id '\
'FROM hr_py_import_time, hr_employee '\
'WHERE user_id=id_inter')
temp = cr.fetchall()
cr.execute('SELECT date_start, date_end '\
'FROM hr_employee, hr_py_turno '\
'WHERE hr_py_turno.id=id_turn')
turn = cr.fetchall()
contar = -1
for x in temp:
te = x[0]
us = x[1]
te1 = te.split(' ')[1]
contar+=1
for y in turn:
res = see_time(te1, y[0], y[1], contar)
datas = {'employee_id':us,'name':te,'action':res,}
crea = self.pool.get('hr.attendance').create(cr,uid,datas)
attendance_obj.write(cr,uid,crea,datas,context=context)#this not work too, not save any data
#cr.execute('''INSERT INTO hr_attendance (employee_id, name, action) VALUES( %s, %s, %s)''',(us, te, res,))
#this is only for see the results of process
raise osv.except_osv(_('Atención!'),_(type(res)))
Now this is my view:
<record model="ir.ui.view" id="hr_py_import_time_menu_form">
<field name="name">hr_py_import_time_menu_form_view</field>
<field name="model">hr.py.import.menu</field>
<field name="arch" type="xml">
<form string="Importar">
<sheet>
<label for="name" string="Periodo" class="oe_inline"/>
<field name="name" class="oe_inline"/>
<button colspan="1" name="import_time" string="Importar Horas" type="object" class="oe_highlight"/>
<group>
<field name="time_s"/>
</group>
</sheet>
</form>
</field>
</record><record model="ir.ui.view" id="hr_py_import_time_menu_tree">
<field name="name">hr_py_import_time_menu_tree_view</field>
<field name="model">hr.py.import.menu</field>
<field name="arch" type="xml">
<tree string="Importar">
<field name="name"/>
</tree>
</field>
</record>
The error:
crea = self.pool.get('hr.attendance').create(cr,uid,ids,datas) File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 241, in wrapper return old_api(self, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/openerp/addons/hr_timesheet_sheet/hr_timesheet_sheet.py", line 482, in create sheet_id = context.get('sheet_id') or self._get_current_sheet(cr, uid, vals.get('employee_id'), vals.get('name'), context=context) AttributeError: 'list' object has no attribute 'get'
Jordan Vrtanoski is absolutely right. You only use the "ids" parameter on methods where you actually already have id's and need to either lookup data or manipulate the records.
Right, but if not use the "ids", no have error and not save any data in the database.