Compare commits

...

79 Commits

Author SHA1 Message Date
Bhavesh Heliconia
97c9a7d603
Merge ad11afc643 into 984f899d9f 2025-07-10 16:35:46 +05:30
OCA-git-bot
984f899d9f [BOT] post-merge updates 2025-07-08 10:25:21 +00:00
oca-ci
87e591294d [UPD] Update document_page_reference.pot 2025-07-08 10:23:22 +00:00
OCA-git-bot
3b6e9e6a71 Merge PR #550 into 18.0
Signed-off-by pedrobaeza
2025-07-08 10:21:31 +00:00
Anusha
7307e198ba [MIG] document_page_reference: Migration to 18.0
[FIX]document_page_reference :log warning updated

[FIX]document_page_reference: null value issue fixed
2025-07-02 06:53:04 +02:00
OCA-git-bot
86616a0294 [BOT] post-merge updates 2025-06-30 16:31:08 +00:00
oca-ci
0d65f39a4d [UPD] Update document_page_access_group_user_role.pot 2025-06-30 16:29:07 +00:00
OCA-git-bot
7db4204097 Merge PR #543 into 18.0
Signed-off-by pedrobaeza
2025-06-30 16:27:19 +00:00
Anusha
f60acf8308 [IMP] document_page_reference: pre-commit auto fixes 2025-06-13 18:03:34 +02:00
Peter Romão
d8b5673f4f Translated using Weblate (Portuguese)
Currently translated at 100.0% (7 of 7 strings)

Translation: knowledge-16.0/knowledge-16.0-document_page_reference
Translate-URL: https://translation.odoo-community.org/projects/knowledge-16-0/knowledge-16-0-document_page_reference/pt/
2025-06-13 18:02:52 +02:00
Peter Romão
464da8391b Added translation using Weblate (Portuguese) 2025-06-13 18:02:52 +02:00
OCA-git-bot
9ee2f7ac95 [BOT] post-merge updates 2025-06-13 18:02:52 +02:00
Ivan Sokolov
245c2d2c2d Updated from template 2025-06-13 18:02:52 +02:00
Ivorra78
caff15dac9 Translated using Weblate (Spanish)
Currently translated at 100.0% (7 of 7 strings)

Translation: knowledge-16.0/knowledge-16.0-document_page_reference
Translate-URL: https://translation.odoo-community.org/projects/knowledge-16-0/knowledge-16-0-document_page_reference/es/
2025-06-13 18:02:52 +02:00
Ivorra78
234802ec04 Added translation using Weblate (Spanish) 2025-06-13 18:02:52 +02:00
Weblate
3ce91b1b05 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: knowledge-16.0/knowledge-16.0-document_page_reference
Translate-URL: https://translation.odoo-community.org/projects/knowledge-16-0/knowledge-16-0-document_page_reference/
2025-06-13 18:02:52 +02:00
OCA-git-bot
f2bdde5a7a [UPD] README.rst 2025-06-13 18:02:52 +02:00
oca-ci
d9c2ae33ca [UPD] Update document_page_reference.pot 2025-06-13 18:02:52 +02:00
kaynnan
d06943d840 [MIG] document_page_reference: Migration to 16.0 2025-06-13 18:02:52 +02:00
mymage
4c520955f2 Translated using Weblate (Italian)
Currently translated at 100.0% (7 of 7 strings)

Translation: knowledge-15.0/knowledge-15.0-document_page_reference
Translate-URL: https://translation.odoo-community.org/projects/knowledge-15-0/knowledge-15-0-document_page_reference/it/
2025-06-13 18:02:52 +02:00
OCA-git-bot
c46832e680 document_page_reference 15.0.1.1.0 2025-06-13 18:02:52 +02:00
mymage
d4ffd19e06 Translated using Weblate (Italian)
Currently translated at 100.0% (7 of 7 strings)

Translation: knowledge-15.0/knowledge-15.0-document_page_reference
Translate-URL: https://translation.odoo-community.org/projects/knowledge-15-0/knowledge-15-0-document_page_reference/it/
2025-06-13 18:02:52 +02:00
mymage
62ce5be322 Translated using Weblate (Italian)
Currently translated at 100.0% (7 of 7 strings)

Translation: knowledge-15.0/knowledge-15.0-document_page_reference
Translate-URL: https://translation.odoo-community.org/projects/knowledge-15-0/knowledge-15-0-document_page_reference/it/
2025-06-13 18:02:52 +02:00
mymage
7aa0e62107 Added translation using Weblate (Italian) 2025-06-13 18:02:52 +02:00
OCA-git-bot
8cb956efb9 document_page_reference 15.0.1.0.1 2025-06-13 18:02:52 +02:00
oca-ci
88aca108e3 [UPD] Update document_page_reference.pot 2025-06-13 18:02:52 +02:00
Lois Rilo
9eb3d42dad [IMP] document_page_reference: auto-fill reference when not supplied.
also, make reference optional in tree view and not the first field.
2025-06-13 18:02:52 +02:00
Miquel Raïch
8cef3f268b [FIX] document_page_reference: assure content or content_parsed is visible 2025-06-13 18:02:52 +02:00
OCA-git-bot
191b41a391 [UPD] README.rst 2025-06-13 18:02:52 +02:00
oca-ci
a4ff4e718a [UPD] Update document_page_reference.pot 2025-06-13 18:02:52 +02:00
Olga Marco
053b463336 [MIG] document_page_reference: Migration to 15.0 2025-06-13 18:02:52 +02:00
oca-git-bot
85a3e86d2d [IMP] update dotfiles 2025-06-13 18:02:52 +02:00
Michael Telahun
24aab48b0e [MIG] document_page_reference: Migrate to 14.0
[UPD] Update document_page_reference.pot

[UPD] README.rst
2025-06-13 18:02:52 +02:00
Michael Telahun
9df259a2a7 [IMP] document_page_reference: black, isort, prettier 2025-06-13 18:02:52 +02:00
Jaime Arroyo
4a23974391 [13.0][MIG] document_page_reference 2025-06-13 18:02:52 +02:00
Jaime Arroyo
3e22a1ea44 [IMP] document_page_reference: black, isort, prettier 2025-06-13 18:02:52 +02:00
Jaime Arroyo
e242bef1f1 [12.0][MIG] document_page_reference 2025-06-13 18:02:52 +02:00
Jordi Ballester Alomar
51ddc0a45b [IMP] document_page_reference: add option to create a new page from a non-existing reference 2025-06-13 18:02:52 +02:00
Enric Tobella
958c70d670 [ADD] document_page_reference 2025-06-13 18:02:52 +02:00
Bhavesh Heliconia
ad11afc643 [MIG] document_page_project: Migration to 18.0 2025-05-09 15:25:16 +05:30
Luis Rodriguez
36d183e5ce [MIG] document_page_project: Migration to 17.0 2025-05-09 15:25:16 +05:30
Luis Rodriguez
b523293f1f [IMP] document_page_project: pre-commit auto fixes 2025-05-09 15:25:16 +05:30
Peter Romão
ce4b6880d7 Translated using Weblate (Portuguese)
Currently translated at 100.0% (8 of 8 strings)

Translation: knowledge-16.0/knowledge-16.0-document_page_project
Translate-URL: https://translation.odoo-community.org/projects/knowledge-16-0/knowledge-16-0-document_page_project/pt/
2025-05-09 15:25:16 +05:30
Peter Romão
a2c99235b0 Added translation using Weblate (Portuguese) 2025-05-09 15:25:16 +05:30
ntsirintanis
b753ba6acf [MIG] document_page_project: Migration to 16.0 2025-05-09 15:25:16 +05:30
ntsirintanis
24915fe03d [IMP] document_page_project: pre-commit stuff 2025-05-09 15:25:16 +05:30
Ivorra78
1beff36c76 Translated using Weblate (Spanish)
Currently translated at 100.0% (8 of 8 strings)

Translation: knowledge-15.0/knowledge-15.0-document_page_project
Translate-URL: https://translation.odoo-community.org/projects/knowledge-15-0/knowledge-15-0-document_page_project/es/
2025-05-09 15:25:16 +05:30
mymage
0010e575ba Translated using Weblate (Italian)
Currently translated at 100.0% (8 of 8 strings)

Translation: knowledge-15.0/knowledge-15.0-document_page_project
Translate-URL: https://translation.odoo-community.org/projects/knowledge-15-0/knowledge-15-0-document_page_project/it/
2025-05-09 15:25:16 +05:30
mymage
b6ba3f1f4c Added translation using Weblate (Italian) 2025-05-09 15:25:16 +05:30
Jasmin Solanki
1fbb68252c [MIG] document_page_project: Migration to 15.0 2025-05-09 15:25:16 +05:30
Michael Telahun
54e5467957 [MIG] document_page_project: Migration to 14.0 2025-05-09 15:25:16 +05:30
Michael Telahun
dad3d3b78b [IMP] document_page_project: black, isort, prettier 2025-05-09 15:25:16 +05:30
Ana Suárez
2b6b295cb0 Translated using Weblate (Spanish)
Currently translated at 87.5% (7 of 8 strings)

Translation: knowledge-13.0/knowledge-13.0-document_page_project
Translate-URL: https://translation.odoo-community.org/projects/knowledge-13-0/knowledge-13-0-document_page_project/es/
2025-05-09 15:25:16 +05:30
Ana Suárez
c1191d2ea0 Added translation using Weblate (Spanish) 2025-05-09 15:25:16 +05:30
Yves Goldberg
329a885301 Translated using Weblate (Hebrew)
Currently translated at 87.5% (7 of 8 strings)

Translation: knowledge-13.0/knowledge-13.0-document_page_project
Translate-URL: https://translation.odoo-community.org/projects/knowledge-13-0/knowledge-13-0-document_page_project/he_IL/
2025-05-09 15:25:16 +05:30
Yves Goldberg
a72bda0041 Translated using Weblate (Hebrew)
Currently translated at 87.5% (7 of 8 strings)

Translation: knowledge-13.0/knowledge-13.0-document_page_project
Translate-URL: https://translation.odoo-community.org/projects/knowledge-13-0/knowledge-13-0-document_page_project/he_IL/
2025-05-09 15:25:16 +05:30
Yves Goldberg
ffc64294b7 Added translation using Weblate (Hebrew) 2025-05-09 15:25:16 +05:30
Joan Sisquella
6da1be24e8 [MIG] document_page_project: Migration to 13.0 2025-05-09 15:25:16 +05:30
Joan Sisquella
120ee8a7f5 [IMP] document_page_project: black, isort 2025-05-09 15:25:16 +05:30
Bole
e275593f5c Translated using Weblate (Croatian)
Currently translated at 100.0% (8 of 8 strings)

Translation: knowledge-12.0/knowledge-12.0-document_page_project
Translate-URL: https://translation.odoo-community.org/projects/knowledge-12-0/knowledge-12-0-document_page_project/hr/
2025-05-09 15:25:16 +05:30
Bole
dd06591f54 Added translation using Weblate (Croatian) 2025-05-09 15:25:16 +05:30
mreficent
ce8286bf0c [MIG] document_page_project: Migration to 12.0 2025-05-09 15:25:16 +05:30
mreficent
1768a4b13f [FIX] pylint/javascript-lint 2025-05-09 15:25:16 +05:30
Lois Rilo
7742c09195 [11.0][ADD] document_page_project 2025-05-09 15:25:16 +05:30
Anusha
3aa9cc5350 [MIG] document_page_access_group_user_role: Migration to 18.0 2025-05-08 11:14:57 +02:00
Anusha
cb89126ca2 [IMP] document_page_access_group_user_role: pre-commit auto fixes 2025-05-08 11:12:34 +02:00
Peter Romão
cb93642287 Translated using Weblate (Portuguese)
Currently translated at 100.0% (3 of 3 strings)

Translation: knowledge-16.0/knowledge-16.0-document_page_access_group_user_role
Translate-URL: https://translation.odoo-community.org/projects/knowledge-16-0/knowledge-16-0-document_page_access_group_user_role/pt/
2025-05-08 11:11:57 +02:00
mymage
3c9af0d2f0 Translated using Weblate (Italian)
Currently translated at 100.0% (3 of 3 strings)

Translation: knowledge-16.0/knowledge-16.0-document_page_access_group_user_role
Translate-URL: https://translation.odoo-community.org/projects/knowledge-16-0/knowledge-16-0-document_page_access_group_user_role/it/
2025-05-08 11:11:57 +02:00
Weblate
bb5c3687d2 Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: knowledge-16.0/knowledge-16.0-document_page_access_group_user_role
Translate-URL: https://translation.odoo-community.org/projects/knowledge-16-0/knowledge-16-0-document_page_access_group_user_role/
2025-05-08 11:11:57 +02:00
OCA-git-bot
63e72de271 [BOT] post-merge updates 2025-05-08 11:11:57 +02:00
oca-ci
717e958239 [UPD] Update document_page_access_group_user_role.pot 2025-05-08 11:11:57 +02:00
Víctor Martínez
c12c8c4bef [IMP] document_page_access_group_user_role: Users compatibility
TT48786
2025-05-08 11:11:57 +02:00
Peter Romão
68766adea3 Translated using Weblate (Portuguese)
Currently translated at 100.0% (3 of 3 strings)

Translation: knowledge-16.0/knowledge-16.0-document_page_access_group_user_role
Translate-URL: https://translation.odoo-community.org/projects/knowledge-16-0/knowledge-16-0-document_page_access_group_user_role/pt/
2025-05-08 11:11:57 +02:00
Peter Romão
c5951ebb0f Added translation using Weblate (Portuguese) 2025-05-08 11:11:57 +02:00
mymage
098482616a Translated using Weblate (Italian)
Currently translated at 100.0% (3 of 3 strings)

Translation: knowledge-16.0/knowledge-16.0-document_page_access_group_user_role
Translate-URL: https://translation.odoo-community.org/projects/knowledge-16-0/knowledge-16-0-document_page_access_group_user_role/it/
2025-05-08 11:11:57 +02:00
mymage
770cff73c5 Added translation using Weblate (Italian) 2025-05-08 11:11:57 +02:00
Weblate
89e1db7cdb Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: knowledge-16.0/knowledge-16.0-document_page_access_group_user_role
Translate-URL: https://translation.odoo-community.org/projects/knowledge-16-0/knowledge-16-0-document_page_access_group_user_role/
2025-05-08 11:11:57 +02:00
oca-ci
8107468dcc [UPD] Update document_page_access_group_user_role.pot 2025-05-08 11:11:57 +02:00
Víctor Martínez
acf7f9f618 [ADD] document_page_access_group_user_role: New module
TT48787
2025-05-08 11:11:57 +02:00
62 changed files with 2946 additions and 1 deletions

View File

@ -25,7 +25,9 @@ addon | version | maintainers | summary
[document_knowledge](document_knowledge/) | 18.0.1.0.1 | | Documents Knowledge
[document_page](document_page/) | 18.0.1.0.1 | | Document Page
[document_page_access_group](document_page_access_group/) | 18.0.1.0.1 | | Choose groups to access document pages
[document_page_access_group_user_role](document_page_access_group_user_role/) | 18.0.1.0.0 | <a href='https://github.com/victoralmau'><img src='https://github.com/victoralmau.png' width='32' height='32' style='border-radius:50%;' alt='victoralmau'/></a> | Document Page Access Group User Role
[document_page_approval](document_page_approval/) | 18.0.1.0.0 | | Document Page Approval
[document_page_reference](document_page_reference/) | 18.0.1.0.0 | <a href='https://github.com/etobella'><img src='https://github.com/etobella.png' width='32' height='32' style='border-radius:50%;' alt='etobella'/></a> | Include references on document pages
[document_url](document_url/) | 18.0.1.0.0 | | URL attachment
[//]: # (end addons)

View File

@ -0,0 +1,100 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association
====================================
Document Page Access Group User Role
====================================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:94116a47bb3c0718e303c2056c7a8111748e80f677448f2fd96b059f8fca3311
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fknowledge-lightgray.png?logo=github
:target: https://github.com/OCA/knowledge/tree/18.0/document_page_access_group_user_role
:alt: OCA/knowledge
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/knowledge-18-0/knowledge-18-0-document_page_access_group_user_role
: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/knowledge&target_branch=18.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
Use of roles (module base_user_role) in Document Pages.
**Table of contents**
.. contents::
:local:
Usage
=====
1. Go to Settings / Users & Companies / Roles and create a new one.
2. Go to Knowledge / Pages and create or edit one.
3. Set in the "Roles" tab the one we have just created.
4. Go back to the role, edit it and add any group(s).
5. The role users will have been added in the "Security" tab.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/knowledge/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/knowledge/issues/new?body=module:%20document_page_access_group_user_role%0Aversion:%2018.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
-------
* Tecnativa
Contributors
------------
- `Tecnativa <https://www.tecnativa.com>`__:
- Víctor Martínez
- Pedro M. Baeza
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.
.. |maintainer-victoralmau| image:: https://github.com/victoralmau.png?size=40px
:target: https://github.com/victoralmau
:alt: victoralmau
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-victoralmau|
This module is part of the `OCA/knowledge <https://github.com/OCA/knowledge/tree/18.0/document_page_access_group_user_role>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@ -0,0 +1 @@
from . import models

View File

@ -0,0 +1,16 @@
# Copyright 2024 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Document Page Access Group User Role",
"author": "Tecnativa, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/knowledge",
"version": "18.0.1.0.0",
"depends": ["document_page_access_group", "base_user_role"],
"license": "AGPL-3",
"category": "Knowledge",
"data": [
"views/document_page_views.xml",
],
"installable": True,
"maintainers": ["victoralmau"],
}

View File

@ -0,0 +1,30 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * document_page_access_group_user_role
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.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: document_page_access_group_user_role
#: model:ir.model,name:document_page_access_group_user_role.model_document_page
msgid "Document Page"
msgstr ""
#. module: document_page_access_group_user_role
#: model:ir.model.fields,field_description:document_page_access_group_user_role.field_document_page__role_ids
#: model_terms:ir.ui.view,arch_db:document_page_access_group_user_role.document_page_access_group_view_wiki_form
msgid "Roles"
msgstr ""
#. module: document_page_access_group_user_role
#: model:ir.model.fields,field_description:document_page_access_group_user_role.field_document_page__user_ids
msgid "Users"
msgstr ""

View File

@ -0,0 +1,34 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * document_page_access_group_user_role
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-05-31 10:50+0000\n"
"PO-Revision-Date: 2024-05-31 12:51+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: \n"
"X-Generator: Poedit 3.0.1\n"
#. module: document_page_access_group_user_role
#: model:ir.model,name:document_page_access_group_user_role.model_document_page
msgid "Document Page"
msgstr "Página del documento"
#. module: document_page_access_group_user_role
#: model:ir.model.fields,field_description:document_page_access_group_user_role.field_document_page__role_ids
#: model_terms:ir.ui.view,arch_db:document_page_access_group_user_role.document_page_access_group_view_wiki_form
msgid "Roles"
msgstr "Roles"
#. module: document_page_access_group_user_role
#: model:ir.model.fields,field_description:document_page_access_group_user_role.field_document_page__user_ids
msgid "Users"
msgstr ""

View File

@ -0,0 +1,36 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * document_page_access_group_user_role
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-08-12 08:58+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.6.2\n"
#. module: document_page_access_group_user_role
#: model:ir.model,name:document_page_access_group_user_role.model_document_page
msgid "Document Page"
msgstr "Pagina documento"
#. module: document_page_access_group_user_role
#: model:ir.model.fields,field_description:document_page_access_group_user_role.field_document_page__role_ids
#: model_terms:ir.ui.view,arch_db:document_page_access_group_user_role.document_page_access_group_view_wiki_form
msgid "Roles"
msgstr "Ruoli"
#. module: document_page_access_group_user_role
#: model:ir.model.fields,field_description:document_page_access_group_user_role.field_document_page__user_ids
msgid "Users"
msgstr "Utenti"
#~ msgid "Groups"
#~ msgstr "Gruppi"

View File

@ -0,0 +1,36 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * document_page_access_group_user_role
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-02-04 17:11+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.6.2\n"
#. module: document_page_access_group_user_role
#: model:ir.model,name:document_page_access_group_user_role.model_document_page
msgid "Document Page"
msgstr "Página do Documento"
#. module: document_page_access_group_user_role
#: model:ir.model.fields,field_description:document_page_access_group_user_role.field_document_page__role_ids
#: model_terms:ir.ui.view,arch_db:document_page_access_group_user_role.document_page_access_group_view_wiki_form
msgid "Roles"
msgstr "Papéis"
#. module: document_page_access_group_user_role
#: model:ir.model.fields,field_description:document_page_access_group_user_role.field_document_page__user_ids
msgid "Users"
msgstr "Utilizadores"
#~ msgid "Groups"
#~ msgstr "Grupos"

View File

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import document_page

View File

@ -0,0 +1,23 @@
# Copyright 2024 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class DocumentPage(models.Model):
_inherit = "document.page"
user_ids = fields.Many2many(compute="_compute_user_ids", store=True, readonly=False)
role_ids = fields.Many2many(
comodel_name="res.users.role",
relation="document_page_user_roles_rel",
column1="page_id",
column2="role_id",
string="Roles",
)
@api.depends("role_ids", "role_ids.users")
def _compute_user_ids(self):
"""compute to auto-set all the users of the related roles."""
for item in self:
item.user_ids += item.mapped("role_ids.users")

View File

@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@ -0,0 +1,3 @@
- [Tecnativa](https://www.tecnativa.com):
- Víctor Martínez
- Pedro M. Baeza

View File

@ -0,0 +1 @@
Use of roles (module base_user_role) in Document Pages.

View File

@ -0,0 +1,5 @@
1. Go to Settings / Users & Companies / Roles and create a new one.
2. Go to Knowledge / Pages and create or edit one.
3. Set in the "Roles" tab the one we have just created.
4. Go back to the role, edit it and add any group(s).
5. The role users will have been added in the "Security" tab.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -0,0 +1,446 @@
<!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>README.rst</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">
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
</a>
<div class="section" id="document-page-access-group-user-role">
<h1>Document Page Access Group User Role</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:94116a47bb3c0718e303c2056c7a8111748e80f677448f2fd96b059f8fca3311
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<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/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/knowledge/tree/18.0/document_page_access_group_user_role"><img alt="OCA/knowledge" src="https://img.shields.io/badge/github-OCA%2Fknowledge-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/knowledge-18-0/knowledge-18-0-document_page_access_group_user_role"><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/knowledge&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>Use of roles (module base_user_role) in Document Pages.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h2><a class="toc-backref" href="#toc-entry-1">Usage</a></h2>
<ol class="arabic simple">
<li>Go to Settings / Users &amp; Companies / Roles and create a new one.</li>
<li>Go to Knowledge / Pages and create or edit one.</li>
<li>Set in the “Roles” tab the one we have just created.</li>
<li>Go back to the role, edit it and add any group(s).</li>
<li>The role users will have been added in the “Security” tab.</li>
</ol>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/knowledge/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/knowledge/issues/new?body=module:%20document_page_access_group_user_role%0Aversion:%2018.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">
<h2><a class="toc-backref" href="#toc-entry-3">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-4">Authors</a></h3>
<ul class="simple">
<li>Tecnativa</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-5">Contributors</a></h3>
<ul class="simple">
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
<li>Víctor Martínez</li>
<li>Pedro M. Baeza</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h3>
<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>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/victoralmau"><img alt="victoralmau" src="https://github.com/victoralmau.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/knowledge/tree/18.0/document_page_access_group_user_role">OCA/knowledge</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>
</div>
</body>
</html>

View File

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from . import test_document_page_access_group_user_role

View File

@ -0,0 +1,47 @@
# Copyright 2024 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests.common import users
from odoo.addons.document_page_access_group.tests.common import (
TestDocumentPageAccessGroupBase,
)
class TestDocumentPageAccessGroupUserRole(TestDocumentPageAccessGroupBase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.user_role = cls.env["res.users.role"].create(
{
"name": "Test role",
"implied_ids": [(6, 0, [cls.group.id])],
"users": [(6, 0, [cls.manager_user.id])],
}
)
cls.role_page = cls.env["document.page"].create(
{
"name": "Role Page (test role)",
"type": "content",
"role_ids": [(6, 0, [cls.user_role.id])],
}
)
def test_document_page_role_misc(self):
self.assertFalse(self.role_page.groups_id)
self.assertTrue(self.role_page.user_ids)
@users("test-user")
def test_document_page_role_access_01(self):
pages = self.env["document.page"].search([])
self.assertIn(self.public_page, pages)
self.assertNotIn(self.knowledge_page, pages)
self.assertIn(self.user_page, pages)
self.assertNotIn(self.role_page, pages)
@users("test-manager-user")
def test_document_page_role_access_02(self):
pages = self.env["document.page"].search([])
self.assertIn(self.public_page, pages)
self.assertIn(self.knowledge_page, pages)
self.assertNotIn(self.user_page, pages)
self.assertIn(self.role_page, pages)

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="document_page_access_group_view_wiki_form" model="ir.ui.view">
<field name="name">document.page.form</field>
<field name="model">document.page</field>
<field
name="inherit_id"
ref="document_page_access_group.document_page_access_group_view_wiki_form"
/>
<field name="arch" type="xml">
<group name="users" position="before">
<group
name="roles"
string="Roles"
invisible="groups_id"
groups="base.group_erp_manager"
>
<field name="role_ids" nolabel="1" colspan="2">
<list>
<field name="name" />
<field name="comment" />
</list>
</field>
</group>
</group>
</field>
</record>
</odoo>

View File

@ -0,0 +1,88 @@
=====================
Document Page Project
=====================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:565cdaeb121a674ab9cdcfda222176693e3ee2410c692458fd450b58f4839f5f
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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%2Fknowledge-lightgray.png?logo=github
:target: https://github.com/OCA/knowledge/tree/18.0/document_page_project
:alt: OCA/knowledge
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/knowledge-18-0/knowledge-18-0-document_page_project
: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/knowledge&target_branch=18.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module allow to link document pages to projects.
**Table of contents**
.. contents::
:local:
Usage
=====
- Go to to a project and click on "Wiki Pages" to see linked documents
or to create new ones.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/knowledge/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/knowledge/issues/new?body=module:%20document_page_project%0Aversion:%2018.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
-------
* ForgeFlow
Contributors
------------
- `Forgeflow <https://www.forgeflow.com>`__:
- Lois Rilo <lois.rilo@forgeflow.com>
- `Heliconia Solutions Pvt. Ltd. <https://www.heliconia.io>`__
- Bhavesh Heliconia
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/knowledge <https://github.com/OCA/knowledge/tree/18.0/document_page_project>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@ -0,0 +1,2 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import models

View File

@ -0,0 +1,15 @@
# Copyright 2019 ForgeFlow S.L. (https://www.forgeflow.com) - Lois Rilo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "Document Page Project",
"summary": "This module links document pages to projects",
"version": "18.0.1.0.0",
"category": "Project",
"author": "ForgeFlow, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/knowledge",
"license": "AGPL-3",
"depends": ["project", "document_page"],
"data": ["views/document_page_views.xml", "views/project_project_views.xml"],
"installable": True,
}

View File

@ -0,0 +1,55 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * document_page_project
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 17.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: document_page_project
#: model_terms:ir.ui.view,arch_db:document_page_project.view_project_kanban
msgid "<span class=\"o_label\">Wiki Pages</span>"
msgstr ""
#. module: document_page_project
#: model_terms:ir.actions.act_window,help:document_page_project.action_document_page_projects
msgid "Click to create a new web page."
msgstr ""
#. module: document_page_project
#: model:ir.model,name:document_page_project.model_document_page
msgid "Document Page"
msgstr ""
#. module: document_page_project
#: model:ir.model.fields,field_description:document_page_project.field_project_project__document_page_count
msgid "Document Page Count"
msgstr ""
#. module: document_page_project
#: model:ir.model,name:document_page_project.model_project_project
#: model:ir.model.fields,field_description:document_page_project.field_document_page__project_id
msgid "Project"
msgstr ""
#. module: document_page_project
#: model:ir.actions.act_window,name:document_page_project.action_document_page_projects
msgid "Project Wiki"
msgstr ""
#. module: document_page_project
#: model:ir.model.fields,field_description:document_page_project.field_project_project__document_page_ids
msgid "Wiki"
msgstr ""
#. module: document_page_project
#: model_terms:ir.ui.view,arch_db:document_page_project.edit_project
msgid "Wiki Pages"
msgstr ""

View File

@ -0,0 +1,58 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * document_page_project
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-10-09 07:41+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: none\n"
"Language: es\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 4.17\n"
#. module: document_page_project
#: model_terms:ir.ui.view,arch_db:document_page_project.view_project_kanban
msgid "<span class=\"o_label\">Wiki Pages</span>"
msgstr "<span class=\"o_label\">Páginas Wiki</span>"
#. module: document_page_project
#: model_terms:ir.actions.act_window,help:document_page_project.action_document_page_projects
msgid "Click to create a new web page."
msgstr "Click para crear una página web nueva."
#. module: document_page_project
#: model:ir.model,name:document_page_project.model_document_page
msgid "Document Page"
msgstr "Página Documento"
#. module: document_page_project
#: model:ir.model.fields,field_description:document_page_project.field_project_project__document_page_count
msgid "Document Page Count"
msgstr "Conteo de páginas de documento"
#. module: document_page_project
#: model:ir.model,name:document_page_project.model_project_project
#: model:ir.model.fields,field_description:document_page_project.field_document_page__project_id
msgid "Project"
msgstr "Proyecto"
#. module: document_page_project
#: model:ir.actions.act_window,name:document_page_project.action_document_page_projects
msgid "Project Wiki"
msgstr "Proyecto Wiki"
#. module: document_page_project
#: model:ir.model.fields,field_description:document_page_project.field_project_project__document_page_ids
msgid "Wiki"
msgstr "Wiki"
#. module: document_page_project
#: model_terms:ir.ui.view,arch_db:document_page_project.edit_project
msgid "Wiki Pages"
msgstr "Páginas Wiki"

View File

@ -0,0 +1,60 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * document_page_project
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2020-10-19 08:08+0000\n"
"Last-Translator: Yves Goldberg <admin@ygol.com>\n"
"Language-Team: none\n"
"Language: he_IL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
"n % 10 == 0) ? 2 : 3));\n"
"X-Generator: Weblate 3.10\n"
#. module: document_page_project
#: model_terms:ir.ui.view,arch_db:document_page_project.view_project_kanban
msgid "<span class=\"o_label\">Wiki Pages</span>"
msgstr "<span class=\"o_label\">Wiki דפי</span>"
#. module: document_page_project
#: model_terms:ir.actions.act_window,help:document_page_project.action_document_page_projects
msgid "Click to create a new web page."
msgstr "לחץ ליצירת עמוד נחיתה."
#. module: document_page_project
#: model:ir.model,name:document_page_project.model_document_page
msgid "Document Page"
msgstr "עמוד המסמך"
#. module: document_page_project
#: model:ir.model.fields,field_description:document_page_project.field_project_project__document_page_count
msgid "Document Page Count"
msgstr "מספור עמודים במסמכים"
#. module: document_page_project
#: model:ir.model,name:document_page_project.model_project_project
#: model:ir.model.fields,field_description:document_page_project.field_document_page__project_id
msgid "Project"
msgstr "פרוייקט"
#. module: document_page_project
#: model:ir.actions.act_window,name:document_page_project.action_document_page_projects
msgid "Project Wiki"
msgstr "תיקי Wiki"
#. module: document_page_project
#: model:ir.model.fields,field_description:document_page_project.field_project_project__document_page_ids
#, fuzzy
msgid "Wiki"
msgstr "Wiki"
#. module: document_page_project
#: model_terms:ir.ui.view,arch_db:document_page_project.edit_project
msgid "Wiki Pages"
msgstr "דפי Wiki"

View File

@ -0,0 +1,59 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * document_page_project
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-11-13 17:34+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>\n"
"Language-Team: none\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 3.8\n"
#. module: document_page_project
#: model_terms:ir.ui.view,arch_db:document_page_project.view_project_kanban
msgid "<span class=\"o_label\">Wiki Pages</span>"
msgstr "<span class=\"o_label\">Wiki Stranice</span>"
#. module: document_page_project
#: model_terms:ir.actions.act_window,help:document_page_project.action_document_page_projects
msgid "Click to create a new web page."
msgstr "Kliknite za kreiranje nove web stranice."
#. module: document_page_project
#: model:ir.model,name:document_page_project.model_document_page
msgid "Document Page"
msgstr "Dokumenti"
#. module: document_page_project
#: model:ir.model.fields,field_description:document_page_project.field_project_project__document_page_count
msgid "Document Page Count"
msgstr "Broj stranica sa dokumentima"
#. module: document_page_project
#: model:ir.model,name:document_page_project.model_project_project
#: model:ir.model.fields,field_description:document_page_project.field_document_page__project_id
msgid "Project"
msgstr "Projekt"
#. module: document_page_project
#: model:ir.actions.act_window,name:document_page_project.action_document_page_projects
msgid "Project Wiki"
msgstr "Wiki Projekta"
#. module: document_page_project
#: model:ir.model.fields,field_description:document_page_project.field_project_project__document_page_ids
msgid "Wiki"
msgstr "Wiki"
#. module: document_page_project
#: model_terms:ir.ui.view,arch_db:document_page_project.edit_project
msgid "Wiki Pages"
msgstr "Wiki stranice"

View File

@ -0,0 +1,58 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * document_page_project
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2022-12-28 22:45+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 4.14.1\n"
#. module: document_page_project
#: model_terms:ir.ui.view,arch_db:document_page_project.view_project_kanban
msgid "<span class=\"o_label\">Wiki Pages</span>"
msgstr "<span class=\"o_label\">Pagine Wiki</span>"
#. module: document_page_project
#: model_terms:ir.actions.act_window,help:document_page_project.action_document_page_projects
msgid "Click to create a new web page."
msgstr "Fare clic per creare una nuova pagina web."
#. module: document_page_project
#: model:ir.model,name:document_page_project.model_document_page
msgid "Document Page"
msgstr "Pagina documento"
#. module: document_page_project
#: model:ir.model.fields,field_description:document_page_project.field_project_project__document_page_count
msgid "Document Page Count"
msgstr "Conteggio pagina documento"
#. module: document_page_project
#: model:ir.model,name:document_page_project.model_project_project
#: model:ir.model.fields,field_description:document_page_project.field_document_page__project_id
msgid "Project"
msgstr "Progetto"
#. module: document_page_project
#: model:ir.actions.act_window,name:document_page_project.action_document_page_projects
msgid "Project Wiki"
msgstr "Progetto Wiki"
#. module: document_page_project
#: model:ir.model.fields,field_description:document_page_project.field_project_project__document_page_ids
msgid "Wiki"
msgstr "Wiki"
#. module: document_page_project
#: model_terms:ir.ui.view,arch_db:document_page_project.edit_project
msgid "Wiki Pages"
msgstr "Pagine Wiki"

View File

@ -0,0 +1,58 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * document_page_project
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-07-27 04:58+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.6.2\n"
#. module: document_page_project
#: model_terms:ir.ui.view,arch_db:document_page_project.view_project_kanban
msgid "<span class=\"o_label\">Wiki Pages</span>"
msgstr "<span class=\"o_label\">Páginas Wiki</span>"
#. module: document_page_project
#: model_terms:ir.actions.act_window,help:document_page_project.action_document_page_projects
msgid "Click to create a new web page."
msgstr "Clique para criar uma nova página web."
#. module: document_page_project
#: model:ir.model,name:document_page_project.model_document_page
msgid "Document Page"
msgstr "Página do Documento"
#. module: document_page_project
#: model:ir.model.fields,field_description:document_page_project.field_project_project__document_page_count
msgid "Document Page Count"
msgstr "Contagem de Páginas do Documento"
#. module: document_page_project
#: model:ir.model,name:document_page_project.model_project_project
#: model:ir.model.fields,field_description:document_page_project.field_document_page__project_id
msgid "Project"
msgstr "Projeto"
#. module: document_page_project
#: model:ir.actions.act_window,name:document_page_project.action_document_page_projects
msgid "Project Wiki"
msgstr "Wiki do Projeto"
#. module: document_page_project
#: model:ir.model.fields,field_description:document_page_project.field_project_project__document_page_ids
msgid "Wiki"
msgstr "Wiki"
#. module: document_page_project
#: model_terms:ir.ui.view,arch_db:document_page_project.edit_project
msgid "Wiki Pages"
msgstr "Páginas Wiki"

View File

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import document_page
from . import project_project

View File

@ -0,0 +1,10 @@
# Copyright 2019 ForgeFlow S.L. (https://www.forgeflow.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
class DocumentPage(models.Model):
_inherit = "document.page"
project_id = fields.Many2one(string="Project", comodel_name="project.project")

View File

@ -0,0 +1,17 @@
# Copyright 2019 ForgeFlow S.L. (https://www.forgeflow.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
class ProjectProject(models.Model):
_inherit = "project.project"
document_page_ids = fields.One2many(
string="Wiki", comodel_name="document.page", inverse_name="project_id"
)
document_page_count = fields.Integer(compute="_compute_document_page_count")
def _compute_document_page_count(self):
for rec in self:
rec.document_page_count = len(rec.document_page_ids)

View File

@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@ -0,0 +1,4 @@
- [Forgeflow](https://www.forgeflow.com):
- Lois Rilo \<<lois.rilo@forgeflow.com>\>
- [Heliconia Solutions Pvt. Ltd.](https://www.heliconia.io)
- Bhavesh Heliconia

View File

@ -0,0 +1 @@
This module allow to link document pages to projects.

View File

@ -0,0 +1,2 @@
- Go to to a project and click on "Wiki Pages" to see linked documents
or to create new ones.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -0,0 +1,438 @@
<!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>Document Page Project</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="document-page-project">
<h1 class="title">Document Page Project</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:565cdaeb121a674ab9cdcfda222176693e3ee2410c692458fd450b58f4839f5f
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<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/knowledge/tree/18.0/document_page_project"><img alt="OCA/knowledge" src="https://img.shields.io/badge/github-OCA%2Fknowledge-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/knowledge-18-0/knowledge-18-0-document_page_project"><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/knowledge&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module allow to link document pages to projects.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
<ul class="simple">
<li>Go to to a project and click on “Wiki Pages” to see linked documents
or to create new ones.</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/knowledge/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/knowledge/issues/new?body=module:%20document_page_project%0Aversion:%2018.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-3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
<ul class="simple">
<li>ForgeFlow</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul class="simple">
<li><a class="reference external" href="https://www.forgeflow.com">Forgeflow</a>:<ul>
<li>Lois Rilo &lt;<a class="reference external" href="mailto:lois.rilo&#64;forgeflow.com">lois.rilo&#64;forgeflow.com</a>&gt;</li>
</ul>
</li>
<li><a class="reference external" href="https://www.heliconia.io">Heliconia Solutions Pvt. Ltd.</a><ul>
<li>Bhavesh Heliconia</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-6">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/knowledge/tree/18.0/document_page_project">OCA/knowledge</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,2 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import test_project_project

View File

@ -0,0 +1,35 @@
# Copyright (C) 2021 TREVI Software
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests import common
class TestProjectProject(common.TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.Page = cls.env["document.page"]
cls.Project = cls.env["project.project"]
cls.default_page = cls.Page.create({"name": "My page"})
def test_page_count(self):
proj = self.Project.create({"name": "Proj A"})
self.assertEqual(
proj.document_page_count, 0, "Initial page count should be zero"
)
self.default_page.project_id = proj
proj._compute_document_page_count()
self.assertEqual(
proj.document_page_count,
1,
"After attaching project to document the page count should be one",
)
self.assertIn(
self.default_page,
proj.document_page_ids,
"The page should be in the list of document pages for project",
)

View File

@ -0,0 +1,36 @@
<?xml version="1.0" ?>
<odoo>
<record id="view_wiki_form" model="ir.ui.view">
<field name="name">document.page.form - document_page_project</field>
<field name="model">document.page</field>
<field name="inherit_id" ref="document_page.view_wiki_form" />
<field name="arch" type="xml">
<field name="parent_id" position="after">
<field name="project_id" />
</field>
</field>
</record>
<record id="action_document_page_projects" model="ir.actions.act_window">
<field name="name">Project Wiki</field>
<field name="res_model">document.page</field>
<field
name="domain"
>[('type','=','content'), ('project_id', '=', active_id)]</field>
<field name="context">{
'default_type': 'content',
'default_project_id': active_id}</field>
<field name="view_mode">list,form</field>
<field
name="view_ids"
eval="[Command.clear(),
Command.create({'view_mode':'list', 'view_id': ref('document_page.view_wiki_tree')}),
Command.create({'view_mode':'form', 'view_id': ref('document_page.view_wiki_form')})]"
/>
<field name="search_view_id" ref="document_page.view_wiki_filter" />
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new web page.
</p>
</field>
</record>
</odoo>

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_project_kanban" model="ir.ui.view">
<field name="model">project.project</field>
<field name="inherit_id" ref="project.view_project_kanban" />
<field name="arch" type="xml">
<xpath expr="//div[hasclass('o_project_kanban_boxes')]" position="inside">
<a
class="o_project_kanban_box"
name="%(action_document_page_projects)d"
type="action"
>
<div>
<b>
<field
name="document_page_count"
nolabel="1"
class="o_value"
/>
</b>
<span class="o_label">Wiki Pages</span>
</div>
</a>
</xpath>
</field>
</record>
<record id="edit_project" model="ir.ui.view">
<field name="name">project.project.form - document_page_project</field>
<field name="model">project.project</field>
<field name="inherit_id" ref="project.edit_project" />
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button
class="oe_stat_button"
type="action"
name="%(action_document_page_projects)d"
icon="fa-book"
>
<field
string="Wiki Pages"
name="document_page_count"
widget="statinfo"
/>
</button>
</div>
</field>
</record>
</odoo>

View File

@ -0,0 +1,96 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association
=======================
Document Page Reference
=======================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:f5181a95b68e52c04e1b76ba19f503b5bfc8d365939debe14edbb40413101321
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fknowledge-lightgray.png?logo=github
:target: https://github.com/OCA/knowledge/tree/18.0/document_page_reference
:alt: OCA/knowledge
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/knowledge-18-0/knowledge-18-0-document_page_reference
: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/knowledge&target_branch=18.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module allows to add a reference name on documents and simplifies
the link between document pages.
**Table of contents**
.. contents::
:local:
Usage
=====
When editing a document page add elements like ${XXX} where XXX is the
reference of another page. Now, when viewing the document, it will link
directly to the page. Also, the name will be parsed as the display name.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/knowledge/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/knowledge/issues/new?body=module:%20document_page_reference%0Aversion:%2018.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
-------
* Creu Blanca
Contributors
------------
- Enric Tobella <etobella@creublanca.es>
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.
.. |maintainer-etobella| image:: https://github.com/etobella.png?size=40px
:target: https://github.com/etobella
:alt: etobella
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-etobella|
This module is part of the `OCA/knowledge <https://github.com/OCA/knowledge/tree/18.0/document_page_reference>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@ -0,0 +1 @@
from . import models

View File

@ -0,0 +1,23 @@
# Copyright 2019 Creu Blanca
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Document Page Reference",
"summary": """
Include references on document pages""",
"version": "18.0.1.0.0",
"license": "AGPL-3",
"author": "Creu Blanca,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/knowledge",
"depends": ["document_page"],
"data": [
"views/document_page.xml",
"views/report_document_page.xml",
],
"assets": {
"web.assets_backend": [
"document_page_reference/static/src/js/editor.esm.js",
],
},
"maintainers": ["etobella"],
}

View File

@ -0,0 +1,51 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * document_page_reference
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.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: document_page_reference
#: model:ir.model,name:document_page_reference.model_document_page
msgid "Document Page"
msgstr ""
#. module: document_page_reference
#: model:ir.model.fields,field_description:document_page_reference.field_document_page__content_parsed
msgid "Parsed Content"
msgstr ""
#. module: document_page_reference
#: model:ir.model.fields,field_description:document_page_reference.field_document_page__reference
msgid "Reference"
msgstr ""
#. module: document_page_reference
#. odoo-python
#: code:addons/document_page_reference/models/document_page.py:0
msgid "Reference is not valid"
msgstr ""
#. module: document_page_reference
#. odoo-python
#: code:addons/document_page_reference/models/document_page.py:0
msgid "Reference must be unique"
msgstr ""
#. module: document_page_reference
#: model:ir.model.fields,help:document_page_reference.field_document_page__reference
msgid "Used to find the document, it can contain letters, numbers and _"
msgstr ""
#. module: document_page_reference
#: model_terms:ir.ui.view,arch_db:document_page_reference.document_page_form_view
msgid "internal_reference (autofilled if not value is provided)"
msgstr ""

View File

@ -0,0 +1,57 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * document_page_reference
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-09-05 22:41+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: none\n"
"Language: es\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 4.17\n"
#. module: document_page_reference
#: model:ir.model.fields,field_description:document_page_reference.field_document_page__content_parsed
msgid "Content Parsed"
msgstr "Contenido procesado"
#. module: document_page_reference
#: model:ir.model,name:document_page_reference.model_document_page
msgid "Document Page"
msgstr "Página de Documento"
#. module: document_page_reference
#: model:ir.model.fields,field_description:document_page_reference.field_document_page__reference
msgid "Reference"
msgstr "Referencia"
#. module: document_page_reference
#. odoo-python
#: code:addons/document_page_reference/models/document_page.py:0
#, python-format
msgid "Reference is not valid"
msgstr "La referencia no es válida"
#. module: document_page_reference
#. odoo-python
#: code:addons/document_page_reference/models/document_page.py:0
#, python-format
msgid "Reference must be unique"
msgstr "La referencia debe ser única"
#. module: document_page_reference
#: model:ir.model.fields,help:document_page_reference.field_document_page__reference
msgid "Used to find the document, it can contain letters, numbers and _"
msgstr ""
"Se utiliza para encontrar el documento, puede contener letras, números y _"
#. module: document_page_reference
#: model_terms:ir.ui.view,arch_db:document_page_reference.document_page_form_view
msgid "internal_reference (autofilled if not value is provided)"
msgstr "internal_reference (autocompletado si no se proporciona ningún valor)"

View File

@ -0,0 +1,56 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * document_page_reference
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-06-23 10:10+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 4.17\n"
#. module: document_page_reference
#: model:ir.model.fields,field_description:document_page_reference.field_document_page__content_parsed
msgid "Content Parsed"
msgstr "Contenuto analizzato"
#. module: document_page_reference
#: model:ir.model,name:document_page_reference.model_document_page
msgid "Document Page"
msgstr "Pagina documento"
#. module: document_page_reference
#: model:ir.model.fields,field_description:document_page_reference.field_document_page__reference
msgid "Reference"
msgstr "Riferimento"
#. module: document_page_reference
#. odoo-python
#: code:addons/document_page_reference/models/document_page.py:0
#, python-format
msgid "Reference is not valid"
msgstr "Il riferimento non è valido"
#. module: document_page_reference
#. odoo-python
#: code:addons/document_page_reference/models/document_page.py:0
#, python-format
msgid "Reference must be unique"
msgstr "Il riferimento deve essere unico"
#. module: document_page_reference
#: model:ir.model.fields,help:document_page_reference.field_document_page__reference
msgid "Used to find the document, it can contain letters, numbers and _"
msgstr "Utilizzato per trovare il documento, può contenere lettere, numeri e _"
#. module: document_page_reference
#: model_terms:ir.ui.view,arch_db:document_page_reference.document_page_form_view
msgid "internal_reference (autofilled if not value is provided)"
msgstr "internal_reference (auto compilato se non viene fornito un valore)"

View File

@ -0,0 +1,57 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * document_page_reference
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-02-28 21:33+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 4.17\n"
#. module: document_page_reference
#: model:ir.model.fields,field_description:document_page_reference.field_document_page__content_parsed
msgid "Content Parsed"
msgstr "Conteúdo Analisado"
#. module: document_page_reference
#: model:ir.model,name:document_page_reference.model_document_page
msgid "Document Page"
msgstr "Página do documento"
#. module: document_page_reference
#: model:ir.model.fields,field_description:document_page_reference.field_document_page__reference
msgid "Reference"
msgstr "Referência"
#. module: document_page_reference
#. odoo-python
#: code:addons/document_page_reference/models/document_page.py:0
#, python-format
msgid "Reference is not valid"
msgstr "A referência não é válida"
#. module: document_page_reference
#. odoo-python
#: code:addons/document_page_reference/models/document_page.py:0
#, python-format
msgid "Reference must be unique"
msgstr "A referência deve ser única"
#. module: document_page_reference
#: model:ir.model.fields,help:document_page_reference.field_document_page__reference
msgid "Used to find the document, it can contain letters, numbers and _"
msgstr "Usado para encontrar o documento, pode conter letras, números e _"
#. module: document_page_reference
#: model_terms:ir.ui.view,arch_db:document_page_reference.document_page_form_view
msgid "internal_reference (autofilled if not value is provided)"
msgstr ""
"internal_reference (preenchimento automático se o valor não for fornecido)"

View File

@ -0,0 +1 @@
from . import document_page

View File

@ -0,0 +1,102 @@
# Copyright 2019 Creu Blanca
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
import re
from jinja2.sandbox import SandboxedEnvironment
from markupsafe import Markup
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
from odoo.tools import html_escape
_logger = logging.getLogger(__name__)
env = SandboxedEnvironment(autoescape=False)
class DocumentPage(models.Model):
_inherit = "document.page"
_description = "Document Page"
reference = fields.Char(
help="Used to find the document, it can contain letters, numbers and _"
)
content_parsed = fields.Html(
"Parsed Content", compute="_compute_content_parsed", sanitize=False, store=True
)
def get_formview_action(self, access_uid=None):
res = super().get_formview_action(access_uid)
view_id = self.env.ref("document_page.view_wiki_form").id
res["views"] = [(view_id, "form")]
return res
@api.depends("content")
def _compute_content_parsed(self):
for record in self:
try:
raw = record.content or ""
converted = re.sub(r"\$\{([\w_]+)\}", r"{{ resolve('\1') }}", raw)
template = env.from_string(converted)
rendered = template.render(resolve=record._resolve_reference)
record.content_parsed = rendered
except Exception as e:
_logger.info("Render failed for %s: %s", record.id, e)
record.content_parsed = record.content or ""
@api.constrains("reference")
def _check_reference_validity(self):
for rec in self:
if not rec.reference:
continue
regex = r"^[a-zA-Z_][a-zA-Z0-9_]*$"
if not re.match(regex, rec.reference):
raise ValidationError(_("Reference is not valid"))
domain = [("reference", "=", rec.reference), ("id", "!=", rec.id)]
if self.search(domain):
raise ValidationError(_("Reference must be unique"))
def _get_document(self, code):
return self.search([("reference", "=", code)], limit=1)
def get_content(self):
for record in self:
try:
raw = record.content or ""
converted = re.sub(r"\$\{([\w_]+)\}", r"{{ resolve('\1') }}", raw)
template = env.from_string(converted)
return template.render(resolve=record._resolve_reference)
except Exception:
_logger.error(
"Template from page with id = %s cannot be processed", record.id
)
return record.content
def _resolve_reference(self, code):
doc = self._get_document(code)
if self.env.context.get("raw_reference", False):
return html_escape(doc.display_name if doc else code)
sanitized_code = html_escape(code)
if not doc:
return (
f"<i><a href='#' class='oe_direct_line' "
f"data-oe-model='document.page' data-oe-id='' "
f"name='{sanitized_code}'>{sanitized_code}</a></i>"
)
return (
f"<a href='#' class='oe_direct_line' data-oe-model='{doc._name}' "
f"data-oe-id='{doc.id}' name='{sanitized_code}'>"
f"{html_escape(doc.display_name)}</a>"
)
def get_raw_content(self):
return Markup(self.with_context(raw_reference=True).get_content())
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
if not vals.get("reference") and vals.get("name"):
reference = self.env["ir.http"]._slugify(vals["name"]).replace("-", "_")
vals["reference"] = reference
return super().create(vals_list)

View File

@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@ -0,0 +1 @@
- Enric Tobella \<etobella@creublanca.es\>

View File

@ -0,0 +1,2 @@
This module allows to add a reference name on documents and simplifies
the link between document pages.

View File

@ -0,0 +1,3 @@
When editing a document page add elements like \${XXX} where XXX is the
reference of another page. Now, when viewing the document, it will link
directly to the page. Also, the name will be parsed as the display name.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -0,0 +1,439 @@
<!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>README.rst</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">
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
</a>
<div class="section" id="document-page-reference">
<h1>Document Page Reference</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:f5181a95b68e52c04e1b76ba19f503b5bfc8d365939debe14edbb40413101321
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<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/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/knowledge/tree/18.0/document_page_reference"><img alt="OCA/knowledge" src="https://img.shields.io/badge/github-OCA%2Fknowledge-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/knowledge-18-0/knowledge-18-0-document_page_reference"><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/knowledge&amp;target_branch=18.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 reference name on documents and simplifies
the link between document pages.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h2><a class="toc-backref" href="#toc-entry-1">Usage</a></h2>
<p>When editing a document page add elements like ${XXX} where XXX is the
reference of another page. Now, when viewing the document, it will link
directly to the page. Also, the name will be parsed as the display name.</p>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/knowledge/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/knowledge/issues/new?body=module:%20document_page_reference%0Aversion:%2018.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">
<h2><a class="toc-backref" href="#toc-entry-3">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-4">Authors</a></h3>
<ul class="simple">
<li>Creu Blanca</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-5">Contributors</a></h3>
<ul class="simple">
<li>Enric Tobella &lt;<a class="reference external" href="mailto:etobella&#64;creublanca.es">etobella&#64;creublanca.es</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h3>
<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>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/etobella"><img alt="etobella" src="https://github.com/etobella.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/knowledge/tree/18.0/document_page_reference">OCA/knowledge</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>
</div>
</body>
</html>

View File

@ -0,0 +1,32 @@
import {HtmlField, htmlField} from "@web/views/fields/html/html_field";
import {onMounted} from "@odoo/owl";
import {registry} from "@web/core/registry";
import {useService} from "@web/core/utils/hooks";
class DocumentPageReferenceField extends HtmlField {
setup() {
super.setup();
this.orm = useService("orm");
this.action = useService("action");
onMounted(() => {
// eslint-disable-next-line no-undef
const links = document.querySelectorAll(".oe_direct_line");
links.forEach((link) => {
link.addEventListener("click", (event) =>
this._onClickDirectLink(event)
);
});
});
}
_onClickDirectLink(event) {
const {oeModel: model, oeId} = event.target.dataset;
const id = parseInt(oeId, 10);
this.orm.call(model, "get_formview_action", [[id]], {}).then((action) => {
this.action.doAction(action);
});
}
}
registry.category("fields").add("document_page_reference", {
...htmlField,
component: DocumentPageReferenceField,
});

View File

@ -0,0 +1 @@
from . import test_document_reference

View File

@ -0,0 +1,65 @@
# Copyright 2019 Creu Blanca
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.exceptions import ValidationError
from odoo.tests.common import TransactionCase
class TestDocumentReference(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.page_obj = cls.env["document.page"]
cls.history_obj = cls.env["document.page.history"]
cls.page1 = cls.page_obj.create(
{"name": "Test Page 1", "content": "${r2}", "reference": "R1"}
)
cls.page2 = cls.page_obj.create(
{"name": "Test Page 1", "content": "${r1}", "reference": "r2"}
)
def test_constraints_duplicate_reference(self):
"""Should raise if reference is not unique (same as another)."""
with self.assertRaises(ValidationError):
self.page2.write({"reference": self.page1.reference})
def test_constraints_invalid_reference(self):
"""Should raise if reference does not match the required pattern."""
with self.assertRaises(ValidationError):
self.page2.write({"reference": self.page2.reference + "-02"})
def test_auto_reference(self):
"""Test if reference is proposed when saving a page without one."""
self.assertEqual(self.page1.reference, "R1")
new_page = self.page_obj.create(
{"name": "Test Page with no reference", "content": "some content"}
)
self.assertEqual(new_page.reference, "test_page_with_no_reference")
with self.assertRaises(ValidationError):
new_page_duplicated_name = self.page_obj.create(
{
"name": "test page with no reference",
"content": "this should have an empty reference "
"because reference must be unique",
}
)
self.assertFalse(new_page_duplicated_name.reference)
def test_get_formview_action(self):
res = self.page1.get_formview_action()
view_id = self.env.ref("document_page.view_wiki_form").id
expected_keys = {
"type": "ir.actions.act_window",
"res_model": "document.page",
"res_id": self.page1.id,
"context": {},
"target": "current",
"views": [(view_id, "form")],
}
for key, expected_value in expected_keys.items():
self.assertEqual(res.get(key), expected_value, f"Mismatch in key: {key}")
def test_compute_content_parsed(self):
self.page1.content = "<p></p>"
self.page1._compute_content_parsed()
self.assertEqual(str(self.page1.content_parsed), "<p></p>")

View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2019 Creu Blanca
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record model="ir.ui.view" id="document_page_form_view">
<field name="name">document.page.form (in knowledge_reference)</field>
<field name="model">document.page</field>
<field name="inherit_id" ref="document_page.view_wiki_form" />
<field name="arch" type="xml">
<xpath expr="//h1" position="before">
<h2>
<field
name="reference"
placeholder="internal_reference (autofilled if not value is provided)"
/>
</h2>
</xpath>
<field name="content" position="attributes">
<attribute name="class">oe_edit_only</attribute>
</field>
<field name="content" position="before">
<field
name="content_parsed"
class="oe_read_only"
widget="document_page_reference"
/>
</field>
</field>
</record>
<record id="view_wiki_menu_form" model="ir.ui.view">
<field name="name">document.page.menu.form</field>
<field name="model">document.page</field>
<field name="inherit_id" ref="document_page.view_wiki_menu_form" />
<field name="arch" type="xml">
<field name="content" position="attributes">
<attribute name="class">oe_edit_only</attribute>
</field>
<field name="content" position="before">
<field
name="content_parsed"
class="oe_read_only"
widget="document_page_reference"
/>
</field>
</field>
</record>
<record model="ir.ui.view" id="document_page_search_view">
<field name="name">document.page.search (in knowledge_reference)</field>
<field name="model">document.page</field>
<field name="inherit_id" ref="document_page.view_wiki_filter" />
<field name="arch" type="xml">
<field name="parent_id" position="before">
<field name="reference" />
</field>
</field>
</record>
<record model="ir.ui.view" id="document_page_tree_view">
<field name="name">document.page.tree (in knowledge_reference)</field>
<field name="model">document.page</field>
<field name="inherit_id" ref="document_page.view_wiki_tree" />
<field name="arch" type="xml">
<field name="name" position="after">
<field name="reference" optional="hidden" />
</field>
</field>
</record>
</odoo>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<template
id="report_documentpage_doc"
inherit_id="document_page.report_documentpage_doc"
>
<xpath expr="//div[@t-raw='doc.content']" position="attributes">
<attribute name="t-if">1==0</attribute>
</xpath>
<xpath expr="//div[@t-raw='doc.content']" position="after">
<t t-out="doc.get_raw_content()" />
</xpath>
</template>
</odoo>

View File

@ -1,12 +1,14 @@
[project]
name = "odoo-addons-oca-knowledge"
version = "18.0.20250528.0"
version = "18.0.20250708.0"
dependencies = [
"odoo-addon-attachment_zipped_download==18.0.*",
"odoo-addon-document_knowledge==18.0.*",
"odoo-addon-document_page==18.0.*",
"odoo-addon-document_page_access_group==18.0.*",
"odoo-addon-document_page_access_group_user_role==18.0.*",
"odoo-addon-document_page_approval==18.0.*",
"odoo-addon-document_page_reference==18.0.*",
"odoo-addon-document_url==18.0.*",
]
classifiers=[