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][FIX] l10n_it_fatturapa_out: Configurazione in azienda per numero massimo fatture per fattura elettronica #2606

Open
wants to merge 2 commits into
base: 14.0
Choose a base branch
from

Conversation

TheMule71
Copy link
Contributor

Fixes #2544
Forward port of #2545

Copy link
Member

@SimoRubi SimoRubi left a 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 è
image
ma dovrebbe essere invece:
image
(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:
Copy link
Member

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:

<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:
<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:
<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?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Fatto.

Copy link
Member

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:
Copy link
Member

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)
il campo è al massimo lungo 5, sai mica come mai?
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?

Copy link
Contributor Author

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.

Copy link
Member

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

Copy link
Contributor Author

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

Copy link
Member

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])
Copy link
Member

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?

Copy link
Contributor Author

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.

Copy link
Member

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)
Copy link
Member

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

Copy link
Contributor Author

@TheMule71 TheMule71 Jan 28, 2022

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.

Copy link
Member

Choose a reason for hiding this comment

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

👍🏻

@TheMule71
Copy link
Contributor Author

Può essere che siano da riportare anche nelle altre versioni supportate

Nella 12.0 la stessa funzione non è usata.

def preventive_checks(self):
# hook for preventive checks. Override and raise exception, in case
return

@TheMule71 TheMule71 force-pushed the 14.0-fix-l10n_it_fatturapa_out_2544 branch 4 times, most recently from 3e9ae1e to 4e8ed56 Compare January 28, 2022 15:37
@TheMule71
Copy link
Contributor Author

Puoi modificare il messaggio del commit inglese?
Il co-authored poi non è corretto perché non riconosce il mio utente,

Fatto e fatto. Per la cronaca, devi lasciare una riga vuota prima del Co-authored-by:.

@TheMule71 TheMule71 force-pushed the 14.0-fix-l10n_it_fatturapa_out_2544 branch from 4e8ed56 to 03153d5 Compare January 28, 2022 15:55
@TheMule71 TheMule71 force-pushed the 14.0-fix-l10n_it_fatturapa_out_2544 branch from 03153d5 to 6720e27 Compare February 4, 2022 15:27
Copy link
Member

@SimoRubi SimoRubi left a 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",
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
"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:
Copy link
Member

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:
Copy link
Member

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)
Copy link
Member

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
Copy link
Member

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

Copy link
Contributor Author

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])
Copy link
Member

Choose a reason for hiding this comment

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

👍🏻

@SimoRubi
Copy link
Member

SimoRubi commented Feb 9, 2022

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

Nella 12.0 la stessa funzione non è usata.

def preventive_checks(self):
# hook for preventive checks. Override and raise exception, in case
return

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.

@TheMule71
Copy link
Contributor Author

@SimoRubi

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.

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 è compute, la logica è nel modulo l10n_it_fiscal_document_type, e per inserire in valore errato l'utente deve creare un riga nella stessa tabella (e il valore qui lo troverei e il check passerebbe). Se un utente si prende la briga di inserire un nuovo codice di tipo documento, che è una cosa abbastanza a basso livello, non deve soprendersi se si becca un errore a basso livello.

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 l10n_it_fiscal_document_type, non aggiungerei un altro punto che dobbiamo tener aggiornato.

@TheMule71 TheMule71 force-pushed the 14.0-fix-l10n_it_fatturapa_out_2544 branch from 6720e27 to 3042cbc Compare February 10, 2022 13:52
@TheMule71
Copy link
Contributor Author

TheMule71 commented Feb 10, 2022

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

Nella 12.0 la stessa funzione non è usata.

def preventive_checks(self):
# hook for preventive checks. Override and raise exception, in case
return

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.

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:

if not company.city:
raise UserError(
_('Company %s, City is not set.') % company.display_name)

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.

@SimoRubi
Copy link
Member

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.

ah ok pensavo che lo scopo di preventive_checks fosse non far fallire il file XML, in modo che l'utente non visualizzasse gli errori del XML che gli possono risultare illeggibili ma messaggi umanamente comprensibili; se invece lo scopo è beccare solo gli errori più comuni allora sì concordo che il controllo di esistenza dovrebbe essere il caso giusto da controllare.

@TheMule71
Copy link
Contributor Author

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.

ah ok pensavo che lo scopo di preventive_checks fosse non far fallire il file XML, in modo che l'utente non visualizzasse gli errori del XML che gli possono risultare illeggibili ma messaggi umanamente comprensibili; se invece lo scopo è beccare solo gli errori più comuni allora sì concordo che il controllo di esistenza dovrebbe essere il caso giusto da controllare.

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 fiscal_document_type_id, se poi TipoDocumentoType nello Schema è un enumerate. Quello che intendo è che

code = fields.Char(string="Code", size=5, required=True)

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.

@TheMule71
Copy link
Contributor Author

Aggiungo:

import xmlschema

_xml_schema_1_2_1 = "Schema_del_file_xml_FatturaPA_versione_1.2.1.xsd"
_old_xsd_specs = "xmldsig-core-schema.xsd"

validator = xmlschema.XMLSchema(
    _xml_schema_1_2_1,
    locations={"http://www.w3.org/2000/09/xmldsig#": _old_xsd_specs},
)   

print(validator.types['TipoDocumentoType'].enumeration)
['TD01', 'TD02', 'TD03', 'TD04', 'TD05', 'TD06', 'TD16', 'TD17', 'TD18', 'TD19', 'TD20', 'TD21', 'TD22', 'TD23', 'TD24', 'TD25', 'TD26', 'TD27']

Si potrebbe quindi inizializzare la lista dei valori possibili per

code = fields.Char(string="Code", size=5, required=True)

partendo da quello (dopo averlo trasformato in Select() ovviamente)

@SimoRubi
Copy link
Member

SimoRubi commented Feb 11, 2022

Comunque, anche se fosse, come suggeriresti di fare il controllo in questo caso?

Pensavo di riportare l'elenco di codici in una variabile statica del modulo l10n_it_fatturapa_out però come hai scritto in #2606 (comment) sarebbe un altro punto da manutenere; la soluzione ottimale sarebbe estrarli dal XML come hai scritto in #2606 (comment).

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:

Si potrebbe quindi inizializzare la lista dei valori possibili per

code = fields.Char(string="Code", size=5, required=True)

partendo da quello (dopo averlo trasformato in Select() ovviamente)

Secondo me l'estrazione è da fare in l10n_it_fatturapa_out perché i valori estratti dal XML servono solo al controllo in preventive_checks, non modificherei l10n_it_fiscal_document_type.

@TheMule71
Copy link
Contributor Author

Secondo me l'estrazione è da fare in l10n_it_fatturapa_out perché i valori estratti dal XML servono solo al controllo in preventive_checks, non modificherei l10n_it_fiscal_document_type.

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 l10n_it_account, se ci è comodo.

Aggiungo che si tratta di una questione più generale, non riguarda solo <TipoDocumento>. La stessa cosa succede anche per <ModalitaPagamento>, ad es., anche qui abbiamo un set di valori e un modulo che li gestisce (l10n_it_fiscal_payment_term) che potrebbe beneficiare dal prendere la lista dall'xsd, o controllarne i valori.

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 l10n_it_rea e altri che non cito.

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 l10n_it_account, e rendere gli altri moduli dipendenti da quello (lo sono quasi tutti, direttamente o indirettamente, ma ho notato che l10n_it_rea non lo è).

@TheMule71
Copy link
Contributor Author

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.

@SimoRubi
Copy link
Member

Secondo me l'estrazione è da fare in l10n_it_fatturapa_out perché i valori estratti dal XML servono solo al controllo in preventive_checks, non modificherei l10n_it_fiscal_document_type.

Ma secondo te ha senso avere un campo di testo "libero" quando sappiamo a priori l'elenco dei valori possibili?

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.
Esiste invece un elenco di valori che possono essere inclusi nella fattura elettronica.
Per non cambiare il comportamento attuale quindi estrarrei e controllerei il codice solo al momento della generazione della fattura elettronica, in preventive_checks.

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.

Comunque farei il tutto in un'altra PR di miglioramento per riuscire portare a merge questa FIX.

@TheMule71
Copy link
Contributor Author

Contro nota. Ho controllato e l'autore dei xmlschema ha aggiunto un modo per accederci: sissaschool/xmlschema#255

però disponibile dalla v1.7

Update:
con un po' di fantasia e di immaginazione:

import xmlschema

_xml_schema_1_2_1 = "Schema_del_file_xml_FatturaPA_versione_1.2.1.xsd"
_old_xsd_specs = "xmldsig-core-schema.xsd"

validator = xmlschema.XMLSchema(
    _xml_schema_1_2_1,
    locations={"http://www.w3.org/2000/09/xmldsig#": _old_xsd_specs},
)

TipoDocumentoType = validator.types['TipoDocumentoType']
enum = TipoDocumentoType.get_facet('{http://www.w3.org/2001/XMLSchema}enumeration')

for e in enum:
    print(e.get('value'))
    print(e[:][0][:][0].text)
TD01
Fattura
TD02
Acconto / anticipo su fattura
TD03
Acconto / anticipo su parcella
TD04
Nota di credito
TD05
Nota di debito
TD06
Parcella
TD16
Integrazione fattura reverse charge interno
TD17
Integrazione/autofattura per acquisto servizi dall'estero
TD18
Integrazione per acquisto di beni intracomunitari
TD19
Integrazione/autofattura per acquisto di beni ex art.17 c.2 DPR 633/72
TD20
Autofattura per regolarizzazione e integrazione delle fatture (ex art.6 c.8 e 9-bis d.lgs.471/97 o art.46 c.5 D.L. 331/93
TD21
Autofattura per splafonamento
TD22
Estrazione benida Deposito IVA
TD23
Estrazione beni da Deposito IVA con versamento dell'IVA
TD24
Fattura differita di cui all'art.21, comma 4, terzo periodo lett. a) DPR 633/72
TD25
Fattura differita di cui all'art.21, comma 4, terzo periodo lett. b) DPR 633/72
TD26
Cessione di beni ammortizzabili e per passaggi interni (ex art.36 DPR 633/72)
TD27
Fattura per autoconsumo o per cessioni gratuite senza rivalsa

"Si può fare!"

@TheMule71
Copy link
Contributor Author

Comunque farei il tutto in un'altra PR di miglioramento per riuscire portare a merge questa FIX.

Ho creato #2654

@TheMule71 TheMule71 force-pushed the 14.0-fix-l10n_it_fatturapa_out_2544 branch from 3042cbc to 07a7bf2 Compare April 8, 2022 15:01
@TheMule71 TheMule71 force-pushed the 14.0-fix-l10n_it_fatturapa_out_2544 branch 2 times, most recently from 8876fac to 550bdd8 Compare April 22, 2022 07:45
@TheMule71 TheMule71 force-pushed the 14.0-fix-l10n_it_fatturapa_out_2544 branch from 550bdd8 to 4876d52 Compare May 6, 2022 10:52
@TheMule71 TheMule71 force-pushed the 14.0-fix-l10n_it_fatturapa_out_2544 branch from 4876d52 to 4443546 Compare August 30, 2022 11:37
@TheMule71
Copy link
Contributor Author

La PR non è cambiata, semplice rimozione di un conflitto dovuto ad un merge recente.

@TheMule71 TheMule71 force-pushed the 14.0-fix-l10n_it_fatturapa_out_2544 branch from 4443546 to 12e7b8c Compare October 25, 2022 09:20
@francesco-ooops
Copy link
Contributor

@TheMule71 puoi fare rebase?

Copy link
Contributor

@SirAionTech SirAionTech left a 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:

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 Oct 13, 2024
@SirAionTech SirAionTech added the needs fixing Has conflicts or is failing mandatory CI checks label Oct 14, 2024
@github-actions github-actions bot removed the stale PR/Issue without recent activity, it'll be soon closed automatically. label Oct 20, 2024
TheMule71 and others added 2 commits October 21, 2024 15:43
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()
@TheMule71 TheMule71 force-pushed the 14.0-fix-l10n_it_fatturapa_out_2544 branch from 12c6132 to cee1c1f Compare October 21, 2024 13:43
@SirAionTech SirAionTech added the is porting This pull request is porting a change from another version label Nov 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
is porting This pull request is porting a change from another version needs fixing Has conflicts or is failing mandatory CI checks
Projects
None yet
Development

Successfully merging this pull request may close these issues.

l10n_it_fatturapa_out: Configurazione in azienda per numero massimo fatture per fattura elettronica
4 participants