From 142baa1fbf04a7d5c3e24a399202c0ba0f2e093a Mon Sep 17 00:00:00 2001 From: Borruso Date: Fri, 31 Jan 2025 09:29:20 +0100 Subject: [PATCH] [UPD] l10n_it_account: aggiornata PR https://github.com/OCA/l10n-italy/pull/4555 --- l10n_it_account/__manifest__.py | 1 - .../migrations/18.0.1.0.0/post-migration.py | 165 ++++++++++++------ 2 files changed, 108 insertions(+), 58 deletions(-) diff --git a/l10n_it_account/__manifest__.py b/l10n_it_account/__manifest__.py index f8da1a26ea2f..b04fbcc56715 100644 --- a/l10n_it_account/__manifest__.py +++ b/l10n_it_account/__manifest__.py @@ -21,7 +21,6 @@ "account_tax_balance", "date_range", "web", - "l10n_it", ], "data": [ "views/account_menuitem.xml", diff --git a/l10n_it_account/migrations/18.0.1.0.0/post-migration.py b/l10n_it_account/migrations/18.0.1.0.0/post-migration.py index d71ed47c27f8..d55c1efc145f 100644 --- a/l10n_it_account/migrations/18.0.1.0.0/post-migration.py +++ b/l10n_it_account/migrations/18.0.1.0.0/post-migration.py @@ -12,110 +12,161 @@ ] -def rename_fields(env, table, field_updates): +def rename_fields(env, table, field_updates, condition=None): """Generic function to rename fields.""" - set_clauses = ", ".join( - f"{target_field} = {source_field}" - for target_field, source_field in field_updates.items() + set_clauses = sql.SQL(", ").join( + sql.SQL("{} = {}").format(sql.Identifier(target), sql.Identifier(source)) + for target, source in field_updates.items() ) - query = f""" - UPDATE - {table} - SET - {set_clauses} - """ - openupgrade.logged_query(env.cr, sql.SQL(query)) + query = sql.SQL(""" + UPDATE {table} + SET {set_clauses} + """).format(table=sql.Identifier(table), set_clauses=set_clauses) + if condition: + query += sql.SQL(" WHERE {} ").format(sql.SQL(condition)) + openupgrade.logged_query(env.cr, query) def update_table(env, target_table, source_table, field_updates, condition): """Generic function to update fields in a table based on a join.""" - set_clauses = ", ".join( - f"{target_field} = {source_table}.{source_field}" - for target_field, source_field in field_updates.items() + set_clauses = sql.SQL(", ").join( + sql.SQL("{} = {}.{}").format( + sql.Identifier(target), sql.Identifier(source_table), sql.Identifier(source) + ) + for target, source in field_updates.items() + ) + query = sql.SQL(""" + UPDATE {target_table} + SET {set_clauses} + FROM {source_table} + """).format( + target_table=sql.Identifier(target_table), + set_clauses=set_clauses, + source_table=sql.Identifier(source_table), ) - query = f""" - UPDATE - {target_table} - SET - {set_clauses} - FROM - {source_table} - """ if condition: - query += f""" - WHERE - {condition} - """ - openupgrade.logged_query(env.cr, sql.SQL(query)) + query += sql.SQL(" WHERE {} ").format(sql.SQL(condition)) + openupgrade.logged_query(env.cr, query) + + +def add_field_if_not_exists(env, table, field_name, field_type, module): + """Helper function to add fields if they do not exist.""" + if not openupgrade.column_exists(env.cr, table, field_name): + sql_type_mapping = { + "binary": "bytea", + "boolean": "bool", + "char": "varchar", + "date": "date", + "datetime": "timestamp", + "float": "numeric", + "html": "text", + "integer": "int4", + "many2many": False, + "many2one": "int4", + "many2one_reference": "int4", + "monetary": "numeric", + "one2many": False, + "reference": "varchar", + "selection": "varchar", + "text": "text", + "serialized": "text", + } + openupgrade.add_fields( + env, + [ + ( + field_name, + table.replace("_", "."), + table, + field_type, + sql_type_mapping[field_type], + module, + ) + ], + ) def _l10n_it_account_tax_kind_migration(env): - rename_fields( - env, - table="account_tax", - field_updates={"l10n_it_law_reference": "law_reference"}, - ) + table = "account_tax" + add_field_if_not_exists(env, table, "l10n_it_law_reference", "char", "l10n_it") + rename_fields(env, table, {"l10n_it_law_reference": "law_reference"}) + add_field_if_not_exists(env, table, "l10n_it_exempt_reason", "char", "l10n_it") condition = "account_tax.kind_id = account_tax_kind.id" condition += " AND account_tax.kind_id IS NOT NULL" update_table( - env, - target_table="account_tax", - source_table="account_tax_kind", - field_updates={"l10n_it_exempt_reason": "code"}, - condition=condition, + env, table, "account_tax_kind", {"l10n_it_exempt_reason": "code"}, condition ) def _l10n_it_fatturapa_migration(env): + table = "res_partner" + add_field_if_not_exists(env, table, "l10n_it_pa_index", "char", "l10n_it_edi") + add_field_if_not_exists(env, table, "l10n_it_pec_email", "char", "l10n_it_edi") rename_fields( env, - table="res_partner", - field_updates={ + table, + { "l10n_it_pa_index": "codice_destinatario", "l10n_it_pec_email": "pec_destinatario", }, ) + + table = "res_company" + add_field_if_not_exists( + env, table, "l10n_it_tax_representative_partner_id", "many2one", "l10n_it_edi" + ) rename_fields( env, - table="res_company", - field_updates={ - "l10n_it_tax_representative_partner_id": "fatturapa_tax_representative", - }, + table, + {"l10n_it_tax_representative_partner_id": "fatturapa_tax_representative"}, ) def _l10n_it_fiscalcode_migration(env): - rename_fields( - env, - table="res_partner", - field_updates={"l10n_it_codice_fiscale": "fiscalcode"}, - ) + table = "res_partner" + add_field_if_not_exists(env, table, "l10n_it_codice_fiscale", "char", "l10n_it_edi") + rename_fields(env, table, {"l10n_it_codice_fiscale": "fiscalcode"}) def _l10n_it_ipa_migration(env): - rename_fields( - env, - table="res_partner", - field_updates={"l10n_it_pa_index": "ipa_code"}, - ) + table = "res_partner" + add_field_if_not_exists(env, table, "l10n_it_pa_index", "char", "l10n_it_edi") + condition = "ipa_code IS NOT NULL" + rename_fields(env, table, {"l10n_it_pa_index": "ipa_code"}, condition=condition) def _l10n_it_rea_migration(env): + table = "res_company" + add_field_if_not_exists( + env, table, "l10n_it_eco_index_office", "many2one", "l10n_it_edi" + ) + add_field_if_not_exists( + env, table, "l10n_it_eco_index_number", "char", "l10n_it_edi" + ) + add_field_if_not_exists( + env, table, "l10n_it_eco_index_share_capital", "float", "l10n_it_edi" + ) + add_field_if_not_exists( + env, table, "l10n_it_eco_index_sole_shareholder", "selection", "l10n_it_edi" + ) + add_field_if_not_exists( + env, table, "l10n_it_eco_index_liquidation_state", "selection", "l10n_it_edi" + ) condition = "res_company.partner_id = res_partner.id" condition += " AND res_partner.rea_office IS NOT NULL" update_table( env, - target_table="res_company", - source_table="res_partner", - field_updates={ + table, + "res_partner", + { "l10n_it_eco_index_office": "rea_office", "l10n_it_eco_index_number": "rea_code", "l10n_it_eco_index_share_capital": "rea_capital", "l10n_it_eco_index_sole_shareholder": "rea_member_type", "l10n_it_eco_index_liquidation_state": "rea_liquidation_state", }, - condition=condition, + condition, )