From 3e26216b4339e2b3b567ef38daeed90947d1dc24 Mon Sep 17 00:00:00 2001 From: momegahed Date: Mon, 2 May 2022 11:09:28 +0000 Subject: [PATCH] [FIX] account_analytic_default: fixing restrictions on analytic tags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If applied, this commit will fix the following bug by adding some restrictions on the creation of analytic default and the uses of tags in account.move Steps to reproduce: 1- install account.accountant, account_analytic_default 2- Accounting --> Configuration --> Analytic Tags, analytic accounting 3- Create an Analytic Tag, with no Analytic Distribution. 4- Accounting --> Configuration --> Analytic Default Rules. Create an Analytic Default Rule, using the Analytic Tag above and select a Partner 5- Create a Vendor Bill on that partner. The Analytic Tag is added to the invoice, as expected 6- However when selecting Accounting --> Reporting --> Analytic Report, the report is empty and does not contain the Analytic Tag. Adding the Analytic Tag to the filter has no effect. Bug/Issue: An analytic tag is meant to be an additional dimension of analysis. Dimension which is only worth/valid when an analytic account is specified. An analytic default rule should never be applied without - either an analytic account - or analytic tag used for distribution Fixes: 1- changing the error condition on creating analytic default 2- changing the error message accordingly to better explain the issue 3- raise an error when the user creates an account.move with analytic tags without (analytic tags + analytic account) or (analytic tags with analytic distrubtion) Please refer to the ticket for the whole discussion on this OPW-2766749 closes odoo/odoo#91271 X-original-commit: 99c50b9d48448bff54fc5a7c76bbec300bd25d25 Signed-off-by: Mohamed Megahed Abbas Megahed SALLAM (mome) Signed-off-by: William André (wan) --- .../models/account_analytic_default.py | 7 +- .../i18n/account_analytic_default.pot | 246 ++++++++++++++++++ 2 files changed, 251 insertions(+), 2 deletions(-) create mode 100644 addons/account_analytic_default/i18n/account_analytic_default.pot diff --git a/addons/account/models/account_analytic_default.py b/addons/account/models/account_analytic_default.py index 5b4e5a0998e..8055bc9843e 100644 --- a/addons/account/models/account_analytic_default.py +++ b/addons/account/models/account_analytic_default.py @@ -24,8 +24,11 @@ class AccountAnalyticDefault(models.Model): @api.constrains('analytic_id', 'analytic_tag_ids') def _check_account_or_tags(self): - if any(not default.analytic_id and not default.analytic_tag_ids for default in self): - raise ValidationError(_('An analytic default requires at least an analytic account or an analytic tag.')) + if any(not default.analytic_id + and not any(tag.analytic_distribution_ids for tag in default.analytic_tag_ids) + for default in self + ): + raise ValidationError(_('An analytic default requires an analytic account or an analytic tag used for analytic distribution.')) @api.model def account_get(self, product_id=None, partner_id=None, account_id=None, user_id=None, date=None, company_id=None): diff --git a/addons/account_analytic_default/i18n/account_analytic_default.pot b/addons/account_analytic_default/i18n/account_analytic_default.pot new file mode 100644 index 00000000000..a378c847cde --- /dev/null +++ b/addons/account_analytic_default/i18n/account_analytic_default.pot @@ -0,0 +1,246 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_analytic_default +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-05 12:32+0000\n" +"PO-Revision-Date: 2019-12-05 12:32+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_analytic_default +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_kanban +msgid " From" +msgstr "" + +#. module: account_analytic_default +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_kanban +msgid "Customer" +msgstr "" + +#. module: account_analytic_default +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_kanban +msgid "Product" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__account_id +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_form +msgid "Account" +msgstr "" + +#. module: account_analytic_default +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_form_search +msgid "Accounts" +msgstr "" + +#. module: account_analytic_default +#: code:addons/account_analytic_default/models/account_analytic_default.py:0 +#, python-format +msgid "" +"An analytic default requires at least an analytic account or an analytic " +"tag." +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__analytic_id +#: model:ir.model.fields,field_description:account_analytic_default.field_account_move_line__analytic_account_id +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_form_search +msgid "Analytic Account" +msgstr "" + +#. module: account_analytic_default +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_form +msgid "Analytic Default Rule" +msgstr "" + +#. module: account_analytic_default +#: model:ir.actions.act_window,name:account_analytic_default.action_analytic_default_list +#: model:ir.ui.menu,name:account_analytic_default.menu_analytic_default_list +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_form +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_tree +msgid "Analytic Defaults" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model,name:account_analytic_default.model_account_analytic_default +msgid "Analytic Distribution" +msgstr "" + +#. module: account_analytic_default +#: model:ir.actions.act_window,name:account_analytic_default.action_product_default_list +#: model:ir.actions.act_window,name:account_analytic_default.analytic_rule_action_user +msgid "Analytic Rules" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__analytic_tag_ids +#: model:ir.model.fields,field_description:account_analytic_default.field_account_move_line__analytic_tag_ids +msgid "Analytic Tags" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__company_id +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_form_search +msgid "Company" +msgstr "" + +#. module: account_analytic_default +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_form +msgid "Conditions" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__create_uid +msgid "Created by" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__create_date +msgid "Created on" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,help:account_analytic_default.field_account_analytic_default__date_stop +msgid "Default end date for this Analytic Account." +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,help:account_analytic_default.field_account_analytic_default__date_start +msgid "Default start date for this Analytic Account." +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__display_name +msgid "Display Name" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__date_stop +msgid "End Date" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,help:account_analytic_default.field_account_analytic_default__sequence +msgid "" +"Gives the sequence order when displaying a list of analytic distribution" +msgstr "" + +#. module: account_analytic_default +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_form_search +msgid "Group By" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__id +msgid "ID" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model,name:account_analytic_default.model_account_move_line +msgid "Journal Item" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__partner_id +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_form_search +msgid "Partner" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__product_id +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_form_search +msgid "Product" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,help:account_analytic_default.field_account_analytic_default__company_id +msgid "" +"Select a company which will use analytic account specified in analytic " +"default (e.g. create new customer invoice or Sales order if we select this " +"company, it will automatically take this as an analytic account)" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,help:account_analytic_default.field_account_analytic_default__partner_id +msgid "" +"Select a partner which will use analytic account specified in analytic " +"default (e.g. create new customer invoice or Sales order if we select this " +"partner, it will automatically take this as an analytic account)" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,help:account_analytic_default.field_account_analytic_default__product_id +msgid "" +"Select a product which will use analytic account specified in analytic " +"default (e.g. create new customer invoice or Sales order if we select this " +"product, it will automatically take this as an analytic account)" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,help:account_analytic_default.field_account_analytic_default__user_id +msgid "" +"Select a user which will use analytic account specified in analytic default." +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,help:account_analytic_default.field_account_analytic_default__account_id +msgid "" +"Select an accounting account which will use analytic account specified in " +"analytic default (e.g. create new customer invoice or Sales order if we " +"select this account, it will automatically take this as an analytic account)" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__sequence +msgid "Sequence" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__date_start +msgid "Start Date" +msgstr "" + +#. module: account_analytic_default +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_form +msgid "Tags" +msgstr "" + +#. module: account_analytic_default +#: model:ir.model.fields,field_description:account_analytic_default.field_account_analytic_default__user_id +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_form_search +msgid "User" +msgstr "" + +#. module: account_analytic_default +#: model_terms:ir.ui.view,arch_db:account_analytic_default.view_account_analytic_default_kanban +msgid "to" +msgstr "" + +#. module: account_analytic_default +#: code:addons/account_analytic_default/models/account_move.py:30 +#, python-format +msgid "An analytic default requires an analytic account or an analytic tag used for analytic distribution." +msgstr ""