From daf4f87a1fae553b68d5425ce1e3838eafe2dadb Mon Sep 17 00:00:00 2001 From: Ivan Sokolov <2234999+ivs-cetmix@users.noreply.github.com> Date: Thu, 20 Feb 2025 00:45:00 +0100 Subject: [PATCH 1/9] [ADD] project_task_description_portal Show a dedicated task description for portal users. Why? ---- Sometimes you need to provide a separate task description for portal users. Eg original description contains some confidential information or is simply too technical for a client. --- project_task_description_portal/README.rst | 121 +++++ project_task_description_portal/__init__.py | 1 + .../__manifest__.py | 16 + .../controllers/__init__.py | 1 + .../controllers/portal.py | 12 + .../models/__init__.py | 1 + .../models/project_task.py | 17 + .../readme/CONFIGURE.md | 1 + .../readme/CONTEXT.md | 1 + .../readme/CONTRIBUTORS.md | 3 + .../readme/DESCRIPTION.md | 1 + .../readme/ROADMAP.md | 3 + .../readme/USAGE.md | 11 + .../static/description/icon.png | Bin 0 -> 10254 bytes .../description/img/portal_description.png | Bin 0 -> 12843 bytes .../static/description/img/portal_view.png | Bin 0 -> 27075 bytes .../img/use_portal_description.png | Bin 0 -> 13439 bytes .../static/description/index.html | 457 ++++++++++++++++++ .../views/project_portal_templates.xml | 19 + .../views/project_task_views.xml | 27 ++ 20 files changed, 692 insertions(+) create mode 100644 project_task_description_portal/README.rst create mode 100644 project_task_description_portal/__init__.py create mode 100644 project_task_description_portal/__manifest__.py create mode 100644 project_task_description_portal/controllers/__init__.py create mode 100644 project_task_description_portal/controllers/portal.py create mode 100644 project_task_description_portal/models/__init__.py create mode 100644 project_task_description_portal/models/project_task.py create mode 100644 project_task_description_portal/readme/CONFIGURE.md create mode 100644 project_task_description_portal/readme/CONTEXT.md create mode 100644 project_task_description_portal/readme/CONTRIBUTORS.md create mode 100644 project_task_description_portal/readme/DESCRIPTION.md create mode 100644 project_task_description_portal/readme/ROADMAP.md create mode 100644 project_task_description_portal/readme/USAGE.md create mode 100644 project_task_description_portal/static/description/icon.png create mode 100644 project_task_description_portal/static/description/img/portal_description.png create mode 100644 project_task_description_portal/static/description/img/portal_view.png create mode 100644 project_task_description_portal/static/description/img/use_portal_description.png create mode 100644 project_task_description_portal/static/description/index.html create mode 100644 project_task_description_portal/views/project_portal_templates.xml create mode 100644 project_task_description_portal/views/project_task_views.xml diff --git a/project_task_description_portal/README.rst b/project_task_description_portal/README.rst new file mode 100644 index 0000000000..fb23fe855a --- /dev/null +++ b/project_task_description_portal/README.rst @@ -0,0 +1,121 @@ +======================= +Task Description Portal +======================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:8f634a83c4656ed33b8a571951eca31268781ef8527fac611eb3c3fe97b37a73 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/16.0/project_task_description_portal + :alt: OCA/project +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/project-16-0/project-16-0-project_task_description_portal + :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=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to add a dedicated task description that will be +shown to portal users. + +**Table of contents** + +.. contents:: + :local: + +Use Cases / Context +=================== + +Sometimes you need to provide a separate task description for portal +users. Eg original description contains some confidential information or +is simply too technical for a client. + +Configuration +============= + +No configuration is required. + +Usage +===== + +On the task form enable the "Use Portal Description" checkbox located in +the "Description" tab of the notebook. + +|Use Portal Description| + +A new tab "Portal Description" will become visible. Put task description +that you would like to show to portal users in that tab. + +|Portal Description| + +If "Use Portal Description" is disabled standard task description will +be show to portal users as before. + +|Portal View| + +.. |Use Portal Description| image:: https://raw.githubusercontent.com/OCA/project/16.0/project_task_description_portal/static/description/img/use_portal_description.png +.. |Portal Description| image:: https://raw.githubusercontent.com/OCA/project/16.0/project_task_description_portal/static/description/img/portal_description.png +.. |Portal View| image:: https://raw.githubusercontent.com/OCA/project/16.0/project_task_description_portal/static/description/img/portal_view.png + +Known issues / Roadmap +====================== + +TODO + +Would be nice to have this feature working for projects shared in "Edit +mode". + +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 +------- + +* Cetmix + +Contributors +------------ + +Cetmix https://www.cetmix.com + +- Ivan Sokolov + +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_task_description_portal/__init__.py b/project_task_description_portal/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/project_task_description_portal/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/project_task_description_portal/__manifest__.py b/project_task_description_portal/__manifest__.py new file mode 100644 index 0000000000..a3f293229a --- /dev/null +++ b/project_task_description_portal/__manifest__.py @@ -0,0 +1,16 @@ +{ + "name": "Task Description Portal", + "summary": "Dedicated task description for portal users", + "version": "16.0.1.0.0", + "category": "Project", + "website": "https://github.com/OCA/project", + "author": "Cetmix, Odoo Community Association (OCA)", + "license": "AGPL-3", + "depends": ["project"], + "data": [ + "views/project_task_views.xml", + "views/project_portal_templates.xml", + ], + "installable": True, + "application": False, +} diff --git a/project_task_description_portal/controllers/__init__.py b/project_task_description_portal/controllers/__init__.py new file mode 100644 index 0000000000..8c3feb6f56 --- /dev/null +++ b/project_task_description_portal/controllers/__init__.py @@ -0,0 +1 @@ +from . import portal diff --git a/project_task_description_portal/controllers/portal.py b/project_task_description_portal/controllers/portal.py new file mode 100644 index 0000000000..3cf9660402 --- /dev/null +++ b/project_task_description_portal/controllers/portal.py @@ -0,0 +1,12 @@ +# Copyright (C) 2025 Cetmix OÜ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo.addons.project.controllers.portal import ProjectCustomerPortal + + +class ProjectCustomerPortalInherit(ProjectCustomerPortal): + def _task_get_page_view_values(self, task, access_token, **kwargs): + """Override to return portal description if enabled.""" + values = super()._task_get_page_view_values(task, access_token, **kwargs) + if task.use_portal_description: + values["description"] = task.portal_description + return values diff --git a/project_task_description_portal/models/__init__.py b/project_task_description_portal/models/__init__.py new file mode 100644 index 0000000000..edf2d36b9c --- /dev/null +++ b/project_task_description_portal/models/__init__.py @@ -0,0 +1 @@ +from . import project_task diff --git a/project_task_description_portal/models/project_task.py b/project_task_description_portal/models/project_task.py new file mode 100644 index 0000000000..d32a8df4cb --- /dev/null +++ b/project_task_description_portal/models/project_task.py @@ -0,0 +1,17 @@ +# Copyright (C) 2025 Cetmix OÜ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class ProjectTask(models.Model): + _inherit = "project.task" + + use_portal_description = fields.Boolean( + help="If enabled, portal users will see the portal description" + " instead of the standard one", + ) + portal_description = fields.Html( + sanitize_attributes=False, + help="Description that will be shown to portal users if " + "'Use Portal Description' is enabled", + ) diff --git a/project_task_description_portal/readme/CONFIGURE.md b/project_task_description_portal/readme/CONFIGURE.md new file mode 100644 index 0000000000..cd5aaa25c8 --- /dev/null +++ b/project_task_description_portal/readme/CONFIGURE.md @@ -0,0 +1 @@ +No configuration is required. \ No newline at end of file diff --git a/project_task_description_portal/readme/CONTEXT.md b/project_task_description_portal/readme/CONTEXT.md new file mode 100644 index 0000000000..bcc0707055 --- /dev/null +++ b/project_task_description_portal/readme/CONTEXT.md @@ -0,0 +1 @@ +Sometimes you need to provide a separate task description for portal users. Eg original description contains some confidential information or is simply too technical for a client. \ No newline at end of file diff --git a/project_task_description_portal/readme/CONTRIBUTORS.md b/project_task_description_portal/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..55064661ae --- /dev/null +++ b/project_task_description_portal/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +Cetmix + +- Ivan Sokolov \ No newline at end of file diff --git a/project_task_description_portal/readme/DESCRIPTION.md b/project_task_description_portal/readme/DESCRIPTION.md new file mode 100644 index 0000000000..cc7ddc5c50 --- /dev/null +++ b/project_task_description_portal/readme/DESCRIPTION.md @@ -0,0 +1 @@ +This module allows to add a dedicated task description that will be shown to portal users. \ No newline at end of file diff --git a/project_task_description_portal/readme/ROADMAP.md b/project_task_description_portal/readme/ROADMAP.md new file mode 100644 index 0000000000..26d9cc8a6f --- /dev/null +++ b/project_task_description_portal/readme/ROADMAP.md @@ -0,0 +1,3 @@ +TODO + +Would be nice to have this feature working for projects shared in "Edit mode". \ No newline at end of file diff --git a/project_task_description_portal/readme/USAGE.md b/project_task_description_portal/readme/USAGE.md new file mode 100644 index 0000000000..5ef211f436 --- /dev/null +++ b/project_task_description_portal/readme/USAGE.md @@ -0,0 +1,11 @@ +On the task form enable the "Use Portal Description" checkbox located in the "Description" tab of the notebook. + +![Use Portal Description](../static/description/img/use_portal_description.png) + +A new tab "Portal Description" will become visible. Put task description that you would like to show to portal users in that tab. + +![Portal Description](../static/description/img/portal_description.png) + +If "Use Portal Description" is disabled standard task description will be show to portal users as before. + +![Portal View](../static/description/img/portal_view.png) \ No newline at end of file diff --git a/project_task_description_portal/static/description/icon.png b/project_task_description_portal/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcc49c24f364e9adf0afbc6fc0bac6dbecdeb11 GIT binary patch literal 10254 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 Y?9Vrw4$;&v|5ySj%Bjj$OPdA#4>3RY1^@s6 literal 0 HcmV?d00001 diff --git a/project_task_description_portal/static/description/img/use_portal_description.png b/project_task_description_portal/static/description/img/use_portal_description.png new file mode 100644 index 0000000000000000000000000000000000000000..420a1700d993b4bbecc239f198f911e72254b333 GIT binary patch literal 13439 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≫A2S~ULi0Oqmk5i`gNyYPpV#Y;@yV_ z@a)ciA0t4RMY{5SE6tk{c>=TgNhQJBv?x1VB82!g>baRyp(xE4K!1DpjlYt!Hm?Xc zgIBT-OD`~eKK0SjNj|`_OZ=@x3 z!I}hGyuvC2aS!wJb{Yfe8e1hFqyPc6CQ==!IF0>f@*chY1HrC!3I zN0nPZxONye1{FRQuGh*5fO>C5$3T%kK7dG%Ru{fFg` iF>G!l;Vf3Pue;>TtoewU1s{JD0;nix$d}2Q1pN;~LV-yD literal 0 HcmV?d00001 diff --git a/project_task_description_portal/static/description/index.html b/project_task_description_portal/static/description/index.html new file mode 100644 index 0000000000..1343326ebc --- /dev/null +++ b/project_task_description_portal/static/description/index.html @@ -0,0 +1,457 @@ + + + + + +Task Description Portal + + + +
+

Task Description Portal

+ + +

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

+

This module allows to add a dedicated task description that will be +shown to portal users.

+

Table of contents

+ +
+

Use Cases / Context

+

Sometimes you need to provide a separate task description for portal +users. Eg original description contains some confidential information or +is simply too technical for a client.

+
+
+

Configuration

+

No configuration is required.

+
+
+

Usage

+

On the task form enable the “Use Portal Description” checkbox located in +the “Description” tab of the notebook.

+

Use Portal Description

+

A new tab “Portal Description” will become visible. Put task description +that you would like to show to portal users in that tab.

+

Portal Description

+

If “Use Portal Description” is disabled standard task description will +be show to portal users as before.

+

Portal View

+
+
+

Known issues / Roadmap

+

TODO

+

Would be nice to have this feature working for projects shared in “Edit +mode”.

+
+
+

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

+
    +
  • Cetmix
  • +
+
+
+

Contributors

+

Cetmix https://www.cetmix.com

+
    +
  • Ivan Sokolov
  • +
+
+
+

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.

+
+
+
+ + diff --git a/project_task_description_portal/views/project_portal_templates.xml b/project_task_description_portal/views/project_portal_templates.xml new file mode 100644 index 0000000000..06c2235090 --- /dev/null +++ b/project_task_description_portal/views/project_portal_templates.xml @@ -0,0 +1,19 @@ + + + + diff --git a/project_task_description_portal/views/project_task_views.xml b/project_task_description_portal/views/project_task_views.xml new file mode 100644 index 0000000000..f87e03424a --- /dev/null +++ b/project_task_description_portal/views/project_task_views.xml @@ -0,0 +1,27 @@ + + + + project.task.form.inherit.portal.description + project.task + + + + + + + + + + + + + + + From 4760ed4bdbf80e0b1ab31ea2b06bf71831dcb0cc Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 5 Mar 2025 12:40:40 +0000 Subject: [PATCH 2/9] [UPD] Update project_task_description_portal.pot --- project_task_description_portal/README.rst | 2 +- .../i18n/project_task_description_portal.pot | 49 +++++++++++++++++++ .../static/description/index.html | 2 +- 3 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 project_task_description_portal/i18n/project_task_description_portal.pot diff --git a/project_task_description_portal/README.rst b/project_task_description_portal/README.rst index fb23fe855a..0623b02864 100644 --- a/project_task_description_portal/README.rst +++ b/project_task_description_portal/README.rst @@ -7,7 +7,7 @@ Task Description Portal !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:8f634a83c4656ed33b8a571951eca31268781ef8527fac611eb3c3fe97b37a73 + !! source digest: sha256:8c89809f0324a5c6116d06d31cf3592a29be5131d64b70e043f2a65e36df997a !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/project_task_description_portal/i18n/project_task_description_portal.pot b/project_task_description_portal/i18n/project_task_description_portal.pot new file mode 100644 index 0000000000..ea83019118 --- /dev/null +++ b/project_task_description_portal/i18n/project_task_description_portal.pot @@ -0,0 +1,49 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * project_task_description_portal +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.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_task_description_portal +#: model_terms:ir.ui.view,arch_db:project_task_description_portal.view_task_form2_inherit +msgid "Add a description for portal users..." +msgstr "" + +#. module: project_task_description_portal +#: model:ir.model.fields,help:project_task_description_portal.field_project_task__portal_description +msgid "" +"Description that will be shown to portal users if 'Use Portal Description' " +"is enabled" +msgstr "" + +#. module: project_task_description_portal +#: model:ir.model.fields,help:project_task_description_portal.field_project_task__use_portal_description +msgid "" +"If enabled, portal users will see the portal description instead of the " +"standard one" +msgstr "" + +#. module: project_task_description_portal +#: model:ir.model.fields,field_description:project_task_description_portal.field_project_task__portal_description +#: model_terms:ir.ui.view,arch_db:project_task_description_portal.view_task_form2_inherit +msgid "Portal Description" +msgstr "" + +#. module: project_task_description_portal +#: model:ir.model,name:project_task_description_portal.model_project_task +msgid "Task" +msgstr "" + +#. module: project_task_description_portal +#: model:ir.model.fields,field_description:project_task_description_portal.field_project_task__use_portal_description +msgid "Use Portal Description" +msgstr "" diff --git a/project_task_description_portal/static/description/index.html b/project_task_description_portal/static/description/index.html index 1343326ebc..a06a6f280a 100644 --- a/project_task_description_portal/static/description/index.html +++ b/project_task_description_portal/static/description/index.html @@ -367,7 +367,7 @@

Task Description Portal

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

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

This module allows to add a dedicated task description that will be From c15a59d67298905b032fb2f55ec429738fb0dffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20Rom=C3=A3o?= Date: Mon, 17 Mar 2025 18:03:35 +0000 Subject: [PATCH 3/9] Translated using Weblate (Portuguese) Currently translated at 100.0% (6 of 6 strings) Translation: project-16.0/project-16.0-project_task_description_portal Translate-URL: https://translation.odoo-community.org/projects/project-16-0/project-16-0-project_task_description_portal/pt/ --- project_task_description_portal/i18n/pt.po | 56 ++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 project_task_description_portal/i18n/pt.po diff --git a/project_task_description_portal/i18n/pt.po b/project_task_description_portal/i18n/pt.po new file mode 100644 index 0000000000..352f1b99f7 --- /dev/null +++ b/project_task_description_portal/i18n/pt.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * project_task_description_portal +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-03-17 18:07+0000\n" +"Last-Translator: Peter Romão \n" +"Language-Team: none\n" +"Language: pt\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.2\n" + +#. module: project_task_description_portal +#: model_terms:ir.ui.view,arch_db:project_task_description_portal.view_task_form2_inherit +msgid "Add a description for portal users..." +msgstr "Adicionar uma descrição para utilizadores de portal..." + +#. module: project_task_description_portal +#: model:ir.model.fields,help:project_task_description_portal.field_project_task__portal_description +msgid "" +"Description that will be shown to portal users if 'Use Portal Description' " +"is enabled" +msgstr "" +"Descrição que será exibida aos utilizadores de portal caso 'Utilizar " +"Descrição de Portal' esteja habilitado" + +#. module: project_task_description_portal +#: model:ir.model.fields,help:project_task_description_portal.field_project_task__use_portal_description +msgid "" +"If enabled, portal users will see the portal description instead of the " +"standard one" +msgstr "" +"Se ativado, os utilizadores de portal verão a descrição para portal em vez " +"da padrão" + +#. module: project_task_description_portal +#: model:ir.model.fields,field_description:project_task_description_portal.field_project_task__portal_description +#: model_terms:ir.ui.view,arch_db:project_task_description_portal.view_task_form2_inherit +msgid "Portal Description" +msgstr "Descrição de Portal" + +#. module: project_task_description_portal +#: model:ir.model,name:project_task_description_portal.model_project_task +msgid "Task" +msgstr "Tarefa" + +#. module: project_task_description_portal +#: model:ir.model.fields,field_description:project_task_description_portal.field_project_task__use_portal_description +msgid "Use Portal Description" +msgstr "Utilizar Descrição de Portal" From a4721e84dd60f7ce0f63bcb805f59190404bb503 Mon Sep 17 00:00:00 2001 From: mymage Date: Tue, 18 Mar 2025 16:37:07 +0000 Subject: [PATCH 4/9] Translated using Weblate (Italian) Currently translated at 100.0% (6 of 6 strings) Translation: project-16.0/project-16.0-project_task_description_portal Translate-URL: https://translation.odoo-community.org/projects/project-16-0/project-16-0-project_task_description_portal/it/ --- project_task_description_portal/i18n/it.po | 56 ++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 project_task_description_portal/i18n/it.po diff --git a/project_task_description_portal/i18n/it.po b/project_task_description_portal/i18n/it.po new file mode 100644 index 0000000000..fa976c1b21 --- /dev/null +++ b/project_task_description_portal/i18n/it.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * project_task_description_portal +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-03-18 19:06+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.2\n" + +#. module: project_task_description_portal +#: model_terms:ir.ui.view,arch_db:project_task_description_portal.view_task_form2_inherit +msgid "Add a description for portal users..." +msgstr "Aggiungi una descrizione per utenti portale..." + +#. module: project_task_description_portal +#: model:ir.model.fields,help:project_task_description_portal.field_project_task__portal_description +msgid "" +"Description that will be shown to portal users if 'Use Portal Description' " +"is enabled" +msgstr "" +"Descrizione che verrà visualizzata dagli utenti portale se 'Usa descrizione " +"portale' è abilitata" + +#. module: project_task_description_portal +#: model:ir.model.fields,help:project_task_description_portal.field_project_task__use_portal_description +msgid "" +"If enabled, portal users will see the portal description instead of the " +"standard one" +msgstr "" +"Se abilitata, gli utenti portale vedranno la descrizione portale al posto di " +"quella standard" + +#. module: project_task_description_portal +#: model:ir.model.fields,field_description:project_task_description_portal.field_project_task__portal_description +#: model_terms:ir.ui.view,arch_db:project_task_description_portal.view_task_form2_inherit +msgid "Portal Description" +msgstr "Descrizione portale" + +#. module: project_task_description_portal +#: model:ir.model,name:project_task_description_portal.model_project_task +msgid "Task" +msgstr "Lavoro" + +#. module: project_task_description_portal +#: model:ir.model.fields,field_description:project_task_description_portal.field_project_task__use_portal_description +msgid "Use Portal Description" +msgstr "Usa descrizione portale" From 279faaabb5fd10b201aa253510a3bb991fffda3e Mon Sep 17 00:00:00 2001 From: Mohajiro Date: Mon, 5 Jan 2026 13:52:13 +0100 Subject: [PATCH 5/9] [IMP] project_task_description_portal: pre-commit execution --- project_task_description_portal/pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 project_task_description_portal/pyproject.toml diff --git a/project_task_description_portal/pyproject.toml b/project_task_description_portal/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/project_task_description_portal/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" From c82248360bb70692f6ec1e903569865f22946fcf Mon Sep 17 00:00:00 2001 From: Mohajiro Date: Mon, 5 Jan 2026 13:52:13 +0100 Subject: [PATCH 6/9] [MIG] project_task_description_portal: Migration to 18.0 --- project_task_description_portal/README.rst | 16 ++++++++-------- project_task_description_portal/__manifest__.py | 2 +- .../static/description/index.html | 12 ++++++------ .../views/project_task_views.xml | 7 +++++-- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/project_task_description_portal/README.rst b/project_task_description_portal/README.rst index 0623b02864..4cae653af5 100644 --- a/project_task_description_portal/README.rst +++ b/project_task_description_portal/README.rst @@ -17,13 +17,13 @@ Task Description Portal :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/16.0/project_task_description_portal + :target: https://github.com/OCA/project/tree/18.0/project_task_description_portal :alt: OCA/project .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/project-16-0/project-16-0-project_task_description_portal + :target: https://translation.odoo-community.org/projects/project-18-0/project-18-0-project_task_description_portal :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=16.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| @@ -66,9 +66,9 @@ be show to portal users as before. |Portal View| -.. |Use Portal Description| image:: https://raw.githubusercontent.com/OCA/project/16.0/project_task_description_portal/static/description/img/use_portal_description.png -.. |Portal Description| image:: https://raw.githubusercontent.com/OCA/project/16.0/project_task_description_portal/static/description/img/portal_description.png -.. |Portal View| image:: https://raw.githubusercontent.com/OCA/project/16.0/project_task_description_portal/static/description/img/portal_view.png +.. |Use Portal Description| image:: https://raw.githubusercontent.com/OCA/project/18.0/project_task_description_portal/static/description/img/use_portal_description.png +.. |Portal Description| image:: https://raw.githubusercontent.com/OCA/project/18.0/project_task_description_portal/static/description/img/portal_description.png +.. |Portal View| image:: https://raw.githubusercontent.com/OCA/project/18.0/project_task_description_portal/static/description/img/portal_view.png Known issues / Roadmap ====================== @@ -84,7 +84,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. @@ -116,6 +116,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_task_description_portal/__manifest__.py b/project_task_description_portal/__manifest__.py index a3f293229a..6f422a8cec 100644 --- a/project_task_description_portal/__manifest__.py +++ b/project_task_description_portal/__manifest__.py @@ -1,7 +1,7 @@ { "name": "Task Description Portal", "summary": "Dedicated task description for portal users", - "version": "16.0.1.0.0", + "version": "18.0.1.0.0", "category": "Project", "website": "https://github.com/OCA/project", "author": "Cetmix, Odoo Community Association (OCA)", diff --git a/project_task_description_portal/static/description/index.html b/project_task_description_portal/static/description/index.html index a06a6f280a..d1ea211a7d 100644 --- a/project_task_description_portal/static/description/index.html +++ b/project_task_description_portal/static/description/index.html @@ -369,7 +369,7 @@

Task Description Portal

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:8c89809f0324a5c6116d06d31cf3592a29be5131d64b70e043f2a65e36df997a !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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 allows to add a dedicated task description that will be shown to portal users.

Table of contents

@@ -402,13 +402,13 @@

Configuration

Usage

On the task form enable the “Use Portal Description” checkbox located in the “Description” tab of the notebook.

-

Use Portal Description

+

Use Portal Description

A new tab “Portal Description” will become visible. Put task description that you would like to show to portal users in that tab.

-

Portal Description

+

Portal Description

If “Use Portal Description” is disabled standard task description will be show to portal users as before.

-

Portal View

+

Portal View

Known issues / Roadmap

@@ -421,7 +421,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.

@@ -448,7 +448,7 @@

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_task_description_portal/views/project_task_views.xml b/project_task_description_portal/views/project_task_views.xml index f87e03424a..23ea4b9c13 100644 --- a/project_task_description_portal/views/project_task_views.xml +++ b/project_task_description_portal/views/project_task_views.xml @@ -1,7 +1,9 @@ - project.task.form.inherit.portal.description + + project.task.form.inherit.portal.description + project.task @@ -10,11 +12,12 @@ + Date: Tue, 13 Jan 2026 10:12:28 +0000 Subject: [PATCH 7/9] [UPD] Update project_task_description_portal.pot --- .../i18n/project_task_description_portal.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project_task_description_portal/i18n/project_task_description_portal.pot b/project_task_description_portal/i18n/project_task_description_portal.pot index ea83019118..f407f0e579 100644 --- a/project_task_description_portal/i18n/project_task_description_portal.pot +++ b/project_task_description_portal/i18n/project_task_description_portal.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" +"Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" From 08d0519dfd8c0967866a2511b21b71786304b753 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 13 Jan 2026 10:17:55 +0000 Subject: [PATCH 8/9] [BOT] post-merge updates --- project_task_description_portal/README.rst | 8 +++-- .../static/description/index.html | 34 +++++++++++-------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/project_task_description_portal/README.rst b/project_task_description_portal/README.rst index 4cae653af5..b7f1c70f82 100644 --- a/project_task_description_portal/README.rst +++ b/project_task_description_portal/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 + ======================= Task Description Portal ======================= @@ -7,13 +11,13 @@ Task Description Portal !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:8c89809f0324a5c6116d06d31cf3592a29be5131d64b70e043f2a65e36df997a + !! source digest: sha256:55e80ba6201112a988c371689ef7571f36368b8993001e9ec73a0a7afbece80b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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_task_description_portal/static/description/index.html b/project_task_description_portal/static/description/index.html index d1ea211a7d..a397127679 100644 --- a/project_task_description_portal/static/description/index.html +++ b/project_task_description_portal/static/description/index.html @@ -3,7 +3,7 @@ -Task Description Portal +README.rst -
-

Task Description Portal

+
+ + +Odoo Community Association + +
+

Task Description Portal

-

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 allows to add a dedicated task description that will be shown to portal users.

Table of contents

@@ -389,17 +394,17 @@

Task Description Portal

-

Use Cases / Context

+

Use Cases / Context

Sometimes you need to provide a separate task description for portal users. Eg original description contains some confidential information or is simply too technical for a client.

-

Configuration

+

Configuration

No configuration is required.

-

Usage

+

Usage

On the task form enable the “Use Portal Description” checkbox located in the “Description” tab of the notebook.

Use Portal Description

@@ -411,13 +416,13 @@

Usage

Portal View

-

Known issues / Roadmap

+

Known issues / Roadmap

TODO

Would be nice to have this feature working for projects shared in “Edit mode”.

-

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 @@ -425,22 +430,22 @@

Bug Tracker

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

+
From 9145efa9142375823f2994a38bae3cbf3f21b7b2 Mon Sep 17 00:00:00 2001 From: uncannycs Date: Wed, 17 Jun 2026 18:27:18 +0530 Subject: [PATCH 9/9] [19.0] [MIG] project_task_description_portal : Migration to 19.0. --- project_task_description_portal/README.rst | 16 ++++++++-------- project_task_description_portal/__manifest__.py | 2 +- .../static/description/index.html | 12 ++++++------ 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/project_task_description_portal/README.rst b/project_task_description_portal/README.rst index b7f1c70f82..2a4f8157d8 100644 --- a/project_task_description_portal/README.rst +++ b/project_task_description_portal/README.rst @@ -21,13 +21,13 @@ Task Description Portal :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/18.0/project_task_description_portal + :target: https://github.com/OCA/project/tree/19.0/project_task_description_portal :alt: OCA/project .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/project-18-0/project-18-0-project_task_description_portal + :target: https://translation.odoo-community.org/projects/project-19-0/project-19-0-project_task_description_portal :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=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/project&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -70,9 +70,9 @@ be show to portal users as before. |Portal View| -.. |Use Portal Description| image:: https://raw.githubusercontent.com/OCA/project/18.0/project_task_description_portal/static/description/img/use_portal_description.png -.. |Portal Description| image:: https://raw.githubusercontent.com/OCA/project/18.0/project_task_description_portal/static/description/img/portal_description.png -.. |Portal View| image:: https://raw.githubusercontent.com/OCA/project/18.0/project_task_description_portal/static/description/img/portal_view.png +.. |Use Portal Description| image:: https://raw.githubusercontent.com/OCA/project/19.0/project_task_description_portal/static/description/img/use_portal_description.png +.. |Portal Description| image:: https://raw.githubusercontent.com/OCA/project/19.0/project_task_description_portal/static/description/img/portal_description.png +.. |Portal View| image:: https://raw.githubusercontent.com/OCA/project/19.0/project_task_description_portal/static/description/img/portal_view.png Known issues / Roadmap ====================== @@ -88,7 +88,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. @@ -120,6 +120,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_task_description_portal/__manifest__.py b/project_task_description_portal/__manifest__.py index 6f422a8cec..b45e193720 100644 --- a/project_task_description_portal/__manifest__.py +++ b/project_task_description_portal/__manifest__.py @@ -1,7 +1,7 @@ { "name": "Task Description Portal", "summary": "Dedicated task description for portal users", - "version": "18.0.1.0.0", + "version": "19.0.1.0.0", "category": "Project", "website": "https://github.com/OCA/project", "author": "Cetmix, Odoo Community Association (OCA)", diff --git a/project_task_description_portal/static/description/index.html b/project_task_description_portal/static/description/index.html index a397127679..833c4c0bf0 100644 --- a/project_task_description_portal/static/description/index.html +++ b/project_task_description_portal/static/description/index.html @@ -374,7 +374,7 @@

Task Description Portal

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:55e80ba6201112a988c371689ef7571f36368b8993001e9ec73a0a7afbece80b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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 allows to add a dedicated task description that will be shown to portal users.

Table of contents

@@ -407,13 +407,13 @@

Configuration

Usage

On the task form enable the “Use Portal Description” checkbox located in the “Description” tab of the notebook.

-

Use Portal Description

+

Use Portal Description

A new tab “Portal Description” will become visible. Put task description that you would like to show to portal users in that tab.

-

Portal Description

+

Portal Description

If “Use Portal Description” is disabled standard task description will be show to portal users as before.

-

Portal View

+

Portal View

Known issues / Roadmap

@@ -426,7 +426,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.

@@ -453,7 +453,7 @@

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.