Vi dico ciò che sono riuscito a fare.
Nella parte di visualizzazione del record (Quindi non in Modifica) con la seguente funzione javascript
function validazione_iva(){
new openerp.web.Model("res.partner")
.call( "verifica_iva", [jQuery("div[name='vat_info'] .oe_form_char_content").html()])
.then(function (result) {
....
});
}
e successivo codice nel file .py
@api.model
def verifica_iva(self, arg1):
url = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'
client = Client(url)
ret = client.service.checkVat(countryCode=arg1[:2], vatNumber=arg1[2:])
return {'countryCode':ret['countryCode'],
'vatNumber':ret['vatNumber'],
'valid':ret['valid'],
'name':ret['name'],
'address':ret['address']}
sono riuscito a fare una richiesta javascript, ovvero creare una semplice funzione che ritorna ciò che voglio. L'unica pecca di questa procedura è il recupero del valore partita iva da inviare. Non sono riuscito a capire come riuscire da javascript a recuperare la partita iva o l'id del record da poter analizzare. Ho bruscamente recuperato la partita iva da codice tramite jQuery.
Ho infine fatto una seconda procedura. Ho utilizzato il paramentro on_change nel filed
<field name="vat" placeholder="e.g. IT0477472701" on_change="validazione_iva(vat)"/>
e create la funzione per il controllo
def validazione_iva(self, cr, uid, ids, vat=None,context=None):
ret_s = ""
url = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'
client = Client(url)
ret = client.service.checkVat(countryCode=vat[:2], vatNumber=vat[2:])
ret_s = 'Iva non valid'
if ret['valid'] is True:
ret_s = 'name:'+ret['name']+ 'address:'+ret['address']
return {'value':{'note_iva':ret_s}}
con la funzione return è possibile far comparire una finestra,ma ciò che volevo fare io era riempire un div con il contenuto della risposta. Ho dovuto invece creare una field "note_iva" dove andare ad inserire il mio testo di ritorno.
Molto ben fatto questo Odoo, ma per fare cose semplici come queste si deve diventare matti..... (ed alla fine non è quello che speravo di ottenere)