Grazie dei suggerimenti.
Nel frattempo ho ritrovato openerplib, ora con nome leggermente diverso e sotto forma di progetto GitHub con tanto di benedizione ufficiale di OpenERP SA:
github.com/OpenERP/openerp-client-lib
erppeek sembra decisamente interessante, l'ho clonato subito così non me lo dimentico per strada... dovrò studiarlo.
Bella la 7, parecchie novità, anche nella localizzazione Italiana (grazie ragazzi...), ora ho un po' da fare per adattare il mio script alle nuove cose, da quel poco che ho visto mi pare già più razionale (es. gli utenti che non hanno più un sacco di info in res.users ma referenziano un res.partner, come è giusto e sensato che sia
eLBati ha scritto:
Io ho provato diversi pacchetti, per poi tornare ad usare il metodo standard:
doc.openerp.com/6.1/developer/12_api/#demo-scriptIl "metodo standard" è più o meno quel che utilizzo (di openerpclient usavo solo la get_connection, anche se dovrebbe avere qualche altra comodità... per il resto mi ero fatto io qualche funzioncina di comodo)... ma il grosso problema è che fondamentalmente non è documentato o se c'è documentazione è abbastanza imboscata da non essere riuscito a trovarla.
È impossibile lavorarci davvero senza essere abituati a mettere le mani nel codice sorgente di OpenERP... e non parlo di documentare i vari oggetti disponibili ed i loro campi... per quello va benissimo andarsi a vedere il codice (oddio, io vado a sbirciare direttamente nel db con phppgadmin, trovo che si faccia più in fretta almeno per le cose semplici)...
Il vero problema è sapere come fare operazioni appena più complesse del classico CRUD, lavorare con i workflow o wizard o bottoni vari e le finestre di dialogo che questi scatenano... non ero riuscito a trovare documentazione in merito, nemmeno un aiuto su come interpretare il sorgente dei moduli per derivarne queste informazioni.
Esempio #1, installazione di moduli, in alcuni casi scatena finestre nell'interfaccia web che chiedono info all'utente...
module_osv = cnxn.get_model('ir.module.module')
module_id = ... trova l'ID giusto ...
res = module_osv.button_immediate_install([ id ]) # sarà il modo migliore?
# come accidenti si interpreta il contenuto di res ???
# come rispondo alle finestre che compaiono, per esempio, installando il piano dei conti ???
Esempio #2, inserimento di un ordine di acquisto e relativi movimenti, lotti, fattura: non sembra essere fattibile con sole operazioni create / write ma bisogna fare anche altre cose...
# crea un purchase.order e le sue purchase.order.line
data = { ...blah... }
order_id = cnxn.get_model('purchase.order').create(data)
for riga in righe_ordine:
data = { ...blah... }
cnxn.get_model('purchase.order.line').create(data)
# crea uno stock.picking con associate delle stock.move
# (trovato studiando il debug log di openerp_server e/o spiando XML-RPC tra client e server)
openerp.workflow('purchase.order', 'purchase_confirm', purchase_id)
# trova il picking e completa alcuni dati mancanti
picking_id = cnxn.blablabla(trova stock.picking con il purchase_id giusto)
data = { ...note, date, eccetera... }
cnxn.get_model('stock.picking').write([picking_id], data)
# pigia il bottone "processa" sul picking (?)
cnxn.get_model('stock.picking').action_process([picking_id])
# crea lotti se non esistono
for riga in righe_ordine:
data = { ...blah... }
cnxn.blablabla('stock.production.lot', data)
# assegna lotti alle stock.move (??? come razzo si fa ???)
# forse bisogna cercare anche un stock.partial.picking e processarlo in qualche modo ???
# trova la account.invoice relativa al purchase.order appena creato
# completa info della account.invoice e salvala
# conferma che la fattura è stata pagata (??? come razzo si fa ???)
# \--> forse .confirm_paid() o forse c'è da invocare un wizard
# ... abbiamo finito???
(esempi iper semplificati e sintetizzati, tratti da uno script fatto per OpenERP-6.1, il tutto risalente a minimo 6 mesi fa)