diff --git a/sbc_translation/__manifest__.py b/sbc_translation/__manifest__.py index 6f214f104..219f83b4e 100644 --- a/sbc_translation/__manifest__.py +++ b/sbc_translation/__manifest__.py @@ -28,7 +28,7 @@ # pylint: disable=C8101 { "name": "SBC Translation Platform", - "version": "18.0.1.0.0", + "version": "18.0.1.1.0", "category": "Compassion", "summary": "SBC - Translation Platform", "sequence": 150, diff --git a/sbc_translation/migrations/18.0.1.1.0/post-migration.py b/sbc_translation/migrations/18.0.1.1.0/post-migration.py new file mode 100644 index 000000000..83a12b085 --- /dev/null +++ b/sbc_translation/migrations/18.0.1.1.0/post-migration.py @@ -0,0 +1,34 @@ +# sbc_translation/migrations/18.0.1.1.0/post-migration.py + +from odoo import SUPERUSER_ID, api + + +def migrate(cr, version): + """ + Migration script to force the recalculation of translation statistics + for existing users when updating the module. + """ + env = api.Environment(cr, SUPERUSER_ID, {}) + + translators = env["translation.user"].search([]) + + if not translators: + return + + env.add_to_compute( + env["translation.user"]._fields["nb_translated_letters"], translators + ) + env.add_to_compute( + env["translation.user"]._fields["nb_translated_letters_this_year"], translators + ) + env.add_to_compute( + env["translation.user"]._fields["nb_translated_letters_last_year"], translators + ) + + translators.flush_model( + [ + "nb_translated_letters", + "nb_translated_letters_this_year", + "nb_translated_letters_last_year", + ] + ) diff --git a/sbc_translation/models/translation_user.py b/sbc_translation/models/translation_user.py index 2b54ac2c5..644edb416 100644 --- a/sbc_translation/models/translation_user.py +++ b/sbc_translation/models/translation_user.py @@ -53,29 +53,68 @@ class TranslationUser(models.Model): ("unique_translator", "unique(user_id)", "This translator already exists.") ] - @api.depends("translated_letter_ids") + @api.depends("translated_letter_ids.translation_status") def _compute_nb_translated_letters(self): + groups = self.env["correspondence"].read_group( + [ + ("new_translator_id", "in", self.ids), + ("translation_status", "=", "done"), + ], + ["new_translator_id"], + ["new_translator_id"], + ) + mapped_data = { + g["new_translator_id"][0]: g["new_translator_id_count"] for g in groups + } for translator in self: - translator.nb_translated_letters = len(translator.translated_letter_ids) + translator.nb_translated_letters = mapped_data.get(translator.id, 0) - @api.depends("translated_letter_ids") + @api.depends( + "translated_letter_ids.translation_status", + "translated_letter_ids.translate_done", + ) def _compute_nb_translated_letters_this_year(self): + current_year = fields.Datetime.now().year + groups = self.env["correspondence"].read_group( + [ + ("new_translator_id", "in", self.ids), + ("translation_status", "=", "done"), + ("translate_done", ">=", f"{current_year}-01-01 00:00:00"), + ("translate_done", "<", f"{current_year + 1}-01-01 00:00:00"), + ], + ["new_translator_id"], + ["new_translator_id"], + ) + mapped_data = { + g["new_translator_id"][0]: g["new_translator_id_count"] for g in groups + } for translator in self: - translator.nb_translated_letters_this_year = len( - translator.translated_letter_ids.filtered( - lambda it: it.translate_date - and it.translate_date.year == fields.Datetime.now().year - ) + translator.nb_translated_letters_this_year = mapped_data.get( + translator.id, 0 ) - @api.depends("translated_letter_ids") + @api.depends( + "translated_letter_ids.translation_status", + "translated_letter_ids.translate_done", + ) def _compute_nb_translated_letters_last_year(self): + last_year = fields.Datetime.now().year - 1 + groups = self.env["correspondence"].read_group( + [ + ("new_translator_id", "in", self.ids), + ("translation_status", "=", "done"), + ("translate_done", ">=", f"{last_year}-01-01 00:00:00"), + ("translate_done", "<", f"{last_year + 1}-01-01 00:00:00"), + ], + ["new_translator_id"], + ["new_translator_id"], + ) + mapped_data = { + g["new_translator_id"][0]: g["new_translator_id_count"] for g in groups + } for translator in self: - translator.nb_translated_letters_last_year = len( - translator.translated_letter_ids.filtered( - lambda it: it.translate_date - and it.translate_date.year == fields.Datetime.now().year - 1 - ) + translator.nb_translated_letters_last_year = mapped_data.get( + translator.id, 0 ) @api.model_create_multi