Move 124 sale modules to oca-sale, create oca-project with 56 project modules from oca-workflow-process

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ernad Husremovic 2025-08-30 18:04:10 +02:00
parent 9eb7ae5807
commit 6094c218b2
2332 changed files with 125826 additions and 0 deletions

View file

@ -0,0 +1,46 @@
# Task Description Portal
Odoo addon: project_task_description_portal
## Installation
```bash
pip install odoo-bringout-oca-project-project_task_description_portal
```
## Dependencies
This addon depends on:
- project
## Manifest Information
- **Name**: Task Description Portal
- **Version**: 16.0.1.0.0
- **Category**: Project
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/project](https://github.com/OCA/project) branch 16.0, addon `project_task_description_portal`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,32 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Project_task_description_portal Module - project_task_description_portal
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for project_task_description_portal. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,17 @@
# Controllers
HTTP routes provided by this module.
```mermaid
sequenceDiagram
participant U as User/Client
participant C as Module Controllers
participant O as ORM/Views
U->>C: HTTP GET/POST (routes)
C->>O: ORM operations, render templates
O-->>U: HTML/JSON/PDF
```
Notes
- See files in controllers/ for route definitions.

View file

@ -0,0 +1,5 @@
# Dependencies
This addon depends on:
- [project](https://github.com/bringout/oca-ocb-project/tree/5bbf7d0517a5706a48472bdf6a077a4467d11869/odoo-bringout-oca-ocb-project)

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon project_task_description_portal or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-project-project_task_description_portal"
# or
uv pip install odoo-bringout-oca-project-project_task_description_portal"
```

View file

@ -0,0 +1,12 @@
# Models
Detected core models and extensions in project_task_description_portal.
```mermaid
classDiagram
class project_task
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: project_task_description_portal. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon project_task_description_portal
- License: LGPL-3

View file

@ -0,0 +1,3 @@
# Reports
This module does not define custom reports.

View file

@ -0,0 +1,8 @@
# Security
This module does not define custom security rules or access controls beyond Odoo defaults.
Default Odoo security applies:
- Base user access through standard groups
- Model access inherited from dependencies
- No custom row-level security rules

View file

@ -0,0 +1,5 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon project_task_description_portal
```

View file

@ -0,0 +1,3 @@
# Wizards
This module does not include UI wizards.

View file

@ -0,0 +1,121 @@
=======================
Task Description Portal
=======================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:8c89809f0324a5c6116d06d31cf3592a29be5131d64b70e043f2a65e36df997a
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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 <https://github.com/OCA/project/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 <https://github.com/OCA/project/issues/new?body=module:%20project_task_description_portal%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
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 <https://github.com/OCA/project/tree/16.0/project_task_description_portal>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -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,
}

View file

@ -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

View file

@ -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 "Dodaj a description for portal users..."
#. 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 "Klijent"
#. module: project_task_description_portal
#: model:ir.model,name:project_task_description_portal.model_project_task
msgid "Task"
msgstr "Zadatak"
#. 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 "Use Portal Description"

View file

@ -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 <stefano.consolaro@mymage.it>\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"

View file

@ -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 ""

View file

@ -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 <peterromao@yahoo.co.uk>\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"

View file

@ -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",
)

View file

@ -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.

View file

@ -0,0 +1,3 @@
Cetmix <https://www.cetmix.com>
- Ivan Sokolov

View file

@ -0,0 +1 @@
This module allows to add a dedicated task description that will be shown to portal users.

View file

@ -0,0 +1,3 @@
TODO
Would be nice to have this feature working for projects shared in "Edit mode".

View file

@ -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)

View file

@ -0,0 +1,457 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Task Description Portal</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="task-description-portal">
<h1 class="title">Task Description Portal</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:8c89809f0324a5c6116d06d31cf3592a29be5131d64b70e043f2a65e36df997a
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/project/tree/16.0/project_task_description_portal"><img alt="OCA/project" src="https://img.shields.io/badge/github-OCA%2Fproject-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/project-16-0/project-16-0-project_task_description_portal"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/project&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module allows to add a dedicated task description that will be
shown to portal users.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#use-cases-context" id="toc-entry-1">Use Cases / Context</a></li>
<li><a class="reference internal" href="#configuration" id="toc-entry-2">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-3">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-4">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-5">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-6">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-7">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-8">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-9">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="use-cases-context">
<h1><a class="toc-backref" href="#toc-entry-1">Use Cases / Context</a></h1>
<p>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.</p>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-2">Configuration</a></h1>
<p>No configuration is required.</p>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-3">Usage</a></h1>
<p>On the task form enable the “Use Portal Description” checkbox located in
the “Description” tab of the notebook.</p>
<p><img alt="Use Portal Description" src="https://raw.githubusercontent.com/OCA/project/16.0/project_task_description_portal/static/description/img/use_portal_description.png" /></p>
<p>A new tab “Portal Description” will become visible. Put task description
that you would like to show to portal users in that tab.</p>
<p><img alt="Portal Description" src="https://raw.githubusercontent.com/OCA/project/16.0/project_task_description_portal/static/description/img/portal_description.png" /></p>
<p>If “Use Portal Description” is disabled standard task description will
be show to portal users as before.</p>
<p><img alt="Portal View" src="https://raw.githubusercontent.com/OCA/project/16.0/project_task_description_portal/static/description/img/portal_view.png" /></p>
</div>
<div class="section" id="known-issues-roadmap">
<h1><a class="toc-backref" href="#toc-entry-4">Known issues / Roadmap</a></h1>
<p>TODO</p>
<p>Would be nice to have this feature working for projects shared in “Edit
mode”.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-5">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/project/issues">GitHub Issues</a>.
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
<a class="reference external" href="https://github.com/OCA/project/issues/new?body=module:%20project_task_description_portal%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-6">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-7">Authors</a></h2>
<ul class="simple">
<li>Cetmix</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-8">Contributors</a></h2>
<p>Cetmix <a class="reference external" href="https://www.cetmix.com">https://www.cetmix.com</a></p>
<ul class="simple">
<li>Ivan Sokolov</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-9">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>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.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/project/tree/16.0/project_task_description_portal">OCA/project</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<template id="portal_my_task" inherit_id="project.portal_my_task" priority="100">
<xpath expr="//div[@t-field='task.description']" position="replace">
<t t-if="task.use_portal_description">
<div
class="py-1 px-2 bg-100 small table-responsive"
t-field="task.portal_description"
/>
</t>
<t t-else="">
<div
class="py-1 px-2 bg-100 small table-responsive"
t-field="task.description"
/>
</t>
</xpath>
</template>
</odoo>

View file

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_task_form2_inherit" model="ir.ui.view">
<field name="name">project.task.form.inherit.portal.description</field>
<field name="model">project.task</field>
<field name="inherit_id" ref="project.view_task_form2" />
<field name="arch" type="xml">
<xpath expr="//page[@name='description_page']" position="inside">
<group>
<field name="use_portal_description" />
</group>
</xpath>
<xpath expr="//page[@name='description_page']" position="after">
<page
string="Portal Description"
name="portal_description_page"
attrs="{'invisible': [('use_portal_description', '=', False)]}"
>
<field
name="portal_description"
placeholder="Add a description for portal users..."
/>
</page>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-project-project_task_description_portal"
version = "16.0.0"
description = "Task Description Portal - Dedicated task description for portal users"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-project>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["project_task_description_portal"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]