Skip to content

[18.0] [IMP] l10n_it_edi_doi_extension: add migration scripts#4830

Open
odooNextev wants to merge 2 commits intoOCA:18.0from
odooNextev:18.0-imp-l10n_it_edi_doi_extension-migration_scripts
Open

[18.0] [IMP] l10n_it_edi_doi_extension: add migration scripts#4830
odooNextev wants to merge 2 commits intoOCA:18.0from
odooNextev:18.0-imp-l10n_it_edi_doi_extension-migration_scripts

Conversation

@odooNextev
Copy link
Copy Markdown
Contributor

@odooNextev odooNextev commented Jul 9, 2025

Migrazione da l10n_it_declaration_of_intent e fix di sincronizzazione

Obiettivo

Questa PR aggiunge al modulo l10n_it_edi_doi_extension la gestione automatica
della migrazione dei dati dal vecchio modulo OCA l10n_it_declaration_of_intent
(Odoo 16) al nuovo modulo l10n_it_edi_doi di Odoo 18.

La migrazione viene eseguita completamente in automatico tramite hook pre/post-init,
senza richiedere interventi manuali da parte dell'utente (a parte il backup del
database).

Le fatture con più dichiarazioni in v16 vengono migrate con amount = 0 nel bridge:
è un comportamento atteso perché la v16 non memorizzava l'importo per dichiarazione


Commit inclusi

1. [IMP] add migration scripts (5afe7901d)

Introduce gli hook di migrazione e aggiorna la documentazione.

File principali:

  • __init__.py — cuore della migrazione (hook pre e post init)
  • __manifest__.py — registrazione degli hook pre_init_hook e post_init_hook
  • models/account_move.py — fallback per le fatture migrate senza imposta DOI
  • models/declaration_of_intent.py — aggiunto campo number (già presente in v16)
  • views/l10n_it_edi_doi_declaration_of_intent_views.xml — aggiunto campo number
    nel form e nella list view
  • readme/USAGE.md — sezione di migrazione per gli utenti finali

Cosa fa il pre-init hook:

  1. Aggiunge le repartition lines mancanti sulle imposte gruppo split payment
    (necessarie per Odoo 18, causavano ValidationError altrimenti)
  2. Elimina le view del vecchio modulo incompatibili con Odoo 18
    (usavano il tag <tree> rinominato in <list>)
  3. Marca il vecchio modulo come to remove
  4. Se il database aveva solo il vecchio modulo (tabella nuova vuota):
    rinomina la tabella e il modello, rinomina i campi, mappa i valori degli stati
  5. Se il database aveva già dati in l10n_it_edi_doi (installazione parziale):
    inserisce i vecchi record con offset ID per evitare conflitti di chiave primaria

Cosa fa il post-init hook:

  1. Popola la tabella bridge account.move.doi dalle vecchie relazioni many2many,
    preservando tutti i collegamenti (non solo il primo)
  2. Per le fatture migrate senza imposta DOI, imposta l10n_it_edi_doi_amount
    da amount_untaxed
  3. Aggiorna i riferimenti ir.model.data al nuovo modulo
  4. Pulisce i residui del vecchio modulo (view, menu, access rules, ir.model, ecc.)

Come testare

Scenario 1 — Migrazione da v16 con dati

  1. Migrare un database di Odoo 16 con l10n_it_declaration_of_intent installato ed
    alcune dichiarazioni di intento e fatture collegate a Odoo 18
  2. Installare l10n_it_edi_doi_extension
  3. Verificare dopo l'installazione:
    • Le dichiarazioni compaiono nel menu con i numeri di protocollo corretti
      (split in protocol_number_part1 / protocol_number_part2)
    • Gli stati sono mappati correttamente (validactive, expiredterminated,
      closerevoked)
    • Le fatture hanno l10n_it_edi_doi_id popolato
    • La tabella bridge account.move.doi contiene i record migrati
    • Gli importi calcolati (fatturato, residuo) sono corretti
  4. Disinstallare l10n_it_declaration_of_intent e verificare che non ci siano errori

2. [FIX] sync l10n_it_edi_doi_id and fix available amount compute (d823abe29)

Correzioni al modello bridge account.move.doi.

File: models/account_move_doi.py

Modifiche:

  • _compute_declaration_available: ora usa declaration_id.remaining invece di
    ricalcolare threshold - invoiced inline (allineato ai campi calcolati del modello)
  • Aggiunto metodo _sync_l10n_it_edi_doi_id: mantiene sincronizzato il campo
    l10n_it_edi_doi_id della fattura con il primo record bridge associato
  • Override di create, write, unlink per chiamare _sync_l10n_it_edi_doi_id
    automaticamente ad ogni modifica dei record bridge

Come testare

Scenario 1 — Installazione pulita (senza migrazione)

  1. Verificare che l10n_it_edi_doi_id si aggiorni automaticamente alla creazione/
    modifica/eliminazione di un record bridge

Scenario 2 — Fix bridge model

  1. Con il modulo installato, aprire una fattura
  2. Nel tab "Dichiarazioni di Intento", aggiungere un record bridge
  3. Verificare che l10n_it_edi_doi_id sulla fattura punti alla dichiarazione del
    primo record bridge
  4. Eliminare il record bridge e verificare che l10n_it_edi_doi_id venga svuotato

Note per i revisori

  • In caso di errore di chiave duplicata durante l'installazione di l10n_it_edi_doi
    (per posizioni fiscali o imposte già presenti dal v16), l'utente deve rimuovere
    manualmente i duplicati: questo non è gestito dalla nostra migrazione perché
    avviene nel post_init di l10n_it_edi_doi, eseguito prima dei nostri hook
  • Le fatture con più dichiarazioni in v16 vengono migrate con amount = 0 nel bridge:
    è un comportamento atteso perché la v16 non memorizzava l'importo per dichiarazione
  • Il file USAGE.md contiene la documentazione tecnica completa per chi volesse
    approfondire i dettagli

@odooNextev odooNextev marked this pull request as draft July 9, 2025 14:42
@mmircoli-nexapp
Copy link
Copy Markdown

Scusa la pr è pronta per la review? hai già usato questo modulo su Odoo.sh?

@odooNextev
Copy link
Copy Markdown
Contributor Author

Scusa la pr è pronta per la review? hai già usato questo modulo su Odoo.sh?

No, prima deve essere approvata e mergiata questa: #5029
Senza il supporto per le doi multiple infatti non si ha una corrispondenza esatta degli oggetti dalla 16 alla 18

@mmircoli-nexapp
Copy link
Copy Markdown

Scusa la pr è pronta per la review? hai già usato questo modulo su Odoo.sh?

No, prima deve essere approvata e mergiata questa: #5029 Senza il supporto per le doi multiple infatti non si ha una corrispondenza esatta degli oggetti dalla 16 alla 18

Grazie del chiarimento

@mmircoli-nexapp
Copy link
Copy Markdown

@sergiocorato potresti lanciare un rebase qui cosi da arrivare al merge anche di questa?

@francesco-ooops
Copy link
Copy Markdown
Contributor

/ocabot rebase

@OCA-git-bot
Copy link
Copy Markdown
Contributor

@francesco-ooops The rebase process failed, because command git rebase origin/18.0 failed with output:

Rebasing (1/1)
Auto-merging l10n_it_edi_doi_extension/README.rst
CONFLICT (content): Merge conflict in l10n_it_edi_doi_extension/README.rst
Auto-merging l10n_it_edi_doi_extension/__manifest__.py
Auto-merging l10n_it_edi_doi_extension/static/description/index.html
error: could not apply 9d3bdda31... [IMP] l10n_it_edi_doi_extension: add migration scripts
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 9d3bdda31... [IMP] l10n_it_edi_doi_extension: add migration scripts

@sergiocorato
Copy link
Copy Markdown
Contributor

@sergiocorato potresti lanciare un rebase qui cosi da arrivare al merge anche di questa?

Il rebase fa prima a farlo l' autore in genere

@mmircoli-nexapp
Copy link
Copy Markdown

mmircoli-nexapp commented Feb 17, 2026 via email

@odooNextev
Copy link
Copy Markdown
Contributor Author

@mmircoli-nexapp purtroppo non basta il solo rebase, devo aggiungere la parte che riguarda le doi multiple siccome non avevo la certezza di come sarebbero stati definiti i modelli effettivamente finché l'altra PR fosse stata approvata.
Lo farò a breve.

@mmircoli-nexapp
Copy link
Copy Markdown

@mmircoli-nexapp purtroppo non basta il solo rebase, devo aggiungere la parte che riguarda le doi multiple siccome non avevo la certezza di come sarebbero stati definiti i modelli effettivamente finché l'altra PR fosse stata approvata. Lo farò a breve.

Grazie Mille

@stenext stenext force-pushed the 18.0-imp-l10n_it_edi_doi_extension-migration_scripts branch 3 times, most recently from fde17d0 to d823abe Compare March 3, 2026 14:12
@odooNextev odooNextev marked this pull request as ready for review March 3, 2026 14:27
@stenext stenext force-pushed the 18.0-imp-l10n_it_edi_doi_extension-migration_scripts branch from d823abe to 0c5a2d9 Compare March 3, 2026 14:56
@odooNextev
Copy link
Copy Markdown
Contributor Author

Ciao @mmircoli-nexapp,
ora la PR è pronta da testare.
Per ora l'ho fatto in locale su alcuni DB.

@mmircoli-nexapp
Copy link
Copy Markdown

Ciao @mmircoli-nexapp, ora la PR è pronta da testare. Per ora l'ho fatto in locale su alcuni DB.

Grazie Mille come torno sul Cliente che devo migrare faccio qualche prova, che almeno non rompa nulla

Copy link
Copy Markdown
Contributor

@monen17 monen17 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!
Si può aggiungere il supporto per la migrazione con OpenUpgrade? Così migrando con OpenUpgrade il modulo viene migrato in automatico senza doverlo installare a manina, vedi ad esempio https://github.com/OCA/l10n-italy/wiki/Migrazione-con-rinomina-modulo,-compatibile-con-OpenUpgrade-e-Odoo-SA.

@stenext stenext force-pushed the 18.0-imp-l10n_it_edi_doi_extension-migration_scripts branch 3 times, most recently from c995965 to 5737200 Compare March 12, 2026 16:49
@odooNextev odooNextev requested a review from monen17 March 12, 2026 16:52
@stenext stenext force-pushed the 18.0-imp-l10n_it_edi_doi_extension-migration_scripts branch from 5737200 to 136358b Compare March 12, 2026 17:07
Copy link
Copy Markdown
Member

@eLBati eLBati left a comment

Choose a reason for hiding this comment

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

LGTM

@eLBati
Copy link
Copy Markdown
Member

eLBati commented Mar 17, 2026

/ocabot rebase

@OCA-git-bot
Copy link
Copy Markdown
Contributor

Congratulations, PR rebased to 18.0.

Copy link
Copy Markdown
Contributor

@monen17 monen17 left a comment

Choose a reason for hiding this comment

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

Grazie delle modifiche!
C'è ancora qualcosa ma decisamente poca roba rispetto all'inizio.

Puoi aggiornare la descrizione della PR? Mi pare descriva ancora le vecchie modifiche.

Cosa ne pensi invece della proposta nella vecchia revisione:

Si può aggiungere il supporto per la migrazione con OpenUpgrade? Così migrando con OpenUpgrade il modulo viene migrato in automatico senza doverlo installare a manina, vedi ad esempio https://github.com/OCA/l10n-italy/wiki/Migrazione-con-rinomina-modulo,-compatibile-con-OpenUpgrade-e-Odoo-SA.

?

Comment on lines +70 to +72
- *Invoices with multiple DOIs show amount = 0*: expected behaviour. The old many2many
relation did not store per-declaration amounts. Open each affected invoice and assign
the correct amount in the "Declarations of Intent" tab.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ora che viene popolato account_move_doi, questo non dovrebbe succedere giusto?

Test that declaration_available uses remaining (which includes not_yet_invoiced)
"""
invoice = self._create_invoice("9e", self.partner, tax=self.tax, in_type=True)
invoice = self._create_invoice("9e", self.partner, taxes=self.tax, in_type=True)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Questa modifica va nell'altro commit

Comment on lines +317 to +342
# Populate l10n_it_edi_doi_amount for all invoices linked to DOI
# In v18, this field is a stored computed field that calculates the
# total amount of invoice lines that have the special DOI tax applied.
# However, in v16, invoices used different taxes
# (like "Non imponibile iva ART. 8...") and the DOI amount wasn't
# explicitly tracked.
#
# Since we can't recompute using the v18 logic (invoices don't have
# the v18 DOI tax), we manually populate it with the invoice's
# untaxed amount. This matches the v16 behavior where the full invoice
# amount was considered.
#
# In v18, l10n_it_edi_doi_amount is always positive regardless of move_type.
# The v18 compute is: sum(price_total) * -direction_sign
# Since price_total already has the accounting sign and direction_sign
# flips it back, the result is always positive.
# We use ABS(amount_untaxed) as a proxy for migrated invoices.
openupgrade.logged_query(
env.cr,
"""
UPDATE account_move am
SET l10n_it_edi_doi_amount = ABS(am.amount_untaxed)
WHERE am.l10n_it_edi_doi_id IS NOT NULL
AND am.l10n_it_edi_doi_amount = 0
""",
)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

In 16.0 si sapeva l'importo per ogni abbinamento dichiarazione/fattura grazie alle righe della dichiarazione (l10n_it_declaration_of_intent.declaration_line).

Ora che account_move_doi viene popolato correttamente, non si potrebbe mettere l'importo giusto qui?

Comment on lines +344 to +349
# Populate account_move_doi bridge table for multiple DOI support.
# Source priority:
# 1. l10n_it_declaration_of_intent_declaration_line: has the real per-invoice
# amount (the authoritative source from v16).
# 2. _REL_TABLE (m2m): no amount, used only if lines were already dropped.
# 3. l10n_it_edi_doi_id (many2one): last resort if both old tables are gone.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Perché non si sa se esistono queste tabelle? La tabella delle righe dovrebbe esserci: prendiamo semplicemente i dati da lì no?

@eLBati
Copy link
Copy Markdown
Member

eLBati commented Apr 7, 2026

/ocabot rebase

@OCA-git-bot
Copy link
Copy Markdown
Contributor

Congratulations, PR rebased to 18.0.

@OCA-git-bot OCA-git-bot force-pushed the 18.0-imp-l10n_it_edi_doi_extension-migration_scripts branch from 136358b to 069a2dc Compare April 7, 2026 13:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants