-
-
Notifications
You must be signed in to change notification settings - Fork 306
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][FIX] l10n_it_fatturapa_out: Configurazione in azienda per numero massimo fatture per fattura elettronica #2606
base: 14.0
Are you sure you want to change the base?
Conversation
4f56b09
to
529885a
Compare
529885a
to
d5dc5e1
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Puoi modificare il messaggio del commit inglese?
Il co-authored poi non è corretto perché non riconosce il mio utente, infatti il risultato è
ma dovrebbe essere invece:
(da da4dd91)
Guardando il codice, il porting di #2545 mi pare corretto.
Vedo che ci sono anche altre modifiche rispetto a #2545, idealmente sarebbero da fare in una PR separata ma può essere accettabile averle anche solo in un commit separato come hai fatto, puoi però aprire una issue per tenerne traccia? Può essere che siano da riportare anche nelle altre versioni supportate
@@ -81,6 +89,9 @@ def preventive_checks(self): | |||
) | |||
) | |||
|
|||
if not invoice.partner_id.city: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sto guardando le specifiche in https://www.agenziaentrate.gov.it/portale/web/guest/specifiche-tecniche-versione-1.7 perché il link nel README a https://www.fatturapa.gov.it/export/fatturazione/it/normativa/f-2.htm risponde 404.
Da quel che ho capito (penso che qui tu stia risolvendo #2563 (comment)), il nodo obbligatorio è Comune
, ed è obbligatorio ogni volta che compare nel XML.
Il template però prende il campo city
non solo del partner della fattura:
l10n-italy/l10n_it_fatturapa_out/data/invoice_it_template.xml
Lines 464 to 466 in f114377
<t t-call="l10n_it_fatturapa_out.account_invoice_it_FatturaPA_sede"> | |
<t t-set="partner_id" t-value="partner_id" /> | |
</t> |
ma anche del partner della company:
l10n-italy/l10n_it_fatturapa_out/data/invoice_it_template.xml
Lines 331 to 333 in f114377
<t t-call="l10n_it_fatturapa_out.account_invoice_it_FatturaPA_sede"> | |
<t t-set="partner_id" t-value="company_id.partner_id" /> | |
</t> |
e altri, tipo:
l10n-italy/l10n_it_fatturapa_out/data/invoice_it_template.xml
Lines 338 to 343 in f114377
<t t-call="l10n_it_fatturapa_out.account_invoice_it_FatturaPA_sede"> | |
<t | |
t-set="partner_id" | |
t-value="company_id.fatturapa_stabile_organizzazione" | |
/> | |
</t> |
quindi se vogliamo fare controlli preventivi per non far fallire la generazione del XML, ci sarebbe da controllare il campo city
di tutti i partner coinvolti, che ne pensi?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fatto.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍🏻
@@ -55,6 +55,14 @@ def preventive_checks(self): | |||
% invoice.name | |||
) | |||
|
|||
if not invoice.fiscal_document_type_id: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sto guardando le specifiche in https://www.agenziaentrate.gov.it/portale/web/guest/specifiche-tecniche-versione-1.7 perché il link nel README a https://www.fatturapa.gov.it/export/fatturazione/it/normativa/f-2.htm risponde 404.
Per il nodo TipoDocumento
vedo che c'è anche un vincolo di lunghezza a 4 caratteri mentre in
code = fields.Char(string="Code", size=5, required=True) |
Visto che con queste modifiche viene aggiunto un controllo dedicato a questo campo, forse sarebbe anche da controllare che la lunghezza sia corretta, che ne pensi?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Direi che va modificato dall'altra parte, in l10n_it_fiscal_document_type. Io il controllo lo potrei mettere, ma se la size diventa 4 di là non serve.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Direi che va modificato dall'altra parte, in l10n_it_fiscal_document_type. Io il controllo lo potrei mettere, ma se la size diventa 4 di là non serve.
Potrebbe essere che esistano dei document type che possono avere lunghezza 5, ma quelli che si possono inserire in una FE devono invece avere lunghezza 4? Anzi, per la FE vedo nel XSD può avere solo certi valori TD01, ..., TD27
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Direi che va modificato dall'altra parte, in l10n_it_fiscal_document_type. Io il controllo lo potrei mettere, ma se la size diventa 4 di là non serve.
Potrebbe essere che esistano dei document type che possono avere lunghezza 5, ma quelli che si possono inserire in una FE devono invece avere lunghezza 4? Anzi, per la FE vedo nel XSD può avere solo certi valori TD01, ..., TD27
Dovrebbe essere un campo che serve solo a fatturapa, c'è una tabella che sono i valori dell'XML: https://github.com/OCA/l10n-italy/blob/fd80fdc7d4aeef613e7aa193674cd62cf0bd4f7b/l10n_it_fiscal_document_type/data/fiscal.document.type.csv
Non ho idea del perché sia size=5
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Se stiamo controllando i dati della fattura in modo che poi la generazione del XML non esploda, allora andrebbe controllato che il codice del fiscal_document_type_id
rientri tra quelli consentiti nel XSD del XML.
Controllare che almeno sia valorizzato il campo fiscal_document_type_id
è comunque un miglioramento rispetto al codice esistente perché il nodo TipoDocumento
è obbligatorio, quindi per me può andare bene anche così.
invoice = invoice_form.save() | ||
with self.assertRaises(UserError) as ue: | ||
self.run_wizard(invoice.id) | ||
self.assertIn(invoice.name, ue.exception.args[0]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Puoi chiarire quale dev'essere l'errore sollevato qui e negli assert
successivi?
Devono essere errori per i nuovi check sul campo city
o fiscal_document
, o forse si vuole verificare che salti uno dei check già esistenti?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Adesso faccio il controllo anche sul testo del messaggio (che è autoesplicativo). Dovrebbe cambiare con la localizzazione ma i test in github credo possiamo assumere siano in inglese.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍🏻
) | ||
invoice = invoice_form.save() | ||
with self.assertRaises(UserError) as ue: | ||
self.run_wizard(invoice.id) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
La fattura non dovrebbe essere confermata prima di generare il file XML?
Strano che il wizard di export permetta di esportare fatture non confermate
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ho aggiunto anche quel controllo.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍🏻
Nella 12.0 la stessa funzione non è usata. l10n-italy/l10n_it_fatturapa_out/models/account.py Lines 51 to 53 in dec31f7
|
3e9ae1e
to
4e8ed56
Compare
Fatto e fatto. Per la cronaca, devi lasciare una riga vuota prima del Co-authored-by:. |
4e8ed56
to
03153d5
Compare
03153d5
to
6720e27
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Grazie della PR!
Ho fatto revisione del codice, ho messo qualche appunto ma secondo me nel complesso va bene
): | ||
raise UserError( | ||
_( | ||
"Invoice %s city in our company's Stabile Organizzazione must be set", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Invoice %s city in our company's Stabile Organizzazione must be set", | |
"Invoice %s city in our company's Stable Organization must be set", |
@@ -81,6 +89,9 @@ def preventive_checks(self): | |||
) | |||
) | |||
|
|||
if not invoice.partner_id.city: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍🏻
@@ -55,6 +55,14 @@ def preventive_checks(self): | |||
% invoice.name | |||
) | |||
|
|||
if not invoice.fiscal_document_type_id: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Se stiamo controllando i dati della fattura in modo che poi la generazione del XML non esploda, allora andrebbe controllato che il codice del fiscal_document_type_id
rientri tra quelli consentiti nel XSD del XML.
Controllare che almeno sia valorizzato il campo fiscal_document_type_id
è comunque un miglioramento rispetto al codice esistente perché il nodo TipoDocumento
è obbligatorio, quindi per me può andare bene anche così.
) | ||
invoice = invoice_form.save() | ||
with self.assertRaises(UserError) as ue: | ||
self.run_wizard(invoice.id) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍🏻
"city in our company's Stabile Organizzazione must be set", | ||
ue.exception.args[0], | ||
) | ||
invoice.company_id.fatturapa_stabile_organizzazione.city = city |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Si potrebbe aggiungere anche un'esportazione che finalmente va a buon fine (giusto per dare soddisfazione alla CI 😄) una volta che abbiamo fatto tutte le configurazioni corrette
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Beh per quello ci sono gli altri test, che lo fanno ripetutamente. Tuttavia, ha senso, una volta fatti i controlli per le fatture sbagliate in partenza (non confermate o passive), verificare che stiamo partendo da una fattura corretta, per poi modificare una cosa alla volta e vedere se preventive_check() fa il suo lavoro, punto per punto.
invoice = invoice_form.save() | ||
with self.assertRaises(UserError) as ue: | ||
self.run_wizard(invoice.id) | ||
self.assertIn(invoice.name, ue.exception.args[0]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍🏻
Per aggiungere gli altri controlli mancanti dovrebbero in teoria esserci delle issue dedicate che nessuno ha ancora back-portato; non ho capito però se puoi aprire la issue per tenerne traccia. |
Quoto a mano perché non riesco a fare Reply al commento. Allora, sì e no. Se avessimo una lista fissa di valori, sarei d'accordo. Ma ci siamo presi la briga di creare un modello, anzi, in intero modulo, che rende i tipi dinamici e modificabili runtime (immagino ci sia un motivo dietro, anche se francamente mi è oscuro, ma non è questa PR il posto per discuterne). Fatta quella scelta, non trovo corretto cablare poi un elenco fisso qui, tenendo conto che comunque, un XML sbagliato non lo generiamo (xmlschema fa la verifica di conformità). La preventive_check() non deve rifare tutti i controlli dello schema, ma magari beccare i casi più comuni che possono prendere di sorpresa l'utente e suggerigli cosa fare. Tra parentesi, andare a prendere i valori dalla tabella comunque non risolve il problema, visto che il campo è In più, l'elenco dei tipi può cambiare (anzi, storicamente è già cambiato). Abbiamo già da aggiornare l'xsd dello schema più la tabella del modulo |
6720e27
to
3042cbc
Compare
Non mi sono spiegato bene. La 12.0 non si basa sulla preventive_check() per i controlli. Non è che non ci sono, sono altrove, per es: l10n-italy/l10n_it_fatturapa_out/wizard/wizard_export_fatturapa.py Lines 267 to 269 in dbb00ab
Ora, sulla 14 ci sono tutti i controlli fatti dalla 12? Sulla 12 ci sono tutti i controlli fatti dalla 14? Non lo so. Il codice della 12 è quello di pyxb ed è stato completamente rimpiazzato nella 14. Ho aperto #2652. |
ah ok pensavo che lo scopo di |
Ovviamente "più comuni" è completamente arbitrario: di sicuro, andrebbero implementati i controlli SdI che esulano dallo Schema, come prima cosa, per evitare di generare qualcosa che lo SdI rifiuterà. Poi sicuramente beccare le cose ovvie (es. manca la città). Però "tradurre" in python tutto lo Schema mi sembra controproducente. Comunque, anche se fosse, come suggeriresti di fare il controllo in questo caso? Contro un elenco fisso di valori, non mi sembra il caso. In realtà a me sfugge il senso di avere una tabella editabile di possibili valori per un campo come
dovrebbe essere una Select con i possibili valori presi dall'xsd (tra l'altro, la cosa xmlschema la può fare). In tal caso, il controllo sull'esistenza sarebbe al 100% sufficiente. |
Aggiungo:
Si potrebbe quindi inizializzare la lista dei valori possibili per
partendo da quello (dopo averlo trasformato in Select() ovviamente) |
Pensavo di riportare l'elenco di codici in una variabile statica del modulo A quel punto però l'elenco estratto si deve aggiornare insieme al XML, quindi si potrebbe fare uno di:
Secondo me non vale la pena complicarsi la vita per avere così poco guadagno in termini di prestazioni e seguirei la prima strada. Comunque farei il tutto in un'altra PR di miglioramento per riuscire portare a merge questa FIX. EDIT:
Secondo me l'estrazione è da fare in |
Ma secondo te ha senso avere un campo di testo "libero" quando sappiamo a priori l'elenco dei valori possibili? L'xsd della fatturapa possiamo metterlo dove vogliamo, non è codice specifico , anche in Aggiungo che si tratta di una questione più generale, non riguarda solo Per dire avere un test, in questi moduli, che controlla la tabella inserita rispetto ai valori accettabili per l'xsd, segnalando se i data caricano valori non accettabili, o di contro, NON caricano valori previsti per dimenticanza, non mi dispiacerebbe per nulla. Avremmo comunque più posti da aggiornare ma almeno un test ci dice cosa ci siamo dimenticati. Cosi come almeno avere la possibilità segnalare all'utente che sta inserendo un nuovo codice che tale valore non è previsto dall'xsd caricato a sistema e che l'esportazione di un XML fallirebbe. Poi possiamo anche decidere di lasciare il campo come Char e lasciare la libertà all'utente, ma almeno un warning ci vorrebbe. Anche perché potrebbe indurre l'utente a cercare un aggiornamento con magari il nuovo xsd più aggiornato. Vale anche per Anche nell'ottica che la fatturazione elettronica è obbligatoria per praticamente tutti dal 2022, almeno segnalare all'utente che si sta ficcando in un vicolo cieco sarebbe carino. O che deve aggiornare il suo xsd. Più ci penso e più mi piace l'idea di caricarlo in |
Nota a latere. L'xsd prevede delle annotation con documentation per i vari valori di un enumeration. Peccato che xmlschema scarti quell'informazioni, per cui non possiamo estrarre (banalmente, per carità, possiamo sempre usare lxml e parserizzarci l'xsd noi) anche le label. |
Sì perché attualmente non c'è un elenco di valori possibili per il codice del tipo documento: i tipi di documento possono essere creati con qualsiasi codice di 5 caratteri. Non so poi a livello funzionale se effettivamente avrebbero senso dei tipi documento con altri codici, ma sicuramente qualche DB con dei valori sbagliati c'è e secondo me non è necessario andare a segnalare o ripulire quei record.
|
Contro nota. Ho controllato e l'autore dei xmlschema ha aggiunto un modo per accederci: sissaschool/xmlschema#255 però disponibile dalla v1.7 Update:
"Si può fare!" |
Ho creato #2654 |
3042cbc
to
07a7bf2
Compare
8876fac
to
550bdd8
Compare
550bdd8
to
4876d52
Compare
4876d52
to
4443546
Compare
La PR non è cambiata, semplice rimozione di un conflitto dovuto ad un merge recente. |
4443546
to
12e7b8c
Compare
@TheMule71 puoi fare rebase? |
12e7b8c
to
12c6132
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Riguardando questa PR a due anni di distanza mi pare sia andata un po' fuori strada:
- se è il forward porting di [10.0] l10n_it_fatturapa_out: Configurazione in azienda per numero massimo fatture per fattura elettronica #2545, allora ci dovrebbero essere i cherry-pick dei suoi commit, modificati giusto per farli funzionare nella nuova versione, invece c'è un solo commit (9189774) con tutto dentro
- ci sono tante modifiche ai
preventive_checks
che non hanno a che fare con la issue l10n_it_fatturapa_out: Configurazione in azienda per numero massimo fatture per fattura elettronica #2544 linkata in descrizione: servirebbe almeno una issue dedicata per descrivere qual è il problema che si sta risolvendo.
Secondo me sarebbe anche meglio se le modifiche fossero in un'altra PR, così entrambe le PR sarebbero più atomiche, facilmente revisionabili e quindi mergiabili
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. |
Add a configuration parameter in company setting to limit the number of invoices while creating an XML. Fixes OCA#2544 Forward port of OCA#2545 Co-authored-by: SimoRubi <[email protected]>
Add various checks to preventive_checks()
12c6132
to
cee1c1f
Compare
Fixes #2544
Forward port of #2545