17 changed files with 281 additions and 14 deletions
@ -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) |
||||
|
|
|
@ -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'); |
||||
|
}, |
||||
|
}); |
||||
|
}); |
@ -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
|
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
|
||||
|
}); |
||||
|
}); |
@ -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> |
@ -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> |
Loading…
Reference in new issue