odoo 8 - marco trapanese · 2018. 6. 15. · environment metodo più semplice ed ordinato per...
TRANSCRIPT
![Page 2: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/2.jpg)
Nuove API, perchè?● più object oriented● stile più “pythonico”● hooks● risparmio di codice
![Page 3: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/3.jpg)
Principali novità● uso dei decoratori● recordsets● environment● nuovi fields● nuovo metodo per defaults● muovo metodo per onchange
![Page 4: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/4.jpg)
EnvironmentMetodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e recordsets.
![Page 5: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/5.jpg)
Environmentesempio di migrazione da v7 a v8
# v7def mio_metodo(self, cr, uid, ids, context=None):
[...]
# v8def mio_metodo(self):
[...]
![Page 6: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/6.jpg)
Environmentaccedere all’environment
def mio_metodo(self):self.env
# oppure# oggetto.env
![Page 7: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/7.jpg)
Environment
# accedere all’utenteipdb> self.env.userres.users(1,)
# accedere a records tramite XML idipdb> self.env.ref('base.main_company')res.company(1,)
# invalidare cacheipdb> self.env.invalidate_all()
# ricalcolare campi calcolatiipdb> self.env.recomputeTrue
![Page 8: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/8.jpg)
Environmentaltri metodi utili (eg: sudo())
https://github.com/odoo/odoo/blob/8.0/openerp/api.py
https://www.odoo.com/documentation/8.0/reference/orm.html
http://odoo-new-api-guide-line.readthedocs.org/en/latest/environment.html
![Page 9: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/9.jpg)
Decoratori● @api.model
from openerp import models, api
class MioModello(models.Model):[...]
@api.modeldef create(self, values):
# self è un recordset
def create(self, cr, uid, values, context=None):# self non è un recordset
![Page 10: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/10.jpg)
Decoratori● @api.multi
from openerp import models, api
class MioModello(models.Model):[...]
@api.multidef write(self, values):
# self è un recordset
def write(self, cr, uid, ids, values, context=None):# self non è un recordset
![Page 11: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/11.jpg)
Decoratori● @api.one
from openerp import models, api
class MioModello(models.Model):[...]
@[email protected](‘account.invoice’)def mio_metodo(self):
[...]return invoice
# ritorna un recordset di N fatture
![Page 12: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/12.jpg)
Decoratori● @api.onchange
from openerp import models, api
class MioModello(models.Model):[...]
# invoca mio_metodo se cambiano nome e cognome
@api.onchange('nome', 'cognome')def mio_metodo(self):
[...] self.iniziali = [...]
![Page 13: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/13.jpg)
Decoratori● @api.depends
from openerp import models, api
class MioModello(models.Model):[...]iniziali = fields.Char(compute='_calcola_iniziali')
@[email protected]('partner_id.name', 'partner_id.surname’)def _calcola_iniziali(self):
[...]iniziali = self.partner_id.name[0] + self.partner_id.surname[0]self.iniziali = iniziali.upper()
![Page 14: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/14.jpg)
Decoratori● @api.constrains
from openerp import models, api[...]
class MioModello(models.Model):[...]
@[email protected]('campo1', 'campo2')def mio_metodo(self):
if self.campo1 == self.campo2: raise ValidationError("Messaggio di errore")
![Page 15: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/15.jpg)
Recordset● istanza della classe del modello
ipdb> selfaccount.invoice(9,)ipdb> invoices = self.search([])ipdb> invoicesaccount.invoice(1, 6, 5, 4, 3, 2, 9, 7, 8)ipdb> invoices[6].numberu'SAJ/2015/0001'ipdb> invoices.__class__<class 'openerp.api.account.invoice'>ipdb>
![Page 16: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/16.jpg)
Nuovi fields● addio _columns e _defaults (!!)
from openerp import fields
numero_intero = fields.Integer(‘Numero Intero’)numero_decimale = fields.Float(‘Numero Decimale’)testo = fields.Char(‘Testo’)testo_lungo = fields.Text(‘Testo Lungo’)
cliente = fields.Many2one(‘res.partner’, string=’Cliente’)clienti = fields.Many2many(‘res.partner’, string=’Clienti’)
righe_di_qualcosa = fields.One2many(‘modello.riga’, ‘parent_id’, string=’Righe’)
![Page 17: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/17.jpg)
Nuovi fields● addio _columns e _defaults (!!)
from openerp import fields
# default staticotesto_con_default = fields.Char(‘Testo’, default=’testo predefinito’)
# funzione per calcolo defaulttesto_con_default = fields.Char(‘Test’, default=_una_funzione)
def _una_funzione(self):return ‘testo predefinito’
![Page 18: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/18.jpg)
Nuovi fields● relazioni più semplici● campi calcolati più semplici
from openerp import fields
# campo relatedcampo_relazionato = fields.Char(‘Testo’, related=’altro_campo_di_testo’)
# campo calcolatocampo_calcolato = fields.Char(‘Testo’, compute=’_una_funzione’, store=True)
def _una_funzione(self):return ‘testo predefinito’
![Page 19: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/19.jpg)
Documentazione● https://www.odoo.com/documentation/8.0/reference.html● http://odoo-new-api-guide-line.readthedocs.org/en/latest/index.html
![Page 20: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/20.jpg)
Q & A
![Page 21: Odoo 8 - Marco Trapanese · 2018. 6. 15. · Environment Metodo più semplice ed ordinato per accedere ad informazioni comuni e soprattutto per incapsulare cr, uid, ids, context e](https://reader036.vdocuments.site/reader036/viewer/2022071301/60a36386344d2f4a0475c532/html5/thumbnails/21.jpg)
Davide [email protected]