diff --git a/all_in_one_whatsapp_integration/README.rst b/all_in_one_whatsapp_integration/README.rst
new file mode 100644
index 000000000..42d5048f2
--- /dev/null
+++ b/all_in_one_whatsapp_integration/README.rst
@@ -0,0 +1,47 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+All in one Whatsapp Connector
+=============================
+Send whatsapp messages to the partner
+
+Installation
+============
+- www.odoo.com/documentation/15.0/setup/install.html
+- pip install twilio
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+License
+-------
+General Public License, Version 3 (AGPL v3).
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Credits
+-------
+Developer:(V15) - Jumana Jabin MP , Contact: odoo@cybrosys.com
+
+Contacts
+--------
+* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
+
+Bug Tracker
+-----------
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Maintainer
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit https://www.cybrosys.com
+
+Further information
+===================
+HTML Description: ``__
diff --git a/all_in_one_whatsapp_integration/__init__.py b/all_in_one_whatsapp_integration/__init__.py
new file mode 100644
index 000000000..3ed3d9118
--- /dev/null
+++ b/all_in_one_whatsapp_integration/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Jumana Jabin MP(odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from . import controllers
+from . import models
+from . import wizard
diff --git a/all_in_one_whatsapp_integration/__manifest__.py b/all_in_one_whatsapp_integration/__manifest__.py
new file mode 100644
index 000000000..910088316
--- /dev/null
+++ b/all_in_one_whatsapp_integration/__manifest__.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Jumana jabin MP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+{
+ 'name': "All in one Whatsapp Connector",
+ 'version': '15.0.1.0.0',
+ 'category': 'Extra Tools',
+ 'summary': """All in one Whatsapp Integration for Sale Order, Purchase Order, Transfer,Whatsapp,Whatsapp Integration""",
+ 'description': """All in one Whatsapp Integration for Sale Order, Purchase Order, Transfer, Whatsapp Integration, Whatsapp Connector""",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['web', 'sale', 'stock', 'purchase', 'account',
+ 'website_livechat', 'contacts'],
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'data/account_move_data.xml',
+ 'data/purchase_order_data.xml',
+ 'data/sale_order_data.xml',
+ 'data/stock_picking_data.xml',
+ 'views/sale_order_views.xml',
+ 'views/purchase_order_views.xml',
+ 'views/stock_picking_views.xml',
+ 'views/account_move_views.xml',
+ 'views/mail_template_views.xml',
+ 'views/res_config_settings_views.xml',
+ 'views/mail_channel_views.xml',
+ 'wizard/send_whatsapp_message_views.xml',
+ ],
+ 'external_dependencies': {
+ 'python': ['html2text']
+ },
+ 'images': ['static/description/banner.png'],
+ 'license': "AGPL-3",
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/all_in_one_whatsapp_integration/controllers/__init__.py b/all_in_one_whatsapp_integration/controllers/__init__.py
new file mode 100644
index 000000000..a90b18de9
--- /dev/null
+++ b/all_in_one_whatsapp_integration/controllers/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Jumana Jabin MP(odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from . import all_in_one_whatsapp_integration
diff --git a/all_in_one_whatsapp_integration/controllers/all_in_one_whatsapp_integration.py b/all_in_one_whatsapp_integration/controllers/all_in_one_whatsapp_integration.py
new file mode 100644
index 000000000..a155b6bde
--- /dev/null
+++ b/all_in_one_whatsapp_integration/controllers/all_in_one_whatsapp_integration.py
@@ -0,0 +1,90 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Jumana Jabin MP(odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from odoo import Command, http
+from odoo.http import request
+
+
+class Webhook(http.Controller):
+ """Cloud api webhook controller """
+
+ @http.route('/whatsapp_message', type='json', auth='public',
+ methods=['GET', 'POST'],
+ csrf=False)
+ def get_webhook_url(self, **kwargs, ):
+ """Function create portal user and send message to live chat"""
+ if kwargs:
+ return kwargs['hub.challenge']
+ else:
+ active_user = request.env['res.users'].browse(request.uid)
+ data = request.jsonrequest
+ number = data['entry'][0]['changes'][0]['value']
+ if number['contacts']:
+ profile = number['contacts'][0]
+ channel_partner_ids = [active_user.partner_id.id]
+ to_partner = request.env['res.partner'].sudo().search([
+ ('phone', '=', str(number['metadata']['display_phone_number']))
+ ])
+ if to_partner:
+ channel_partner_ids.append(to_partner.id)
+ contact = request.env['res.partner'].sudo().search([
+ ('name', '=', profile['profile']['name']),
+ ('phone', '=', profile['wa_id'])
+ ])
+ if contact:
+ channel_partner_ids.append(contact.id)
+ else:
+ contact = request.env['res.users'].sudo().create({
+ 'name': profile['profile']['name'],
+ 'company_id': active_user.company_id.id,
+ 'login': profile['profile']['name'],
+ 'groups_id': [
+ Command.set(
+ [request.env.ref('base.group_portal').id])],
+ }).partner_id
+ contact.phone = profile['wa_id']
+ channel_partner_ids.append(contact.id)
+ message_content = \
+ data['entry'][0]['changes'][0]['value']['messages'][0]
+ channel = request.env['mail.channel'].sudo().search([
+ ('phone', '=', profile['wa_id']),
+ ('channel_partner_ids', 'in', channel_partner_ids)
+ ])
+ if not channel:
+ channel = request.env['mail.channel'].sudo().create({
+ 'channel_partner_ids': [(4, contact.id),
+ (4, to_partner.id)],
+ 'channel_type': 'livechat',
+ 'name': profile['profile']['name'],
+ 'phone': profile['wa_id'],
+ 'livechat_operator_id': "3"
+ })
+ uuid = channel.uuid
+ mail_channel = request.env["mail.channel"].sudo().search(
+ [('uuid', '=', uuid)], limit=1)
+ body = message_content['text']['body']
+ mail_channel.with_context(
+ mail_create_nosubscribe=True).message_post(
+ author_id=contact.id,
+ body=body,
+ message_type='comment',
+ subtype_xmlid='mail.mt_comment'
+ )
diff --git a/all_in_one_whatsapp_integration/data/account_move_data.xml b/all_in_one_whatsapp_integration/data/account_move_data.xml
new file mode 100644
index 000000000..fea79a604
--- /dev/null
+++ b/all_in_one_whatsapp_integration/data/account_move_data.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+ Whatsapp Template for Invoice
+ Invoice Template
+
+ True
+
+
+
+
+ Hello **
+ Greetings from **
+
+
+ Your invoice number ** with amount **
+ from .
+
+
+
+ This invoice is already paid and Amount due is **
+
+
+ Please remit payment at your earliest convenience. Amount due is **
+
+
+ The invoice date is
+
+ Your order details are as follows:
+
+
+
+ *Product: *
+ *Qty: *
+ *Price:*
+
+
+
+ If you have any questions, please feel free to contact us.
+ ]]>
+
+
+
+
diff --git a/all_in_one_whatsapp_integration/data/purchase_order_data.xml b/all_in_one_whatsapp_integration/data/purchase_order_data.xml
new file mode 100644
index 000000000..d8ed28a43
--- /dev/null
+++ b/all_in_one_whatsapp_integration/data/purchase_order_data.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+ Whatsapp Template for Purchase Order
+ Purchase Order Template
+
+ True
+
+
+
+
+ Hello **,
+ Greetings from **
+
+
+ Your Request For Quotation (RFQ) ** with amount ** is ready.
+
+ As per the planned date for receipt of products on
+
+
+ We have received your order **. It will be shipped soon
+
+ Order details are as follows:
+
+
+ *Product: *
+ *Qty: *
+
+
+
+
+
+ Your order ** is ready. It will be shipped soon
+
+ Order details are as follows:
+
+
+ *Product: *
+ *Qty: *
+
+
+
+
+
+ Your order ** is ready. It will be shipped soon
+
+ Order details are as follows:
+
+
+ *Product: *
+ *Qty: *
+
+
+
+
+
+ Your order ** is shipped.
+
+ Order details are as follows:
+
+
+ *Product: *
+ *Qty: *
+
+
+
+
+
+
+ If you have any questions, please feel free to contact us.
+
+
+ ]]>
+
+
+
+
diff --git a/all_in_one_whatsapp_integration/doc/RELEASE_NOTES.md b/all_in_one_whatsapp_integration/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..8785b9849
--- /dev/null
+++ b/all_in_one_whatsapp_integration/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 12.01.2024
+#### Version 15.0.1.0.0
+#### ADD
+ - Initial Commit for All in one Whatsapp
diff --git a/all_in_one_whatsapp_integration/models/__init__.py b/all_in_one_whatsapp_integration/models/__init__.py
new file mode 100644
index 000000000..e6b82fd00
--- /dev/null
+++ b/all_in_one_whatsapp_integration/models/__init__.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Jumana Jabin MP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from . import account_move
+from . import mail_channel
+from . import mail_message
+from . import mail_template
+from . import purchase_order
+from . import res_config_settings
+from . import sale_order
+from . import stock_picking
diff --git a/all_in_one_whatsapp_integration/models/account_move.py b/all_in_one_whatsapp_integration/models/account_move.py
new file mode 100644
index 000000000..e7c504c92
--- /dev/null
+++ b/all_in_one_whatsapp_integration/models/account_move.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Jumana Jabin MP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+import base64
+import html2text
+from odoo import models, _
+from odoo.exceptions import ValidationError
+
+
+class AccountMove(models.Model):
+ """Inherited the module for adding a button that helps to send WhatsApp
+ message to the customer."""
+ _inherit = 'account.move'
+
+ def action_send_by_whatsapp(self):
+ """This method is invoked when the 'send_by_whatsapp' button is
+ clicked. It opens a wizard containing the message to be sent to the
+ WhatsApp web page."""
+ if not self.partner_id.mobile:
+ raise ValidationError(_('Add a WhatsApp mobile number to the '
+ ' sale order partner!'))
+ if not self.partner_id.mobile.startswith('+'):
+ raise ValidationError(_('Please add a valid mobile number along '
+ ' with a valid country code!'))
+ twilio_whatsapp = self.env['ir.config_parameter'].sudo().get_param(
+ 'all_in_one_whatsapp_integration.twilio_whatsapp')
+ if not twilio_whatsapp.startswith('+'):
+ raise ValidationError(_('Please add a valid Twilio mobile number '
+ ' along with "+".'))
+ template_id = self.env.ref(
+ 'all_in_one_whatsapp_integration.account_move_whatsapp_template').id
+ mail_template_values = (self.env['mail.template']
+ .browse(template_id).with_context(
+ tpl_partners_only=True).generate_email([self.id],
+ fields=['body_html']))
+ body_html = mail_template_values[self.id].pop('body_html', '')
+ whatsapp_message = html2text.html2text(body_html)
+ report = self.env.ref("account.account_invoices")._render_qweb_pdf(
+ self.ids, data={"report_type": "pdf"})[0]
+ report_attachment = self.env['ir.attachment'].sudo().create({
+ 'name': 'Invoice Report',
+ 'type': 'binary',
+ 'datas': base64.b64encode(report),
+ "store_fname": base64.b64encode(report),
+ 'mimetype': 'application/pdf',
+ 'res_model': 'account.move',
+ })
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': _('WhatsApp Message'),
+ 'res_model': 'send.whatsapp.message',
+ 'target': 'new',
+ 'view_mode': 'form',
+ 'view_type': 'form',
+ 'context': {'default_whatsapp_message': whatsapp_message,
+ 'default_attachment_ids': [(4, report_attachment.id)]},
+ }
diff --git a/all_in_one_whatsapp_integration/models/mail_channel.py b/all_in_one_whatsapp_integration/models/mail_channel.py
new file mode 100644
index 000000000..8b4373a32
--- /dev/null
+++ b/all_in_one_whatsapp_integration/models/mail_channel.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Jumana Jabin MP(odoo@cybrosys.com)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# along with this program. If not, see .
+#
+###############################################################################
+from odoo import fields, models
+
+
+class MailChannel(models.Model):
+ """This class extends the base 'mail.channel' model in Odoo to include a
+ 'phone' field for storing the phone number associated with the
+ communication channel."""
+ _inherit = 'mail.channel'
+
+ phone = fields.Char(string='Phone', help='Phone number associated with '
+ 'the communication channel')
diff --git a/all_in_one_whatsapp_integration/models/mail_message.py b/all_in_one_whatsapp_integration/models/mail_message.py
new file mode 100644
index 000000000..df3952eaf
--- /dev/null
+++ b/all_in_one_whatsapp_integration/models/mail_message.py
@@ -0,0 +1,66 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Jumana Jabin MP(odoo@cybrosys.com)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# along with this program. If not, see .
+#
+###############################################################################
+import http.client
+import json
+from odoo import api, models
+
+
+class MailMessage(models.Model):
+ """This class extends the base 'mail.message' model in Odoo to include
+ functionality for sending WhatsApp messages using Facebook Graph API.
+ """
+ _inherit = 'mail.message'
+
+ @api.model_create_multi
+ def create(self, values_list):
+ """This method creates a new mail message and then sends the message's
+ body as a WhatsApp message using the Facebook Graph API."""
+ bearer_token = self.env['ir.config_parameter'].sudo().get_param(
+ 'all_in_one_whatsapp_integration.bearer_token')
+ whatsapp_no = self.env['ir.config_parameter'].sudo().get_param(
+ 'all_in_one_whatsapp_integration.whatsapp_no')
+ if (bearer_token and whatsapp_no and values_list[0]['model'] ==
+ 'mail.channel'):
+ if values_list[0]['email_from']:
+ mail_channel = self.env['mail.channel'].browse(
+ values_list[0]['res_id'])
+ if mail_channel:
+ conn = http.client.HTTPSConnection("graph.facebook.com")
+ payload = json.dumps({
+ "messaging_product": "whatsapp",
+ "recipient_type": "individual",
+ "to": mail_channel.phone,
+ "type": 'text',
+ "text": {
+ "preview_url": False,
+ "body": values_list[0]['body']
+ }
+ })
+ headers = {
+ 'Content-Type': 'application/json',
+ 'Authorization': f'Bearer {bearer_token}'
+ }
+ conn.request("POST", f"/v17.0/{whatsapp_no}/messages",
+ payload,
+ headers)
+ return super(MailMessage, self).create(values_list)
diff --git a/all_in_one_whatsapp_integration/models/mail_template.py b/all_in_one_whatsapp_integration/models/mail_template.py
new file mode 100644
index 000000000..ce9002d1d
--- /dev/null
+++ b/all_in_one_whatsapp_integration/models/mail_template.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Jumana Jabin MP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from odoo import fields, models
+
+
+class MailTemplate(models.Model):
+ """Inherited this model for adding some fields that help to check the
+ message template is a delivery, invoice, purchase, or sale order
+ template """
+ _inherit = 'mail.template'
+
+ is_delivery_template = fields.Boolean(string='Delivery Template',
+ help="To check the message "
+ "template for"
+ "sending delivery to whatsapp")
+ is_invoice_template = fields.Boolean(string='Invoice Template',
+ help="To check the message "
+ "template for"
+ "sending delivery to whatsapp")
+ is_purchase_template = fields.Boolean(string="Purchase Template",
+ help="To check the message "
+ "template for"
+ "sending purchase order "
+ "to whatsapp")
+ is_sale_template = fields.Boolean(string="Sale Template",
+ help="To check the message template for"
+ "sending sale order to whatsapp")
diff --git a/all_in_one_whatsapp_integration/models/purchase_order.py b/all_in_one_whatsapp_integration/models/purchase_order.py
new file mode 100644
index 000000000..91d531f01
--- /dev/null
+++ b/all_in_one_whatsapp_integration/models/purchase_order.py
@@ -0,0 +1,79 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Jumana Jabin MP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+import base64
+import html2text
+from odoo import models, _
+from odoo.exceptions import ValidationError
+
+
+class PurchaseOrder(models.Model):
+ """Inherited the module for adding a button that helps to send whatsapp
+ message to the customer """
+ _inherit = "purchase.order"
+
+ def action_send_by_whatsapp(self):
+ """When you click the send_by_whatsapp button, it will open a wizard
+ that contain the message to send to the whatsapp web page."""
+ if not self.partner_id.mobile:
+ raise ValidationError(_('Add whatsapp mobile number to the '
+ 'sale order partner!'))
+ if not self.partner_id.mobile[0] == "+":
+ raise ValidationError(_('Please add a valid mobile'
+ ' number along with a valid country code!'))
+ twilio_whatsapp = (self.env["ir.config_parameter"].sudo().get_param
+ ("all_in_one_whatsapp_integration.twilio_whatsapp"))
+ if not twilio_whatsapp:
+ raise ValidationError(_("Please add your valid Twilio"
+ " whatsapp number in settings"))
+ if twilio_whatsapp[0] != "+":
+ raise ValidationError(_("Please add a valid "
+ " Twilio mobile number along with " + "."))
+ template_id = self.env.ref("all_in_one_whatsapp_integration."
+ "purchase_order_whatsapp_template").id
+ mail_template_values = (
+ self.env["mail.template"]
+ .with_context(tpl_partners_only=True)
+ .browse(template_id)
+ .generate_email([self.id], fields=["body_html"]))
+ body_html = dict(mail_template_values)[self.id].pop("body_html", "")
+ whatsapp_message = html2text.html2text(body_html)
+ report = self.env.ref("purchase."
+ "action_report_purchase_order")._render_qweb_pdf(
+ self.ids, data={"report_type": "pdf"})[0]
+ report_attachment = self.env["ir.attachment"].sudo().create({
+ "name": "Purchase Report",
+ "type": "binary",
+ "datas": base64.b64encode(report),
+ "store_fname": base64.b64encode(report),
+ "mimetype": "application/pdf",
+ "res_model": "purchase.order", })
+ return {
+ "type": "ir.actions.act_window",
+ "name": _("Whatsapp Message"),
+ "res_model": "send.whatsapp.message",
+ "target": "new",
+ "view_mode": "form",
+ "view_type": "form",
+ "context": {
+ "default_whatsapp_message": whatsapp_message,
+ "default_attachment_ids": [(4, report_attachment.id)],
+ }, }
diff --git a/all_in_one_whatsapp_integration/models/res_config_settings.py b/all_in_one_whatsapp_integration/models/res_config_settings.py
new file mode 100644
index 000000000..ed7596d18
--- /dev/null
+++ b/all_in_one_whatsapp_integration/models/res_config_settings.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Jumana Jabin MP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from odoo import fields, models
+
+
+class ResConfigSettings(models.TransientModel):
+ """ Inherited this module is to add fields for WhatsApp's
+ message-sending authentication """
+ _inherit = "res.config.settings"
+
+ account_sid = fields.Char(string="Account SID", check_company=True,
+ config_parameter='all_in_one_whatsapp_integration.'
+ 'account_sid',
+ help="Account SID of twilio account", )
+ auth_token = fields.Char(string="Auth Token", check_company=True,
+ config_parameter='all_in_one_whatsapp_integration.'
+ 'auth_token',
+ help="Auth Token of twilio account")
+ twilio_whatsapp = fields.Char(string="Twilio Whatsapp Number",
+ check_company=True,
+ config_parameter='all_in_one_whatsapp_integration.'
+ 'twilio_whatsapp',
+ help="Whatsapp number of twilio account")
+ bearer_token = fields.Char(string="Whatsapp Access Token",
+ check_company=True,
+ help="Authorization Token of Whatsapp Cloud "
+ "API",
+ config_parameter='all_in_one_whatsapp_integration.'
+ 'bearer_token', )
+ whatsapp_no = fields.Char(string="Phone number ID", check_company=True,
+ help="Phone Number ID of Whatsapp Cloud API",
+ config_parameter='all_in_one_whatsapp_integration.'
+ 'whatsapp_no', )
+ whatsapp_business = fields.Char(help="Business ID of Whatsapp Cloud API",
+ string="Whatsapp Business Account ID",
+ config_parameter='whatsapp_integration_'
+ 'odoo.whatsapp_business',)
diff --git a/all_in_one_whatsapp_integration/models/sale_order.py b/all_in_one_whatsapp_integration/models/sale_order.py
new file mode 100644
index 000000000..a54859f80
--- /dev/null
+++ b/all_in_one_whatsapp_integration/models/sale_order.py
@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Jumana Jabin MP (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+import base64
+import html2text
+from odoo import models, _
+from odoo.exceptions import ValidationError
+
+
+class SaleOrder(models.Model):
+ """Inherited the module for adding a button that helps to send whatsapp
+ message to the customer """
+ _inherit = "sale.order"
+
+ def action_send_by_whatsapp(self):
+ """When you click the send_by_whatsapp button, it will open a wizard
+ that contain the message to send to the whatsapp web page."""
+ if not self.partner_id.mobile:
+ raise ValidationError(_('Add whatsapp mobile number to the '
+ 'sale order partner!'))
+ if not self.partner_id.mobile[0] == "+":
+ raise ValidationError(_('Please add a valid mobile number along '
+ 'with a valid country code!'))
+ twilio_whatsapp = self.env["ir.config_parameter"].sudo() \
+ .get_param("all_in_one_whatsapp_integration.twilio_whatsapp")
+ if not twilio_whatsapp:
+ raise ValidationError(_("Please add your valid Twilio whatsapp "
+ " number in settings"))
+ if twilio_whatsapp[0] != "+":
+ raise ValidationError(_("Please add a valid Twilio mobile number "
+ "along with "+"."))
+ template_id = self.env.ref("all_in_one_whatsapp_integration."
+ "sale_order_whatsapp_template").id
+ mail_template_values = self.env["mail.template"] \
+ .with_context(tpl_partners_only=True).browse(
+ template_id).generate_email([self.id], fields=["body_html"])
+ mail_template = dict(mail_template_values).get(self.id)
+ if mail_template and "body_html" in mail_template:
+ body_html = mail_template["body_html"]
+ else:
+ raise ValidationError(_("Failed to retrieve the email template's"
+ " body HTML."))
+ whatsapp_message = html2text.html2text(body_html)
+ report = self.env.ref("sale.action_report_saleorder")._render_qweb_pdf(
+ self.ids, data={"report_type": "pdf"})[0]
+ report_attachment = self.env["ir.attachment"].sudo().create({
+ "name": "Sale Report",
+ "type": "binary",
+ "datas": base64.b64encode(report),
+ "store_fname": base64.b64encode(report),
+ "mimetype": "application/pdf",
+ "res_model": "sale.order",
+ })
+ return {
+ "type": "ir.actions.act_window",
+ "name": _("Whatsapp Message"),
+ "res_model": "send.whatsapp.message",
+ "target": "new",
+ "view_mode": "form",
+ "view_type": "form",
+ "context": {
+ "default_whatsapp_message": whatsapp_message,
+ "default_attachment_ids": [(4, report_attachment.id)],
+ "default_attachment_id": report_attachment.id,
+ },
+ }
diff --git a/all_in_one_whatsapp_integration/models/stock_picking.py b/all_in_one_whatsapp_integration/models/stock_picking.py
new file mode 100644
index 000000000..40a4fe8f5
--- /dev/null
+++ b/all_in_one_whatsapp_integration/models/stock_picking.py
@@ -0,0 +1,77 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Jumana Jabin MP(odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+import base64
+import html2text
+from odoo import models, _
+from odoo.exceptions import ValidationError
+
+
+class StockPicking(models.Model):
+ """Inherited the module for adding a button that helps to send whatsapp
+ message to the customer """
+ _inherit = 'stock.picking'
+
+ def action_send_by_whatsapp(self):
+ """When you click the send_by_whatsapp button, it will open a wizard
+ that contain the message to send to the whatsapp web page."""
+ if not self.partner_id.mobile:
+ raise ValidationError(_('Add whatsapp mobile number to the sale '
+ ' order partner!'))
+ if not self.partner_id.mobile[0] == '+':
+ raise ValidationError(_('Please add a valid mobile number along'
+ ' with a valid country code!'))
+ twilio_whatsapp = (self.env['ir.config_parameter']
+ .sudo().get_param('all_in_one_whatsapp_integration.'
+ 'twilio_whatsapp'))
+ if twilio_whatsapp[0] != '+':
+ raise ValidationError(_('Please add a valid Twilio mobile number '
+ ' along with "+".'))
+ template_id = self.env.ref('all_in_one_whatsapp_integration.'
+ 'stock_picking_whatsapp_template').id
+ mail_template_values = (self.env['mail.template']
+ .with_context(tpl_partners_only=True).browse(
+ template_id)
+ .generate_email([self.id],
+ fields=['body_html']))
+ body_html = dict(mail_template_values)[self.id].pop('body_html', '')
+ whatsapp_message = html2text.html2text(body_html)
+ report = self.env.ref('stock.action_report_delivery')._render_qweb_pdf(
+ self.ids, data={"report_type": "pdf"})[0]
+ report_attachment = self.env['ir.attachment'].sudo().create({
+ 'name': 'Delivery Report',
+ 'type': 'binary',
+ 'datas': base64.b64encode(report),
+ 'store_fname': base64.b64encode(report),
+ 'mimetype': 'application/pdf',
+ 'res_model': 'stock.picking',
+ })
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': _('Whatsapp Message'),
+ 'res_model': 'send.whatsapp.message',
+ 'target': 'new',
+ 'view_mode': 'form',
+ 'view_type': 'form',
+ 'context': {'default_whatsapp_message': whatsapp_message,
+ 'default_attachment_ids': [(4,
+ report_attachment.id)]},
+ }
diff --git a/all_in_one_whatsapp_integration/security/ir.model.access.csv b/all_in_one_whatsapp_integration/security/ir.model.access.csv
new file mode 100644
index 000000000..878a5b90c
--- /dev/null
+++ b/all_in_one_whatsapp_integration/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_send_whatsapp_message_user,access.send.whatsapp.message.user,model_send_whatsapp_message,base.group_user,1,1,1,1
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/check.png b/all_in_one_whatsapp_integration/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/check.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/chevron.png b/all_in_one_whatsapp_integration/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/chevron.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/cogs.png b/all_in_one_whatsapp_integration/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/cogs.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/consultation.png b/all_in_one_whatsapp_integration/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/consultation.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/ecom-black.png b/all_in_one_whatsapp_integration/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/ecom-black.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/education-black.png b/all_in_one_whatsapp_integration/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/education-black.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/hotel-black.png b/all_in_one_whatsapp_integration/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/hotel-black.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/license.png b/all_in_one_whatsapp_integration/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/license.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/lifebuoy.png b/all_in_one_whatsapp_integration/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/lifebuoy.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/manufacturing-black.png b/all_in_one_whatsapp_integration/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/manufacturing-black.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/pos-black.png b/all_in_one_whatsapp_integration/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/pos-black.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/puzzle.png b/all_in_one_whatsapp_integration/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/puzzle.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/restaurant-black.png b/all_in_one_whatsapp_integration/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/restaurant-black.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/service-black.png b/all_in_one_whatsapp_integration/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/service-black.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/trading-black.png b/all_in_one_whatsapp_integration/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/trading-black.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/training.png b/all_in_one_whatsapp_integration/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/training.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/update.png b/all_in_one_whatsapp_integration/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/update.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/user.png b/all_in_one_whatsapp_integration/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/user.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/icons/wrench.png b/all_in_one_whatsapp_integration/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/icons/wrench.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/misc/categories.png b/all_in_one_whatsapp_integration/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/misc/categories.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/misc/check-box.png b/all_in_one_whatsapp_integration/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/misc/check-box.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/misc/compass.png b/all_in_one_whatsapp_integration/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/misc/compass.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/misc/corporate.png b/all_in_one_whatsapp_integration/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/misc/corporate.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/misc/customer-support.png b/all_in_one_whatsapp_integration/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/misc/customer-support.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/misc/cybrosys-logo.png b/all_in_one_whatsapp_integration/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/misc/features.png b/all_in_one_whatsapp_integration/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/misc/features.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/misc/logo.png b/all_in_one_whatsapp_integration/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/misc/logo.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/misc/pictures.png b/all_in_one_whatsapp_integration/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/misc/pictures.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/misc/pie-chart.png b/all_in_one_whatsapp_integration/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/misc/pie-chart.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/misc/right-arrow.png b/all_in_one_whatsapp_integration/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/misc/right-arrow.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/misc/star.png b/all_in_one_whatsapp_integration/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/misc/star.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/misc/support.png b/all_in_one_whatsapp_integration/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/misc/support.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/misc/whatsapp.png b/all_in_one_whatsapp_integration/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/misc/whatsapp.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/modules/1.png b/all_in_one_whatsapp_integration/static/description/assets/modules/1.png
new file mode 100644
index 000000000..a0969fcb5
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/modules/1.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/modules/live_chat.png b/all_in_one_whatsapp_integration/static/description/assets/modules/live_chat.png
new file mode 100644
index 000000000..3664700f5
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/modules/live_chat.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/modules/slack.png b/all_in_one_whatsapp_integration/static/description/assets/modules/slack.png
new file mode 100644
index 000000000..92ae36dc5
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/modules/slack.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/modules/twitter.png b/all_in_one_whatsapp_integration/static/description/assets/modules/twitter.png
new file mode 100644
index 000000000..ee4fa9abd
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/modules/twitter.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/modules/whatsapp.gif b/all_in_one_whatsapp_integration/static/description/assets/modules/whatsapp.gif
new file mode 100644
index 000000000..c51b9eb07
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/modules/whatsapp.gif differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/modules/zoom_meet.jpg b/all_in_one_whatsapp_integration/static/description/assets/modules/zoom_meet.jpg
new file mode 100644
index 000000000..ae7760bd2
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/modules/zoom_meet.jpg differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/1.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/1.png
new file mode 100644
index 000000000..2c55966b5
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/1.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/10.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/10.png
new file mode 100644
index 000000000..a261075f9
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/10.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/16.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/16.png
new file mode 100644
index 000000000..658cee2e0
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/16.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/17.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/17.png
new file mode 100644
index 000000000..44a79574f
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/17.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/18.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/18.png
new file mode 100644
index 000000000..7d995109c
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/18.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/19.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/19.png
new file mode 100644
index 000000000..1912a49b2
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/19.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/2.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/2.png
new file mode 100644
index 000000000..f6fad6037
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/2.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/3.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/3.png
new file mode 100644
index 000000000..dcab68dae
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/3.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/4.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/4.png
new file mode 100644
index 000000000..c3aac54bd
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/4.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/5.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/5.png
new file mode 100644
index 000000000..c3297cece
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/5.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/6.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/6.png
new file mode 100644
index 000000000..9ba025895
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/6.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/7.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/7.png
new file mode 100644
index 000000000..39ab203f2
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/7.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/8.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/8.png
new file mode 100644
index 000000000..c93787d2a
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/8.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/9.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/9.png
new file mode 100644
index 000000000..f990b30fe
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/9.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/a.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/a.png
new file mode 100644
index 000000000..9f759406d
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/a.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/a1.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/a1.png
new file mode 100644
index 000000000..fb9830b34
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/a1.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/a3.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/a3.png
new file mode 100644
index 000000000..758bd76ad
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/a3.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/c1.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c1.png
new file mode 100644
index 000000000..0aeb6fb00
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c1.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/c10.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c10.png
new file mode 100644
index 000000000..d870e6da3
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c10.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/c11.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c11.png
new file mode 100644
index 000000000..b2013e3dc
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c11.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/c12.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c12.png
new file mode 100644
index 000000000..eadb72c3f
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c12.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/c13.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c13.png
new file mode 100644
index 000000000..ed5c3fa6a
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c13.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/c14.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c14.png
new file mode 100644
index 000000000..a95c136f5
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c14.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/c2.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c2.png
new file mode 100644
index 000000000..113711a63
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c2.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/c3.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c3.png
new file mode 100644
index 000000000..1fe11704b
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c3.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/c4.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c4.png
new file mode 100644
index 000000000..3d436b336
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c4.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/c5.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c5.png
new file mode 100644
index 000000000..e3d190523
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c5.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/c6.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c6.png
new file mode 100644
index 000000000..c6ac3539e
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c6.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/c7.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c7.png
new file mode 100644
index 000000000..935f57583
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c7.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/c8.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c8.png
new file mode 100644
index 000000000..79a6134aa
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c8.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/c9.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c9.png
new file mode 100644
index 000000000..c6aa1805d
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/c9.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/hero.gif b/all_in_one_whatsapp_integration/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..3d3ebe374
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/hero.gif differ
diff --git a/all_in_one_whatsapp_integration/static/description/assets/screenshots/t88.png b/all_in_one_whatsapp_integration/static/description/assets/screenshots/t88.png
new file mode 100644
index 000000000..691042f15
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/assets/screenshots/t88.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/banner.png b/all_in_one_whatsapp_integration/static/description/banner.png
new file mode 100644
index 000000000..bbc73098c
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/banner.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/icon.png b/all_in_one_whatsapp_integration/static/description/icon.png
new file mode 100644
index 000000000..bc4f7dd1e
Binary files /dev/null and b/all_in_one_whatsapp_integration/static/description/icon.png differ
diff --git a/all_in_one_whatsapp_integration/static/description/index.html b/all_in_one_whatsapp_integration/static/description/index.html
new file mode 100644
index 000000000..3a54f9519
--- /dev/null
+++ b/all_in_one_whatsapp_integration/static/description/index.html
@@ -0,0 +1,947 @@
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+
+ Odoo.sh
+
+
+
+
+
+
+
+
+ All in one Whatsapp Connector
+
+ All in one Whatsapp Integration for Sale Order, Purchase Order, Transfer
+ This module helps you to send a whatsapp message to your
+ partners that are in sale order, purchase order, invoice
+ and bills, and deliver orders.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+ Send Sale Order Details and Invoice Through WhatsApp to
+ Users .
+
+
+
+
+
+
+
+
+
+
+ Send Purchase Order Details and Bill Through WhatsApp
+ to
+ Users.
+
+
+
+
+
+
+
+
+
+
+ Send Delivery Details and Receipt Through WhatsApp to
+ Users.
+
+
+
+
+
+
+
+
+
+
+ Send WhatsApp Message by Twilio Method
+
+
+
+
+
+
+
+
+
+
+ Send WhatsApp Message by WhatsApp Web Method
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ Twilio Credentials
+
+ Go to the Twilio website at ttps://www.twilio.com/
+ Click on the "Sign Up" Button to Create a new Account. If you
+ already have an Account, you can Log In Instead.
+
+
+ After Logging in, Navigate to the Twilio Console. You can find
+ the
+ Link to the Console in the top right Corner of the Website.
+ In the Twilio Console, you will see a Sidebar on the left.
+ Click
+ on
+ the "Get a Trial Number" button to obtain a Phone Number for
+ Testing
+
+
+ In the Settings page, you will find your Account SID (a unique
+ identifier for your Twilio account) and your Auth Token (used
+ for
+ authentication). These Credentials will be Required to make API
+ Requests.
+
+
+
+
+
+
+ Cloud Credentials
+
+ To get cloud API whatsapp credential first you need a facebook
+ account. Go to the
+ https://developers.facebook.com website, and you can sign up
+ your developer facebook account using the
+ facebook account and whatsapp business account.
+
+
+ After Logging in, there has an option 'My Apps', from here we
+ can access all your apps in the facebook
+ developer account
+
+
+ From there we need to create new app for the whatsapp cloud
+ integration. There has 'Create App' option
+ to create a new app.
+
+
+
+
+ It opens a new window, here there some option to choose, select
+ 'Other' and click on 'Next' button.
+
+
+
+
+ Select app type 'Business' and click on 'Next' button.
+
+
+
+
+ Provide App name and App contact email, select Business account
+ as 'Test Business', click on Create App.
+
+
+
+
+ Need to enter your password here.
+
+
+
+
+ Then after we need to integrate the Whatsapp with our app that
+ we created by clicking on 'Set up'.
+
+
+
+
+ There has API set up option menu under Whatsapp on the left
+ side,from there we can access our Temporary
+ Access Token, Phone Number ID and Whatsapp Business Account ID.
+
+
+
+
+ We can Choose a mobile number from 'To' option, can send
+ message to the number by clicking the 'Send
+ Message' button.
+
+
+
+
+
+
+
+
+ Configuration of Credentials
+
+ Go to Settings and add Twilio Account
+ Credentials and Cloud Whatsapp Credentials.
+
+
+
+
+ Add whatsapp mobile number to the sale order partner.
+
+
+
+
+
+ Sales -> Quotation ->Click on the Button "SEND BY
+ WHATSAPP"
+
+
+
+ Choose One Method to Send Message (Twilio or Web or Cloud) and
+ also we
+ can
+ See the Sample of Whatsapp Message.
+
+
+
+ The message shown as:
+
+
+
+ Using Twilio
+
+
+
+ The message shown as:
+
+
+
+ Using Cloud Whatsapp , We have Two options Using , Text and
+ Document.Choose one.
+
+
+
+ The message shown as:
+
+
+
+
+
+ We can send whatsapp message in Sales , Purchase and in
+ Transfer.
+
+
+ Purchase -> RFQ ->Click on the Button "SEND BY
+ WHATSAPP"
+
+
+ Inventory -> Transfer ->Click on the Button "SEND BY
+ WHATSAPP"
+
+
+
+
+
+
+ Send and Receive whatsapp message through Livechat
+
+ There has option to send and receive whatsapp message through
+ Livechat. For that first we need to set
+ the Whatsapp Business whatsapp number to the related partner of
+ the user.
+
+
+
+ We can receive realtime whatsapp messages to the Business
+ whatsapp number through Live Chat. For that
+ first we need to configure Webhooks from facebook developer
+ account. There has 'Configuration' menu
+ under Whatsapp on left side, from there we configure webhook
+ for the realtime message chat.
+
+
+
+ We add Call back url for the webhook here. It will trigger a
+ response while we receive whatsapp message
+ to the Business whatsapp. Also need to provide a verification
+ token to connect it, click on 'Verify and Save' Button.
+ The Webhook format is "ip_address/whatsapp_message".
+
+
+
+
+ Then after we need to choose 'message' as webhook field by
+ clicking the manage button.
+
+
+
+
+
+ We get the realtime whatsapp chats of business whatsapp through
+ the Live Chat.
+
+
+
+
+
+ We can also send messages through the LiveChat.
+
+
+
+
+ The portal user can get the message through whatsapp that we
+ sent by Live Chat
+