Browse Source

Dec 7 : [FIX] Bug Fixed 'whatsapp_mail_messaging'

pull/295/head
AjmalCybro 1 year ago
parent
commit
0ef62a2890
  1. 2
      whatsapp_mail_messaging/README.rst
  2. 1
      whatsapp_mail_messaging/__init__.py
  3. 8
      whatsapp_mail_messaging/__manifest__.py
  4. 6
      whatsapp_mail_messaging/doc/changelog.md
  5. 2
      whatsapp_mail_messaging/model/__init__.py
  6. 1
      whatsapp_mail_messaging/model/account_move.py
  7. 9
      whatsapp_mail_messaging/model/selection_messages.py
  8. 2
      whatsapp_mail_messaging/model/website.py
  9. 1
      whatsapp_mail_messaging/security/ir.model.access.csv
  10. 1
      whatsapp_mail_messaging/static/src/js/whatsapp_button.js
  11. 20
      whatsapp_mail_messaging/static/src/js/whatsapp_icon_website.js
  12. 93
      whatsapp_mail_messaging/static/src/js/whatsapp_modal.js
  13. 3
      whatsapp_mail_messaging/static/src/xml/whatsapp_button.xml
  14. 74
      whatsapp_mail_messaging/views/portal_whatsapp_view.xml
  15. 55
      whatsapp_mail_messaging/views/selection_messages_views.xml
  16. 15
      whatsapp_mail_messaging/wizard/wh_message_wizard.py
  17. 2
      whatsapp_mail_messaging/wizard/wh_message_wizard.xml

2
whatsapp_mail_messaging/README.rst

@ -42,5 +42,3 @@ For support and more information, please visit `Our Website <https://cybrosys.co
Further information Further information
=================== ===================
HTML Description: `<static/description/index.html>`__ HTML Description: `<static/description/index.html>`__

1
whatsapp_mail_messaging/__init__.py

@ -19,6 +19,5 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
from . import model from . import model
from . import wizard from . import wizard

8
whatsapp_mail_messaging/__manifest__.py

@ -19,10 +19,9 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
{ {
'name': 'Odoo Whatsapp Connector', 'name': 'Odoo Whatsapp Connector',
'version': '16.0.1.0.0', 'version': '16.0.0.1.0',
'category': 'Extra Tools', 'category': 'Extra Tools',
'summary': """Odoo Whatsapp Connector For Sales, Invoice, and Floating button in Website""", 'summary': """Odoo Whatsapp Connector For Sales, Invoice, and Floating button in Website""",
'description': """Added options for sending Whatsapp messages and Mails in systray bar,sale order, invoices, 'description': """Added options for sending Whatsapp messages and Mails in systray bar,sale order, invoices,
@ -34,13 +33,14 @@
'maintainer': 'Cybrosys Techno Solutions', 'maintainer': 'Cybrosys Techno Solutions',
'depends': ['sale', 'account', 'website','sale_management'], 'depends': ['sale', 'account', 'website','sale_management'],
'data': [ 'data': [
'security/ir.model.access.csv',
'views/selection_messages_views.xml',
'views/portal_whatsapp_view.xml', 'views/portal_whatsapp_view.xml',
'views/sale_order_inherited.xml', 'views/sale_order_inherited.xml',
'views/account_move_inherited.xml', 'views/account_move_inherited.xml',
'views/website_inherited.xml', 'views/website_inherited.xml',
'wizard/wh_message_wizard.xml', 'wizard/wh_message_wizard.xml',
'wizard/portal_share_inherited.xml', 'wizard/portal_share_inherited.xml',
'security/ir.model.access.csv',
], ],
'assets': { 'assets': {
'web.assets_backend': [ 'web.assets_backend': [
@ -50,6 +50,8 @@
'whatsapp_mail_messaging/static/src/xml/mail_button.xml', 'whatsapp_mail_messaging/static/src/xml/mail_button.xml',
], ],
'web.assets_frontend': [ 'web.assets_frontend': [
"whatsapp_mail_messaging/static/src/js/whatsapp_modal.js",
"whatsapp_mail_messaging/static/src/js/whatsapp_icon_website.js",
"whatsapp_mail_messaging/static/src/css/whatsapp.css" "whatsapp_mail_messaging/static/src/css/whatsapp.css"
], ],
}, },

6
whatsapp_mail_messaging/doc/changelog.md

@ -4,3 +4,9 @@
#### Version 16.0.1.0.0 #### Version 16.0.1.0.0
#### ADD #### ADD
- Initial commit - Initial commit
#### 29.11.2023
#### Version 16.0.0.1.0
#### BUGFIX
- Added Default Message functionality where users can save message templates and use these templates for sending Whatsapp Message.

2
whatsapp_mail_messaging/model/__init__.py

@ -19,7 +19,7 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
from . import website from . import website
from . import sale_order from . import sale_order
from . import account_move from . import account_move
from . import selection_messages

1
whatsapp_mail_messaging/model/account_move.py

@ -19,7 +19,6 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
from itertools import groupby from itertools import groupby
from odoo import models, _ from odoo import models, _

9
whatsapp_mail_messaging/model/selection_messages.py

@ -0,0 +1,9 @@
from odoo import fields, models
class SelectionMessages(models.Model):
_name = 'selection.messages'
name = fields.Char(string='Name of the Message Template')
message = fields.Text(string="Message", required=True)

2
whatsapp_mail_messaging/model/website.py

@ -20,7 +20,7 @@
# #
############################################################################# #############################################################################
from odoo import fields, models from odoo import api, fields, models
class Website(models.Model): class Website(models.Model):

1
whatsapp_mail_messaging/security/ir.model.access.csv

@ -1,3 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_whatsapp_message_wizard,access.whatsapp.message.wizard,model_whatsapp_message_wizard,base.group_user,1,1,1,1 access_whatsapp_message_wizard,access.whatsapp.message.wizard,model_whatsapp_message_wizard,base.group_user,1,1,1,1
access_selection_messages,access.selection.messages,model_selection_messages,base.group_user,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_whatsapp_message_wizard access.whatsapp.message.wizard model_whatsapp_message_wizard base.group_user 1 1 1 1
3 access_selection_messages access.selection.messages model_selection_messages base.group_user 1 1 1 1
4

1
whatsapp_mail_messaging/static/src/js/whatsapp_button.js

@ -12,6 +12,7 @@ var ActionMenu = Widget.extend({
}, },
onclick_whatsapp_icon: function() { onclick_whatsapp_icon: function() {
var self = this; var self = this;
console.log(this,"TEST")
self.do_action({ self.do_action({
name: 'Compose Whatsapp Message', name: 'Compose Whatsapp Message',
res_model: 'whatsapp.message.wizard', res_model: 'whatsapp.message.wizard',

20
whatsapp_mail_messaging/static/src/js/whatsapp_icon_website.js

@ -0,0 +1,20 @@
odoo.define('whatsapp_mail_messaging.whatsapp_icon_website.js', function (require) {
"use strict";
var publicWidget = require('web.public.widget');
var ajax = require('web.ajax');
publicWidget.registry.WhatsappIcon = publicWidget.Widget.extend({
selector: '.cy_whatsapp_web',
events: {
'click': '_onClickWhatsappIcon',
},
start: function() {
this._super.apply(this, arguments);
},
_onClickWhatsappIcon: function (ev) {
$('#ModalWhatsapp').css('display', 'block');
},
});
});

93
whatsapp_mail_messaging/static/src/js/whatsapp_modal.js

@ -0,0 +1,93 @@
odoo.define('whatsapp_mail_messaging.whatsapp_modal.js', function (require) {
"use strict";
var publicWidget = require('web.public.widget');
var ajax = require('web.ajax');
publicWidget.registry.deliveryDateToggl = publicWidget.Widget.extend({
selector: '#ModalWhatsapp',
events: {
'change .custom-default': 'onclickCustomRadio',
'change .default-default': 'onclickDefaultRadio',
'change #myFormControl': 'onSelectChange',
'click .btn-danger': 'onCloseButtonClick',
'click .btn-success': 'onSendMessageClick',
},
start: function() {
this._super.apply(this, arguments);
},
onclickCustomRadio: function () {
document.getElementById("myFormControl").style.display = "none";
},
onclickDefaultRadio: function () {
document.getElementById("myFormControl").style.display = "block";
var self = this;
this._rpc({
model: 'selection.messages', // Your Odoo model
method: 'search_read', // Use search_read to retrieve data
fields: ['name', 'message'], // Specify the fields you want to retrieve
}).then(function (data) {
// Process the data received from the server
self.updateUI(data);
});
},
updateUI: function (data) {
// Clear existing options
var selectElement = document.getElementById("myFormControl");
selectElement.innerHTML = '';
// Add default option
var defaultOption = document.createElement('option');
defaultOption.textContent = 'Select the Template';
selectElement.appendChild(defaultOption);
// Add options from the data
data.forEach(function (record) {
var option = document.createElement('option');
option.value = record.id;
option.textContent = record.name;
option.setAttribute('data-message', record.message); // Save the message as a data attribute
selectElement.appendChild(option);
});
},
onSelectChange: function () {
var selectElement = document.getElementById("myFormControl");
var textareaElement = document.getElementById("exampleFormControlTextarea1");
var selectedOption = selectElement.options[selectElement.selectedIndex];
var selectedMessage = selectedOption.getAttribute('data-message');
// Update the textarea with the message from the selected option
textareaElement.value = selectedMessage;
},
onCloseButtonClick: function () {
//Closing the Modal
document.getElementById("ModalWhatsapp").style.display = "none";
},
onSendMessageClick: function () {
// Send Message to Whatsapp
var textareaElement = document.getElementById("exampleFormControlTextarea1");
var messageString = textareaElement.value;
this._rpc({
model: 'website',
method: 'search_read',
fields: ['mobile_number'],
}).then(function (data) {
// Process the data received from the server
if (data && data.length > 0 && 'mobile_number' in data[0] && data[0].mobile_number) {
// Check if 'mobile_number' is present in the first item of the 'data' array and is not falsy
var mobileNumber = data[0].mobile_number;
// Construct the WhatsApp URL using the mobile number and messageString
var whatsappUrl = 'https://api.whatsapp.com/send?phone=' + mobileNumber + '&text=' + encodeURIComponent(messageString);
// Open the WhatsApp URL in a new tab or window
window.open(whatsappUrl, '_blank');
} else {
// If mobile number is not available or falsy, hide the element with id "phoneMessage"
document.getElementById("phoneMessage").style.display = "block";
// You might want to display a user-friendly error message on the UI
}
})
},
});
});

3
whatsapp_mail_messaging/static/src/xml/whatsapp_button.xml

@ -2,7 +2,8 @@
<templates xml:space="preserve"> <templates xml:space="preserve">
<t t-name="whatsapp_mail_messaging.whatsapp_icon"> <t t-name="whatsapp_mail_messaging.whatsapp_icon">
<div class="o_mail_systray_item dropdown"> <div class="o_mail_systray_item dropdown">
<label class="whatsapp_icon" style="margin-bottom:0px;" title="Send Message Through Whatsapp"> <label class="whatsapp_icon" style="margin-bottom:0px;"
title="Send Message Through Whatsapp">
<div class="icon_div"> <div class="icon_div">
<div class="toggle-icon"> <div class="toggle-icon">
<i class="fa fa-whatsapp" id="fa-icon"/> <i class="fa fa-whatsapp" id="fa-icon"/>

74
whatsapp_mail_messaging/views/portal_whatsapp_view.xml

@ -1,10 +1,78 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<template id="ChatToCompany" name="Chat With Company" inherit_id="website.footer_custom"> <template id="ChatToCompany" name="Chat With Company"
inherit_id="website.footer_custom">
<xpath expr="//div[hasclass('s_social_media')]" position="inside"> <xpath expr="//div[hasclass('s_social_media')]" position="inside">
<a t-attf-href="https://api.whatsapp.com/send?phone=#{website.mobile_number}" class="cy_whatsapp_web" target="_blank"> <div class="cy_whatsapp_web">
<i class="fa fa-whatsapp cy-icon"/> <i class="fa fa-whatsapp cy-icon"/>
</a> </div>
<!-- Modal -->
<div class="modal" id="ModalWhatsapp" tabindex="-1" role="dialog"
aria-labelledby="exampleModalLabel" style="display: none;"
aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title text-black"
id="exampleModalLabel">Compose Whatsapp Message
</h5>
</div>
<div class="modal-body">
<div class="form-check">
<input class="form-check-input custom-default"
type="radio"
name="flexRadioDefault"
id="CustomSelect"/>
<label class="form-check-label text-black"
for="CustomSelect">
Custom
</label>
</div>
<div class="form-check">
<input class="form-check-input default-default"
type="radio"
name="flexRadioDefault"
id="DefaultSelect"/>
<label class="form-check-label text-black"
for="DefaultSelect">
Default
</label>
</div>
<div>
<p id="phoneMessage"
style="color: red; display: none;">No
Mobile number available, Please add
Mobile
Number in Website Configuration...
</p>
</div>
<br/>
<select class="form-control" id="myFormControl"
style="display: none;">
<option>Select an Option</option>
</select>
<br/>
<div class="form-group">
<label for="exampleFormControlTextarea1"
style="color: black;">Message
</label>
<textarea class="form-control"
id="exampleFormControlTextarea1"
rows="3"></textarea>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger"
data-dismiss="modal">Close
</button>
<button type="button"
class="btn btn-success">Send Message
</button>
</div>
</div>
</div>
</div>
</xpath> </xpath>
</template> </template>
</odoo> </odoo>

55
whatsapp_mail_messaging/views/selection_messages_views.xml

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--Selection messages Tree View -->
<record id="selection_messages_view_tree" model="ir.ui.view">
<field name="name">selection.messages.view.tree</field>
<field name="model">selection.messages</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="message"/>
</tree>
</field>
</record>
<!-- Selection messages Form View-->
<record id="selection_messages_view_form" model="ir.ui.view">
<field name="name">selection.messages.view.form</field>
<field name="model">selection.messages</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="name"/>
</group>
</group>
<notebook>
<page string="Message">
<group>
<field colspan="2" name="message" widget="text_emojis"
nolabel="1"
placeholder="Write Message here...."
/>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!--Selection messages Action -->
<record id="selection_messages_action" model="ir.actions.act_window">
<field name="name">Selection Messages</field>
<field name="res_model">selection.messages</field>
<field name="type">ir.actions.act_window</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="selection_messages_view_tree"/>
</record>
<menuitem name="Whatsapp Messages"
id="menu_website_selection_messages"
action="selection_messages_action"
parent="website.menu_website_global_configuration"
sequence="50"
/>
</odoo>

15
whatsapp_mail_messaging/wizard/wh_message_wizard.py

@ -19,7 +19,6 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
from odoo import models, fields, api from odoo import models, fields, api
@ -29,6 +28,8 @@ class WhatsappSendMessage(models.TransientModel):
partner_id = fields.Many2one('res.partner', string="Recipient") partner_id = fields.Many2one('res.partner', string="Recipient")
mobile = fields.Char(required=True, string="Contact Number") mobile = fields.Char(required=True, string="Contact Number")
message = fields.Text(string="Message", required=True) message = fields.Text(string="Message", required=True)
message_name_id = fields.Many2one('selection.messages', string="Message Template")
type_message = fields.Selection([('custom', 'Custom'), ('default', 'Default')], 'Message Type', default='custom')
image_1920 = fields.Binary(readonly=1) image_1920 = fields.Binary(readonly=1)
@api.onchange('partner_id') @api.onchange('partner_id')
@ -38,6 +39,18 @@ class WhatsappSendMessage(models.TransientModel):
self.mobile = self.partner_id.mobile self.mobile = self.partner_id.mobile
self.image_1920 = self.partner_id.image_1920 self.image_1920 = self.partner_id.image_1920
@api.onchange('message_name_id')
def _onchange_type_message(self):
"""Function to set the default message based on type_message"""
if self.message_name_id:
self.message = self.message_name_id.message
@api.onchange('type_message')
def _onchange_type_message_type(self):
"""Function to set the default message based on type_message"""
if self.type_message == 'default':
self.message = self.message_name_id.message
def send_message(self): def send_message(self):
"""In this function we are redirecting to the whatsapp web """In this function we are redirecting to the whatsapp web
with required parameters""" with required parameters"""

2
whatsapp_mail_messaging/wizard/wh_message_wizard.xml

@ -18,6 +18,8 @@
<group> <group>
<field name="partner_id"/> <field name="partner_id"/>
<field name="mobile"/> <field name="mobile"/>
<field name="type_message" widget="radio"/>
<field name="message_name_id" attrs="{'invisible': [('type_message', '=', 'custom')]}"/>
<field name="message" widget="text_emojis"/> <field name="message" widget="text_emojis"/>
</group> </group>
<group> <group>

Loading…
Cancel
Save