From 8568e9df77fcf1d811689fd02e9b4e5e92af91fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sat, 18 Feb 2023 19:05:26 +0100 Subject: [PATCH] Clean translations of resources that do not exist anymore Closes #2796 --- trytond/trytond/ir/translation.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/trytond/trytond/ir/translation.py b/trytond/trytond/ir/translation.py index 8b84047a1f..26d304c8f6 100644 --- a/trytond/trytond/ir/translation.py +++ b/trytond/trytond/ir/translation.py @@ -1378,6 +1378,7 @@ class TranslationClean(Wizard): ModelData = pool.get('ir.model.data') to_delete = [] + records = defaultdict(lambda: defaultdict(set)) keys = set() translations = Translation.search([]) for translation in translations: @@ -1391,6 +1392,19 @@ class TranslationClean(Wizard): to_delete.append(translation.id) else: keys.add(key) + if translation.type == 'model' and translation.res_id >= 0: + model_name, _ = translation.name.split(',', 1) + records[model_name][translation.res_id].add(translation.id) + + with inactive_records(): + for model_name, translations in records.items(): + Model = pool.get(model_name) + for sub_ids in grouped_slice(translations.keys()): + sub_ids = list(sub_ids) + records = Model.search([('id', 'in', sub_ids)]) + for record_id in set(sub_ids) - set(map(int, records)): + to_delete.extend(translations[record_id]) + # skip translation handled in ir.model.data models_data = ModelData.search([ ('db_id', 'in', to_delete),