From be4fab0bde3e427bab0629509732f40d5a1f9975 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Fri, 8 Nov 2024 14:12:10 +0100 Subject: [PATCH 1/4] [ADD] web_pwa_customize: New module TT51658 --- web_pwa_customize/README.rst | 100 ++++ web_pwa_customize/__init__.py | 2 + web_pwa_customize/__manifest__.py | 14 + web_pwa_customize/controllers/__init__.py | 1 + web_pwa_customize/controllers/webmanifest.py | 71 +++ web_pwa_customize/i18n/es.po | 83 ++++ web_pwa_customize/i18n/web_pwa_customize.pot | 83 ++++ web_pwa_customize/models/__init__.py | 1 + .../models/res_config_settings.py | 136 ++++++ web_pwa_customize/pyproject.toml | 3 + web_pwa_customize/readme/CONFIGURE.md | 2 + web_pwa_customize/readme/CONTEXT.md | 2 + web_pwa_customize/readme/CONTRIBUTORS.md | 3 + web_pwa_customize/readme/DESCRIPTION.md | 1 + web_pwa_customize/static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 442 ++++++++++++++++++ web_pwa_customize/tests/__init__.py | 4 + .../tests/test_web_pwa_customize.py | 26 ++ .../views/res_config_settings_views.xml | 38 ++ 19 files changed, 1012 insertions(+) create mode 100644 web_pwa_customize/README.rst create mode 100644 web_pwa_customize/__init__.py create mode 100644 web_pwa_customize/__manifest__.py create mode 100644 web_pwa_customize/controllers/__init__.py create mode 100644 web_pwa_customize/controllers/webmanifest.py create mode 100644 web_pwa_customize/i18n/es.po create mode 100644 web_pwa_customize/i18n/web_pwa_customize.pot create mode 100644 web_pwa_customize/models/__init__.py create mode 100644 web_pwa_customize/models/res_config_settings.py create mode 100644 web_pwa_customize/pyproject.toml create mode 100644 web_pwa_customize/readme/CONFIGURE.md create mode 100644 web_pwa_customize/readme/CONTEXT.md create mode 100644 web_pwa_customize/readme/CONTRIBUTORS.md create mode 100644 web_pwa_customize/readme/DESCRIPTION.md create mode 100644 web_pwa_customize/static/description/icon.png create mode 100644 web_pwa_customize/static/description/index.html create mode 100644 web_pwa_customize/tests/__init__.py create mode 100644 web_pwa_customize/tests/test_web_pwa_customize.py create mode 100644 web_pwa_customize/views/res_config_settings_views.xml diff --git a/web_pwa_customize/README.rst b/web_pwa_customize/README.rst new file mode 100644 index 000000000000..df67e32b79e9 --- /dev/null +++ b/web_pwa_customize/README.rst @@ -0,0 +1,100 @@ +================= +Web Pwa Customize +================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:4a63e846d259636f1c4cd9c622f602c5a66bf775ab189162f90c00b3e278c7af + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fweb-lightgray.png?logo=github + :target: https://github.com/OCA/web/tree/17.0/web_pwa_customize + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-17-0/web-17-0-web_pwa_customize + :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/web&target_branch=17.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows to configure data for Progressive Web App: Short +name, Background color, Theme color and Icon. + +**Table of contents** + +.. contents:: + :local: + +Use Cases / Context +=================== + +The existing definitions in the old web_pwa_oca of 16.0 (not existing or +customizable in core) are maintained. + +Configuration +============= + +#. Go to Settings > General Settings. #. In the 'Progressive Web App' +section you can configure all the data. + +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 +------- + +* Tecnativa + +Contributors +------------ + +- `Tecnativa `__: + + - 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 `__: + +|maintainer-victoralmau| + +This module is part of the `OCA/web `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_pwa_customize/__init__.py b/web_pwa_customize/__init__.py new file mode 100644 index 000000000000..91c5580fed36 --- /dev/null +++ b/web_pwa_customize/__init__.py @@ -0,0 +1,2 @@ +from . import controllers +from . import models diff --git a/web_pwa_customize/__manifest__.py b/web_pwa_customize/__manifest__.py new file mode 100644 index 000000000000..42248c120fc8 --- /dev/null +++ b/web_pwa_customize/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Web Pwa Customize", + "author": "Tecnativa, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/web", + "version": "17.0.1.0.0", + "depends": ["web"], + "license": "AGPL-3", + "category": "Website", + "installable": True, + "maintainers": ["victoralmau"], + "data": ["views/res_config_settings_views.xml"], +} diff --git a/web_pwa_customize/controllers/__init__.py b/web_pwa_customize/controllers/__init__.py new file mode 100644 index 000000000000..ca3774be4c99 --- /dev/null +++ b/web_pwa_customize/controllers/__init__.py @@ -0,0 +1 @@ +from . import webmanifest diff --git a/web_pwa_customize/controllers/webmanifest.py b/web_pwa_customize/controllers/webmanifest.py new file mode 100644 index 000000000000..7b2f1aa0dfc6 --- /dev/null +++ b/web_pwa_customize/controllers/webmanifest.py @@ -0,0 +1,71 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import json + +from odoo import http +from odoo.http import request +from odoo.tools import ustr + +from odoo.addons.web.controllers import webmanifest + + +class WebManifest(webmanifest.WebManifest): + def _get_pwa_manifest_icons(self, pwa_icon): + icons = [] + if not pwa_icon.mimetype.startswith("image/svg"): + all_icons = ( + request.env["ir.attachment"] + .sudo() + .search( + [ + ("url", "like", "/web_pwa_customize/icon"), + ( + "url", + "not like", + "/web_pwa_customize/icon.", + ), # Get only resized icons + ] + ) + ) + for icon in all_icons: + icon_size_name = icon.url.split("/")[-1].lstrip("icon").split(".")[0] + icons.append( + {"src": icon.url, "sizes": icon_size_name, "type": icon.mimetype} + ) + else: + icons = [ + { + "src": pwa_icon.url, + "sizes": "128x128 144x144 152x152 192x192 256x256 512x512", + "type": pwa_icon.mimetype, + } + ] + return icons + + @http.route( + "/web/manifest.webmanifest", type="http", auth="public", methods=["GET"] + ) + def webmanifest(self): + """Call super and overwrite the values that we want.""" + res = super().webmanifest() + manifest = json.loads(res.response[0]) + icp = request.env["ir.config_parameter"].sudo() + manifest["short_name"] = icp.get_param("pwa.manifest.short_name", "Odoo") + manifest["background_color"] = icp.get_param( + "pwa.manifest.background_color", "#714B67" + ) + manifest["theme_color"] = icp.get_param("pwa.manifest.theme_color", "#714B67") + pwa_icon = ( + request.env["ir.attachment"] + .sudo() + .search([("url", "like", "/web_pwa_customize/icon.")]) + ) + if pwa_icon: + manifest["icons"] = self._get_pwa_manifest_icons(pwa_icon) + body = json.dumps(manifest, default=ustr) + return request.make_response( + body, + [ + ("Content-Type", "application/manifest+json"), + ], + ) diff --git a/web_pwa_customize/i18n/es.po b/web_pwa_customize/i18n/es.po new file mode 100644 index 000000000000..86891801202e --- /dev/null +++ b/web_pwa_customize/i18n/es.po @@ -0,0 +1,83 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_pwa_customize +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-08 16:57+0000\n" +"PO-Revision-Date: 2024-11-08 16:57+0000\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: web_pwa_customize +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Background Color" +msgstr "Color de fondo" + +#. module: web_pwa_customize +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Theme Color" +msgstr "Color del tema" + +#. module: web_pwa_customize +#: model:ir.model.fields,field_description:web_pwa_customize.field_res_config_settings__pwa_background_color +msgid "Background Color" +msgstr "Color de fondo" + +#. module: web_pwa_customize +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Colors" +msgstr "Colores" + +#. module: web_pwa_customize +#: model:ir.model,name:web_pwa_customize.model_res_config_settings +msgid "Config Settings" +msgstr "Ajustes de configuración" + +#. module: web_pwa_customize +#: model:ir.model.fields,field_description:web_pwa_customize.field_res_config_settings__pwa_icon +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Icon" +msgstr "Icono" + +#. module: web_pwa_customize +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Odoo" +msgstr "Odoo" + +#. module: web_pwa_customize +#: model:ir.model.fields,field_description:web_pwa_customize.field_res_config_settings__pwa_theme_color +msgid "Theme Color" +msgstr "Color del tema" + +#. module: web_pwa_customize +#: model:ir.model.fields,field_description:web_pwa_customize.field_res_config_settings__pwa_short_name +msgid "Web App Short Name" +msgstr "Nombre corto de la aplicación" + +#. module: web_pwa_customize +#. odoo-python +#: code:addons/web_pwa_customize/models/res_config_settings.py:0 +#, python-format +msgid "You can only upload PNG files bigger than 512x512" +msgstr "Solo puede cargar archivos PNG de más de 512 x 512" + +#. module: web_pwa_customize +#. odoo-python +#: code:addons/web_pwa_customize/models/res_config_settings.py:0 +#, python-format +msgid "You can only upload SVG or PNG files. Found: %s." +msgstr "Solo puedes cargar archivos SVG o PNG. Encontrado: %s." + +#. module: web_pwa_customize +#. odoo-python +#: code:addons/web_pwa_customize/models/res_config_settings.py:0 +#, python-format +msgid "You can't upload a file with more than 2 MB." +msgstr "No puede cargar un archivo con más de 2 MB." diff --git a/web_pwa_customize/i18n/web_pwa_customize.pot b/web_pwa_customize/i18n/web_pwa_customize.pot new file mode 100644 index 000000000000..1c5d9d43133f --- /dev/null +++ b/web_pwa_customize/i18n/web_pwa_customize.pot @@ -0,0 +1,83 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_pwa_customize +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-08 16:56+0000\n" +"PO-Revision-Date: 2024-11-08 16:56+0000\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: web_pwa_customize +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Background Color" +msgstr "" + +#. module: web_pwa_customize +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Theme Color" +msgstr "" + +#. module: web_pwa_customize +#: model:ir.model.fields,field_description:web_pwa_customize.field_res_config_settings__pwa_background_color +msgid "Background Color" +msgstr "" + +#. module: web_pwa_customize +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Colors" +msgstr "" + +#. module: web_pwa_customize +#: model:ir.model,name:web_pwa_customize.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: web_pwa_customize +#: model:ir.model.fields,field_description:web_pwa_customize.field_res_config_settings__pwa_icon +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Icon" +msgstr "" + +#. module: web_pwa_customize +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Odoo" +msgstr "" + +#. module: web_pwa_customize +#: model:ir.model.fields,field_description:web_pwa_customize.field_res_config_settings__pwa_theme_color +msgid "Theme Color" +msgstr "" + +#. module: web_pwa_customize +#: model:ir.model.fields,field_description:web_pwa_customize.field_res_config_settings__pwa_short_name +msgid "Web App Short Name" +msgstr "" + +#. module: web_pwa_customize +#. odoo-python +#: code:addons/web_pwa_customize/models/res_config_settings.py:0 +#, python-format +msgid "You can only upload PNG files bigger than 512x512" +msgstr "" + +#. module: web_pwa_customize +#. odoo-python +#: code:addons/web_pwa_customize/models/res_config_settings.py:0 +#, python-format +msgid "You can only upload SVG or PNG files. Found: %s." +msgstr "" + +#. module: web_pwa_customize +#. odoo-python +#: code:addons/web_pwa_customize/models/res_config_settings.py:0 +#, python-format +msgid "You can't upload a file with more than 2 MB." +msgstr "" diff --git a/web_pwa_customize/models/__init__.py b/web_pwa_customize/models/__init__.py new file mode 100644 index 000000000000..0deb68c46806 --- /dev/null +++ b/web_pwa_customize/models/__init__.py @@ -0,0 +1 @@ +from . import res_config_settings diff --git a/web_pwa_customize/models/res_config_settings.py b/web_pwa_customize/models/res_config_settings.py new file mode 100644 index 000000000000..2f4226dcbd5c --- /dev/null +++ b/web_pwa_customize/models/res_config_settings.py @@ -0,0 +1,136 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). +import base64 +import io +import sys + +from PIL import Image + +from odoo import _, api, exceptions, fields, models +from odoo.tools.mimetypes import guess_mimetype + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + _pwa_icon_url_base = "/web_pwa_customize/icon" + + pwa_short_name = fields.Char( + "Web App Short Name", + config_parameter="pwa.manifest.short_name", + ) + pwa_icon = fields.Binary("Icon", readonly=False) + pwa_background_color = fields.Char( + "Background Color", config_parameter="pwa.manifest.background_color" + ) + pwa_theme_color = fields.Char( + "Theme Color", config_parameter="pwa.manifest.theme_color" + ) + + @api.model + def get_values(self): + res = super().get_values() + pwa_icon_attachment = ( + self.env["ir.attachment"] + .sudo() + .search([("url", "like", self._pwa_icon_url_base + ".")]) + ) + res["pwa_icon"] = pwa_icon_attachment.datas if pwa_icon_attachment else False + return res + + @api.model + def default_get(self, fields): + res = super().default_get(fields) + for f_name in ["pwa_background_color", "pwa_theme_color"]: + if f_name in fields and not res.get(f_name): + res[f_name] = "#714B67" + return res + + def _unpack_icon(self, icon): + # Wrap decoded_icon in BytesIO object + decoded_icon = base64.b64decode(icon) + icon_bytes = io.BytesIO(decoded_icon) + return Image.open(icon_bytes) + + def _write_icon_to_attachment(self, extension, mimetype, size=None): + url = self._pwa_icon_url_base + extension + icon = self.pwa_icon + # Resize image + if size: + image = self._unpack_icon(icon) + resized_image = image.resize(size) + icon_bytes_output = io.BytesIO() + resized_image.save(icon_bytes_output, format=extension.lstrip(".").upper()) + icon = base64.b64encode(icon_bytes_output.getvalue()) + url = f"{self._pwa_icon_url_base}{str(size[0])}x{str(size[1])}{extension}" + # Retreive existing attachment + attachment_model = self.env["ir.attachment"].sudo() + attachment = attachment_model.search([("url", "like", url)]) + # Write values to ir_attachment + values = { + "datas": icon, + "db_datas": icon, + "url": url, + "name": url, + "type": "binary", + "mimetype": mimetype, + } + # Rewrite if exists, else create + if attachment: + attachment.sudo().write(values) + else: + attachment_model.create(values) + + @api.model + def set_values(self): + res = super().set_values() + # Retrieve previous value for pwa_icon from ir_attachment + pwa_icon_ir_attachments = ( + self.env["ir.attachment"] + .sudo() + .search([("url", "like", self._pwa_icon_url_base)]) + ) + # Delete or ignore if no icon provided + if not self.pwa_icon: + if pwa_icon_ir_attachments: + pwa_icon_ir_attachments.unlink() + return res + # Fail if icon provided is larger than 2mb + if sys.getsizeof(self.pwa_icon) > 2196608: + raise exceptions.UserError( + _("You can't upload a file with more than 2 MB.") + ) + # Confirm if the pwa_icon binary content is an SVG or PNG + # and process accordingly + decoded_pwa_icon = base64.b64decode(self.pwa_icon) + # Full mimetype detection + pwa_icon_mimetype = guess_mimetype(decoded_pwa_icon) + pwa_icon_extension = "." + pwa_icon_mimetype.split("/")[-1].split("+")[0] + if not pwa_icon_mimetype.startswith( + "image/svg" + ) and not pwa_icon_mimetype.startswith("image/png"): + raise exceptions.UserError( + _("You can only upload SVG or PNG files. Found: %s.") + % pwa_icon_mimetype + ) + # Delete all previous records if we are writting new ones + if pwa_icon_ir_attachments: + pwa_icon_ir_attachments.unlink() + self._write_icon_to_attachment(pwa_icon_extension, pwa_icon_mimetype) + # write multiple sizes if not SVG + if pwa_icon_extension != ".svg": + # Fail if provided PNG is smaller than 512x512 + if self._unpack_icon(self.pwa_icon).size < (512, 512): + raise exceptions.UserError( + _("You can only upload PNG files bigger than 512x512") + ) + for size in [ + (128, 128), + (144, 144), + (152, 152), + (192, 192), + (256, 256), + (512, 512), + ]: + self._write_icon_to_attachment( + pwa_icon_extension, pwa_icon_mimetype, size=size + ) diff --git a/web_pwa_customize/pyproject.toml b/web_pwa_customize/pyproject.toml new file mode 100644 index 000000000000..4231d0cccb3d --- /dev/null +++ b/web_pwa_customize/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/web_pwa_customize/readme/CONFIGURE.md b/web_pwa_customize/readme/CONFIGURE.md new file mode 100644 index 000000000000..0efc85e2c57b --- /dev/null +++ b/web_pwa_customize/readme/CONFIGURE.md @@ -0,0 +1,2 @@ +#. Go to Settings > General Settings. +#. In the 'Progressive Web App' section you can configure all the data. diff --git a/web_pwa_customize/readme/CONTEXT.md b/web_pwa_customize/readme/CONTEXT.md new file mode 100644 index 000000000000..6f4089074ca3 --- /dev/null +++ b/web_pwa_customize/readme/CONTEXT.md @@ -0,0 +1,2 @@ +The existing definitions in the old web_pwa_oca of 16.0 (not existing or customizable +in core) are maintained. diff --git a/web_pwa_customize/readme/CONTRIBUTORS.md b/web_pwa_customize/readme/CONTRIBUTORS.md new file mode 100644 index 000000000000..5fee3904270d --- /dev/null +++ b/web_pwa_customize/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- [Tecnativa](https://www.tecnativa.com): + - Víctor Martínez + - Pedro M. Baeza diff --git a/web_pwa_customize/readme/DESCRIPTION.md b/web_pwa_customize/readme/DESCRIPTION.md new file mode 100644 index 000000000000..d780ed50121a --- /dev/null +++ b/web_pwa_customize/readme/DESCRIPTION.md @@ -0,0 +1 @@ +This module allows to configure data for Progressive Web App: Short name, Background color, Theme color and Icon. diff --git a/web_pwa_customize/static/description/icon.png b/web_pwa_customize/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/web_pwa_customize/static/description/index.html b/web_pwa_customize/static/description/index.html new file mode 100644 index 000000000000..130c40d0190d --- /dev/null +++ b/web_pwa_customize/static/description/index.html @@ -0,0 +1,442 @@ + + + + + +Web Pwa Customize + + + +
+

Web Pwa Customize

+ + +

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

+

This module allows to configure data for Progressive Web App: Short +name, Background color, Theme color and Icon.

+

Table of contents

+ +
+

Use Cases / Context

+

The existing definitions in the old web_pwa_oca of 16.0 (not existing or +customizable in core) are maintained.

+
+
+

Configuration

+

#. Go to Settings > General Settings. #. In the ‘Progressive Web App’ +section you can configure all the data.

+
+
+

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

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • Tecnativa:
      +
    • Víctor Martínez
    • +
    • Pedro M. Baeza
    • +
    +
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

Current maintainer:

+

victoralmau

+

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

+

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

+
+
+
+ + diff --git a/web_pwa_customize/tests/__init__.py b/web_pwa_customize/tests/__init__.py new file mode 100644 index 000000000000..b94650f769f9 --- /dev/null +++ b/web_pwa_customize/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2021 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_web_pwa_customize diff --git a/web_pwa_customize/tests/test_web_pwa_customize.py b/web_pwa_customize/tests/test_web_pwa_customize.py new file mode 100644 index 000000000000..5d6935a2119b --- /dev/null +++ b/web_pwa_customize/tests/test_web_pwa_customize.py @@ -0,0 +1,26 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import tagged + +from odoo.addons.base.tests.common import HttpCaseWithUserDemo + + +@tagged("-at_install", "post_install") +class TestWebPwaCustomize(HttpCaseWithUserDemo): + @classmethod + def setUpClass(cls): + super().setUpClass() + icp = cls.env["ir.config_parameter"].sudo() + icp.set_param("pwa.manifest.short_name", "SHORT-NAME") + icp.set_param("pwa.manifest.background_color", "#2E69B5") + icp.set_param("pwa.manifest.theme_color", "#2E69B4") + + def test_webmanifest_customize(self): + response = self.url_open("/web/manifest.webmanifest") + self.assertEqual(response.status_code, 200) + self.assertEqual(response.headers["Content-Type"], "application/manifest+json") + data = response.json() + self.assertEqual(data["short_name"], "SHORT-NAME") + self.assertEqual(data["background_color"], "#2E69B5") + self.assertEqual(data["theme_color"], "#2E69B4") diff --git a/web_pwa_customize/views/res_config_settings_views.xml b/web_pwa_customize/views/res_config_settings_views.xml new file mode 100644 index 000000000000..44e0f27e1e3c --- /dev/null +++ b/web_pwa_customize/views/res_config_settings_views.xml @@ -0,0 +1,38 @@ + + + + res.config.settings.view.form.pwa + res.config.settings + + + + + + + +
+ Background Color + +
+
+ Theme Color + +
+
+ +
+ +
+
+
+
+
+
From e9212cf849cd230adab0d0ba8bd70500d2f8ff18 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Tue, 29 Jul 2025 19:44:47 +0000 Subject: [PATCH 2/4] [UPD] Update web_pwa_customize.pot --- web_pwa_customize/i18n/web_pwa_customize.pot | 2 -- 1 file changed, 2 deletions(-) diff --git a/web_pwa_customize/i18n/web_pwa_customize.pot b/web_pwa_customize/i18n/web_pwa_customize.pot index 1c5d9d43133f..d5518362a823 100644 --- a/web_pwa_customize/i18n/web_pwa_customize.pot +++ b/web_pwa_customize/i18n/web_pwa_customize.pot @@ -6,8 +6,6 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 17.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-11-08 16:56+0000\n" -"PO-Revision-Date: 2024-11-08 16:56+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" From 2c2b8654be76fe0130c29e88633a29429635b9d8 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 29 Jul 2025 19:48:27 +0000 Subject: [PATCH 3/4] [BOT] post-merge updates --- README.md | 1 + setup/_metapackage/pyproject.toml | 3 +- web_pwa_customize/README.rst | 14 +++++---- .../static/description/index.html | 30 +++++++++++-------- 4 files changed, 30 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index d932815595dd..2d556aa785d9 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ addon | version | maintainers | summary [web_m2x_options](web_m2x_options/) | 17.0.1.0.7 | | web_m2x_options [web_no_bubble](web_no_bubble/) | 17.0.1.0.0 | | Remove the bubbles from the web interface [web_notify](web_notify/) | 17.0.1.1.0 | | Send notification messages to user +[web_pwa_customize](web_pwa_customize/) | 17.0.1.0.0 | victoralmau | Web Pwa Customize [web_refresher](web_refresher/) | 17.0.1.1.2 | | Web Refresher [web_remember_tree_column_width](web_remember_tree_column_width/) | 17.0.1.0.0 | frahikLV luisg123v cuongnmtm | Remember the tree columns' widths across sessions. [web_responsive](web_responsive/) | 17.0.1.1.7 | Tardo SplashS | Responsive web client, community-supported diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml index 8c1b96d87d35..899a1454fca2 100644 --- a/setup/_metapackage/pyproject.toml +++ b/setup/_metapackage/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "odoo-addons-oca-web" -version = "17.0.20250630.0" +version = "17.0.20250729.0" dependencies = [ "odoo-addon-web_calendar_slot_duration>=17.0dev,<17.1dev", "odoo-addon-web_chatter_position>=17.0dev,<17.1dev", @@ -15,6 +15,7 @@ dependencies = [ "odoo-addon-web_m2x_options>=17.0dev,<17.1dev", "odoo-addon-web_no_bubble>=17.0dev,<17.1dev", "odoo-addon-web_notify>=17.0dev,<17.1dev", + "odoo-addon-web_pwa_customize>=17.0dev,<17.1dev", "odoo-addon-web_refresher>=17.0dev,<17.1dev", "odoo-addon-web_remember_tree_column_width>=17.0dev,<17.1dev", "odoo-addon-web_responsive>=17.0dev,<17.1dev", diff --git a/web_pwa_customize/README.rst b/web_pwa_customize/README.rst index df67e32b79e9..985606e81a83 100644 --- a/web_pwa_customize/README.rst +++ b/web_pwa_customize/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ================= Web Pwa Customize ================= @@ -7,13 +11,13 @@ Web Pwa Customize !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:4a63e846d259636f1c4cd9c622f602c5a66bf775ab189162f90c00b3e278c7af + !! source digest: sha256:8415b51de0273f7a4646b27d9dd9e8a0e3a10f92aed0e8b5636cf66800c70918 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github @@ -69,10 +73,10 @@ Authors Contributors ------------ -- `Tecnativa `__: +- `Tecnativa `__: - - Víctor Martínez - - Pedro M. Baeza + - Víctor Martínez + - Pedro M. Baeza Maintainers ----------- diff --git a/web_pwa_customize/static/description/index.html b/web_pwa_customize/static/description/index.html index 130c40d0190d..d7a10ef069e5 100644 --- a/web_pwa_customize/static/description/index.html +++ b/web_pwa_customize/static/description/index.html @@ -3,7 +3,7 @@ -Web Pwa Customize +README.rst -
-

Web Pwa Customize

+
+ + +Odoo Community Association + +
+

Web Pwa Customize

-

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

+

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

This module allows to configure data for Progressive Web App: Short name, Background color, Theme color and Icon.

Table of contents

@@ -387,17 +392,17 @@

Web Pwa Customize

-

Use Cases / Context

+

Use Cases / Context

The existing definitions in the old web_pwa_oca of 16.0 (not existing or customizable in core) are maintained.

-

Configuration

+

Configuration

#. Go to Settings > General Settings. #. In the ‘Progressive Web App’ section you can configure all the data.

-

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,15 +410,15 @@

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Tecnativa
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -438,5 +443,6 @@

Maintainers

+
From 32184c6f6b6c34a2660e4adbe8271f2021f22bdf Mon Sep 17 00:00:00 2001 From: mymage Date: Wed, 30 Jul 2025 12:25:03 +0000 Subject: [PATCH 4/4] Added translation using Weblate (Italian) --- web_pwa_customize/i18n/it.po | 82 ++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 web_pwa_customize/i18n/it.po diff --git a/web_pwa_customize/i18n/it.po b/web_pwa_customize/i18n/it.po new file mode 100644 index 000000000000..99bf1489baad --- /dev/null +++ b/web_pwa_customize/i18n/it.po @@ -0,0 +1,82 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_pwa_customize +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: web_pwa_customize +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Background Color" +msgstr "" + +#. module: web_pwa_customize +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Theme Color" +msgstr "" + +#. module: web_pwa_customize +#: model:ir.model.fields,field_description:web_pwa_customize.field_res_config_settings__pwa_background_color +msgid "Background Color" +msgstr "" + +#. module: web_pwa_customize +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Colors" +msgstr "" + +#. module: web_pwa_customize +#: model:ir.model,name:web_pwa_customize.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: web_pwa_customize +#: model:ir.model.fields,field_description:web_pwa_customize.field_res_config_settings__pwa_icon +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Icon" +msgstr "" + +#. module: web_pwa_customize +#: model_terms:ir.ui.view,arch_db:web_pwa_customize.res_config_settings_view_form +msgid "Odoo" +msgstr "" + +#. module: web_pwa_customize +#: model:ir.model.fields,field_description:web_pwa_customize.field_res_config_settings__pwa_theme_color +msgid "Theme Color" +msgstr "" + +#. module: web_pwa_customize +#: model:ir.model.fields,field_description:web_pwa_customize.field_res_config_settings__pwa_short_name +msgid "Web App Short Name" +msgstr "" + +#. module: web_pwa_customize +#. odoo-python +#: code:addons/web_pwa_customize/models/res_config_settings.py:0 +#, python-format +msgid "You can only upload PNG files bigger than 512x512" +msgstr "" + +#. module: web_pwa_customize +#. odoo-python +#: code:addons/web_pwa_customize/models/res_config_settings.py:0 +#, python-format +msgid "You can only upload SVG or PNG files. Found: %s." +msgstr "" + +#. module: web_pwa_customize +#. odoo-python +#: code:addons/web_pwa_customize/models/res_config_settings.py:0 +#, python-format +msgid "You can't upload a file with more than 2 MB." +msgstr ""