09 api v8 for dummies

15
Agile Business Group - www.agilebg.com - [email protected] API V8 for Dummies Guida rapida per apprendisti programmatori di Odoo V8 Nicola Malcontenti Agile Business Group

Upload: odoo-italia

Post on 16-Jul-2015

390 views

Category:

Technology


1 download

TRANSCRIPT

Agile Business Group - www.agilebg.com - [email protected]

API V8 for Dummies

Guida rapida per apprendisti programmatori di Odoo V8

Nicola MalcontentiAgile Business Group

Agile Business Group - www.agilebg.com - [email protected]

Agile Business Group & Odoo V8

Swiss Localisation - Bank Payment File (DTA) Italian Localisation - VAT Registries Account Move Template VAT on payment

Agile Business Group - www.agilebg.com - [email protected]

Obbiettivi delle nuove API

Maggior facilità di scrittura e lettura del codice Python

Creazione di un modulo più python-oriented:● I felds diventano dei descrittori delle classi● Programmazione più object oriented

Per agevolare il porting dei vari moduli le api V7 e V8 sono totalmente compatibili

Agile Business Group - www.agilebg.com - [email protected]

Record e RecordSet

Rimpiazza i concetti di browse_record e browse_record_list

Un RecordSet è una collection RecordSet sono le istanze di ogni classe Un Record è un RecordSet!

Agile Business Group - www.agilebg.com - [email protected]

Record e RecordSet

si può accedere e modifcare i feld del record in maniera diretta:

I metodi del modulo possono essere invocati direttamente su di un RecordSet

partner.name = “My_Partner”print partner.nameMy_Partner

#Chiamata di metododef my_fun(self):

…some stuff…

def other_stuff(self):self.my_fun()

Agile Business Group - www.agilebg.com - [email protected]

Enviroment

NO MORE (cr,uid,ids,...,context) env è parte del RecordSet Chiamate di metodo più rapide:

self.search([('is_company', '=', True)])res.partner(7, 18, 12, 14, 17, 19, 8, 31, 26, 16)self.search([('is_company', '=', True)], limit=1).name'My_Partner'

#accesso a envself.envcursor = self._crself.env.crself.env.userself.env['res.partner'].with_context(tz=x).create(vals)

Agile Business Group - www.agilebg.com - [email protected]

Modulo Presentation Talk

Fields and Methods

Agile Business Group - www.agilebg.com - [email protected]

Fields

Fields come descriptors della classe

Proprietà Date e Datetime:● to_string

to_string in datetime● from_string

from_string in datetime● today

now in datetime● context_today

context_timestamp in datetime

name = fields.Char(string='Name')description = fields.Text(

'Description')user_id = fields.Many2one(

'res.partner', string='Supervisor')

partner_id = fields.Many2Many('res.partner', string='Subscribers')

buffet = fields.Boolean('Buffet')prize = fields.Float(

string='Ticket Prize')state = fields.Selection([ ('draft', 'Draft'), ('paid', 'Paid'), ('cancel', 'Cancelled')])date = fields.Date(string='Date')

Agile Business Group - www.agilebg.com - [email protected]

Functional Fields

felds.function NO MORE!

store limitato a True e False e ad un decorator dedicato sul metodo

amount_total = fields.Float( string='Subtotal', store=True, readonly=True, compute='_compute_amount')

@[email protected]('buffet', 'projector', 'prize')def _compute_amount(self): if self.buffet: self.amount_total = self.prize + 4 if self.projector: self.amount_total = self.prize + 10

Agile Business Group - www.agilebg.com - [email protected]

Method and Decorators

I Decorator sono la “frma” che identifca il tipo di metodo

@api.one: il decorator cicla sui record del recordset, self è un record

@api.multi: self è il RecordSet corrente senza iterazioni

@api.model: self gli viene passato dall'esterno

Agile Business Group - www.agilebg.com - [email protected]

Method and Decorators

@api.multidef pay_amount(self):

for talk in self: talk.state = 'paid'

@api.onedef check_availability(self):

total = self.daily_total(fields.Date.today()) if total <= self.env.user.company_id.total_daily: self.avaible = True else: self.avaible = False

@api.modeldef daily_total(self, today): daily_total = 0 for talk in self: if talk.date.to_string == today: daily_total += talk.amount_total return daily_total

Agile Business Group - www.agilebg.com - [email protected]

Method and Decorators

@api.onchange: non si dichiarano più gli onchange nelle viste, basta usare questo decorator sopra ad un modulo

@api.returns: questo decorator garantisce l'univocità del recordset ritornato dal metodo.

@api.onchange('fieldx'):def do_stuff(self): if self.fieldx == x: self.fieldy = 'toto'

@api.returns('res.partner')def afun(self): ... return x # a RecordSet

Agile Business Group - www.agilebg.com - [email protected]

Link Utili

https://www.odoo.com/documentation/8.0/ https://github.com/nbessi/odoo_new_api_guideli

ne http://www.slideshare.net/openobject/odoo-from

-v7-to-v8-the-new-api

Agile Business Group - www.agilebg.com - [email protected]

Contatti:

[email protected] Twitter: twitter.com/Hurrinico GitHub: github.com/hurrinico

Agile Business Group - www.agilebg.com - [email protected]

Grazie per l'attenzione!