Forum

Benvenuto!

Questo è il forum ufficiale dell'Associazione Odoo Italia. Dopo esserti registrato potrai partecipare ponendo domande o rispondendo a quelle esistenti. Non scordarti di compilare il tuo profilo e consultare le linee guida prima di iniziare a scrivere.

1

Errore import XML fornitore

Avatar
Giuseppe Stoduto

Buongiorno.

Sto cercando di importare un xml di un fornitore ma sono incappato nel seguente errore:

ValidationError: ('ValidateError', u"La convalida del campo(i) 'vat' non \xe8 riuscita a causa del vincolo: \nLa P.IVA [IT00233599054] del partner [SDA] non sembra valida. \nNota: il formato atteso \xe8 IT12345670017")


con un po di ricerche ho capito che questo errore è dovuto in una errato inserimento della P.IVA da parte del fornitore nella sezione DatiTrasporto come di seguito mostrato:


          <DatiTrasporto>
                <DatiAnagraficiVettore>
                    <IdFiscaleIVA>
                        <IdPaese>IT</IdPaese>
                        <IdCodice>0233599054</IdCodice>
                    </IdFiscaleIVA>
                    <Anagrafica>
                        <Denominazione>SDA</Denominazione>
                    </Anagrafica>
                </DatiAnagraficiVettore>
                <MezzoTrasporto> VETTORE</MezzoTrasporto>
                <CausaleTrasporto> VENDITA</CausaleTrasporto>
                <NumeroColli>1</NumeroColli>
                <PesoLordo>8.00</PesoLordo>
            </DatiTrasporto>


esiste un modo per prevenire la cosa, oppure del codice per verificare l'autenticità della P.IVA da inserire nel modulo odoo in modo da prevenire l'errore?

Grazie

Avatar
Abbandona
4 Risposte
0
Avatar
Giuseppe Stoduto
Migliore risposta

Alla fine ho optato per questa modifica:

    def getPartnerBase(self, DatiAnagrafici):
        if not DatiAnagrafici:
            return False
        partner_model = self.env['res.partner']
        cf = DatiAnagrafici.CodiceFiscale or False
        vat = False
        if DatiAnagrafici.IdFiscaleIVA:
            # Format Italian VAT ID to always have 11 char
            # to avoid validation error when creating the given partner
            if DatiAnagrafici.IdFiscaleIVA.IdPaese.upper() == 'IT':
                vat = "%s%s" % (
                    DatiAnagrafici.IdFiscaleIVA.IdPaese,
                    DatiAnagrafici.IdFiscaleIVA.IdCodice.rjust(11, '0')
                )
            else:
                vat = "%s%s" % (
                    DatiAnagrafici.IdFiscaleIVA.IdPaese,
                    DatiAnagrafici.IdFiscaleIVA.IdCodice
                )
        partners = partner_model
        if vat:
            is_vat = vatnumber.check_vies(vat)
            if is_vat:
                partners = partner_model.search([
                    ('vat', '=', vat),
                ])
            else:
                self.log_inconsistency(
                            _(
                                'The VAT number %s of the carrier/transporter %s is not valid'
                            )
                            % (
                                vat,
                                DatiAnagrafici.Anagrafica.Denominazione
                            )
                        )
                return False

[.....]

Se avete una soluzione migliore sono tutto orecchi

Avatar
Abbandona
0
Avatar
Lorenzo Battistini
Migliore risposta

Riesci mica a fornire un diff o ancora meglio a fare una PR?

Avatar
Abbandona
0
Avatar
Giuseppe Stoduto
Migliore risposta

Purtroppo mi becchi sempre sul mio lato debole. Non mi risulta facile fare una diff perché quella modifica l'ho testata su un modulo che sto rifacendo per comodità, stavo facendo dei test sulle fatture ricevute fino qui e sono incappato in questo errore. Il modulo si basa su quello originale basta che cerchi  def getPartnerBase(self, DatiAnagrafici):  su wizard_import_fatturapa.py il codice modificato è quello dopo
if vat:

Poi se proprio devo ci riprovo a fare una PR ma, da esperienze passare, ho sempre fatto casino.

Se non avete paura delle conseguenze lo faccio. Non è una minaccia è che sono proprio negato con git :)

Avatar
Abbandona
0
Avatar
Lorenzo Battistini
Migliore risposta

Fai come ti senti, danni non puoi farne :-)

Se hai voglia, puoi iniziare a guardare qui https://www.odoo-italia.org/documentazione/sviluppo/come_contribuire.html e per qualunque problema chiedere in mailing list sviluppo https://www.odoo-italia.org/groups

Avatar
Abbandona
0
Avatar
Giuseppe Stoduto
Migliore risposta

Fatto. E credo che ho combinato i soliti casini.

OT:

La difficoltà che ho è quella di creare un nuovo branch sul mio repo git prima di mandare le modifiche.

Ora invece modifica e invia tutto insieme senza permettermi di poter cambiare i vari file. Tipo quello per la versione
Avatar
Abbandona
0
Avatar
Giuseppe Stoduto
Migliore risposta

Andando indietro nel codice si potrebbe mettere un controllo qui:

        # 2.1.9
        Delivery = FatturaBody.DatiGenerali.DatiTrasporto
        if Delivery:

e se la p.iva non è valida fargli saltare completamente l'inserimento.

Probabilmente il trasportatore per SDI non è importante ai fini fiscali anche perché la p.iva scritta sopra è di soli 10 caratteri e in qualsiasi modo uno la vuole vedere, questo xml dovrebbe non passare il test dell'SDI

Avatar
Abbandona
0
Avatar
Giuseppe Stoduto
Migliore risposta

Ho trovato questa funzione simple_vat_check() in base_vat.py, sto parlando di odoo 8, questa sera lo studio con calma per implementare una soluzione.

Purtroppo si deve modificare il codice anche su odoo 8 non solo su 12 come da PR. Penso , arrivato a questo punto che tutte le versioni ne sono afflitte.
Avatar
Abbandona
0
Migliore risposta

Sembra che sia necessario modificare il modulo di importazione.

Ho creato la PR https://github.com/OCA/l10n-italy/pull/1342 per riprodurre il problema.

Avatar
Abbandona