From a20924ba9558772cf862041a5912d87981d5fab8 Mon Sep 17 00:00:00 2001 From: Ioan Date: Thu, 24 Nov 2022 16:31:11 +0100 Subject: [PATCH 1/3] [15.0][ADD] website_whatsapp: Whatsapp integration --- website_whatsapp/README.rst | 91 ++++ website_whatsapp/__init__.py | 1 + website_whatsapp/__manifest__.py | 21 + website_whatsapp/i18n/website_whatsapp.pot | 72 +++ website_whatsapp/models/__init__.py | 2 + .../models/res_config_settings.py | 19 + website_whatsapp/models/website.py | 36 ++ website_whatsapp/readme/CONFIGURE.rst | 5 + website_whatsapp/readme/CONTRIBUTORS.rst | 2 + website_whatsapp/readme/DESCRIPTION.rst | 1 + website_whatsapp/static/description/icon.png | Bin 0 -> 29684 bytes .../static/description/index.html | 438 ++++++++++++++++++ website_whatsapp/static/src/scss/website.scss | 32 ++ website_whatsapp/templates/website.xml | 26 ++ .../views/res_config_settings.xml | 56 +++ 15 files changed, 802 insertions(+) create mode 100644 website_whatsapp/README.rst create mode 100644 website_whatsapp/__init__.py create mode 100644 website_whatsapp/__manifest__.py create mode 100644 website_whatsapp/i18n/website_whatsapp.pot create mode 100644 website_whatsapp/models/__init__.py create mode 100644 website_whatsapp/models/res_config_settings.py create mode 100644 website_whatsapp/models/website.py create mode 100644 website_whatsapp/readme/CONFIGURE.rst create mode 100644 website_whatsapp/readme/CONTRIBUTORS.rst create mode 100644 website_whatsapp/readme/DESCRIPTION.rst create mode 100644 website_whatsapp/static/description/icon.png create mode 100644 website_whatsapp/static/description/index.html create mode 100644 website_whatsapp/static/src/scss/website.scss create mode 100644 website_whatsapp/templates/website.xml create mode 100644 website_whatsapp/views/res_config_settings.xml diff --git a/website_whatsapp/README.rst b/website_whatsapp/README.rst new file mode 100644 index 0000000000..65ce8a5b31 --- /dev/null +++ b/website_whatsapp/README.rst @@ -0,0 +1,91 @@ +================ +Website Whatsapp +================ + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fwebsite-lightgray.png?logo=github + :target: https://github.com/OCA/website/tree/15.0/website_whatsapp + :alt: OCA/website +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/website-15-0/website-15-0-website_whatsapp + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/186/15.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Enable a WhatsApp floating button on the website to be able to send a message quickly + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure this module, you need to: + +#. Go to **Website > Configuration > Settings** +#. Search 'Use Whatsapp' option. +#. Fill in your 'WhatsApp number' and the other optional values + +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 smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Studio73 + +Contributors +~~~~~~~~~~~~ + +* `Studio73 `__: + * Ioan Galan + +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-ioans73| image:: https://github.com/ioans73.png?size=40px + :target: https://github.com/ioans73 + :alt: ioans73 + +Current `maintainer `__: + +|maintainer-ioans73| + +This module is part of the `OCA/website `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/website_whatsapp/__init__.py b/website_whatsapp/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/website_whatsapp/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/website_whatsapp/__manifest__.py b/website_whatsapp/__manifest__.py new file mode 100644 index 0000000000..8b9c4a32c8 --- /dev/null +++ b/website_whatsapp/__manifest__.py @@ -0,0 +1,21 @@ +# Copyright 2022 Studio73 - Ioan Galan +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + "name": "Website Whatsapp", + "summary": "Whatsapp integration", + "category": "Website", + "version": "15.0.1.0.0", + "website": "https://github.com/OCA/website", + "author": "Studio73, Odoo Community Association (OCA)", + "maintainers": ["ioans73"], + "license": "AGPL-3", + "depends": ["website"], + "data": [ + "templates/website.xml", + "views/res_config_settings.xml", + ], + "assets": { + "web.assets_frontend": ["/website_whatsapp/static/src/scss/website.scss"] + }, + "installable": True, +} diff --git a/website_whatsapp/i18n/website_whatsapp.pot b/website_whatsapp/i18n/website_whatsapp.pot new file mode 100644 index 0000000000..0b46f3a30c --- /dev/null +++ b/website_whatsapp/i18n/website_whatsapp.pot @@ -0,0 +1,72 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_whatsapp +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.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: website_whatsapp +#: model_terms:ir.ui.view,arch_db:website_whatsapp.res_config_settings_view_form +msgid "" +"" +msgstr "" + +#. module: website_whatsapp +#: model:ir.model,name:website_whatsapp.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: website_whatsapp +#: model:ir.model.fields,field_description:website_whatsapp.field_res_config_settings__whatsapp_text +#: model:ir.model.fields,field_description:website_whatsapp.field_website__whatsapp_text +msgid "Default text for Whatsapp" +msgstr "" + +#. module: website_whatsapp +#: model:ir.model.fields,help:website_whatsapp.field_res_config_settings__whatsapp_text +#: model:ir.model.fields,help:website_whatsapp.field_website__whatsapp_text +msgid "Default text to send as message" +msgstr "" + +#. module: website_whatsapp +#: model:ir.model.fields,help:website_whatsapp.field_res_config_settings__whatsapp_track_url +#: model:ir.model.fields,help:website_whatsapp.field_website__whatsapp_track_url +msgid "" +"Indicate in the user's message the URL of the page from which it was sent" +msgstr "" + +#. module: website_whatsapp +#: model:ir.model.fields,field_description:website_whatsapp.field_res_config_settings__whatsapp_track_url +#: model:ir.model.fields,field_description:website_whatsapp.field_website__whatsapp_track_url +msgid "Track URL" +msgstr "" + +#. module: website_whatsapp +#: model:ir.model.fields,field_description:website_whatsapp.field_res_config_settings__whatsapp_enabled +msgid "Use Whatsapp" +msgstr "" + +#. module: website_whatsapp +#: model:ir.model,name:website_whatsapp.model_website +msgid "Website" +msgstr "" + +#. module: website_whatsapp +#: model:ir.model.fields,field_description:website_whatsapp.field_res_config_settings__whatsapp_number +#: model:ir.model.fields,field_description:website_whatsapp.field_website__whatsapp_number +msgid "WhatsApp number" +msgstr "" + +#. module: website_whatsapp +#: model_terms:ir.ui.view,arch_db:website_whatsapp.res_config_settings_view_form +msgid "You must add the mobile number with the country prefix" +msgstr "" diff --git a/website_whatsapp/models/__init__.py b/website_whatsapp/models/__init__.py new file mode 100644 index 0000000000..ba62e1412d --- /dev/null +++ b/website_whatsapp/models/__init__.py @@ -0,0 +1,2 @@ +from . import res_config_settings +from . import website diff --git a/website_whatsapp/models/res_config_settings.py b/website_whatsapp/models/res_config_settings.py new file mode 100644 index 0000000000..c274d5c34f --- /dev/null +++ b/website_whatsapp/models/res_config_settings.py @@ -0,0 +1,19 @@ +# Copyright 2022 Studio73 - Ioan Galan +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class Website(models.Model): + _inherit = "website" + + whatsapp_number = fields.Char(string="WhatsApp number") + whatsapp_text = fields.Char( + "Default text for Whatsapp", + help="Default text to send as message", + ) + whatsapp_track_url = fields.Boolean( + "Track URL", + help="Indicate in the user's message the URL of the page from which it " + "was sent", + ) diff --git a/website_whatsapp/models/website.py b/website_whatsapp/models/website.py new file mode 100644 index 0000000000..48a9cd60e8 --- /dev/null +++ b/website_whatsapp/models/website.py @@ -0,0 +1,36 @@ +# Copyright 2022 Studio73 - Ioan Galan +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + @api.depends("website_id.whatsapp_number") + def _compute_whatsapp_enabled(self): + for record in self: + record.update({"whatsapp_enabled": bool(record.whatsapp_number)}) + + def _inverse_whatsapp_enabled(self): + for record in self: + if not record.whatsapp_enabled: + record.website_id.update({"whatsapp_number": False}) + + whatsapp_number = fields.Char( + related="website_id.whatsapp_number", + readonly=False, + ) + whatsapp_text = fields.Char( + related="website_id.whatsapp_text", + readonly=False, + ) + whatsapp_track_url = fields.Boolean( + related="website_id.whatsapp_track_url", + readonly=False, + ) + whatsapp_enabled = fields.Boolean( + string="Use Whatsapp", + compute="_compute_whatsapp_enabled", + inverse="_inverse_whatsapp_enabled", + ) diff --git a/website_whatsapp/readme/CONFIGURE.rst b/website_whatsapp/readme/CONFIGURE.rst new file mode 100644 index 0000000000..69bce37d8e --- /dev/null +++ b/website_whatsapp/readme/CONFIGURE.rst @@ -0,0 +1,5 @@ +To configure this module, you need to: + +#. Go to **Website > Configuration > Settings** +#. Search 'Use Whatsapp' option. +#. Fill in your 'WhatsApp number' and the other optional values diff --git a/website_whatsapp/readme/CONTRIBUTORS.rst b/website_whatsapp/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..946245f774 --- /dev/null +++ b/website_whatsapp/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* `Studio73 `__: + * Ioan Galan diff --git a/website_whatsapp/readme/DESCRIPTION.rst b/website_whatsapp/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..676ff11fa3 --- /dev/null +++ b/website_whatsapp/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Enable a WhatsApp floating button on the website to be able to send a message quickly diff --git a/website_whatsapp/static/description/icon.png b/website_whatsapp/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e8334ea826482d582ce8d326d91a51748e0a9cf1 GIT binary patch literal 29684 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%0A|@ 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 Mik5PTqD9F60Gu3gS^xk5 literal 0 HcmV?d00001 diff --git a/website_whatsapp/static/description/index.html b/website_whatsapp/static/description/index.html new file mode 100644 index 0000000000..f7eb29f6a1 --- /dev/null +++ b/website_whatsapp/static/description/index.html @@ -0,0 +1,438 @@ + + + + + + +Website Whatsapp + + + +
+

Website Whatsapp

+ + +

Beta License: AGPL-3 OCA/website Translate me on Weblate Try me on Runbot

+

Enable a WhatsApp floating button on the website to be able to send a message quickly

+

Table of contents

+ +
+

Configuration

+

To configure this module, you need to:

+
    +
  1. Go to Website > Configuration > Settings
  2. +
  3. Search ‘Use Whatsapp’ option.
  4. +
  5. Fill in your ‘WhatsApp number’ and the other optional values
  6. +
+
+
+

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 smashing it by providing a detailed and welcomed +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Studio73
  • +
+
+
+

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.

+

Current maintainer:

+

ioans73

+

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

+

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

+
+
+
+ + diff --git a/website_whatsapp/static/src/scss/website.scss b/website_whatsapp/static/src/scss/website.scss new file mode 100644 index 0000000000..ead644b778 --- /dev/null +++ b/website_whatsapp/static/src/scss/website.scss @@ -0,0 +1,32 @@ +#whatsapp_icon { + z-index: 9999; + position: fixed; + bottom: 50px; + right: 30px; + background: #01e675; + width: 50px; + height: 50px; + text-decoration: none; + -webkit-border-radius: 35px; + -moz-border-radius: 35px; + border-radius: 35px; + -webkit-transition: all 0.3s linear; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + border: 3px solid white; + display: flex; + justify-content: center; + align-items: center; + i { + color: #fff; + font-size: 30px; + } + @media (max-width: 576px) { + & { + bottom: 90px; + right: 10px; + } + } +} diff --git a/website_whatsapp/templates/website.xml b/website_whatsapp/templates/website.xml new file mode 100644 index 0000000000..c206c3163d --- /dev/null +++ b/website_whatsapp/templates/website.xml @@ -0,0 +1,26 @@ + + + + diff --git a/website_whatsapp/views/res_config_settings.xml b/website_whatsapp/views/res_config_settings.xml new file mode 100644 index 0000000000..af5f0d7136 --- /dev/null +++ b/website_whatsapp/views/res_config_settings.xml @@ -0,0 +1,56 @@ + + + + res.config.settings + + + +
+
+ +
+
+
+
+
+
+
+
From 0f0a820394294b2938a57586e6694630659ab010 Mon Sep 17 00:00:00 2001 From: Ioan Date: Tue, 17 Jan 2023 17:18:16 +0100 Subject: [PATCH 2/3] [IMP] website_whataspp: pre-commit stuff --- setup/website_whatsapp/odoo/addons/website_whatsapp | 1 + setup/website_whatsapp/setup.py | 6 ++++++ 2 files changed, 7 insertions(+) create mode 120000 setup/website_whatsapp/odoo/addons/website_whatsapp create mode 100644 setup/website_whatsapp/setup.py diff --git a/setup/website_whatsapp/odoo/addons/website_whatsapp b/setup/website_whatsapp/odoo/addons/website_whatsapp new file mode 120000 index 0000000000..c16fca894b --- /dev/null +++ b/setup/website_whatsapp/odoo/addons/website_whatsapp @@ -0,0 +1 @@ +../../../../website_whatsapp \ No newline at end of file diff --git a/setup/website_whatsapp/setup.py b/setup/website_whatsapp/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/website_whatsapp/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 1ae761d1f1d1f1f1c814eecd4b8454b39135a413 Mon Sep 17 00:00:00 2001 From: Ioan Date: Tue, 17 Jan 2023 17:30:46 +0100 Subject: [PATCH 3/3] [MIG] website_whatsapp: Migration to 16.0 --- website_whatsapp/__manifest__.py | 2 +- .../models/res_config_settings.py | 35 ++++++++++++++----- website_whatsapp/models/website.py | 35 +++++-------------- .../views/res_config_settings.xml | 7 ++-- 4 files changed, 41 insertions(+), 38 deletions(-) diff --git a/website_whatsapp/__manifest__.py b/website_whatsapp/__manifest__.py index 8b9c4a32c8..a813512100 100644 --- a/website_whatsapp/__manifest__.py +++ b/website_whatsapp/__manifest__.py @@ -4,7 +4,7 @@ "name": "Website Whatsapp", "summary": "Whatsapp integration", "category": "Website", - "version": "15.0.1.0.0", + "version": "16.0.1.0.0", "website": "https://github.com/OCA/website", "author": "Studio73, Odoo Community Association (OCA)", "maintainers": ["ioans73"], diff --git a/website_whatsapp/models/res_config_settings.py b/website_whatsapp/models/res_config_settings.py index c274d5c34f..48a9cd60e8 100644 --- a/website_whatsapp/models/res_config_settings.py +++ b/website_whatsapp/models/res_config_settings.py @@ -1,19 +1,36 @@ # Copyright 2022 Studio73 - Ioan Galan # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models +from odoo import api, fields, models -class Website(models.Model): - _inherit = "website" +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" - whatsapp_number = fields.Char(string="WhatsApp number") + @api.depends("website_id.whatsapp_number") + def _compute_whatsapp_enabled(self): + for record in self: + record.update({"whatsapp_enabled": bool(record.whatsapp_number)}) + + def _inverse_whatsapp_enabled(self): + for record in self: + if not record.whatsapp_enabled: + record.website_id.update({"whatsapp_number": False}) + + whatsapp_number = fields.Char( + related="website_id.whatsapp_number", + readonly=False, + ) whatsapp_text = fields.Char( - "Default text for Whatsapp", - help="Default text to send as message", + related="website_id.whatsapp_text", + readonly=False, ) whatsapp_track_url = fields.Boolean( - "Track URL", - help="Indicate in the user's message the URL of the page from which it " - "was sent", + related="website_id.whatsapp_track_url", + readonly=False, + ) + whatsapp_enabled = fields.Boolean( + string="Use Whatsapp", + compute="_compute_whatsapp_enabled", + inverse="_inverse_whatsapp_enabled", ) diff --git a/website_whatsapp/models/website.py b/website_whatsapp/models/website.py index 48a9cd60e8..c274d5c34f 100644 --- a/website_whatsapp/models/website.py +++ b/website_whatsapp/models/website.py @@ -1,36 +1,19 @@ # Copyright 2022 Studio73 - Ioan Galan # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import api, fields, models +from odoo import fields, models -class ResConfigSettings(models.TransientModel): - _inherit = "res.config.settings" +class Website(models.Model): + _inherit = "website" - @api.depends("website_id.whatsapp_number") - def _compute_whatsapp_enabled(self): - for record in self: - record.update({"whatsapp_enabled": bool(record.whatsapp_number)}) - - def _inverse_whatsapp_enabled(self): - for record in self: - if not record.whatsapp_enabled: - record.website_id.update({"whatsapp_number": False}) - - whatsapp_number = fields.Char( - related="website_id.whatsapp_number", - readonly=False, - ) + whatsapp_number = fields.Char(string="WhatsApp number") whatsapp_text = fields.Char( - related="website_id.whatsapp_text", - readonly=False, + "Default text for Whatsapp", + help="Default text to send as message", ) whatsapp_track_url = fields.Boolean( - related="website_id.whatsapp_track_url", - readonly=False, - ) - whatsapp_enabled = fields.Boolean( - string="Use Whatsapp", - compute="_compute_whatsapp_enabled", - inverse="_inverse_whatsapp_enabled", + "Track URL", + help="Indicate in the user's message the URL of the page from which it " + "was sent", ) diff --git a/website_whatsapp/views/res_config_settings.xml b/website_whatsapp/views/res_config_settings.xml index af5f0d7136..7e30cd2eff 100644 --- a/website_whatsapp/views/res_config_settings.xml +++ b/website_whatsapp/views/res_config_settings.xml @@ -4,8 +4,11 @@ res.config.settings - -
+ +