[IMP] account_chart_update: Search for real XML-IDs only

Previously, only a check on an existing XML-ID which is not coming from exportation
was done, but now we check that the XML-ID is the exact one. With this, we avoid
that the same record changed their XML-ID and thus, there's no more link between
them.
This commit is contained in:
Pedro M. Baeza
2020-03-24 18:08:56 +01:00
committed by Luis J. Salvatierra
parent 9da7d54ff8
commit 2ec48c4fea
2 changed files with 22 additions and 16 deletions

View File

@@ -728,12 +728,19 @@ class WizardUpdateChartsAccounts(models.TransientModel):
result.append(_("Tax is disabled."))
return "\n".join(result)
def missing_xml_id(self, real_obj):
return not self.env["ir.model.data"].search(
@tools.ormcache("self", "template", "real_obj")
def missing_xml_id(self, template, real_obj):
ir_model_data = self.env["ir.model.data"]
template_xmlid = ir_model_data.search(
[("model", "=", template._name), ("res_id", "=", template.id)]
)
new_xml_id = "%d_%s" % (self.company_id.id, template_xmlid.name)
return not ir_model_data.search(
[
("res_id", "=", real_obj.id),
("model", "=", real_obj._name),
("module", "!=", "__export__"),
("module", "=", template_xmlid.module),
("name", "=", new_xml_id),
]
)
@@ -763,7 +770,7 @@ class WizardUpdateChartsAccounts(models.TransientModel):
tax = self.env["account.tax"].browse(tax_id)
notes = self.diff_notes(template, tax)
if self.recreate_xml_ids and self.missing_xml_id(tax):
if self.recreate_xml_ids and self.missing_xml_id(template, tax):
notes += (notes and "\n" or "") + _("Missing XML-ID.")
if notes:
@@ -817,7 +824,7 @@ class WizardUpdateChartsAccounts(models.TransientModel):
account = self.env["account.account"].browse(account_id)
notes = self.diff_notes(template, account)
if self.recreate_xml_ids and self.missing_xml_id(account):
if self.recreate_xml_ids and self.missing_xml_id(template, account):
notes += (notes and "\n" or "") + _("Missing XML-ID.")
if notes:
@@ -859,7 +866,7 @@ class WizardUpdateChartsAccounts(models.TransientModel):
fp = self.env["account.fiscal.position"].browse(fp_id)
notes = self.diff_notes(template, fp)
if self.recreate_xml_ids and self.missing_xml_id(fp):
if self.recreate_xml_ids and self.missing_xml_id(template, fp):
notes += (notes and "\n" or "") + _("Missing XML-ID.")
if notes:
@@ -880,12 +887,9 @@ class WizardUpdateChartsAccounts(models.TransientModel):
[("model", "=", template._name), ("res_id", "=", template.id)]
)
new_xml_id = "%d_%s" % (self.company_id.id, template_xmlid.name)
real_xmlid = ir_model_data.search(
[("model", "=", real_obj._name), ("res_id", "=", real_obj.id)], limit=1
)
if real_xmlid:
real_xmlid.unlink()
ir_model_data.search(
[("model", "=", real_obj._name), ("res_id", "=", real_obj.id)]
).unlink()
template_xmlid.copy(
{
"model": real_obj._name,
@@ -919,7 +923,7 @@ class WizardUpdateChartsAccounts(models.TransientModel):
continue
tax[key] = value
_logger.info(_("Updated tax %s."), "'%s'" % template.name)
if self.recreate_xml_ids and self.missing_xml_id(tax):
if self.recreate_xml_ids and self.missing_xml_id(template, tax):
self.recreate_xml_id(template, tax)
_logger.info(
_("Updated tax %s. (Recreated XML-IDs)"), "'%s'" % template.name
@@ -972,7 +976,9 @@ class WizardUpdateChartsAccounts(models.TransientModel):
_("Updated account %s."),
"'{} - {}'".format(account.code, account.name),
)
if self.recreate_xml_ids and self.missing_xml_id(account):
if self.recreate_xml_ids and self.missing_xml_id(
template, account
):
self.recreate_xml_id(template, account)
_logger.info(
_("Updated account %s. (Recreated XML-ID)"),
@@ -1067,7 +1073,7 @@ class WizardUpdateChartsAccounts(models.TransientModel):
_("Updated fiscal position %s."), "'%s'" % template.name
)
if self.recreate_xml_ids and self.missing_xml_id(fp):
if self.recreate_xml_ids and self.missing_xml_id(template, fp):
self.recreate_xml_id(template, fp)
_logger.info(
_("Updated fiscal position %s. (Recreated XML-ID)"),