Questo sito utilizza cookie per le proprie funzionalità e per inviarti pubblicità e servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.

Accedendo al link http://www.odoo-italia.org/index.php/home/cookie-policy puoi leggere in dettaglio le modalità di trattamento dei cookie da parte dell'Associazione Odoo Italia.

Benvenuto, Ospite
Nome utente: Password: Ricordami
  • Pagina:
  • 1
  • 2

ARGOMENTO: Sostituire Field esistente

Sostituire Field esistente 3 Anni 2 Mesi fa #22829

  • morriluca
  • Avatar di morriluca
  • Offline
  • Fresh Boarder
  • Messaggi: 14
  • Karma: 0
Ciao a tutti,
devo sovrascrivere una campo, per precisione il campo Partita Iva (VAT).
Ciò che vorrei fare è riuscire a validare la partita iva grazie al servizio messo a diposizione dal sito ec.europa.eu/

Il primo passo è quello di inserire inserire un contenitore <div> a fianco del campo VAT dove vado ad inserire l'esito della risposta e un pulsante per avviare la ricerca.

Se utilizzo questo codice
<record id="controllo_partita_iva" model="ir.ui.view">			
   <field name="name">view.partner.form.inherited</field>
   <field name="model">res.partner</field>
   <field name="inherit_id" ref="base.view_partner_form"></field>
   <field name="arch" type="xml">				
   <field name="property_account_position_id" position="after">
      <label for="vat"/>
         <div name="vat_info" class="o_row">
            <field name="vat" placeholder="e.g. IT......"></field>
            <div id="validazione"></div>
            <xpath expr="//button[@string='Verifica Iva']" >
               <button name="verifica_iva" type="object" string="Verifica Iva" class="oe_highlight"/>                        
            </xpath>
         </div>
      </field>
   </field>
</record>

I due problemi che ho sono 2.
1) vedo due vat in quanto la prima è inserita nella view dal modulo base_vat. Quindi, come posso sovrascriverla inserendo il "div" ed il "botton" a fianco?
2) non ho ben chiaro come poter fare a creare una funziona ajax dove posso gestire la risposta.
Programmando spesso in html / php / javascript sono abituato in questi casi a farmi una mia funziona ajax richiamata dal bottone, la quale richiama tramite ajax una pagina web che genera una risposta json. In base alla risposta inserisco nel DIV il contenuto che mi pare. In Odoo funziona così, oppure ci sono delle procedure già fatte da rispettare?
Ultima modifica: 3 Anni 2 Mesi fa da morriluca.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Sostituire Field esistente 3 Anni 2 Mesi fa #22830

  • enlightx
  • Avatar di enlightx
  • Online
  • Platinum Boarder
  • Messaggi: 6064
  • Ringraziamenti ricevuti 638
  • Karma: 85
1) devi creare un altro blocco record dove erediti la vista del modulo base_vat e li operi le tue modifiche. puoi ad esempio rimuovere quel campo usando <field name="vat" position="replace"/> (sperando che nessuna vista dipenda da questo campo)

PS: la partita iva viene già validata da vies se installi il modulo python vatnumber

2) nella documentazione ufficiale qualcosa c'è, ad esempio:
www.odoo.com/documentation/8.0/reference/javascript.html

ma generalmente non è mai sufficiente :)
Davide Corio
Odoo Solution Architect
email: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
web: www.davidecorio.com
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Sostituire Field esistente 3 Anni 2 Mesi fa #22863

  • morriluca
  • Avatar di morriluca
  • Offline
  • Fresh Boarder
  • Messaggi: 14
  • Karma: 0
Grazie mille per la risposta.
Per il punto 1 ho risolto come da te suggerito
<record id="controllo_partita_iva_delete_vat" model="ir.ui.view">
            <field name="name">controllo.partita.iva.delete.vat</field>
            <field name="model">res.partner</field>
            <field name="inherit_id" ref="base_vat.view_partner_form"/>
            <field name="arch" type="xml">
               <field name="vat" position="replace"/>
            </field>
        </record>
Ho creato un nuovo record ed eliminato vat,
poi ho creato un secondo record dove ho inserito la mia vat e il mio codice per richiamare la mia funzione.
		<record id="controllo_partita_iva_add_vat" model="ir.ui.view">			
			<field name="name">controllo.partita.iva.add.vat</field>
			<field name="model">res.partner</field>
			<field name="inherit_id" ref="account.view_partner_property_form"/>	

			<field name="arch" type="xml">						
                <field name="property_account_position_id" position="after">                    
                	<label for="vat"/>
                    <div name="vat_info" class="o_row">
                        <field name="vat" placeholder="e.g. IT0477472701"/>

 						<div name="vat_info" class="o_row">                        
	                    	<div id="validazione" name="validazione" class="validazione"></div>
    	                	<!--<button name="verifica_iva" string="Verifica Iva" type="object" class="o_partitaiva" context="{'vat' : vat}"/> -->
    	                	<a id="bt_validazione">Verifica Iva</a>

                    	</div>
						
                    </div>
                </field>
            </field>
	</record>

Ora sono ad un punto morto per il punto numero 2. Online ho trovato questo codice
openerp.controllo_partita_iva = function(instance) {
 
  instance.web.FormView = instance.web.FormView.extend({
      events: {
          'click #bt_validazione button': 'button_clicked',
      },      
      
      button_clicked: function(ev) {   
        console.log("ho cliccato");
    
      },
  });

}
ma non riesco a farlo funzionare, o meglio se cilcco sul mio tag a con id bt_validazione non mi parte la funzione.
Ho pure provato a fare una cosa mia, del tipo
function validazione_iva(){   
    new openerp.web.Model("res.partner")
    .call( "verifica_iva", ["vat"])
        .then(function (result) {
            console.log(result);
    });
}
dove in questo caso richiamo la funzione, chiamo la mia funzione verifica_iva che mi da il risultato, ma non riesco a passargli il valore della campo VAT, in quanto non riesco a recuperarlo. dovrei fare una select con Jquery sui vari tag html e riuscirei a recuperare il valore, ma è una opzione abbastanza orrenda. Avete suggerimenti?
Ultima modifica: 3 Anni 2 Mesi fa da morriluca.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Sostituire Field esistente 3 Anni 2 Mesi fa #22895

  • morriluca
  • Avatar di morriluca
  • Offline
  • Fresh Boarder
  • Messaggi: 14
  • Karma: 0
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)
Ultima modifica: 3 Anni 2 Mesi fa da morriluca.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Sostituire Field esistente 3 Anni 2 Mesi fa #22897

  • eLBati
  • Avatar di eLBati
  • Online
  • Platinum Boarder
  • Messaggi: 1766
  • Ringraziamenti ricevuti 186
  • Karma: 38
Non vedo il motivo di modificare l'interfaccia tramite javascript per fare questa cosa. Perchè non farlo al salvataggio del record, o tramite un bottone, o all'onchange?

Inoltre odoo fa già il check della partita IVA, perchè rifarlo?
Lorenzo Battistini
github.com/eLBati

TAKOBI
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Sostituire Field esistente 3 Anni 2 Mesi fa #22901

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
eLBati ha scritto:
Non vedo il motivo di modificare l'interfaccia tramite javascript per fare questa cosa. Perchè non farlo al salvataggio del record, o tramite un bottone, o all'onchange?

Inoltre odoo fa già il check della partita IVA, perchè rifarlo?

L'unico motivo che mi vien da pensare e' che la macchina su cui risieda il server Odoo non abbia accesso alla rete.
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
  • Pagina:
  • 1
  • 2
Tempo creazione pagina: 0.147 secondi

Odoo Italia Associazione - C.F: 94200470485 - Sede: Viale dei Cadorna, 83 - Firenze - Italy

Protected by R Antispam