Skip to content

Commit

Permalink
[UPD] l10n_it_account: aggiornata PR OCA#4555
Browse files Browse the repository at this point in the history
  • Loading branch information
Borruso committed Jan 31, 2025
1 parent 78fbead commit 142baa1
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 58 deletions.
1 change: 0 additions & 1 deletion l10n_it_account/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
"account_tax_balance",
"date_range",
"web",
"l10n_it",
],
"data": [
"views/account_menuitem.xml",
Expand Down
165 changes: 108 additions & 57 deletions l10n_it_account/migrations/18.0.1.0.0/post-migration.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
)


Expand Down

0 comments on commit 142baa1

Please sign in to comment.