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