diff --git a/document_page_reference/README.rst b/document_page_reference/README.rst index 39071b1c8bb..9037982bb7b 100644 --- a/document_page_reference/README.rst +++ b/document_page_reference/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - ======================= Document Page Reference ======================= @@ -17,7 +13,7 @@ Document Page Reference .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fknowledge-lightgray.png?logo=github @@ -32,8 +28,10 @@ Document Page Reference |badge1| |badge2| |badge3| |badge4| |badge5| -This module allows to add a reference name on documents and simplifies -the link between document pages. +This module allows to add a reference name on documents. + +If you also want to link pages between them using those references, +install ``document_page_reference_link``. **Table of contents** @@ -43,9 +41,10 @@ the link between document pages. 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. +When editing a document page, set a reference to identify it uniquely. +If no reference is provided, one is generated automatically from the +page name. References can only contain letters, numbers and underscores, +and must be unique. Bug Tracker =========== @@ -69,6 +68,7 @@ Contributors ------------ - Enric Tobella +- Miquel Rosell Maintainers ----------- diff --git a/document_page_reference/__manifest__.py b/document_page_reference/__manifest__.py index 7c370726841..0c8030718b9 100644 --- a/document_page_reference/__manifest__.py +++ b/document_page_reference/__manifest__.py @@ -5,19 +5,13 @@ "name": "Document Page Reference", "summary": """ Include references on document pages""", - "version": "18.0.2.1.3", + "version": "18.0.3.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"], } diff --git a/document_page_reference/models/document_page.py b/document_page_reference/models/document_page.py index 081e2486677..1f0f555fb52 100644 --- a/document_page_reference/models/document_page.py +++ b/document_page_reference/models/document_page.py @@ -4,11 +4,8 @@ import re -from markupsafe import Markup - from odoo import api, fields, models from odoo.exceptions import ValidationError -from odoo.tools import html_escape class DocumentPage(models.Model): @@ -18,20 +15,6 @@ class DocumentPage(models.Model): 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: - record.content_parsed = record.get_content() @api.constrains("reference") def _check_reference_validity(self): @@ -45,54 +28,6 @@ def _check_reference_validity(self): if self.search(domain): raise ValidationError(self.env._("Reference must be unique")) - def _get_document(self, code): - return self.search([("reference", "=", code)], limit=1) - - def get_content(self): - self.ensure_one() - raw = str(self.content or "") - content_parsed = Markup(raw) - for text in re.findall(r"\{\{.*?\}\}", raw): - reference = re.sub(r"<[^>]*>", "", text).replace("{{", "").replace("}}", "") - content_parsed = content_parsed.replace( - text, self._resolve_reference(reference) - ) - link_regex = ( - r"]*class=['\"][^'\"]*oe_direct_line[^'\"]*['\"]" - r"[^>]*name=['\"]([^'\"]*)['\"][^>]*>.*?" - ) - for match in re.finditer(link_regex, raw): - full_link = match.group(0) - reference = match.group(1) - content_parsed = content_parsed.replace( - Markup(full_link), self._resolve_reference(reference) - ) - return content_parsed - - def _inverse_content(self): - for rec in self: - if rec.type == "content": - rec.content = rec.get_content() - return super()._inverse_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) - oe_model = doc._name if doc else self._name - oe_id = doc.id if doc else "" - name = html_escape(doc.display_name) if doc else sanitized_code - href = doc.backend_url if doc else "#" - return Markup( - f"" - f"{name}" - ) - - 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: diff --git a/document_page_reference/readme/CONTRIBUTORS.md b/document_page_reference/readme/CONTRIBUTORS.md index 145b8f6b9c2..bb6d10e2943 100644 --- a/document_page_reference/readme/CONTRIBUTORS.md +++ b/document_page_reference/readme/CONTRIBUTORS.md @@ -1 +1,2 @@ - Enric Tobella \ +- Miquel Rosell \ diff --git a/document_page_reference/readme/DESCRIPTION.md b/document_page_reference/readme/DESCRIPTION.md index b4d3c86e22f..3be7f8cccee 100644 --- a/document_page_reference/readme/DESCRIPTION.md +++ b/document_page_reference/readme/DESCRIPTION.md @@ -1,2 +1,4 @@ -This module allows to add a reference name on documents and simplifies -the link between document pages. +This module allows to add a reference name on documents. + +If you also want to link pages between them using those references, +install `document_page_reference_link`. diff --git a/document_page_reference/readme/USAGE.md b/document_page_reference/readme/USAGE.md index 6a9530ff58f..e16d0b26f2f 100644 --- a/document_page_reference/readme/USAGE.md +++ b/document_page_reference/readme/USAGE.md @@ -1,3 +1,4 @@ -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. +When editing a document page, set a reference to identify it uniquely. +If no reference is provided, one is generated automatically from the +page name. References can only contain letters, numbers and underscores, +and must be unique. diff --git a/document_page_reference/static/description/index.html b/document_page_reference/static/description/index.html index adf3bc02c3d..9d5830fdcfd 100644 --- a/document_page_reference/static/description/index.html +++ b/document_page_reference/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Document Page Reference -
+
+

Document Page Reference

- - -Odoo Community Association - -
-

Document Page Reference

-

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

-

This module allows to add a reference name on documents and simplifies -the link between document pages.

+

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

+

This module allows to add a reference name on documents.

+

If you also want to link pages between them using those references, +install document_page_reference_link.

Table of contents

    @@ -391,13 +387,14 @@

    Document Page Reference

-

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.

+

Usage

+

When editing a document page, set a reference to identify it uniquely. +If no reference is provided, one is generated automatically from the +page name. References can only contain letters, numbers and underscores, +and must be unique.

-

Bug Tracker

+

Bug Tracker

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

Bug Tracker

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

-
diff --git a/document_page_reference/tests/test_document_reference.py b/document_page_reference/tests/test_document_reference.py index 5f75e3b75e2..b55105082a4 100644 --- a/document_page_reference/tests/test_document_reference.py +++ b/document_page_reference/tests/test_document_reference.py @@ -1,7 +1,6 @@ # Copyright 2019 Creu Blanca # Copyright 2025 Tecnativa - Víctor Martínez # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from markupsafe import Markup from odoo.exceptions import ValidationError @@ -13,13 +12,8 @@ class TestDocumentReference(BaseCommon): 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": Markup("{{r2}}"), "reference": "R1"} - ) - cls.page2 = cls.page_obj.create( - {"name": "Test Page 2", "content": Markup("{{r1}}"), "reference": "r2"} - ) + cls.page1 = cls.page_obj.create({"name": "Test Page 1", "reference": "R1"}) + cls.page2 = cls.page_obj.create({"name": "Test Page 2", "reference": "r2"}) def test_constraints_duplicate_reference(self): """Should raise if reference is not unique (same as another).""" @@ -37,11 +31,6 @@ def test_no_constrains(self): self.page2.write({"reference": False}) self.assertFalse(self.page2.reference) - def test_check_raw(self): - self.assertEqual( - str(self.page2.display_name), str(self.page1.get_raw_content()) - ) - def test_auto_reference(self): """Test if reference is proposed when saving a page without one.""" self.assertEqual(self.page1.reference, "R1") @@ -58,29 +47,3 @@ def test_auto_reference(self): } ) 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, - "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 = Markup("

{{r2}}

") - self.assertIn("data-oe-model='document.page'", self.page1.content_parsed) - self.assertIn(f"data-oe-id='{self.page2.id}'", self.page1.content_parsed) - self.assertIn(f"href='{self.page2.backend_url}'", self.page1.content_parsed) - self.assertIn("Test Page 2", self.page1.content_parsed) - - def test_inverse_content_replacement(self): - self.page1.content = "{{r2}}" - self.assertIn(f"data-oe-id='{self.page2.id}'", self.page1.content) - self.assertIn(f"href='{self.page2.backend_url}'", self.page1.content_parsed) - self.assertNotIn("<a", self.page1.content) diff --git a/document_page_reference/views/document_page.xml b/document_page_reference/views/document_page.xml index 9f4c7ce6364..31c77067a51 100644 --- a/document_page_reference/views/document_page.xml +++ b/document_page_reference/views/document_page.xml @@ -15,34 +15,6 @@ /> - - oe_edit_only - - - - - - - - - document.page.menu.form - document.page - - - - oe_edit_only - - - - diff --git a/document_page_reference_link/README.rst b/document_page_reference_link/README.rst new file mode 100644 index 00000000000..f05c60bff6f --- /dev/null +++ b/document_page_reference_link/README.rst @@ -0,0 +1,101 @@ +============================ +Document Page Reference Link +============================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:30fb89d8383e47c4f8fa9f0c588dfca12169508302834034c6d85f14c33cc788 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_reference_link + :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_link + :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 simplifies the link between document pages using the +reference field provided by ``document_page_reference``. + +Pages that contain elements like {{XXX}}, where XXX is the reference of +another page, are rendered with a direct link to that page, and the +marker is parsed as the linked page display name. + +**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 `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Creu Blanca +* Miquel Rosell + +Contributors +------------ + +- Enric Tobella +- Miquel Rosell + +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 +.. |maintainer-miquelrosell99| image:: https://github.com/miquelrosell99.png?size=40px + :target: https://github.com/miquelrosell99 + :alt: miquelrosell99 + +Current `maintainers `__: + +|maintainer-etobella| |maintainer-miquelrosell99| + +This module is part of the `OCA/knowledge `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/document_page_reference_link/__init__.py b/document_page_reference_link/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/document_page_reference_link/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/document_page_reference_link/__manifest__.py b/document_page_reference_link/__manifest__.py new file mode 100644 index 00000000000..2ce9cf287f6 --- /dev/null +++ b/document_page_reference_link/__manifest__.py @@ -0,0 +1,23 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Document Page Reference Link", + "summary": """ + Link document pages through their references""", + "version": "18.0.1.0.0", + "license": "AGPL-3", + "author": "Creu Blanca,Miquel Rosell,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/knowledge", + "depends": ["document_page_reference"], + "data": [ + "views/document_page.xml", + "views/report_document_page.xml", + ], + "assets": { + "web.assets_backend": [ + "document_page_reference_link/static/src/js/editor.esm.js", + ], + }, + "maintainers": ["etobella", "miquelrosell99"], +} diff --git a/document_page_reference_link/models/__init__.py b/document_page_reference_link/models/__init__.py new file mode 100644 index 00000000000..427be24e72a --- /dev/null +++ b/document_page_reference_link/models/__init__.py @@ -0,0 +1 @@ +from . import document_page diff --git a/document_page_reference_link/models/document_page.py b/document_page_reference_link/models/document_page.py new file mode 100644 index 00000000000..687b6a98713 --- /dev/null +++ b/document_page_reference_link/models/document_page.py @@ -0,0 +1,78 @@ +# Copyright 2019 Creu Blanca +# Copyright 2025 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import re + +from markupsafe import Markup + +from odoo import api, fields, models +from odoo.tools import html_escape + + +class DocumentPage(models.Model): + _inherit = "document.page" + _description = "Document Page" + + 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: + record.content_parsed = record.get_content() + + def _get_document(self, code): + return self.search([("reference", "=", code)], limit=1) + + def get_content(self): + self.ensure_one() + raw = str(self.content or "") + content_parsed = Markup(raw) + for text in re.findall(r"\{\{.*?\}\}", raw): + reference = re.sub(r"<[^>]*>", "", text).replace("{{", "").replace("}}", "") + content_parsed = content_parsed.replace( + text, self._resolve_reference(reference) + ) + link_regex = ( + r"]*class=['\"][^'\"]*oe_direct_line[^'\"]*['\"]" + r"[^>]*name=['\"]([^'\"]*)['\"][^>]*>.*?" + ) + for match in re.finditer(link_regex, raw): + full_link = match.group(0) + reference = match.group(1) + content_parsed = content_parsed.replace( + Markup(full_link), self._resolve_reference(reference) + ) + return content_parsed + + def _inverse_content(self): + for rec in self: + if rec.type == "content": + rec.content = rec.get_content() + return super()._inverse_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) + oe_model = doc._name if doc else self._name + oe_id = doc.id if doc else "" + name = html_escape(doc.display_name) if doc else sanitized_code + href = doc.backend_url if doc else "#" + return Markup( + f"" + f"{name}" + ) + + def get_raw_content(self): + return Markup(self.with_context(raw_reference=True).get_content()) diff --git a/document_page_reference_link/pyproject.toml b/document_page_reference_link/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/document_page_reference_link/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/document_page_reference_link/readme/CONTRIBUTORS.md b/document_page_reference_link/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..bb6d10e2943 --- /dev/null +++ b/document_page_reference_link/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- Enric Tobella \ +- Miquel Rosell \ diff --git a/document_page_reference_link/readme/DESCRIPTION.md b/document_page_reference_link/readme/DESCRIPTION.md new file mode 100644 index 00000000000..9f241ec62aa --- /dev/null +++ b/document_page_reference_link/readme/DESCRIPTION.md @@ -0,0 +1,6 @@ +This module simplifies the link between document pages using the reference +field provided by `document_page_reference`. + +Pages that contain elements like {{XXX}}, where XXX is the reference of +another page, are rendered with a direct link to that page, and the marker +is parsed as the linked page display name. diff --git a/document_page_reference_link/readme/USAGE.md b/document_page_reference_link/readme/USAGE.md new file mode 100644 index 00000000000..6a9530ff58f --- /dev/null +++ b/document_page_reference_link/readme/USAGE.md @@ -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. diff --git a/document_page_reference_link/static/description/icon.png b/document_page_reference_link/static/description/icon.png new file mode 100644 index 00000000000..3a0328b516c Binary files /dev/null and b/document_page_reference_link/static/description/icon.png differ diff --git a/document_page_reference_link/static/description/index.html b/document_page_reference_link/static/description/index.html new file mode 100644 index 00000000000..c9a803ca19a --- /dev/null +++ b/document_page_reference_link/static/description/index.html @@ -0,0 +1,438 @@ + + + + + +Document Page Reference Link + + + + + + diff --git a/document_page_reference/static/src/js/editor.esm.js b/document_page_reference_link/static/src/js/editor.esm.js similarity index 100% rename from document_page_reference/static/src/js/editor.esm.js rename to document_page_reference_link/static/src/js/editor.esm.js diff --git a/document_page_reference_link/tests/__init__.py b/document_page_reference_link/tests/__init__.py new file mode 100644 index 00000000000..2054bfeeea2 --- /dev/null +++ b/document_page_reference_link/tests/__init__.py @@ -0,0 +1 @@ +from . import test_document_page_reference_link diff --git a/document_page_reference_link/tests/test_document_page_reference_link.py b/document_page_reference_link/tests/test_document_page_reference_link.py new file mode 100644 index 00000000000..5b579167767 --- /dev/null +++ b/document_page_reference_link/tests/test_document_page_reference_link.py @@ -0,0 +1,51 @@ +# Copyright 2019 Creu Blanca +# Copyright 2025 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from markupsafe import Markup + +from odoo.addons.base.tests.common import BaseCommon + + +class TestDocumentReferenceLink(BaseCommon): + @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": Markup("{{r2}}"), "reference": "R1"} + ) + cls.page2 = cls.page_obj.create( + {"name": "Test Page 2", "content": Markup("{{r1}}"), "reference": "r2"} + ) + + def test_check_raw(self): + self.assertEqual( + str(self.page2.display_name), str(self.page1.get_raw_content()) + ) + + 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, + "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 = Markup("

{{r2}}

") + self.assertIn("data-oe-model='document.page'", self.page1.content_parsed) + self.assertIn(f"data-oe-id='{self.page2.id}'", self.page1.content_parsed) + self.assertIn(f"href='{self.page2.backend_url}'", self.page1.content_parsed) + self.assertIn("Test Page 2", self.page1.content_parsed) + + def test_inverse_content_replacement(self): + self.page1.content = "{{r2}}" + self.assertIn(f"data-oe-id='{self.page2.id}'", self.page1.content) + self.assertIn(f"href='{self.page2.backend_url}'", self.page1.content_parsed) + self.assertNotIn("<a", self.page1.content) diff --git a/document_page_reference_link/views/document_page.xml b/document_page_reference_link/views/document_page.xml new file mode 100644 index 00000000000..d2f9704ac2b --- /dev/null +++ b/document_page_reference_link/views/document_page.xml @@ -0,0 +1,40 @@ + + + + + document.page.form (in document_page_reference_link) + document.page + + + + oe_edit_only + + + + + + + + + document.page.menu.form + document.page + + + + oe_edit_only + + + + + + + diff --git a/document_page_reference/views/report_document_page.xml b/document_page_reference_link/views/report_document_page.xml similarity index 100% rename from document_page_reference/views/report_document_page.xml rename to document_page_reference_link/views/report_document_page.xml