From b25fc507b95e052e72c58b79945d6ad8340599dc Mon Sep 17 00:00:00 2001 From: Florian Mounier Date: Fri, 28 Jun 2024 11:50:55 +0200 Subject: [PATCH 01/13] [ADD] web_notify_upgrade --- web_notify_upgrade/README.rst | 80 ++++ web_notify_upgrade/__init__.py | 1 + web_notify_upgrade/__manifest__.py | 14 + web_notify_upgrade/models/__init__.py | 1 + web_notify_upgrade/models/ir_model.py | 60 +++ web_notify_upgrade/readme/CONTRIBUTORS.rst | 3 + web_notify_upgrade/readme/DESCRIPTION.rst | 3 + .../static/description/index.html | 424 ++++++++++++++++++ 8 files changed, 586 insertions(+) create mode 100644 web_notify_upgrade/README.rst create mode 100644 web_notify_upgrade/__init__.py create mode 100644 web_notify_upgrade/__manifest__.py create mode 100644 web_notify_upgrade/models/__init__.py create mode 100644 web_notify_upgrade/models/ir_model.py create mode 100644 web_notify_upgrade/readme/CONTRIBUTORS.rst create mode 100644 web_notify_upgrade/readme/DESCRIPTION.rst create mode 100644 web_notify_upgrade/static/description/index.html diff --git a/web_notify_upgrade/README.rst b/web_notify_upgrade/README.rst new file mode 100644 index 000000000000..f71b7b8e8840 --- /dev/null +++ b/web_notify_upgrade/README.rst @@ -0,0 +1,80 @@ +================== +Web Notify Upgrade +================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:43d4c2b1f0259f640d095bcf8eb7e5afe9cba9ab249dad54c96068d2624bdec8 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/14.0/web_notify_upgrade + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-14-0/web-14-0-web_notify_upgrade + :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=14.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module uses web_notify send a notification to every active users whenever a module has been installed or upgraded. + +The notification will ask the user to refresh the page to get the latest changes. + +**Table of contents** + +.. contents:: + :local: + +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 +~~~~~~~ + +* Akretion + +Contributors +~~~~~~~~~~~~ + +* `Akretion `_: + + * Florian Mounier + +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/web `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_notify_upgrade/__init__.py b/web_notify_upgrade/__init__.py new file mode 100644 index 000000000000..0650744f6bc6 --- /dev/null +++ b/web_notify_upgrade/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/web_notify_upgrade/__manifest__.py b/web_notify_upgrade/__manifest__.py new file mode 100644 index 000000000000..2bfd025f2992 --- /dev/null +++ b/web_notify_upgrade/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2024 Akretion (http://www.akretion.com). +# @author Florian Mounier +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Web Notify Upgrade", + "summary": "Notify active users when a module is installed or updated", + "version": "14.0.1.0.0", + "license": "AGPL-3", + "depends": ["web_notify"], + "author": "Akretion, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/web", + "installable": True, +} diff --git a/web_notify_upgrade/models/__init__.py b/web_notify_upgrade/models/__init__.py new file mode 100644 index 000000000000..413bb2380140 --- /dev/null +++ b/web_notify_upgrade/models/__init__.py @@ -0,0 +1 @@ +from . import ir_model diff --git a/web_notify_upgrade/models/ir_model.py b/web_notify_upgrade/models/ir_model.py new file mode 100644 index 000000000000..684bf3623850 --- /dev/null +++ b/web_notify_upgrade/models/ir_model.py @@ -0,0 +1,60 @@ +# Copyright 2024 Akretion (http://www.akretion.com). +# @author Florian Mounier +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import logging + +from odoo import api, models + +from odoo.addons.bus.models.bus_presence import AWAY_TIMER, DISCONNECTION_TIMER + +_logger = logging.getLogger(__name__) + + +class IrModelData(models.Model): + _inherit = "ir.model.data" + + @api.model + def _process_end(self, modules): + # This function is called at the end of the module installation + # only if at least a module has been installed or updated. + rv = super()._process_end(modules) + self._notify_active_users_of_upgrade() + return rv + + def _notify_active_users_of_upgrade(self): + # Look for active users + active_users = self._get_active_users_to_notify_of_upgrade() + if active_users: + _logger.info( + "Installation detected. Notifying %s active users", len(active_users) + ) + # Notify them + active_users.notify_info(**self._get_upgrade_notification_params()) + + def _get_active_users_to_notify_of_upgrade(self): + """Return the active users that should be notified of the upgrade.""" + self.env.cr.execute( + """ + SELECT user_id + FROM bus_presence + WHERE last_poll is not null + AND ( + age(now() AT TIME ZONE 'UTC', last_poll) < interval %s + OR age(now() AT TIME ZONE 'UTC', last_presence) < interval %s + ) + """, + ("%s seconds" % DISCONNECTION_TIMER, "%s seconds" % AWAY_TIMER), + ) + return self.env["res.users"].browse([res[0] for res in self.env.cr.fetchall()]) + + def _get_upgrade_notification_params(self): + """Return the parameters to pass to the notify_info method.""" + return dict( + message="Your odoo instance has been upgraded, " + "please reload the web page.
" + '", + title="Upgrade Notification", + sticky=True, + ) diff --git a/web_notify_upgrade/readme/CONTRIBUTORS.rst b/web_notify_upgrade/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000000..a4d0ad92299d --- /dev/null +++ b/web_notify_upgrade/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Akretion `_: + + * Florian Mounier diff --git a/web_notify_upgrade/readme/DESCRIPTION.rst b/web_notify_upgrade/readme/DESCRIPTION.rst new file mode 100644 index 000000000000..854e257a6c2d --- /dev/null +++ b/web_notify_upgrade/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +This module uses web_notify send a notification to every active users whenever a module has been installed or upgraded. + +The notification will ask the user to refresh the page to get the latest changes. diff --git a/web_notify_upgrade/static/description/index.html b/web_notify_upgrade/static/description/index.html new file mode 100644 index 000000000000..aab5720bffe5 --- /dev/null +++ b/web_notify_upgrade/static/description/index.html @@ -0,0 +1,424 @@ + + + + + +Web Notify Upgrade + + + +
+

Web Notify Upgrade

+ + +

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

+

This module uses web_notify send a notification to every active users whenever a module has been installed or upgraded.

+

The notification will ask the user to refresh the page to get the latest changes.

+

Table of contents

+ +
+

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

+
    +
  • Akretion
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

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

+

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

+
+
+
+ + From c7057913bbb9ebb5f4929a33c3140363f71fbeb5 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Thu, 4 Jul 2024 09:22:40 +0000 Subject: [PATCH 02/13] [UPD] Update web_notify_upgrade.pot --- .../i18n/web_notify_upgrade.pot | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 web_notify_upgrade/i18n/web_notify_upgrade.pot diff --git a/web_notify_upgrade/i18n/web_notify_upgrade.pot b/web_notify_upgrade/i18n/web_notify_upgrade.pot new file mode 100644 index 000000000000..fc0b462bac97 --- /dev/null +++ b/web_notify_upgrade/i18n/web_notify_upgrade.pot @@ -0,0 +1,34 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_notify_upgrade +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.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: web_notify_upgrade +#: model:ir.model.fields,field_description:web_notify_upgrade.field_ir_model_data__display_name +msgid "Display Name" +msgstr "" + +#. module: web_notify_upgrade +#: model:ir.model.fields,field_description:web_notify_upgrade.field_ir_model_data__id +msgid "ID" +msgstr "" + +#. module: web_notify_upgrade +#: model:ir.model.fields,field_description:web_notify_upgrade.field_ir_model_data____last_update +msgid "Last Modified on" +msgstr "" + +#. module: web_notify_upgrade +#: model:ir.model,name:web_notify_upgrade.model_ir_model_data +msgid "Model Data" +msgstr "" From f9b6a7fb6fc7750a8565aeec8dfd02c663feeede Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 4 Jul 2024 09:27:51 +0000 Subject: [PATCH 03/13] [BOT] post-merge updates --- web_notify_upgrade/README.rst | 2 +- web_notify_upgrade/__manifest__.py | 2 +- web_notify_upgrade/static/description/icon.png | Bin 0 -> 9455 bytes web_notify_upgrade/static/description/index.html | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 web_notify_upgrade/static/description/icon.png diff --git a/web_notify_upgrade/README.rst b/web_notify_upgrade/README.rst index f71b7b8e8840..b03fd17ecfb8 100644 --- a/web_notify_upgrade/README.rst +++ b/web_notify_upgrade/README.rst @@ -7,7 +7,7 @@ Web Notify Upgrade !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:43d4c2b1f0259f640d095bcf8eb7e5afe9cba9ab249dad54c96068d2624bdec8 + !! source digest: sha256:73f36f681a3bdab0c199d3f256b69f03aba5a56d03e9a35545d14d1992c865bd !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/web_notify_upgrade/__manifest__.py b/web_notify_upgrade/__manifest__.py index 2bfd025f2992..2c4a2396c84f 100644 --- a/web_notify_upgrade/__manifest__.py +++ b/web_notify_upgrade/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Web Notify Upgrade", "summary": "Notify active users when a module is installed or updated", - "version": "14.0.1.0.0", + "version": "14.0.1.0.1", "license": "AGPL-3", "depends": ["web_notify"], "author": "Akretion, Odoo Community Association (OCA)", diff --git a/web_notify_upgrade/static/description/icon.png b/web_notify_upgrade/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_notify_upgrade/static/description/index.html b/web_notify_upgrade/static/description/index.html index aab5720bffe5..0c307119ca94 100644 --- a/web_notify_upgrade/static/description/index.html +++ b/web_notify_upgrade/static/description/index.html @@ -366,7 +366,7 @@

Web Notify Upgrade

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:43d4c2b1f0259f640d095bcf8eb7e5afe9cba9ab249dad54c96068d2624bdec8 +!! source digest: sha256:73f36f681a3bdab0c199d3f256b69f03aba5a56d03e9a35545d14d1992c865bd !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module uses web_notify send a notification to every active users whenever a module has been installed or upgraded.

From 2d5e1a4fe97456dcba9e6450b1f4129d85d1e00a Mon Sep 17 00:00:00 2001 From: David Beal Date: Mon, 5 Aug 2024 20:12:16 +0200 Subject: [PATCH 04/13] [16.0][MIG] web_notify_upgrade --- web_notify_upgrade/README.rst | 10 +++++----- web_notify_upgrade/__manifest__.py | 2 +- web_notify_upgrade/static/description/index.html | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/web_notify_upgrade/README.rst b/web_notify_upgrade/README.rst index b03fd17ecfb8..9346623b2a3e 100644 --- a/web_notify_upgrade/README.rst +++ b/web_notify_upgrade/README.rst @@ -17,13 +17,13 @@ Web Notify Upgrade :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/14.0/web_notify_upgrade + :target: https://github.com/OCA/web/tree/16.0/web_notify_upgrade :alt: OCA/web .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/web-14-0/web-14-0-web_notify_upgrade + :target: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_notify_upgrade :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=14.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=16.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -43,7 +43,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -75,6 +75,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/web `_ project on GitHub. +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_notify_upgrade/__manifest__.py b/web_notify_upgrade/__manifest__.py index 2c4a2396c84f..24ae27e06544 100644 --- a/web_notify_upgrade/__manifest__.py +++ b/web_notify_upgrade/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Web Notify Upgrade", "summary": "Notify active users when a module is installed or updated", - "version": "14.0.1.0.1", + "version": "16.0.1.0.0", "license": "AGPL-3", "depends": ["web_notify"], "author": "Akretion, Odoo Community Association (OCA)", diff --git a/web_notify_upgrade/static/description/index.html b/web_notify_upgrade/static/description/index.html index 0c307119ca94..35f304af5b6f 100644 --- a/web_notify_upgrade/static/description/index.html +++ b/web_notify_upgrade/static/description/index.html @@ -368,7 +368,7 @@

Web Notify Upgrade

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:73f36f681a3bdab0c199d3f256b69f03aba5a56d03e9a35545d14d1992c865bd !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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 uses web_notify send a notification to every active users whenever a module has been installed or upgraded.

The notification will ask the user to refresh the page to get the latest changes.

Table of contents

@@ -388,7 +388,7 @@

Bug Tracker

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

+feedback.

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

@@ -415,7 +415,7 @@

Maintainers

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

-

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

+

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.

From 54704ee02d150d230fbb85b33f0224215669b155 Mon Sep 17 00:00:00 2001 From: David Beal Date: Mon, 5 Aug 2024 21:31:58 +0200 Subject: [PATCH 05/13] [16.0] web_notify_upgrade: fr translation --- web_notify_upgrade/README.rst | 6 ++- web_notify_upgrade/i18n/fr.po | 44 ++++++++++++++++++ web_notify_upgrade/i18n/it.po | 43 +++++++++++++++++ .../i18n/web_notify_upgrade.pot | 24 ++++++---- web_notify_upgrade/models/ir_model.py | 13 +++--- web_notify_upgrade/readme/DESCRIPTION.rst | 4 ++ .../static/description/index.html | 16 +++++-- .../static/description/notify.png | Bin 0 -> 27309 bytes 8 files changed, 129 insertions(+), 21 deletions(-) create mode 100644 web_notify_upgrade/i18n/fr.po create mode 100644 web_notify_upgrade/i18n/it.po create mode 100644 web_notify_upgrade/static/description/notify.png diff --git a/web_notify_upgrade/README.rst b/web_notify_upgrade/README.rst index 9346623b2a3e..55cf2f36c7fb 100644 --- a/web_notify_upgrade/README.rst +++ b/web_notify_upgrade/README.rst @@ -7,7 +7,7 @@ Web Notify Upgrade !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:73f36f681a3bdab0c199d3f256b69f03aba5a56d03e9a35545d14d1992c865bd + !! source digest: sha256:2eb8752f0e8e35c9d1a164c644532665c2ea80d249dc3a430df2c6579fbdfae1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -32,6 +32,10 @@ This module uses web_notify send a notification to every active users whenever a The notification will ask the user to refresh the page to get the latest changes. + +.. figure:: https://raw.githubusercontent.com/OCA/web/16.0/web_notify_upgrade/static/description/notify.png + :alt: Refresh page + **Table of contents** .. contents:: diff --git a/web_notify_upgrade/i18n/fr.po b/web_notify_upgrade/i18n/fr.po new file mode 100644 index 000000000000..b262d01acac9 --- /dev/null +++ b/web_notify_upgrade/i18n/fr.po @@ -0,0 +1,44 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_notify_upgrade +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2024-08-14 16:58+0000\n" +"Last-Translator: David Beal \n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: web_notify_upgrade +#: model:ir.model,name:web_notify_upgrade.model_ir_model_data +msgid "Model Data" +msgstr "Model Data" + +#. module: web_notify_upgrade +#. odoo-python +#: code:addons/web_notify_upgrade/models/ir_model.py:0 +#, python-format +msgid "Reload" +msgstr "Recharger" + +#. module: web_notify_upgrade +#. odoo-python +#: code:addons/web_notify_upgrade/models/ir_model.py:0 +#, python-format +msgid "Upgrade Notification" +msgstr "Notification de mise à jour" + +#. module: web_notify_upgrade +#. odoo-python +#: code:addons/web_notify_upgrade/models/ir_model.py:0 +#, python-format +msgid "Your odoo instance has been upgraded, please reload the web page." +msgstr "Votre instance odoo a été mise à jour, merci de recharger la page web." diff --git a/web_notify_upgrade/i18n/it.po b/web_notify_upgrade/i18n/it.po new file mode 100644 index 000000000000..9eca29655e4a --- /dev/null +++ b/web_notify_upgrade/i18n/it.po @@ -0,0 +1,43 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_notify_upgrade +# +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 \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: web_notify_upgrade +#: model:ir.model,name:web_notify_upgrade.model_ir_model_data +msgid "Model Data" +msgstr "Dati modello" + +#. module: web_notify_upgrade +#. odoo-python +#: code:addons/web_notify_upgrade/models/ir_model.py:0 +#, python-format +msgid "Reload" +msgstr "Ricarica" + +#. module: web_notify_upgrade +#. odoo-python +#: code:addons/web_notify_upgrade/models/ir_model.py:0 +#, python-format +msgid "Upgrade Notification" +msgstr "Aggiorna notifiche" + +#. module: web_notify_upgrade +#. odoo-python +#: code:addons/web_notify_upgrade/models/ir_model.py:0 +#, python-format +msgid "Your odoo instance has been upgraded, please reload the web page." +msgstr "L'istanza Odoo è stata aggiornata, ricaricare la pagina web." diff --git a/web_notify_upgrade/i18n/web_notify_upgrade.pot b/web_notify_upgrade/i18n/web_notify_upgrade.pot index fc0b462bac97..62a205b52152 100644 --- a/web_notify_upgrade/i18n/web_notify_upgrade.pot +++ b/web_notify_upgrade/i18n/web_notify_upgrade.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -14,21 +14,27 @@ msgstr "" "Plural-Forms: \n" #. module: web_notify_upgrade -#: model:ir.model.fields,field_description:web_notify_upgrade.field_ir_model_data__display_name -msgid "Display Name" +#: model:ir.model,name:web_notify_upgrade.model_ir_model_data +msgid "Model Data" msgstr "" #. module: web_notify_upgrade -#: model:ir.model.fields,field_description:web_notify_upgrade.field_ir_model_data__id -msgid "ID" +#. odoo-python +#: code:addons/web_notify_upgrade/models/ir_model.py:0 +#, python-format +msgid "Reload" msgstr "" #. module: web_notify_upgrade -#: model:ir.model.fields,field_description:web_notify_upgrade.field_ir_model_data____last_update -msgid "Last Modified on" +#. odoo-python +#: code:addons/web_notify_upgrade/models/ir_model.py:0 +#, python-format +msgid "Upgrade Notification" msgstr "" #. module: web_notify_upgrade -#: model:ir.model,name:web_notify_upgrade.model_ir_model_data -msgid "Model Data" +#. odoo-python +#: code:addons/web_notify_upgrade/models/ir_model.py:0 +#, python-format +msgid "Your odoo instance has been upgraded, please reload the web page." msgstr "" diff --git a/web_notify_upgrade/models/ir_model.py b/web_notify_upgrade/models/ir_model.py index 684bf3623850..d973e4e36bc0 100644 --- a/web_notify_upgrade/models/ir_model.py +++ b/web_notify_upgrade/models/ir_model.py @@ -3,7 +3,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import logging -from odoo import api, models +from odoo import _, api, models from odoo.addons.bus.models.bus_presence import AWAY_TIMER, DISCONNECTION_TIMER @@ -50,11 +50,12 @@ def _get_active_users_to_notify_of_upgrade(self): def _get_upgrade_notification_params(self): """Return the parameters to pass to the notify_info method.""" return dict( - message="Your odoo instance has been upgraded, " - "please reload the web page.
" + message=_( + "Your odoo instance has been upgraded, " "please reload the web page." + ) + + "
" '", - title="Upgrade Notification", + '' + _("Reload") + "", + title=_("Upgrade Notification"), sticky=True, ) diff --git a/web_notify_upgrade/readme/DESCRIPTION.rst b/web_notify_upgrade/readme/DESCRIPTION.rst index 854e257a6c2d..49656f4d69f1 100644 --- a/web_notify_upgrade/readme/DESCRIPTION.rst +++ b/web_notify_upgrade/readme/DESCRIPTION.rst @@ -1,3 +1,7 @@ This module uses web_notify send a notification to every active users whenever a module has been installed or upgraded. The notification will ask the user to refresh the page to get the latest changes. + + +.. figure:: ../static/description/notify.png + :alt: Refresh page diff --git a/web_notify_upgrade/static/description/index.html b/web_notify_upgrade/static/description/index.html index 35f304af5b6f..b666ccd0a466 100644 --- a/web_notify_upgrade/static/description/index.html +++ b/web_notify_upgrade/static/description/index.html @@ -8,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +: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. @@ -274,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +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 } @@ -300,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -366,11 +367,14 @@

Web Notify Upgrade

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:73f36f681a3bdab0c199d3f256b69f03aba5a56d03e9a35545d14d1992c865bd +!! source digest: sha256:2eb8752f0e8e35c9d1a164c644532665c2ea80d249dc3a430df2c6579fbdfae1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module uses web_notify send a notification to every active users whenever a module has been installed or upgraded.

The notification will ask the user to refresh the page to get the latest changes.

+
+Refresh page +

Table of contents

    @@ -411,7 +415,9 @@

    Contributors

    Maintainers

    This module is maintained by the OCA.

    -Odoo Community Association + +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.

    diff --git a/web_notify_upgrade/static/description/notify.png b/web_notify_upgrade/static/description/notify.png new file mode 100644 index 0000000000000000000000000000000000000000..d605e3ff894eab41624e6efd61b0b73d56f9c668 GIT binary patch literal 27309 zcmeFYWl&wswl2Joz=9B1NPyt(?(XjH4hy&7?yf(7Tklo2MF#G^se{a`|Pt% zefQ6)`tH9?71W&Fqo3|Edi0?C89gJF6eK?&;vfP5fDh7AVk!UtR1xI44hRkT3oByq z3IL!zd#P!;s2IBwIXXF*TiJq%Ts$4YL|_jqa{$0&r8vXN377kO=$q+B2ZS`nTD%z4 z&R~PrCxt{6?RuK>b^2v98p$nW3&7!I_nYhb+hvmX7z36~)8f&e5&nCwCCk@a)||zy z>+8prluh03V?WMKT!DJp%Nzs$?~h(6ginH#-reE78h`dA>^f1#Yv8^7HoJY>r=NtS zNuz8}?qeUHB&fTPL+(Ee+URuMnRhD~=PW)wJ!)bP(5D3k@oy-^&^4Ew{I%RxEuc5xZmjVteetvx3=5uGCd)}2ctiNi#rPp=sGQHu~ zcQ0?kGMyDaQY?HVlaZ}Pk z@wUbW@@RgBD@>IIhn8s-#mw=+#+=3j48b9^oFTXFwd=;gB=@a3>=x~rfEJ7*DPib2auy+pzrc!<5-!sh0D+RLUO0?oI#XMKQSOf=bLoShp^FX4!}L2s25) z`y)f|HBsPJ&v8K{1p3%=Qf2{_p=u%@HcT2pKr>R|;QU#k&xwIbGHXaI`^hw|R?6}F zXz!=W>crf5?_kW$3W_pf)^6COG$unI>(;*IE31qYC+k!;&WwF4+t;zK(s&oumk72P zC{JfU=FqWjP0`3~TJXZ}edwdqTh-6_!$*o78xEPiRn{Ixnx#X73gAi~hAa-C1Ux(ERMa<0ZL?9!E!U&_MrN-lN#P{@8sb z>-F9^*BE%SgImAnfM6)0NdMgQoV0Lrq0(&ik|~uR&6HrgLe9KvrE9n>h77m_g>4BvFC13d?cInw z#q0|KAv>nw4!c_|n;f##rC5>TEdB$bn5$gdc}wevpJk!R$0IOg zg!GG@IOt4p%_Gnk-(8z3G}<^8iuodL-z_N)yBWf7v~NEy2F}1)$#awxGd+%1q1*)0 zb80r+$eAs+RMuqtFrSkPqcab~o+3Z$_q)egDWY>KZ#q$z!Q2#gKw47XMmS}Qu+_^f zpHLgCG^1SO&J_+3p+fwq=0$gRG{C(_)C`p;a-;MA=%F4fD_Z@G+51~KOqH{);B#^gd*2%g5<5Dan~1`B$o zr{9kn^qYM|d0777jRiL|id|OabA_m;p;P1!a@;nEKq^)#FXyb-Q+F6!Yey^fSLtk5 zhN{8-%A}d|1>Q);^nhOzG1Q)2EkN*@lm?-tAhzATL`14-b44_}topqheRRVROL)uS zuj5#)9G_IwM1^=AnrcC8zFxii6|oUp=dHUFbMK)t(tT zoTMxcN~0_zq?R{YquJ-|+$nWcR4G}_$E|B@!Srab-*F2cihpeMVV+BzM;ETpd#vSv z=29Q&V#MX*{yEwv(8`}7G5iaMUNslaS6rFvy8lualneL99s~HH7k3wH#-+k%$FK*d zFr(Z(l|LW&nl^<~HG6A;>l~O7K?U=HJMKL}RYuZ#J~k3APa#2G-6GUGEi0B-!s|4_ zt5?_lYGR$n2IlfA4Yc!sq2d8`tBZEz2~=s-f;OT&(Z=5!ePHDwi9+Tvk|h|rbBls- zlaMN&dt5vG^1OSK^Eu!1!8`uNGt%YN_@yzN0&jUF5z)jJ@OW5VU?nC1 z@YXRL?b>TDKb)7-ew~cNQ(G}o`P*ftVDvTi7;CmoUD|Un%UHvo&QHS#Q-|wmE))m6 z6@Z4s-uHQ1U@8lg#o`8#S&qcZoKKzPh5Rrjl4AmFPQ- z3oPf}=!heF_Xn|T@)Lf{s<4?M>lEw_NSR7f=LabsO<-w}=F!uI?P`(JBdMpa>Gw!I zN)v#TLtM;c0FQ8=Xuua*Phn`97b0-@fU=H~Eu5BBZO<)n{$_nYDq56ECKR&k(A8No zTuhio;3<&Ml_lTMU&*XN=DQbqpqz`&2aJIIfN0B4ZGnnES7!I>SBb4Ybdger?^H$* zcmrG>zt?{FMU2;i$Q{{294dw@tu-NuLH?nWMoxC-#H|yy_l4`VL@qvh5H0BvW)(K! zA+H}9l^|j1f>6fq4o*SVsom>`gokRCbTG{3R8-`FY4!z|7!aR~w1?c-vp{rNPs-ZS zE7{?Tu1M{<#G@&$fQ9AhRvdD^g3WA)22CSvh8B{8GLt}$@o7*>;W3r>FlOpREhsaB zJVPol4QD=t?`O?ru>x&i7ilVqVLA54hix#m3kt*e0PT%6ne z!AT~IqnR;)cbu(^161y&BCYf+1~ZY zxUxe(Yc@$CqYHfd^~-1}qiPS?)*V@Rh%}x@n{*i2!E^g zJWSq!rWg8&(9Bu-k@b(0=VJ#2U&1KLI&rJw_^@A$7^0m~(P)94uOvaXBuPSVlnq7) z?6h4cg6m%2W{iNawJ_|%@@3bV{xdYm?DYwQJ`XVACchAu3*QaJ ze8_G#a>7TQ5OGAJOXKSuwjOo7|3>8Z?W4lC@Xz}6<8qP+UOqBktD(GmBast@$CEv{ z>YtO_n%VD#GR{*i+i|W$p1wx`w8;||HrD%udQ1ZTkf%2sp=n6{Bp2q^iT&m~RDV2- zn(~1lg@`(lnw3y>AkL^}jns&}pB2dAA#shUpv!x~gX11ldS#FCak9$taIdJDz=}Yk zLT83rO7QU$=kg_mO9DR6TRNpiIdOfREvIB_FrrWI{uWtDEb=vRvUH89VGovMr#LRi zv~SzG6QMae2yUrt9S3+Q!Bza>iE%|cOTG&;Rl>S!6-vTuvhOtMGuFh(Nks}3lWUN5 zPKQ#=8W~XslI6F{Jj(X3_3#lwi2G3jXCE=RdyV@)Xd@bN1kjM)QP&rsm>Jph44^Hb zD=EpK>elnJt&3xin9^N-)5zU=HT#qhZ~$C`(ta=BLvGT?EuT}*c=$z64bVvn6g~bT ziqvY89S05L&?ehx;Sk++?HtMZL!wAcZ$f^H3rdKAH4jd4nq-DLj|HHRAn;Km8pzi2 z+nC!NAeo!lyC_(4x0Yp?tMT|H?XU)cUiEP?`V70IWh=>ITB%PBJ0L@9>YeA8x64W1~HR~j% z<<4FJqN1auKwQART(S zJB9O$A0nEaRa!Nx5drb3 zQGYBF_rw);t&5o1eiVYM_{iEgS=IA?5ZN|w#79Sr9rw(V6QpEW^u3lT!^ojD1`5bk2W~nS8a_S(Nlp?wYQ6sVMEJ{mq z^j_t_(XeBCUF5ftj}$#ndGeTn0W%1UZBdSlVg`Qr=)vA^%}-fWIQb#YVu?YgFLmTo zER;MZLC5Y!_n0ZJII!p+58LeDL<>9Jn3VlMOc|&gDc5!0K7V>Hm?o~8$rA+ zoknvgJU3#nglXUECCkazG=9po>fl}C?kUwT!2R^rIg-wm`wI7N#C0lrng?8jQu@NQ z+GQ|SDbBD!x`A-jKyfLDUw9p4wuA(~>^7)|>k-3HXp{rYTRx87th>F_GbfrDV+7OF z+4&;g&{^_HPPv}esV?CGn1xMWQS8g8h0cH@v8Cdl(X~C5Rw(0x*x{w>=!#52lD8X? zf6j%me=6?|oQ&rW++NcCbn?x%MU%(lI?E8vxM3!w#q&+S81!JC)6 zp*x*5#@bH!9CYh>aS)C6vy5Aw_cB#Lr4C?@gwQD3+a3z$?G-~s`SZkbVRz2QhmW}) z_PK`c0yT;xO5dDSzbM+gmHf<6dMldNkYwaH6;(clL0UQ1E|)amH{jy`irH5gkY3}O z&#V?yl9C)jMAz6^$%tdkQT;Ny!|1yRE4F@qDG{0rHALL_ z_?Ozq;!7=$eq!u*NA!(0crB!KB}y0qqusPU3zU{jsQwJ{Y_q`9z$Of4|B^`N$zG-YG1uG)V{b z9!fyfTb2fwg1k98kCUoS{)C+7-4ti>Q3yY3L$57@RkDP%0CF+_4W?JXai3PSJf&YV zBWw1X0&J0?{=CN*euVW%>K=DOIT*E22B8c?pDSx6W=Q z9o!@yWln-Hw5FA8(*3lnpZ5$JQ9ag)L5U(s#Pcgn@<@O=HVVbqkL9^KsFW)oj7?aK z<=>ZOmq}xxk<%qL2cC{RTEd~eSrhoa+Y|J3w;d--kGjpSNh!aE_Rwy8xw#CMLkhO$ zcm9ow#1t-2$;~vK1ANNNBHQy3q3<$JJQrMjf^`+Xerv?_4Iv}c;it|HD*yN(TxVo3 zLdc5*yan$i!^xIFA6%=$Sr!QU)rO!Hrp>xw8>IKT% zm5aiSv~QN6sb#9i+h_GO?v9-k@)fZ+1l+>8a|W{&OKzt}%j-i!6{xtRCI0k%vTK*O zvTF+r1nrVm5}}Nt5a#Exo;TEpAc*9W{J^<$UR#BSRaz`H-}YUruKI z2Q5eG>PXZEAL~Mr{yqN7;k(@Pm~PqLvf#a^@ED}mS9AKspRzm?EQQwcxs5Gv@L_+# zJ8@q4_94Vru$8E&lC-GkfAL@t_AARbfnTam2yehpHCmhod4g!?OFoY_=;P-(8jO6A zZy$ABnObk&XEc&gGsFei^!CONlm|yQR3ldh5j{ZdoNN{SCLw=iq;8D3+-e~_KjS~! zfD&o=;Zk9N_w&Q593{F6M>EZB7fB4L04SoCrkuToFTx=18JAiCM%A|w?$XZUH&HF;mR+o%w* z#p(!ld7h_Wx|a4TEF6dn2(;VUX)7%A?%6|TdQel98%POa3l)L#5G-^Ug__pQbC@`; z>WrU-Clb{!whssvHENVvJ{CAfcE7(nPj~Ydd}(&_P;ryfg3y&XRuEcJOJ0u0)WMFy z*v!EM%-~_?2%#+j06swvM`KePunUn1*uu)5pX9u~n}o>9jGsi4U7ktaQ50-xCFSJ= zR`pU)Gxf4DOyZvqkT-r3OBWYM9!5rYcXtMNRt5(r z3r1#cZf-^<7Dg5pdWZzQv!}g_u?M}qGwELt|G*FfJDWOLIl5Rm*c1JQX>8))>cUS# z0;wnZukqPA%FF)?-ro72R)E-p(Zkr0k(q&s(aw(X-&;7lh`T{R{yCukYYS&J2)oOu z0(N$AbutBuyMgUpNdFze%=BOF9bKJl|5nG$lo4zTwu6W|LwaTYA6-gH%Pak>#a||{ zu(EUfyA{OP|3lKn%KX2L^*_e;SIyt*{QE#4&Hsh_KcxRl_rHZ9Qu6XVVh*ORe+^Gs zjGyGM{&~zCOs&j#{(fX)=HfQtVltyQVK+6QXX9dGrsp;@=c4CeF)?N`Wd)nFa54WI zl(fCGi?O{a_%A33ID-`ghl_=soy*i1OwVb|#Y)d+%4tk*0ybx-=VUQu6~rrzZU22#e?gf+piE7;joHEM-1OWm+}!kROki_*6K)fBdN7#XgxMTy%*?`S z{`Y9iOnD?6oa~Gt(`jXAYyoC;w72-X;xB{q2rEhRldv!_{db9yt+9(aqyayPoRz(+ z$A4F-S=oVAU5x*-CNn1s3l|p~2QxP-DwgPrfSsHnp7<9gGZO>rKXCt=79NN) z5W^b(<);vUzgs|b;SqHL8@o6-sW~{<@{{~EB%;4s{_WmGeE*mfDJy4)gy&x#|4*M+ z1%Lj>+dr0ot<~REL_~kPEswG3KRR(Xb_1LJ-4UeSKdMYEjqNSKkoEmfhx)H_tN+Vn zv4NSHO*p~K^sHp3@3l9?$3FAK%X8dba z|Ch#mjQ<~-@ck|DZ(#t^?jL24@B)cejQuH|H=aYE8+im*Z*(kLj3Oo57-{E3v!1XXHKewq98{hI1^b( zF@O<36QGc`pY{b(g5W5n?F;}Q_y6?^l|qY*3n_$mk(L*S{|$VH4nvtwGL%&=wCmYx(mGZW zh3T!Ij}Ft%tlT&|-H8yq8~`Aq4#|9_E*iW3mjoeHSowyLoRa7%Z=d+#(Wsc1(TDx> z`{)S69>J%=b11}65zpnow(41p2RRTlfCz<0Dqkt5EUOnDA6F2Fa9WZpe>iNxqX5AZ zs`E}>QLgiLDlYsXna`IC&3V{z=}+UPNb8L9BnZKwNW8CoYiLX-5X59+0K)>9HbNu- z@z}zATz(-U`92BwbHB5~px}Gg{iFutL;(P#kRSDxT?KbI0O+9%Ig+V506=`+gjrgH z{eh@~q1qA_B-JyYKfO^4dv2#%IKfQ(MZgbZl(k+a#(HpC7%US5Dtdf zQujto{udVs zT6CC#BtQ|niMgO>zSNfqxF;9=^WP`d)?NCVx=A^yk9=(SAt2(p`E_TAbYt=_*%V35G-*(zN6*&tEk}f$W-@bQ%y1kmO|szBRm`m zKDUmZnigx54n|06O>W7dzCJ(iJ;C_os24#$12)o`phy3yn|R^0q5Z11a`L7+e?04| zA>UZ?7v7DZLR2~#zvSwo4AVrR&R=G^Fbr+s1sAWVliTg-(rbfuruS3kO-6>LI43od z`=2}3WHlX5R=kOLY5T032B%^MiexpbdGXw0m?=Vx@cdz8^Fb{3pL!9h>pnw^3{!1B zlz;vLPG8A5I>}-#&U`=(VCo{-q+&fYiepp?MG{H!xrnsz(@>M=b$b3K$?Nu>Z;EM{ z4$;^5C72w|2eEFJnF5vwc6zB3T~6wGY7;Lb&fnuIj1&9iZYD$VBd;8A5LP5&u!6m8 z1;t15k(|8JQW{g)>=U3T@~&6(t8NLVg22_azX$H3UovEn0)aL{KrHw_t?ncK|RX{pBV zC0_GU#R}ntt;McWUBL!5nv1uUmE#}BQZYXMA`QWr%;I%@v?ao3%aoJFq_0hrU;Tdm zc%|!r@#}zq&*x+Uu024v-tkJ!euEA@s{?N6FZ%Ve_=l5{kdn`tD5t`94 z4LaQuw^sY+#xs7$Vb+~@uyi_14u?DM6!(2a0b?>zL?Ii>xyxkcCB;;UY!@zr{et#_ zuHIzNPq^lqC2eH#f^HSphRB95W9+W1V^03F5;6`_h~eaRB2;(ASq_IU{>X;IpgwR7aa7{~{YQ;R}Bo`vFspS3R3^L%g=DrcdOVC74>C8bc3{dFM%S z+bqo=)s(>=2#059%Iy4Mp<)Ya?}`hnq87iU0k4KJgt7b=qGrR z(&{>k|Hi|?fU4RALz*C{>u{eQ6$X;vhgCI-07Q{wx#}KqO39BVmy# zZj`1M8w5bDkI+-osEdOFfP`}nkgjF=#8e=1AN4gUI=->Rm_~)M;|mRcu8i!q5Ra|2 z;(eK(EzMB1-FH?0g9IDQyr)9crZFGeTvB8mRRASI6g&<+L{enhK?)jckbQL=A0>(& zo}wN79X(7N#mW}5+S&WK-4lQCwYrQR&1160vI?f~6GP_ZtR+tz4b3!jfY25Z#{HF!ZE)8Xa^75lD7|FO?zT1_O+i1-3C!c->%p|{u-CWMBb|qz< zwfXrEL%B%6o^OIoTx`#s{%@CS+zlMny1s7@bj1B+h&2w&!}WSZ*gM+$*_;ONB?}YD z*g4j#=@>~vwCGB}(O4RaWw!QKe{$dM-&U9BQ!EzO*{0R3CMRpbVoWPNZd>GCS=eCS z!G8yvCib~+WnMe|)7JJUdBK5{K98X@UrNPXb@i(H$`-FtjOMXJmn9h=>&jJ9pA7>_ z*sX(7hnL?H&5Se+z^ZZC*Zq^3QAi?CxSjIi+IeDC2cAvdJ>q$P=SEPMy=n;ec`|T} zJ||C6#oU6@*M0rQpUcV4;^|At;eh?|`6P|DegZAi@5$P8_)=W=jZbD;3#1j!rv=++ z2ItqW7jm`10mevKK$~-OpF% ztg&Nmbv@^7`r>??PTBRvIAJ6 zJO}{$cH(lqnQN1tdi4B9_q_wk)7u{t8-not{n9_AGee6jevV~!R3uXqGS3dzv?XTb z@5uKouyp*~nnw}-ONX7twxZQDz zq`1p(Q&>o$VUit$K8@=U3t%w#sLh@$1BLpmZXW(e!H;K4HmB{YTPd=m>nE^wLXnnK z;_{}P7T@m=jekft%f``AA2v>f>1kfJGd^)7yzL$8`mfI2`)in$13TRdy&WAf0D1kt zPUU?Kr(`P`6kOX*DB?2H_s8oH3lqI+O@F^cSG7jQ{SbTV8moF+Te`<0w^CqzOBxi| z?Sfn&KF{vpX2W@$`lt=lyQDa^;g&JLIRCL8JvbBAR?fW%-qhdoW<{_nGd~`Mii$_T zr(w4_e*HO^&RysG)9&|t!ADT~Ts1Oifdv!Td zm1Qk`gkiWLY&QVm@CJ5c!?g>scaw3<2sG}NmThhorchaDlc zNhOuw($PM9{o>sGW(4)-m`8qN>?qPQwX6SdZz4^S`O%qk`dfgU#yqF^87YB62)Q9?;IDh3>f3E@M& zFl&NDhKZz@IMT&(4xAerx?fY8-w89h{5*7I^CwW<28qyqr5~A^=$xOMS)O&@+S(Q( z+WJHwP^cqEu{!$!bDa<$pEOw9P+uvbMZl}i4Y zc0@woxefQ5;dwBOQng`4=Y38{;wOc-zwgplb)1rO7Qw_Up%1+Hily_`ls{eg8**!2 z$dIVM+m30f|7~ICsDRD=SI-`bgX?MMdV3ugso3yMOi0Z{ZlW<~;M2XnsG~3V?r6mX z(9@cOx+^L@f8TWXR4}^#Ztr}Y;ouW2FtY41`MEJh$cza?_T=t+Xwj<>tT2E{TP5+& z!i~xMq4M1XNm$_;MxQ+2Z$HQ1?h=oJ%rq~0iWPCZ?>5iY^%7tJ!>(zY8LDwyZkG40 z4eJEY*u=7<&OxhtGV;<1zi8=#ubiB7xXAIJn4BeM+2m)(WTPSfQu%vXf&z^kHv{`7 z+<9{LKSxTdn9kY>Ny#4L`xAXh%^1CYPNJ`(1hnW^XH|}~9x%GPxstb_GYu+~lJ=fH zb}Sq@;~iW-eH2$$Z`yv|3v>ROSN);N7d`z%F$V=ej1*9L3&f7Un8h-Dl;r?}uq2L!{=aIF^;?hPtEHTg#fqpXu+g>WJEBq# z>od48K}JY^$FRfYaB8O~jehk)t@~r)Z%CO)y`VF=SdIjfpHdmfqLIud9J7 zKWmF*FdX*-KSKk6MA%8vHAvF)Jbfy4W7eDqBx7b|Jb;sQCGtGeL|ar<*s~Hw5sQ#+ zDp=9{-CIh~0T#+#x4+_W5y(T)j)9I$0T+hjoWn4I5o=O~vyc@2)BR z*p9B*n;W~X_iZ90BQHnrLO|;3%!6jOv4Pg(27^2cF6*^uuKJ5EwtP8tX)eE)B1I(? zf46=2d^!3N zGi8b?V{lgLr)Q@`BBX-%4x3#=LWg~n;evQr!GAdD{pEpXCR2S&tOq}YR zzp>1pB8V%x#{i!OimzI*dA9HIPqPz6&EOVKA@5Y#dA8#64&wuwwt}v zQdE4hrsn(Gg9Ig%*soTzKs#K7$AU!lEdVSm08<2g3OaSfMYo&3f^EzSVKgJsl;8o0 zJng~VJT>R^@{Hg@T}vDg(Bs^SneRshilI)7d+HPx3Rty<29-37M-+`_+0Jg=h#JlrD1kpOyVW@EGUNjb?e~0t=U=!_E2JK(>@B&MBBkkRf>_g7;>M6PL zOWO3QQBh9qvz|M1>ABA*f;&m-M6laZVu{IR^Qsh+4YIQGFT3Z@7SRJF7te{I*A@yD zP0N+Q{CV21<>eV$Zp8f^uPYQH5zDr4fThaRMUE;)x?xl7!Be+YI}SikSd)zggQ59D zK2l$D3g+8D?yIqhNr5z5=jDpINB~t7uvhS

    ?CIV0-*+-SExRL?j5c$lLiim7VtM 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 Date: Wed, 9 Jul 2025 18:05:43 +0200 Subject: [PATCH 06/13] [IMP] web_notify_upgrade: pre-commit execution --- web_notify_upgrade/README.rst | 30 ++++++++++--------- web_notify_upgrade/pyproject.toml | 3 ++ web_notify_upgrade/readme/CONTRIBUTORS.md | 2 ++ web_notify_upgrade/readme/CONTRIBUTORS.rst | 3 -- web_notify_upgrade/readme/DESCRIPTION.md | 7 +++++ web_notify_upgrade/readme/DESCRIPTION.rst | 7 ----- .../static/description/index.html | 16 +++++----- 7 files changed, 36 insertions(+), 32 deletions(-) create mode 100644 web_notify_upgrade/pyproject.toml create mode 100644 web_notify_upgrade/readme/CONTRIBUTORS.md delete mode 100644 web_notify_upgrade/readme/CONTRIBUTORS.rst create mode 100644 web_notify_upgrade/readme/DESCRIPTION.md delete mode 100644 web_notify_upgrade/readme/DESCRIPTION.rst diff --git a/web_notify_upgrade/README.rst b/web_notify_upgrade/README.rst index 55cf2f36c7fb..02a946cdd467 100644 --- a/web_notify_upgrade/README.rst +++ b/web_notify_upgrade/README.rst @@ -17,24 +17,26 @@ Web Notify Upgrade :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/16.0/web_notify_upgrade + :target: https://github.com/OCA/web/tree/18.0/web_notify_upgrade :alt: OCA/web .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_notify_upgrade + :target: https://translation.odoo-community.org/projects/web-18-0/web-18-0-web_notify_upgrade :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=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| -This module uses web_notify send a notification to every active users whenever a module has been installed or upgraded. +This module uses web_notify send a notification to every active users +whenever a module has been installed or upgraded. -The notification will ask the user to refresh the page to get the latest changes. +The notification will ask the user to refresh the page to get the latest +changes. +|image1| -.. figure:: https://raw.githubusercontent.com/OCA/web/16.0/web_notify_upgrade/static/description/notify.png - :alt: Refresh page +.. |image1| image:: https://raw.githubusercontent.com/OCA/web/18.0/web_notify_upgrade/static/description/notify.png **Table of contents** @@ -47,7 +49,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -55,19 +57,19 @@ Credits ======= Authors -~~~~~~~ +------- * Akretion Contributors -~~~~~~~~~~~~ +------------ -* `Akretion `_: +- `Akretion `__: - * Florian Mounier + - Florian Mounier Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -79,6 +81,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/web `_ project on GitHub. +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_notify_upgrade/pyproject.toml b/web_notify_upgrade/pyproject.toml new file mode 100644 index 000000000000..4231d0cccb3d --- /dev/null +++ b/web_notify_upgrade/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/web_notify_upgrade/readme/CONTRIBUTORS.md b/web_notify_upgrade/readme/CONTRIBUTORS.md new file mode 100644 index 000000000000..3b52e04e621e --- /dev/null +++ b/web_notify_upgrade/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- [Akretion](https://www.akretion.com): + - Florian Mounier diff --git a/web_notify_upgrade/readme/CONTRIBUTORS.rst b/web_notify_upgrade/readme/CONTRIBUTORS.rst deleted file mode 100644 index a4d0ad92299d..000000000000 --- a/web_notify_upgrade/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,3 +0,0 @@ -* `Akretion `_: - - * Florian Mounier diff --git a/web_notify_upgrade/readme/DESCRIPTION.md b/web_notify_upgrade/readme/DESCRIPTION.md new file mode 100644 index 000000000000..1e3a0476e3e7 --- /dev/null +++ b/web_notify_upgrade/readme/DESCRIPTION.md @@ -0,0 +1,7 @@ +This module uses web_notify send a notification to every active users +whenever a module has been installed or upgraded. + +The notification will ask the user to refresh the page to get the latest +changes. + +![](../static/description/notify.png) diff --git a/web_notify_upgrade/readme/DESCRIPTION.rst b/web_notify_upgrade/readme/DESCRIPTION.rst deleted file mode 100644 index 49656f4d69f1..000000000000 --- a/web_notify_upgrade/readme/DESCRIPTION.rst +++ /dev/null @@ -1,7 +0,0 @@ -This module uses web_notify send a notification to every active users whenever a module has been installed or upgraded. - -The notification will ask the user to refresh the page to get the latest changes. - - -.. figure:: ../static/description/notify.png - :alt: Refresh page diff --git a/web_notify_upgrade/static/description/index.html b/web_notify_upgrade/static/description/index.html index b666ccd0a466..6270b0935a02 100644 --- a/web_notify_upgrade/static/description/index.html +++ b/web_notify_upgrade/static/description/index.html @@ -369,12 +369,12 @@

    Web Notify Upgrade

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:2eb8752f0e8e35c9d1a164c644532665c2ea80d249dc3a430df2c6579fbdfae1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    -

    This module uses web_notify send a notification to every active users whenever a module has been installed or upgraded.

    -

    The notification will ask the user to refresh the page to get the latest changes.

    -
    -Refresh page -
    +

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

    +

    This module uses web_notify send a notification to every active users +whenever a module has been installed or upgraded.

    +

    The notification will ask the user to refresh the page to get the latest +changes.

    +

    image1

    Table of contents

      @@ -392,7 +392,7 @@

      Bug Tracker

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

      +feedback.

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

    @@ -421,7 +421,7 @@

    Maintainers

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

    -

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

    +

    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.

    From 11952bfcc0c30482e10956307418af4eee95d9eb Mon Sep 17 00:00:00 2001 From: David Beal Date: Wed, 3 Sep 2025 12:23:02 +0200 Subject: [PATCH 07/13] [MIG] web_notify_upgrade: Migration to 18.0 --- web_notify_upgrade/__manifest__.py | 2 +- web_notify_upgrade/models/ir_model.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web_notify_upgrade/__manifest__.py b/web_notify_upgrade/__manifest__.py index 24ae27e06544..4b38b46129e5 100644 --- a/web_notify_upgrade/__manifest__.py +++ b/web_notify_upgrade/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Web Notify Upgrade", "summary": "Notify active users when a module is installed or updated", - "version": "16.0.1.0.0", + "version": "18.0.1.0.0", "license": "AGPL-3", "depends": ["web_notify"], "author": "Akretion, Odoo Community Association (OCA)", diff --git a/web_notify_upgrade/models/ir_model.py b/web_notify_upgrade/models/ir_model.py index d973e4e36bc0..fdb4e5509290 100644 --- a/web_notify_upgrade/models/ir_model.py +++ b/web_notify_upgrade/models/ir_model.py @@ -43,7 +43,7 @@ def _get_active_users_to_notify_of_upgrade(self): OR age(now() AT TIME ZONE 'UTC', last_presence) < interval %s ) """, - ("%s seconds" % DISCONNECTION_TIMER, "%s seconds" % AWAY_TIMER), + (f"{DISCONNECTION_TIMER} seconds", f"{AWAY_TIMER} seconds"), ) return self.env["res.users"].browse([res[0] for res in self.env.cr.fetchall()]) From 783bbb418d5433c6183d811e4cc07775579d0d1e Mon Sep 17 00:00:00 2001 From: oca-ci Date: Mon, 8 Sep 2025 13:13:39 +0000 Subject: [PATCH 08/13] [UPD] Update web_notify_upgrade.pot --- web_notify_upgrade/i18n/web_notify_upgrade.pot | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/web_notify_upgrade/i18n/web_notify_upgrade.pot b/web_notify_upgrade/i18n/web_notify_upgrade.pot index 62a205b52152..68c79cfebbe9 100644 --- a/web_notify_upgrade/i18n/web_notify_upgrade.pot +++ b/web_notify_upgrade/i18n/web_notify_upgrade.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" +"Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -21,20 +21,17 @@ msgstr "" #. module: web_notify_upgrade #. odoo-python #: code:addons/web_notify_upgrade/models/ir_model.py:0 -#, python-format msgid "Reload" msgstr "" #. module: web_notify_upgrade #. odoo-python #: code:addons/web_notify_upgrade/models/ir_model.py:0 -#, python-format msgid "Upgrade Notification" msgstr "" #. module: web_notify_upgrade #. odoo-python #: code:addons/web_notify_upgrade/models/ir_model.py:0 -#, python-format msgid "Your odoo instance has been upgraded, please reload the web page." msgstr "" From 2d5d592df8c80512066e9f3aa3ad531151fadaf5 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 8 Sep 2025 13:18:20 +0000 Subject: [PATCH 09/13] [BOT] post-merge updates --- web_notify_upgrade/README.rst | 12 ++++++--- .../static/description/index.html | 26 ++++++++++++------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/web_notify_upgrade/README.rst b/web_notify_upgrade/README.rst index 02a946cdd467..09e5d119f152 100644 --- a/web_notify_upgrade/README.rst +++ b/web_notify_upgrade/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 Notify Upgrade ================== @@ -7,13 +11,13 @@ Web Notify Upgrade !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:2eb8752f0e8e35c9d1a164c644532665c2ea80d249dc3a430df2c6579fbdfae1 + !! source digest: sha256:c19c68174a60ed18be65dbd1dd4464927509139187f14f42a4c378d48d73312b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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 @@ -64,9 +68,9 @@ Authors Contributors ------------ -- `Akretion `__: +- `Akretion `__: - - Florian Mounier + - Florian Mounier Maintainers ----------- diff --git a/web_notify_upgrade/static/description/index.html b/web_notify_upgrade/static/description/index.html index 6270b0935a02..c9af547f9785 100644 --- a/web_notify_upgrade/static/description/index.html +++ b/web_notify_upgrade/static/description/index.html @@ -3,7 +3,7 @@ -Web Notify Upgrade +README.rst -
    -

    Web Notify Upgrade

    +
    + + +Odoo Community Association + +
    +

    Web Notify Upgrade

    -

    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 uses web_notify send a notification to every active users whenever a module has been installed or upgraded.

    The notification will ask the user to refresh the page to get the latest @@ -388,7 +393,7 @@

    Web Notify Upgrade

-

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

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Akretion
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -426,5 +431,6 @@

Maintainers

+ From ec61a849eb0bf961044e27cde5f66f7f95559a83 Mon Sep 17 00:00:00 2001 From: Matjaz Mozetic Date: Sat, 6 Jun 2026 11:59:54 +0000 Subject: [PATCH 10/13] Added translation using Weblate (Slovenian) --- web_notify_upgrade/i18n/sl.po | 39 +++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 web_notify_upgrade/i18n/sl.po diff --git a/web_notify_upgrade/i18n/sl.po b/web_notify_upgrade/i18n/sl.po new file mode 100644 index 000000000000..3197a089305a --- /dev/null +++ b/web_notify_upgrade/i18n/sl.po @@ -0,0 +1,39 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_notify_upgrade +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || " +"n%100==4 ? 2 : 3;\n" + +#. module: web_notify_upgrade +#: model:ir.model,name:web_notify_upgrade.model_ir_model_data +msgid "Model Data" +msgstr "" + +#. module: web_notify_upgrade +#. odoo-python +#: code:addons/web_notify_upgrade/models/ir_model.py:0 +msgid "Reload" +msgstr "" + +#. module: web_notify_upgrade +#. odoo-python +#: code:addons/web_notify_upgrade/models/ir_model.py:0 +msgid "Upgrade Notification" +msgstr "" + +#. module: web_notify_upgrade +#. odoo-python +#: code:addons/web_notify_upgrade/models/ir_model.py:0 +msgid "Your odoo instance has been upgraded, please reload the web page." +msgstr "" From 998e5f0c8170abcc2bd3373d3ec720cb62ab1496 Mon Sep 17 00:00:00 2001 From: Matjaz Mozetic Date: Sat, 6 Jun 2026 12:00:45 +0000 Subject: [PATCH 11/13] Translated using Weblate (Slovenian) Currently translated at 100.0% (4 of 4 strings) Translation: web-18.0/web-18.0-web_notify_upgrade Translate-URL: https://translation.odoo-community.org/projects/web-18-0/web-18-0-web_notify_upgrade/sl/ --- web_notify_upgrade/i18n/sl.po | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/web_notify_upgrade/i18n/sl.po b/web_notify_upgrade/i18n/sl.po index 3197a089305a..f2db0f7dc01e 100644 --- a/web_notify_upgrade/i18n/sl.po +++ b/web_notify_upgrade/i18n/sl.po @@ -6,7 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2026-06-06 12:01+0000\n" +"Last-Translator: Matjaz Mozetic \n" "Language-Team: none\n" "Language: sl\n" "MIME-Version: 1.0\n" @@ -14,26 +15,28 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || " "n%100==4 ? 2 : 3;\n" +"X-Generator: Weblate 5.15.2\n" #. module: web_notify_upgrade #: model:ir.model,name:web_notify_upgrade.model_ir_model_data msgid "Model Data" -msgstr "" +msgstr "Podatki modela" #. module: web_notify_upgrade #. odoo-python #: code:addons/web_notify_upgrade/models/ir_model.py:0 msgid "Reload" -msgstr "" +msgstr "Ponovno naloži" #. module: web_notify_upgrade #. odoo-python #: code:addons/web_notify_upgrade/models/ir_model.py:0 msgid "Upgrade Notification" -msgstr "" +msgstr "Obvestilo o nadgradnji" #. module: web_notify_upgrade #. odoo-python #: code:addons/web_notify_upgrade/models/ir_model.py:0 msgid "Your odoo instance has been upgraded, please reload the web page." msgstr "" +"Vaša instanca Odoo je bila posodobljena, prosimo, osvežite spletno stran." From 5d89ece991ee3d1f2e3118f65023dc9d89e0e32e Mon Sep 17 00:00:00 2001 From: Zina Rasoamanana Date: Mon, 14 Sep 2026 08:46:05 +0200 Subject: [PATCH 12/13] [IMP] web_notify_upgrade: auto fixes --- web_notify_upgrade/README.rst | 16 ++++++++-------- web_notify_upgrade/__manifest__.py | 2 +- web_notify_upgrade/static/description/index.html | 8 ++++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/web_notify_upgrade/README.rst b/web_notify_upgrade/README.rst index 09e5d119f152..1c508b3ed8da 100644 --- a/web_notify_upgrade/README.rst +++ b/web_notify_upgrade/README.rst @@ -21,13 +21,13 @@ Web Notify Upgrade :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/18.0/web_notify_upgrade + :target: https://github.com/OCA/web/tree/19.0/web_notify_upgrade :alt: OCA/web .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/web-18-0/web-18-0-web_notify_upgrade + :target: https://translation.odoo-community.org/projects/web-19-0/web-19-0-web_notify_upgrade :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=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -40,7 +40,7 @@ changes. |image1| -.. |image1| image:: https://raw.githubusercontent.com/OCA/web/18.0/web_notify_upgrade/static/description/notify.png +.. |image1| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_notify_upgrade/static/description/notify.png **Table of contents** @@ -53,7 +53,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -68,9 +68,9 @@ Authors Contributors ------------ -- `Akretion `__: +- `Akretion `__: - - Florian Mounier + - Florian Mounier Maintainers ----------- @@ -85,6 +85,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -This module is part of the `OCA/web `_ project on GitHub. +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_notify_upgrade/__manifest__.py b/web_notify_upgrade/__manifest__.py index 4b38b46129e5..2d393a049f33 100644 --- a/web_notify_upgrade/__manifest__.py +++ b/web_notify_upgrade/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Web Notify Upgrade", "summary": "Notify active users when a module is installed or updated", - "version": "18.0.1.0.0", + "version": "19.0.1.0.0", "license": "AGPL-3", "depends": ["web_notify"], "author": "Akretion, Odoo Community Association (OCA)", diff --git a/web_notify_upgrade/static/description/index.html b/web_notify_upgrade/static/description/index.html index c9af547f9785..e96502f770cc 100644 --- a/web_notify_upgrade/static/description/index.html +++ b/web_notify_upgrade/static/description/index.html @@ -374,12 +374,12 @@

Web Notify Upgrade

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:c19c68174a60ed18be65dbd1dd4464927509139187f14f42a4c378d48d73312b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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 uses web_notify send a notification to every active users whenever a module has been installed or upgraded.

The notification will ask the user to refresh the page to get the latest changes.

-

image1

+

image1

Table of contents

    @@ -397,7 +397,7 @@

    Bug Tracker

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

    +feedback.

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

@@ -426,7 +426,7 @@

Maintainers

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

-

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

+

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.

From 38973b54e84792174fc36c88b4f9c74cc3f64a0a Mon Sep 17 00:00:00 2001 From: Zina Rasoamanana Date: Mon, 14 Sep 2026 08:46:47 +0200 Subject: [PATCH 13/13] [MIG] web_notify_upgrade: Migration to 19.0 --- web_notify_upgrade/models/ir_model.py | 35 +++++++++++++++++---------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/web_notify_upgrade/models/ir_model.py b/web_notify_upgrade/models/ir_model.py index fdb4e5509290..f975223a377a 100644 --- a/web_notify_upgrade/models/ir_model.py +++ b/web_notify_upgrade/models/ir_model.py @@ -3,9 +3,9 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import logging -from odoo import _, api, models +from odoo import api, models -from odoo.addons.bus.models.bus_presence import AWAY_TIMER, DISCONNECTION_TIMER +from odoo.addons.mail.models.mail_presence import AWAY_TIMER, DISCONNECTION_TIMER _logger = logging.getLogger(__name__) @@ -36,7 +36,7 @@ def _get_active_users_to_notify_of_upgrade(self): self.env.cr.execute( """ SELECT user_id - FROM bus_presence + FROM mail_presence WHERE last_poll is not null AND ( age(now() AT TIME ZONE 'UTC', last_poll) < interval %s @@ -49,13 +49,22 @@ def _get_active_users_to_notify_of_upgrade(self): def _get_upgrade_notification_params(self): """Return the parameters to pass to the notify_info method.""" - return dict( - message=_( - "Your odoo instance has been upgraded, " "please reload the web page." - ) - + "
" - '", - title=_("Upgrade Notification"), - sticky=True, - ) + action = { + "type": "ir.actions.client", + "tag": "reload", + "context": { + "params": { + "button_name": self.env._("Reload"), + "button_icon": "fa-refresh", + } + }, + } + + return { + "message": self.env._( + "Your odoo instance has been upgraded, please reload the web page." + ), + "action": action, + "title": self.env._("Upgrade Notification"), + "sticky": True, + }