From 622c855aeb94c0b2e40f4139949f1f9cf77c49e4 Mon Sep 17 00:00:00 2001 From: Pierre Verkest Date: Thu, 27 May 2021 18:49:17 +0200 Subject: [PATCH 1/9] [ADD] 14.0 new module project_analytic_code This module add related Analytic account code in project name () and you can search projects by the analytic account code () from any list (like in timesheets). Apply suggestions from code review Co-authored-by: Akim Juillerat --- project_analytic_code/README.rst | 3 ++ project_analytic_code/__init__.py | 2 + project_analytic_code/__manifest__.py | 18 +++++++ project_analytic_code/i18n/fr.po | 45 ++++++++++++++++++ .../i18n/project_analytic_code.pot | 44 +++++++++++++++++ project_analytic_code/models/__init__.py | 2 + project_analytic_code/models/project.py | 31 ++++++++++++ project_analytic_code/readme/CONTRIBUTORS.rst | 1 + project_analytic_code/readme/DESCRIPTION.rst | 10 ++++ project_analytic_code/readme/USAGE.rst | 3 ++ .../static/description/icon.png | Bin 0 -> 9455 bytes project_analytic_code/tests/__init__.py | 3 ++ project_analytic_code/tests/test_project.py | 26 ++++++++++ project_analytic_code/views/project.xml | 41 ++++++++++++++++ 14 files changed, 229 insertions(+) create mode 100644 project_analytic_code/README.rst create mode 100644 project_analytic_code/__init__.py create mode 100644 project_analytic_code/__manifest__.py create mode 100644 project_analytic_code/i18n/fr.po create mode 100644 project_analytic_code/i18n/project_analytic_code.pot create mode 100644 project_analytic_code/models/__init__.py create mode 100644 project_analytic_code/models/project.py create mode 100644 project_analytic_code/readme/CONTRIBUTORS.rst create mode 100644 project_analytic_code/readme/DESCRIPTION.rst create mode 100644 project_analytic_code/readme/USAGE.rst create mode 100644 project_analytic_code/static/description/icon.png create mode 100644 project_analytic_code/tests/__init__.py create mode 100644 project_analytic_code/tests/test_project.py create mode 100644 project_analytic_code/views/project.xml diff --git a/project_analytic_code/README.rst b/project_analytic_code/README.rst new file mode 100644 index 0000000000..e487e400a9 --- /dev/null +++ b/project_analytic_code/README.rst @@ -0,0 +1,3 @@ +===================== +Project Analytic Code +===================== diff --git a/project_analytic_code/__init__.py b/project_analytic_code/__init__.py new file mode 100644 index 0000000000..cb45f2710a --- /dev/null +++ b/project_analytic_code/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import models diff --git a/project_analytic_code/__manifest__.py b/project_analytic_code/__manifest__.py new file mode 100644 index 0000000000..8f7d740f88 --- /dev/null +++ b/project_analytic_code/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright 2021 Pierre Verkest +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Project analytic code", + "summary": "Search projects by analytic account code.", + "author": "Pierre Verkest, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/project", + "category": "Project Management", + "version": "14.0.1.0.0", + "license": "AGPL-3", + "depends": [ + "project", + ], + "data": [ + "views/project.xml", + ], +} diff --git a/project_analytic_code/i18n/fr.po b/project_analytic_code/i18n/fr.po new file mode 100644 index 0000000000..8a749bfdf1 --- /dev/null +++ b/project_analytic_code/i18n/fr.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * project_analytic_code +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: project_analytic_code +#: model_terms:ir.ui.view,arch_db:project_analytic_code.view_project_project_filter +msgid "Analytic account" +msgstr "Compte analytique" + +#. module: project_analytic_code +#: model:ir.model.fields,field_description:project_analytic_code.field_project_project__analytic_account_code +msgid "Analytic code" +msgstr "Code analytique" + +#. module: project_analytic_code +#: model:ir.model.fields,field_description:project_analytic_code.field_project_project__display_name +msgid "Display Name" +msgstr "Libellé" + +#. module: project_analytic_code +#: model:ir.model.fields,field_description:project_analytic_code.field_project_project__id +msgid "ID" +msgstr "" + +#. module: project_analytic_code +#: model:ir.model.fields,field_description:project_analytic_code.field_project_project____last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: project_analytic_code +#: model:ir.model,name:project_analytic_code.model_project_project +msgid "Project" +msgstr "Projet" diff --git a/project_analytic_code/i18n/project_analytic_code.pot b/project_analytic_code/i18n/project_analytic_code.pot new file mode 100644 index 0000000000..e087676c1f --- /dev/null +++ b/project_analytic_code/i18n/project_analytic_code.pot @@ -0,0 +1,44 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * project_analytic_code +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \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: project_analytic_code +#: model_terms:ir.ui.view,arch_db:project_analytic_code.view_project_project_filter +msgid "Analytic account" +msgstr "" + +#. module: project_analytic_code +#: model:ir.model.fields,field_description:project_analytic_code.field_project_project__analytic_account_code +msgid "Analytic code" +msgstr "" + +#. module: project_analytic_code +#: model:ir.model.fields,field_description:project_analytic_code.field_project_project__display_name +msgid "Display Name" +msgstr "" + +#. module: project_analytic_code +#: model:ir.model.fields,field_description:project_analytic_code.field_project_project__id +msgid "ID" +msgstr "" + +#. module: project_analytic_code +#: model:ir.model.fields,field_description:project_analytic_code.field_project_project____last_update +msgid "Last Modified on" +msgstr "" + +#. module: project_analytic_code +#: model:ir.model,name:project_analytic_code.model_project_project +msgid "Project" +msgstr "" diff --git a/project_analytic_code/models/__init__.py b/project_analytic_code/models/__init__.py new file mode 100644 index 0000000000..0364439211 --- /dev/null +++ b/project_analytic_code/models/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import project diff --git a/project_analytic_code/models/project.py b/project_analytic_code/models/project.py new file mode 100644 index 0000000000..4eecaad723 --- /dev/null +++ b/project_analytic_code/models/project.py @@ -0,0 +1,31 @@ +# Copyright 2021 Pierre Verkest +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class Project(models.Model): + _inherit = "project.project" + + analytic_account_code = fields.Char( + string="Analytic code", + related="analytic_account_id.code", + store=True, + index=True, + ) + + @api.model + def name_search(self, name="", args=None, operator="ilike", limit=100): + args = list(args or []) + if name: + args += ["|", ("analytic_account_code", "=", name)] + return super().name_search(name=name, args=args, operator=operator, limit=limit) + + def name_get(self): + result = super().name_get() + # Prepend analytic_account_code to display_name + for i, (res_item, project) in enumerate(zip(result, self)): + code = project.analytic_account_code + if code: + result[i] = (res_item[0], "[%s] %s" % (code, res_item[1])) + return result diff --git a/project_analytic_code/readme/CONTRIBUTORS.rst b/project_analytic_code/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..638be86631 --- /dev/null +++ b/project_analytic_code/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Pierre Verkest diff --git a/project_analytic_code/readme/DESCRIPTION.rst b/project_analytic_code/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..f35cc63ca5 --- /dev/null +++ b/project_analytic_code/readme/DESCRIPTION.rst @@ -0,0 +1,10 @@ +This module add related Analytic account code ( +related field `analytic_account_code`) on project model. + +The name of the project in related model display the analytic +account code (using `name_get`) and you can search projects by +the analytic account code (`name_search`) from any list ( +ie: collecting timesheets). + +Add analytic account code in project kanban card view and +add group by and search by account analytic. diff --git a/project_analytic_code/readme/USAGE.rst b/project_analytic_code/readme/USAGE.rst new file mode 100644 index 0000000000..4160f31505 --- /dev/null +++ b/project_analytic_code/readme/USAGE.rst @@ -0,0 +1,3 @@ +Once this module is installed you can search project +per analytic account code from any list that point to +a project (name search). diff --git a/project_analytic_code/static/description/icon.png b/project_analytic_code/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/project_analytic_code/tests/__init__.py b/project_analytic_code/tests/__init__.py new file mode 100644 index 0000000000..1cb1c7f5b5 --- /dev/null +++ b/project_analytic_code/tests/__init__.py @@ -0,0 +1,3 @@ +# Copyright 2021 Pierre Verkest +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import test_project diff --git a/project_analytic_code/tests/test_project.py b/project_analytic_code/tests/test_project.py new file mode 100644 index 0000000000..00f353fe4f --- /dev/null +++ b/project_analytic_code/tests/test_project.py @@ -0,0 +1,26 @@ +# Copyright 2021 Pierre Verkest +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.tests import tagged +from odoo.tests.common import SavepointCase + + +@tagged("post_install", "-at_install") +class TestProject(SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.project = cls.env.ref("project.project_project_1") + cls.project.name = "Test project name" + cls.project.analytic_account_id = cls.env["account.analytic.account"].create( + {"name": "Test Analytic account name", "code": "Test Weird code"} + ) + + def test_search_project_by_account_analytic_code(self): + result = self.env["project.project"].name_search( + name=self.project.analytic_account_id.code + ) + self.assertEqual( + result[0][1], + f"[{self.project.analytic_account_id.code}] {self.project.name}", + ) diff --git a/project_analytic_code/views/project.xml b/project_analytic_code/views/project.xml new file mode 100644 index 0000000000..ae5ebb30cf --- /dev/null +++ b/project_analytic_code/views/project.xml @@ -0,0 +1,41 @@ + + + + + + project_analytic_code.project.select + project.project + + + ["|", ("name", "ilike", self), ("analytic_account_code", "=", self)] + + + + + + + + + + project.project.kanban.project_analytic_code + project.project + 200 + + + + + + + [] + + + + + + From 4a3f20f83850d7feff0fc83dd0976e70f7f4690e Mon Sep 17 00:00:00 2001 From: Pierre Verkest Date: Tue, 18 Feb 2025 12:15:04 +0100 Subject: [PATCH 2/9] [IMP] project_analytic_code: pre-commit auto fixes --- project_analytic_code/README.rst | 89 +++- project_analytic_code/pyproject.toml | 3 + project_analytic_code/readme/CONTRIBUTORS.md | 1 + project_analytic_code/readme/CONTRIBUTORS.rst | 1 - project_analytic_code/readme/DESCRIPTION.md | 9 + project_analytic_code/readme/DESCRIPTION.rst | 10 - project_analytic_code/readme/USAGE.md | 2 + project_analytic_code/readme/USAGE.rst | 3 - .../static/description/index.html | 435 ++++++++++++++++++ 9 files changed, 538 insertions(+), 15 deletions(-) create mode 100644 project_analytic_code/pyproject.toml create mode 100644 project_analytic_code/readme/CONTRIBUTORS.md delete mode 100644 project_analytic_code/readme/CONTRIBUTORS.rst create mode 100644 project_analytic_code/readme/DESCRIPTION.md delete mode 100644 project_analytic_code/readme/DESCRIPTION.rst create mode 100644 project_analytic_code/readme/USAGE.md delete mode 100644 project_analytic_code/readme/USAGE.rst create mode 100644 project_analytic_code/static/description/index.html diff --git a/project_analytic_code/README.rst b/project_analytic_code/README.rst index e487e400a9..90938fa488 100644 --- a/project_analytic_code/README.rst +++ b/project_analytic_code/README.rst @@ -1,3 +1,90 @@ ===================== -Project Analytic Code +Project analytic code ===================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:d4ad14e9e09293d8fe3b7c2e9eecf6a5a3d3f4a8f75905d186baf466c38f4908 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproject-lightgray.png?logo=github + :target: https://github.com/OCA/project/tree/17.0/project_analytic_code + :alt: OCA/project +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/project-17-0/project-17-0-project_analytic_code + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/project&target_branch=17.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module add related Analytic account code ( related field +analytic_account_code) on project model. + +The name of the project in related model display the analytic account +code (using name_get) and you can search projects by the analytic +account code (name_search) from any list ( ie: collecting timesheets). + +Add analytic account code in project kanban card view and add group by +and search by account analytic. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +Once this module is installed you can search project per analytic +account code from any list that point to a project (name search). + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Pierre Verkest + +Contributors +------------ + +- Pierre Verkest + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/project `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/project_analytic_code/pyproject.toml b/project_analytic_code/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/project_analytic_code/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/project_analytic_code/readme/CONTRIBUTORS.md b/project_analytic_code/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..926261edf6 --- /dev/null +++ b/project_analytic_code/readme/CONTRIBUTORS.md @@ -0,0 +1 @@ +- Pierre Verkest \<\> diff --git a/project_analytic_code/readme/CONTRIBUTORS.rst b/project_analytic_code/readme/CONTRIBUTORS.rst deleted file mode 100644 index 638be86631..0000000000 --- a/project_analytic_code/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1 +0,0 @@ -* Pierre Verkest diff --git a/project_analytic_code/readme/DESCRIPTION.md b/project_analytic_code/readme/DESCRIPTION.md new file mode 100644 index 0000000000..7a1d59a29c --- /dev/null +++ b/project_analytic_code/readme/DESCRIPTION.md @@ -0,0 +1,9 @@ +This module add related Analytic account code ( related field +analytic_account_code) on project model. + +The name of the project in related model display the analytic account +code (using name_get) and you can search projects by the analytic +account code (name_search) from any list ( ie: collecting timesheets). + +Add analytic account code in project kanban card view and add group by +and search by account analytic. diff --git a/project_analytic_code/readme/DESCRIPTION.rst b/project_analytic_code/readme/DESCRIPTION.rst deleted file mode 100644 index f35cc63ca5..0000000000 --- a/project_analytic_code/readme/DESCRIPTION.rst +++ /dev/null @@ -1,10 +0,0 @@ -This module add related Analytic account code ( -related field `analytic_account_code`) on project model. - -The name of the project in related model display the analytic -account code (using `name_get`) and you can search projects by -the analytic account code (`name_search`) from any list ( -ie: collecting timesheets). - -Add analytic account code in project kanban card view and -add group by and search by account analytic. diff --git a/project_analytic_code/readme/USAGE.md b/project_analytic_code/readme/USAGE.md new file mode 100644 index 0000000000..c24ea7c57d --- /dev/null +++ b/project_analytic_code/readme/USAGE.md @@ -0,0 +1,2 @@ +Once this module is installed you can search project per analytic +account code from any list that point to a project (name search). diff --git a/project_analytic_code/readme/USAGE.rst b/project_analytic_code/readme/USAGE.rst deleted file mode 100644 index 4160f31505..0000000000 --- a/project_analytic_code/readme/USAGE.rst +++ /dev/null @@ -1,3 +0,0 @@ -Once this module is installed you can search project -per analytic account code from any list that point to -a project (name search). diff --git a/project_analytic_code/static/description/index.html b/project_analytic_code/static/description/index.html new file mode 100644 index 0000000000..a495c60f8d --- /dev/null +++ b/project_analytic_code/static/description/index.html @@ -0,0 +1,435 @@ + + + + + +Project analytic code + + + +
+

Project analytic code

+ + +

Beta License: AGPL-3 OCA/project Translate me on Weblate Try me on Runboat

+

This module add related Analytic account code ( related field +analytic_account_code) on project model.

+

The name of the project in related model display the analytic account +code (using name_get) and you can search projects by the analytic +account code (name_search) from any list ( ie: collecting timesheets).

+

Add analytic account code in project kanban card view and add group by +and search by account analytic.

+

Table of contents

+ +
+

Usage

+

Once this module is installed you can search project per analytic +account code from any list that point to a project (name search).

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Pierre Verkest
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/project project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + From 89773acfd0645aeeddb5c66744088ad6b847b701 Mon Sep 17 00:00:00 2001 From: Pierre Verkest Date: Tue, 18 Feb 2025 12:50:41 +0100 Subject: [PATCH 3/9] [MIG] project_analytic_code: Migration to 17.0 --- project_analytic_code/README.rst | 6 ++- project_analytic_code/__manifest__.py | 2 +- project_analytic_code/models/project.py | 27 +++++----- .../static/description/index.html | 26 +++++---- project_analytic_code/tests/test_project.py | 23 ++++++-- project_analytic_code/views/project.xml | 54 +++++++------------ 6 files changed, 73 insertions(+), 65 deletions(-) diff --git a/project_analytic_code/README.rst b/project_analytic_code/README.rst index 90938fa488..0b73f57683 100644 --- a/project_analytic_code/README.rst +++ b/project_analytic_code/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ===================== Project analytic code ===================== @@ -13,7 +17,7 @@ Project analytic code .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproject-lightgray.png?logo=github diff --git a/project_analytic_code/__manifest__.py b/project_analytic_code/__manifest__.py index 8f7d740f88..e89603c0a9 100644 --- a/project_analytic_code/__manifest__.py +++ b/project_analytic_code/__manifest__.py @@ -7,7 +7,7 @@ "author": "Pierre Verkest, Odoo Community Association (OCA)", "website": "https://github.com/OCA/project", "category": "Project Management", - "version": "14.0.1.0.0", + "version": "17.0.0.1.0", "license": "AGPL-3", "depends": [ "project", diff --git a/project_analytic_code/models/project.py b/project_analytic_code/models/project.py index 4eecaad723..20e3a3cfd0 100644 --- a/project_analytic_code/models/project.py +++ b/project_analytic_code/models/project.py @@ -7,25 +7,24 @@ class Project(models.Model): _inherit = "project.project" + _rec_names_search = [ + "name", + "analytic_account_code", + ] + analytic_account_code = fields.Char( string="Analytic code", related="analytic_account_id.code", store=True, - index=True, + index="btree_not_null", ) - @api.model - def name_search(self, name="", args=None, operator="ilike", limit=100): - args = list(args or []) - if name: - args += ["|", ("analytic_account_code", "=", name)] - return super().name_search(name=name, args=args, operator=operator, limit=limit) - - def name_get(self): - result = super().name_get() - # Prepend analytic_account_code to display_name - for i, (res_item, project) in enumerate(zip(result, self)): + @api.depends("analytic_account_code") + def _compute_display_name(self): + # res is null but avoid noqa: W8110 + res = super()._compute_display_name() + for project in self: code = project.analytic_account_code if code: - result[i] = (res_item[0], "[%s] %s" % (code, res_item[1])) - return result + project.display_name = f"[{code}] {project.display_name}" + return res diff --git a/project_analytic_code/static/description/index.html b/project_analytic_code/static/description/index.html index a495c60f8d..7495404874 100644 --- a/project_analytic_code/static/description/index.html +++ b/project_analytic_code/static/description/index.html @@ -3,7 +3,7 @@ -Project analytic code +README.rst -
-

Project analytic code

+
+ + +Odoo Community Association + +
+

Project analytic code

-

Beta License: AGPL-3 OCA/project Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/project Translate me on Weblate Try me on Runboat

This module add related Analytic account code ( related field analytic_account_code) on project model.

The name of the project in related model display the analytic account @@ -391,12 +396,12 @@

Project analytic code

-

Usage

+

Usage

Once this module is installed you can search project per analytic account code from any list that point to a project (name search).

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -404,21 +409,21 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Pierre Verkest
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -431,5 +436,6 @@

Maintainers

+
diff --git a/project_analytic_code/tests/test_project.py b/project_analytic_code/tests/test_project.py index 00f353fe4f..c71fcc3f7d 100644 --- a/project_analytic_code/tests/test_project.py +++ b/project_analytic_code/tests/test_project.py @@ -2,18 +2,23 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from odoo.tests import tagged -from odoo.tests.common import SavepointCase +from odoo.tests.common import TransactionCase @tagged("post_install", "-at_install") -class TestProject(SavepointCase): +class TestProject(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() cls.project = cls.env.ref("project.project_project_1") cls.project.name = "Test project name" + cls.plan = cls.env["account.analytic.plan"].create({"name": "Test plan"}) cls.project.analytic_account_id = cls.env["account.analytic.account"].create( - {"name": "Test Analytic account name", "code": "Test Weird code"} + { + "name": "Test Analytic account name", + "code": "Test Weird code", + "plan_id": cls.plan.id, + } ) def test_search_project_by_account_analytic_code(self): @@ -24,3 +29,15 @@ def test_search_project_by_account_analytic_code(self): result[0][1], f"[{self.project.analytic_account_id.code}] {self.project.name}", ) + + def test_project_display_name(self): + self.assertEqual( + self.project.display_name, + f"[{self.project.analytic_account_id.code}] {self.project.name}", + ) + self.project.analytic_account_id = False + + self.assertEqual( + self.project.display_name, + f"{self.project.name}", + ) diff --git a/project_analytic_code/views/project.xml b/project_analytic_code/views/project.xml index ae5ebb30cf..cecb7253eb 100644 --- a/project_analytic_code/views/project.xml +++ b/project_analytic_code/views/project.xml @@ -1,41 +1,23 @@ - - - - project_analytic_code.project.select - project.project - - - ["|", ("name", "ilike", self), ("analytic_account_code", "=", self)] - - - - + + + project_analytic_code.project.select + project.project + + + ["|", ("name", "ilike", self), ("analytic_account_code", "=", self)] - + + + + + - - - project.project.kanban.project_analytic_code - project.project - 200 - - - - - - - [] - - - - - From 492fbae4ad69f677253092872386cec0856d73e7 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Thu, 18 Dec 2025 13:41:13 +0000 Subject: [PATCH 4/9] [UPD] Update project_analytic_code.pot --- .../i18n/project_analytic_code.pot | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/project_analytic_code/i18n/project_analytic_code.pot b/project_analytic_code/i18n/project_analytic_code.pot index e087676c1f..1768663250 100644 --- a/project_analytic_code/i18n/project_analytic_code.pot +++ b/project_analytic_code/i18n/project_analytic_code.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 17.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -23,21 +23,6 @@ msgstr "" msgid "Analytic code" msgstr "" -#. module: project_analytic_code -#: model:ir.model.fields,field_description:project_analytic_code.field_project_project__display_name -msgid "Display Name" -msgstr "" - -#. module: project_analytic_code -#: model:ir.model.fields,field_description:project_analytic_code.field_project_project__id -msgid "ID" -msgstr "" - -#. module: project_analytic_code -#: model:ir.model.fields,field_description:project_analytic_code.field_project_project____last_update -msgid "Last Modified on" -msgstr "" - #. module: project_analytic_code #: model:ir.model,name:project_analytic_code.model_project_project msgid "Project" From 22fea53aade7b8f9ccd211b6de625f6c362cf8b1 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 18 Dec 2025 13:45:06 +0000 Subject: [PATCH 5/9] [BOT] post-merge updates --- project_analytic_code/README.rst | 2 +- project_analytic_code/static/description/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/project_analytic_code/README.rst b/project_analytic_code/README.rst index 0b73f57683..5fc7982868 100644 --- a/project_analytic_code/README.rst +++ b/project_analytic_code/README.rst @@ -11,7 +11,7 @@ Project analytic code !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:d4ad14e9e09293d8fe3b7c2e9eecf6a5a3d3f4a8f75905d186baf466c38f4908 + !! source digest: sha256:f2515ed6acc3794b02fc29bfc90b4fbf96a7765ad748f26cf183f42ee706c907 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/project_analytic_code/static/description/index.html b/project_analytic_code/static/description/index.html index 7495404874..f7885a1b25 100644 --- a/project_analytic_code/static/description/index.html +++ b/project_analytic_code/static/description/index.html @@ -372,7 +372,7 @@

Project analytic code

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:d4ad14e9e09293d8fe3b7c2e9eecf6a5a3d3f4a8f75905d186baf466c38f4908 +!! source digest: sha256:f2515ed6acc3794b02fc29bfc90b4fbf96a7765ad748f26cf183f42ee706c907 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/project Translate me on Weblate Try me on Runboat

This module add related Analytic account code ( related field From 3de26934475f8ba084fe614a1fd356504b7a9d7f Mon Sep 17 00:00:00 2001 From: mymage Date: Sat, 20 Dec 2025 07:40:35 +0000 Subject: [PATCH 6/9] Added translation using Weblate (Italian) --- project_analytic_code/i18n/it.po | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 project_analytic_code/i18n/it.po diff --git a/project_analytic_code/i18n/it.po b/project_analytic_code/i18n/it.po new file mode 100644 index 0000000000..790c3e9454 --- /dev/null +++ b/project_analytic_code/i18n/it.po @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * project_analytic_code +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: project_analytic_code +#: model_terms:ir.ui.view,arch_db:project_analytic_code.view_project_project_filter +msgid "Analytic account" +msgstr "" + +#. module: project_analytic_code +#: model:ir.model.fields,field_description:project_analytic_code.field_project_project__analytic_account_code +msgid "Analytic code" +msgstr "" + +#. module: project_analytic_code +#: model:ir.model,name:project_analytic_code.model_project_project +msgid "Project" +msgstr "" From 81e0db8dfc32aaa9774fc6dd2bb5363028f3101a Mon Sep 17 00:00:00 2001 From: mymage Date: Sat, 20 Dec 2025 07:41:04 +0000 Subject: [PATCH 7/9] Translated using Weblate (Italian) Currently translated at 100.0% (3 of 3 strings) Translation: project-17.0/project-17.0-project_analytic_code Translate-URL: https://translation.odoo-community.org/projects/project-17-0/project-17-0-project_analytic_code/it/ --- project_analytic_code/i18n/it.po | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/project_analytic_code/i18n/it.po b/project_analytic_code/i18n/it.po index 790c3e9454..6943c20904 100644 --- a/project_analytic_code/i18n/it.po +++ b/project_analytic_code/i18n/it.po @@ -6,25 +6,27 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 17.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2025-12-20 09:42+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10.4\n" #. module: project_analytic_code #: model_terms:ir.ui.view,arch_db:project_analytic_code.view_project_project_filter msgid "Analytic account" -msgstr "" +msgstr "Conto analitico" #. module: project_analytic_code #: model:ir.model.fields,field_description:project_analytic_code.field_project_project__analytic_account_code msgid "Analytic code" -msgstr "" +msgstr "Codice analitico" #. module: project_analytic_code #: model:ir.model,name:project_analytic_code.model_project_project msgid "Project" -msgstr "" +msgstr "Progetto" From b016134ea9a98ecdc4ee786ccee4502da00a6e39 Mon Sep 17 00:00:00 2001 From: Anusha Date: Thu, 2 Jul 2026 08:39:22 +0200 Subject: [PATCH 8/9] [IMP] project_analytic_code: pre-commit auto fixes --- project_analytic_code/views/project.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/project_analytic_code/views/project.xml b/project_analytic_code/views/project.xml index cecb7253eb..63119b6802 100644 --- a/project_analytic_code/views/project.xml +++ b/project_analytic_code/views/project.xml @@ -19,5 +19,4 @@ - From e9b773b6fd7334e378e7136e61709df16608ba92 Mon Sep 17 00:00:00 2001 From: Anusha Date: Thu, 2 Jul 2026 08:43:48 +0200 Subject: [PATCH 9/9] [MIG] project_analytic_code: Migration to 18.0 --- project_analytic_code/README.rst | 16 ++++------ project_analytic_code/__manifest__.py | 2 +- project_analytic_code/models/project.py | 11 ++++--- .../static/description/index.html | 30 ++++++++----------- project_analytic_code/tests/test_project.py | 14 +++++---- project_analytic_code/views/project.xml | 2 +- 6 files changed, 34 insertions(+), 41 deletions(-) diff --git a/project_analytic_code/README.rst b/project_analytic_code/README.rst index 5fc7982868..a0e11dd315 100644 --- a/project_analytic_code/README.rst +++ b/project_analytic_code/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - ===================== Project analytic code ===================== @@ -17,17 +13,17 @@ Project analytic code .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproject-lightgray.png?logo=github - :target: https://github.com/OCA/project/tree/17.0/project_analytic_code + :target: https://github.com/OCA/project/tree/18.0/project_analytic_code :alt: OCA/project .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/project-17-0/project-17-0-project_analytic_code + :target: https://translation.odoo-community.org/projects/project-18-0/project-18-0-project_analytic_code :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/project&target_branch=17.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/project&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -59,7 +55,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -89,6 +85,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/project `_ project on GitHub. +This module is part of the `OCA/project `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/project_analytic_code/__manifest__.py b/project_analytic_code/__manifest__.py index e89603c0a9..0624202c46 100644 --- a/project_analytic_code/__manifest__.py +++ b/project_analytic_code/__manifest__.py @@ -7,7 +7,7 @@ "author": "Pierre Verkest, Odoo Community Association (OCA)", "website": "https://github.com/OCA/project", "category": "Project Management", - "version": "17.0.0.1.0", + "version": "18.0.0.1.0", "license": "AGPL-3", "depends": [ "project", diff --git a/project_analytic_code/models/project.py b/project_analytic_code/models/project.py index 20e3a3cfd0..7ffbbab5ba 100644 --- a/project_analytic_code/models/project.py +++ b/project_analytic_code/models/project.py @@ -14,17 +14,16 @@ class Project(models.Model): analytic_account_code = fields.Char( string="Analytic code", - related="analytic_account_id.code", + related="account_id.code", store=True, index="btree_not_null", ) @api.depends("analytic_account_code") def _compute_display_name(self): - # res is null but avoid noqa: W8110 res = super()._compute_display_name() - for project in self: - code = project.analytic_account_code - if code: - project.display_name = f"[{code}] {project.display_name}" + for project in self.filtered(lambda p: p.analytic_account_code): + project.display_name = ( + f"[{project.analytic_account_code}] {project.display_name}" + ) return res diff --git a/project_analytic_code/static/description/index.html b/project_analytic_code/static/description/index.html index f7885a1b25..9bbd32997c 100644 --- a/project_analytic_code/static/description/index.html +++ b/project_analytic_code/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Project analytic code -

+
+

Project analytic code

- - -Odoo Community Association - -
-

Project analytic code

-

Beta License: AGPL-3 OCA/project Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/project Translate me on Weblate Try me on Runboat

This module add related Analytic account code ( related field analytic_account_code) on project model.

The name of the project in related model display the analytic account @@ -396,34 +391,34 @@

Project analytic code

-

Usage

+

Usage

Once this module is installed you can search project per analytic account code from any list that point to a project (name search).

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Pierre Verkest
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -431,11 +426,10 @@

Maintainers

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

-

This module is part of the OCA/project project on GitHub.

+

This module is part of the OCA/project project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

-
diff --git a/project_analytic_code/tests/test_project.py b/project_analytic_code/tests/test_project.py index c71fcc3f7d..0278b966fa 100644 --- a/project_analytic_code/tests/test_project.py +++ b/project_analytic_code/tests/test_project.py @@ -13,31 +13,35 @@ def setUpClass(cls): cls.project = cls.env.ref("project.project_project_1") cls.project.name = "Test project name" cls.plan = cls.env["account.analytic.plan"].create({"name": "Test plan"}) - cls.project.analytic_account_id = cls.env["account.analytic.account"].create( + cls.project.account_id = cls.env["account.analytic.account"].create( { "name": "Test Analytic account name", "code": "Test Weird code", "plan_id": cls.plan.id, } ) + cls.env.flush_all() def test_search_project_by_account_analytic_code(self): + self.env.flush_all() result = self.env["project.project"].name_search( - name=self.project.analytic_account_id.code + name=self.project.account_id.code ) self.assertEqual( result[0][1], - f"[{self.project.analytic_account_id.code}] {self.project.name}", + f"[{self.project.account_id.code}] {self.project.name}", ) def test_project_display_name(self): + original_account = self.project.account_id self.assertEqual( self.project.display_name, - f"[{self.project.analytic_account_id.code}] {self.project.name}", + f"[{self.project.account_id.code}] {self.project.name}", ) - self.project.analytic_account_id = False + self.project.account_id = False self.assertEqual( self.project.display_name, f"{self.project.name}", ) + self.project.account_id = original_account diff --git a/project_analytic_code/views/project.xml b/project_analytic_code/views/project.xml index 63119b6802..e63d75d9c3 100644 --- a/project_analytic_code/views/project.xml +++ b/project_analytic_code/views/project.xml @@ -14,7 +14,7 @@