Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[14.0][ADD] l10n_it_fatturapa_out: edit invoice sent SDI #2966

Closed
wants to merge 1 commit into from

Conversation

Borruso
Copy link
Contributor

@Borruso Borruso commented Oct 3, 2022

Risolve #2731 per la 14

--
Confermo di aver firmato il CLA https://odoo-community.org/page/cla e di aver letto le linee guida su https://odoo-community.org/page/contributing

Copy link

@marcelofrare marcelofrare left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ritengo controproducente per tutti consentire modifiche di questo tipo.
Ad esempio sono riuscito a cambiare il Cliente nella fattura e riconfermala mantenendo l'xml inalterato.
Se dobbiamo coprire questa funzionalità, farei un wizard con il singolo campo da modificare, dove siamo certi che non risulta presente sul xml e non crea problemi alla fattura, senza dover portare in bozza il documento.

@MarcoCalcagni
Copy link
Contributor

Ciao Marcelo, il primo punto c'è un gruppo che è abilitato al cambio.
per la modifica del cliente indago il tool controlla la Piva .
per il terzo punto è stata discussa e scelta questa modalità nel venerdi .

@MarcoCalcagni
Copy link
Contributor

MarcoCalcagni commented Dec 16, 2022

Ritengo controproducente per tutti consentire modifiche di questo tipo. Ad esempio sono riuscito a cambiare il Cliente nella fattura e riconfermala mantenendo l'xml inalterato. Se dobbiamo coprire questa funzionalità, farei un wizard con il singolo campo da modificare, dove siamo certi che non risulta presente sul xml e non crea problemi alla fattura, senza dover portare in bozza il documento.

ho provato il cambio cliente . il controllo funziona mi ha bloccato . il sistema controlla la Piva se cambi partner con stessa piva ti è concesso.

se puoi descrivi meglio @marcelofrare
FYI @stevech091

@Borruso Borruso force-pushed the 14.0-edit_invoice_sent_SDI branch from 05fe902 to ed271d6 Compare December 16, 2022 11:23
@Borruso Borruso force-pushed the 14.0-edit_invoice_sent_SDI branch 2 times, most recently from 5aec5f8 to 0c9b1ba Compare February 3, 2023 13:41
@TheMule71
Copy link
Contributor

Per i test che falliscono, probabilmente l'oggetto request è vuoto / non inizializzato. Probabilmente vale lo stesso per operazioni automatiche, tutto ciò che non segue un'azione da parte dell'utente.

Nota: il motivo di tale controllo è che l'auto post della fattura va fatto solo per le write() chiamate da JS direttamente, per es. col pulsante di Save (per la 16.0 vedremo).

Esiste la possibilità che delle write() vengano chiamate da python (da altri moduli) per es. in button_draft(), che romperebbe la logica del codice qui.

Copy link

@francescapenso francescapenso left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

funziona. L'utente deve avere particolare attenzione per le autofatture ai cambi "iva",ma non dipende dal modulo è una nota di accortezza

@Borruso Borruso force-pushed the 14.0-edit_invoice_sent_SDI branch 2 times, most recently from afbf3ee to 28be9c8 Compare February 9, 2023 14:57
@marcelofrare
Copy link

Confermo che ora funziona come previsto.

@TheMule71 TheMule71 self-requested a review February 13, 2023 14:03
@francescapenso
Copy link

qualche news?

Copy link
Member

@tafaRU tafaRU left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Le modifiche apportate mi sembrano nel complesso buone.
Oltre ai commenti/suggerimenti che trovi nella mia review sarei per implementare alcuni test automatici che coprano la nuova funzionalità.

Grazie!

@Borruso Borruso force-pushed the 14.0-edit_invoice_sent_SDI branch from 28be9c8 to fbb9f08 Compare March 28, 2023 14:49
@eLBati
Copy link
Member

eLBati commented Jun 9, 2023

/ocabot rebase

@OCA-git-bot
Copy link
Contributor

Congratulations, PR rebased to 14.0.

@OCA-git-bot OCA-git-bot force-pushed the 14.0-edit_invoice_sent_SDI branch from fbb9f08 to f23e56f Compare June 9, 2023 10:56
@mrcast
Copy link
Contributor

mrcast commented Jun 9, 2023

buon pomeriggio a tutti,
stavo testando la PR, ma non mi è chiaro una passaggio:

  • fattura validata e file XML generato, devo riportarla a bozza per poter fare le modifiche
    Al riporta a draft la fattura
    ATTESO
    viene riportata a bozza la fattura anche se c'è XML
    OSSERVATO
    Invoice INV/2023/06/00xx has XML and can't be reset to draft. Delete the XML before.

C'è qualche passaggio che va fatto su qualche vista e che mi sfugge?
grazie!

@Borruso
Copy link
Contributor Author

Borruso commented Jun 9, 2023

C'è qualche passaggio che va fatto su qualche vista e che mi sfugge? grazie!

C'è un gruppo apposito per portarlo in draft. Edit Invoice Sent SDI

@mrcast
Copy link
Contributor

mrcast commented Jun 12, 2023

C'è qualche passaggio che va fatto su qualche vista e che mi sfugge? grazie!

C'è un gruppo apposito per portarlo in draft. Edit Invoice Sent SDI

grazie mille @Borruso

Copy link
Contributor

@mrcast mrcast left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test funzionale, ok per me

@SirTakobi
Copy link
Contributor

C'è qualche passaggio che va fatto su qualche vista e che mi sfugge? grazie!

C'è un gruppo apposito per portarlo in draft. Edit Invoice Sent SDI

Si potrebbe documentare nel README o menzionare nel messaggio di errore, cosa ne pensi?
Altrimenti l'utente come fa a sapere che c'è questa possibilità?

@Borruso
Copy link
Contributor Author

Borruso commented Jun 12, 2023

Si potrebbe documentare nel README o menzionare nel messaggio di errore, cosa ne pensi? Altrimenti l'utente come fa a sapere che c'è questa possibilità?

hai ragione bisogna aggiornare il readme

@Borruso Borruso force-pushed the 14.0-edit_invoice_sent_SDI branch from f23e56f to e6fe8d7 Compare September 8, 2023 08:57
Copy link

@newneo47 newneo47 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Funziona

@eLBati
Copy link
Member

eLBati commented Mar 1, 2024

/ocabot merge minor

@OCA-git-bot
Copy link
Contributor

This PR looks fantastic, let's merge it!
Prepared branch 14.0-ocabot-merge-pr-2966-by-eLBati-bump-minor, awaiting test results.

OCA-git-bot added a commit that referenced this pull request Mar 1, 2024
Signed-off-by eLBati
@OCA-git-bot
Copy link
Contributor

@eLBati your merge command was aborted due to failed check(s), which you can inspect on this commit of 14.0-ocabot-merge-pr-2966-by-eLBati-bump-minor.

After fixing the problem, you can re-issue a merge command. Please refrain from merging manually as it will most probably make the target branch red.

@eLBati
Copy link
Member

eLBati commented Mar 1, 2024

/ocabot rebase

@OCA-git-bot
Copy link
Contributor

Congratulations, PR rebased to 14.0.

@OCA-git-bot OCA-git-bot force-pushed the 14.0-edit_invoice_sent_SDI branch from 1af4e0a to 00d76fb Compare March 1, 2024 08:38
@tafaRU
Copy link
Member

tafaRU commented Mar 15, 2024

/ocabot rebase

@OCA-git-bot
Copy link
Contributor

Congratulations, PR rebased to 14.0.

@OCA-git-bot OCA-git-bot force-pushed the 14.0-edit_invoice_sent_SDI branch from 00d76fb to b249e14 Compare March 15, 2024 09:26
@tafaRU
Copy link
Member

tafaRU commented Mar 15, 2024

@Borruso i test falliscono. Puoi verificare?

@danall59
Copy link

Gent.mo @Borruso,
questa PR è molto interessante ma purtroppo non può essere mergiata in quanto genera 2 errori sui Test.
Come stato accennato oggi nella riunione del venerdì mattina, sarebbe utile un tuo ultimo sforzo per risolvere il problema.
Grazie

@Borruso Borruso force-pushed the 14.0-edit_invoice_sent_SDI branch from b249e14 to 6efeace Compare March 22, 2024 10:49
@Borruso
Copy link
Contributor Author

Borruso commented Mar 22, 2024

Non so perché da quell'errore ho cercato di fare rebase ma non ha funzionato
Come se il partner non abbia la città impostata e si incazza

@francesco-ooops
Copy link
Contributor

/ocabot rebase

@OCA-git-bot
Copy link
Contributor

Congratulations, PR rebased to 14.0.

@OCA-git-bot OCA-git-bot force-pushed the 14.0-edit_invoice_sent_SDI branch from 6efeace to b9a6618 Compare May 14, 2024 10:20
@aleuffre
Copy link
Contributor

aleuffre commented May 15, 2024

Ho indagato l'errore sui test, e ho capito da dove viene il problema. Faccio un riassunto:

  1. Il modulo l10n_it_fatturapa_import_zip fa dei test importando fatture da uno zip. La fattura incriminata all'interno dello zip è la IT06363391001_00009.xml
  2. La fattura in questione è verso "Foreign Customer", riporto la parte rilevante
        <CessionarioCommittente>
            <DatiAnagrafici>
                <IdFiscaleIVA>
                    <IdPaese>AE</IdPaese>
                    <IdCodice>99999999999</IdCodice>
                </IdFiscaleIVA>
                <Anagrafica>
                    <Denominazione>Foreign Customer</Denominazione>
                </Anagrafica>
            </DatiAnagrafici>
            <Sede>
                <Indirizzo>29-17 Al Thanya St</Indirizzo>
                <CAP>00000</CAP>
                <Comune>Dubai</Comune>
                <Provincia>EE</Provincia>
                <Nazione>AE</Nazione>
            </Sede>
        </CessionarioCommittente>
  1. La funzione getPartnerBase dovrebbe cercare il contatto associato alla fattura. Lo cerca in base alla VAT (99999999999), non lo trova, e lo crea da zero, senza la città.
  2. Esiste un contatto nei dati di Demo di l10n_it_fatturapa "Foreign Customer" senza VAT. Dato che getPartnerBase cerca solo tramite VAT, non lo trova.
  3. Quando questa fattura viene importata, vengono calcolate delle compute, e si arriva infine alla write di AccountMove in l10n_it_fatturapa_out introdotta da questa PR, dove si vuole creare l'XML della fattura.
  4. La fattura di questo nuovo contatto "Foreign Customer" appena creato (che è diverso da quello presente nei dati di Demo) non ha la città impostata. La creazione della fattura fallisce in questo punto perché partner_id.city contiene False, mentre la funzione encode_for_export si aspetta una stringa.

La modifica semplice semplice per far passare i test sarebbe stata quella di modificare il template della fattura XML con

<Comune t-esc="encode_for_export(partner_id.city or '', 60)" />

l'ho provata, e arriva in fondo alla generazione dell'XML, salvo poi sollevare svariati errori sulla validazione di questo XML, di cui quello di avere il Comune vuoto è solo uno.

Errore Completo
  File "/opt/odoo/auto/addons/l10n_it_fatturapa_out/wizard/efattura.py", line 264, in to_xml
    raise UserError("\n".join(str(e) for e in errors))
odoo.exceptions.UserError: failed validating '' with XsdPatternFacets(['[\\p{IsBasicLatin}\\p{IsLatin-1Supplement}]{1,60}']):

Reason: value doesn't match any pattern of ['[\\p{IsBasicLatin}\\p{IsLatin-1Supplement}]{1,60}']

Schema component:

  <xs:pattern xmlns:xs="http://www.w3.org/2001/XMLSchema" value="[\p{IsBasicLatin}\p{IsLatin-1Supplement}]{1,60}" />

Instance type: <class 'lxml.etree._Element'>

Instance (line 105):

  <Indirizzo xmlns:ns1="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2"/>

Path: /ns1:FatturaElettronica/FatturaElettronicaHeader/CessionarioCommittente/Sede/Indirizzo

failed validating '' with XsdPatternFacets(['[\\p{IsBasicLatin}\\p{IsLatin-1Supplement}]{1,60}']):

Reason: value doesn't match any pattern of ['[\\p{IsBasicLatin}\\p{IsLatin-1Supplement}]{1,60}']

Schema component:

  <xs:pattern xmlns:xs="http://www.w3.org/2001/XMLSchema" value="[\p{IsBasicLatin}\p{IsLatin-1Supplement}]{1,60}" />

Instance type: <class 'lxml.etree._Element'>

Instance (line 110):

  <Comune xmlns:ns1="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2"/>

Path: /ns1:FatturaElettronica/FatturaElettronicaHeader/CessionarioCommittente/Sede/Comune

failed validating <Element DatiBeniServizi at 0x7fd3f89be400> with XsdGroup(model='sequence', occurs=[1, 1]):

Reason: The content of element 'DatiBeniServizi' is not complete. Tag 'DettaglioLinee' expected.

Schema component:

  <xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="DatiBeniServiziType">
    <xs:annotation>
      <xs:documentation>Blocco relativo ai dati di Beni Servizi della Fattura    Elettronica</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="DettaglioLinee" type="DettaglioLineeType" maxOccurs="unbounded" />
      <xs:element name="DatiRiepilogo" type="DatiRiepilogoType" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

Instance type: <class 'lxml.etree._Element'>

Instance (line 202):

  <DatiBeniServizi xmlns:ns1="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2">
                  
                  
                  
              
          
          
              
              
          
          
                  
          
              
          
          
              </DatiBeniServizi>

Path: /ns1:FatturaElettronica/FatturaElettronicaBody/DatiBeniServizi

Tuttavia, direi che ci siano delle cose da aggiustare in altri moduli che non dipendono necessariamente da questa PR (ma che questa PR ha fatto accidentalmente venire fuori?) ma non ne so abbastanza di quale dovrebbe teoricamente essere il flusso per proporre una soluzione sensata (Va inibita la generazione dell'XML nella write in base ad alcune condizioni? O va inserito skip_check_xml nel contesto di l10n_it_import_zip?).

@aleuffre
Copy link
Contributor

aleuffre commented May 17, 2024

Dopo aver indagato ulteriormente, credo che il problema sia in questa funzione

def _get_invoice_partner_id(self, fatt):
if self._is_import_attachment_out():
partner_id = self.getPartnerBase(
fatt.FatturaElettronicaHeader.CessionarioCommittente.DatiAnagrafici
)
else:
partner_id = super()._get_invoice_partner_id(fatt)
return partner_id

_get_invoice_partner_id usa getCedPrest che usa getPartnerBase, ma poi compila gli altri campi dell'indirizzo. Invece getPartnerBase di per sé non lo fa.

Bisognerebbe usare getCedPrest passando come argomento il nodo CessionarioCommittente, o, più corretto, fare un piccolo refactor della funzione getCedPrest (un rename e poco altro?) perché diventi generica. Non si dovrebbe usare direttamente getPartnerBase.

Anche avendo la città e tutto il resto dell'indirizzo compilato, rimane l'ultimo problema di validazione della fattura nell'errore indicato, legati a DatiBeniServizi

EDIT: Confermo, con la seguente modifica

    def _get_invoice_partner_id(self, fatt):
        if self._is_import_attachment_out():
            partner_id = self.getCedPrest(
                fatt.FatturaElettronicaHeader.CessionarioCommittente
            )
        else:
            partner_id = super()._get_invoice_partner_id(fatt)
        return partner_id

rimane solo l'ultimo errore di validazione fattura.

Errore rimasto
odoo.exceptions.UserError: failed validating <Element DatiBeniServizi at 0x7f3fbfb87c40> with XsdGroup(model='sequence', occurs=[1, 1]):

Reason: The content of element 'DatiBeniServizi' is not complete. Tag 'DettaglioLinee' expected.

Schema component:

  <xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema" name="DatiBeniServiziType">
    <xs:annotation>
      <xs:documentation>Blocco relativo ai dati di Beni Servizi della Fattura    Elettronica</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="DettaglioLinee" type="DettaglioLineeType" maxOccurs="unbounded" />
      <xs:element name="DatiRiepilogo" type="DatiRiepilogoType" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

Instance type: <class 'lxml.etree._Element'>

Instance (line 202):

  <DatiBeniServizi xmlns:ns1="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2">
                  
                  
                  
              
          
          
              
              
          
          
                  
          
              
          
          
              </DatiBeniServizi>

Path: /ns1:FatturaElettronica/FatturaElettronicaBody/DatiBeniServizi

@aleuffre
Copy link
Contributor

aleuffre commented May 17, 2024

L'ultimo errore di validazione è dovuto a questo:

invoice = self.env["account.move"].create(invoice_data)
credit_account = self.get_credit_account()
invoice_lines = []
# 2.2.1
invoice_lines.extend(
self.set_invoice_line_ids(
FatturaBody,
credit_account.id,
partner,
found_withholding_taxes,
invoice,
)
)
# 2.1.1.7
invoice_lines.extend(
self.set_welfares_fund(
FatturaBody, credit_account.id, invoice, found_withholding_taxes
)
)
# 2.1.1.10
invoice_lines.extend(self.set_efatt_rounding(FatturaBody, invoice))
invoice.with_context(check_move_validity=False).update(
{"invoice_line_ids": [(6, 0, invoice_lines)]}
)

Riga 1199, la fattura viene creata senza righe. Riga 1226, la fattura viene aggiornata con le righe giuste (e poi ancora, riga 1230, la fattura viene aggiornata di nuovo.)

Tuttavia, il test fallisce già alla riga 1199. In altre parole, l'XML viene prodotto troppo presto, prima che la fattura sia stata propriamente creata in tutte le sue parti, con i dati finali corretti. Se non si fosse rotta la validazione XML, immagino si sarebbero rotti i controlli inseriti da questa stessa PR.

Il test test_import_zip fallisce sulla prima fattura importata di tipo out_invoice, che è anche la prima di cui cerca di creare il file XML.

@francesco-ooops
Copy link
Contributor

@SirTakobi @eLBati @TheMule71 qualche suggerimento in merito a questo?

@francesco-ooops
Copy link
Contributor

@SirAionTech chiaramente cercavo te :)

@SirAionTech
Copy link
Contributor

qualche suggerimento in merito a questo?

Riassumo, basandomi esclusivamente sull'analisi fatta dal buon @aleuffre

Il modulo import_zip crea una fattura da una FE, però la crea facendo esattamente gli stessi passi di fatturapa_in quindi la crea solo con la testata, poi aggiunge le righe, poi magari fa anche altre cose.. Insomma la crea per passi.

Questo non va bene a questa PR perché appena la fattura viene creata, dice che non matcha con la FE collegata.

Suggerimenti:

  • Modificare fatturapa_in per creare la fattura tutta in un colpo.
  • Modificare fatturapa_in per collegare la FE alla fattura solo alla fine, quando le modifiche in questa PR non solleveranno eccezioni.
  • Modificare import_zip e includere nel contesto skip_check_xml finché la fattura out è in fase di creazione.

@Borruso Borruso force-pushed the 14.0-edit_invoice_sent_SDI branch from b9a6618 to f802724 Compare July 26, 2024 08:16
Copy link

There hasn't been any activity on this pull request in the past 4 months, so it has been marked as stale and it will be closed automatically if no further activity occurs in the next 30 days.
If you want this PR to never become stale, please ask a PSC member to apply the "no stale" label.

@github-actions github-actions bot added the stale PR/Issue without recent activity, it'll be soon closed automatically. label Nov 24, 2024
@github-actions github-actions bot closed this Dec 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
14.0 needs functional review stale PR/Issue without recent activity, it'll be soon closed automatically.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

possibili variazioni su invoice dopo aver trasmesso fattura a SDI