1. Jornadas Odoo 2015 15 de junio de 2015 @PedroMBaeza
[email protected] Cmo migrar un mdulo OpenERP a la
nueva API de Odoo
2. Programacin ms sencilla, clara y corta Menos posibilidades
de errores (p, ej. propagacin del context) Ms posibilidades con el
framework (filtered, sorted, mapped...). Herencia mejorada.
onchange y campos calculados ms intuitivos Por qu migrar a la nueva
API?
3. Declaracin de modelos Cambios de la nueva API (I)
orm.Model/osv.osv > models.Model
orm.TransientModel/osv.osv_memory > models.TransientModel
orm.AbstractModel > models.AbstractModel
4. Declaracin de campos Cambios de la nueva API (II) _columns =
{ 'field1': fields.boolean('Field 1'), 'field2':
fields.integer('Field 2'), } _columns = { 'field1':
fields.boolean('Field 1'), 'field2': fields.integer('Field 2'), }
field1 = fields.Boolean('Field 1') field2 = fields.Integer('Field
2')
5. Valores por defecto Cambios de la nueva API (III) field1 =
fields.Boolean(..., default=False) field2 = fields.Integer(...,
default=2) _defaults = { 'field1': False, 'field2': 2, }
6. Campos calculados Cambios de la nueva API (IV) field1 =
fields.Float('_function', string='Field 1', store=True)
@api.depends(...) def _function(self): self.field1 = ... _columns =
{ 'field1': fields.function(. _function, type='float',
string='Field 1', store={...}), } def get_store_ids(cr, uid, ): ...
return {}
7. Campos related Cambios de la nueva API (V) field1 =
fields.Float(. related='campo_x2x.campo_destino', string='Field 1')
_columns = { 'field1': fields.related(. 'campo_x2x',
'campo_destino', string='Field 1', type='float'), }
8. Campos property Cambios de la nueva API (VI) field1 =
fields.Float(. company_dependent=True, string='Field 1') _columns =
{ 'field1': fields.property(. string='Field 1', type='float'),
}
9. Mtodos Cambios de la nueva API (VII) def write(self, cr,
uid, ids, vals, context): def create(self, cr, uid, vals, context):
@api.multi def write(self, vals): @api.model def create(self,
vals):
10. onchange Cambios de la nueva API (VIII) @api.multi
@api.onchange('fieldx') def onchange_fieldx(self): self.field1 = x
def onchange_fieldx(self, cr, uid, ids, context): res = {}
res['value'] = {'field1': x} return res
11. env Cambios de la nueva API (IX) def method(self):
self.sudo().method2() self.with_context(x=23).method3() def
method(self, cr, uid, ids, context=None): self.method2(cr, . . .
SUPERUSER_ID, ids, context) context['x'] = 23 self.method3(cr, uid,
ids, context)
12. Vistas Cambios de la nueva API (X) Sin cambios