Merge pull request #12 from expsa/whatsapp_mail

Whatsapp mail
This commit is contained in:
esam-sermah 2025-09-22 12:36:38 +03:00 committed by GitHub
commit 40f075741f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
87 changed files with 1743 additions and 0 deletions

View File

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2020-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Sayooj A O (<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import model
from . import wizard

View File

@ -0,0 +1,45 @@
{
'name': 'Odoo Whatsapp Integration',
'version': '18.0.1.0.0',
'category': 'Sales',
'summary': """Odoo 18 Whatsapp Integration For Sales,Contacts,Crm,Stock,Purchase,Invoice, and Floating button in Website""",
'description': """Odoo 18 Version: Added options for sending Whatsapp messages and Mails in systray bar,sale order, invoices,
website portal view and share the access url of documents using share option available in each records through
Whatsapp web..""",
'author': 'Expert (Migrated by you)',
'website': "https://www.cybrosys.com",
'company': 'Expert',
'depends': ['base', 'contacts', 'crm', 'stock', 'sale_management', 'purchase', 'account', 'website'],
'data': [
'security/ir.model.access.csv',
'views/portal_whatsapp_view.xml',
'views/sale_order_inherited.xml',
'views/purchase_order_inherited.xml',
'views/stock_picking_inherit.xml',
'views/crm_lead.xml',
'views/account_move_inherited.xml',
'views/contacts.xml',
'views/website_inherited.xml',
'wizard/wh_message_wizard.xml',
'wizard/portal_share_inherited.xml',
],
'assets': {
'web.assets_backend': [
'/whatsapp_mail_messaging/static/src/js/whatsapp_button.js',
'/whatsapp_mail_messaging/static/src/js/mail_button.js',
'/whatsapp_mail_messaging/static/src/xml/whatsapp_button.xml',
'/whatsapp_mail_messaging/static/src/xml/mail_button.xml',
'/whatsapp_mail_messaging/static/src/css/systray_icons.css',
],
'web.assets_frontend': [
'/whatsapp_mail_messaging/static/src/css/whatsapp.css',
],
},
'license': 'LGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

View File

@ -0,0 +1,7 @@
from . import website
from . import sale_order
from . import purchase_order
from . import account_move
from . import stock_picking
from . import crm_lead
from . import res_partner

View File

@ -0,0 +1,100 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2020-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Sayooj A O (<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from itertools import groupby
from odoo import models, _
from odoo.exceptions import UserError
class Account(models.Model):
_inherit = 'account.move'
def action_send_whatsapp(self):
compose_form_id = self.env.ref('whatsapp_mail_messaging.whatsapp_message_wizard_form').id
ctx = dict(self.env.context)
partner_name = self.partner_id.name or ''
invoice_name = self.name or ''
total_amount = self.amount_total or 0.0
currency_symbol = self.currency_id.symbol or ''
company_name = self.company_id.name or ''
message = (
f"Hi {partner_name},\n"
f"Here is your invoice {invoice_name} amounting {total_amount}{currency_symbol} "
f"from {company_name}. Please remit payment at your earliest convenience.\n"
f"Please use the following communication for your payment: {invoice_name}"
)
ctx.update({
'default_message': message,
'default_partner_id': self.partner_id.id,
'default_mobile': self.partner_id.mobile,
'default_image_1920': self.partner_id.image_1920,
})
return {
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'whatsapp.message.wizard',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
def check_customers(self, partner_ids):
partners = groupby(partner_ids)
return next(partners, True) and not next(partners, False)
def action_whatsapp_multi(self):
account_move_ids = self.env['account.move'].browse(self.env.context.get('active_ids'))
partner_ids = []
for account_move in account_move_ids:
partner_ids.append(account_move.partner_id.id)
partner_check = self.check_customers(partner_ids)
if partner_check:
account_move_numbers = account_move_ids.mapped('name')
account_move_numbers = "\n".join(account_move_numbers)
compose_form_id = self.env.ref('whatsapp_mail_messaging.whatsapp_message_wizard_form').id
ctx = dict(self.env.context)
message = "Hi" + " " + self.partner_id.name + ',' + '\n' + "Your Orders are" + '\n' + account_move_numbers + \
' ' + "is ready for review.Do not hesitate to contact us if you have any questions."
ctx.update({
'default_message': message,
'default_partner_id': account_move_ids[0].partner_id.id,
'default_mobile': account_move_ids[0].partner_id.mobile,
'default_image_1920': account_move_ids[0].partner_id.image_1920,
})
return {
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'whatsapp.message.wizard',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
else:
raise UserError(_(
'It seems that you have selected Invoices of more than one customer.'
'Try select Invoices of an unique customer'))

View File

@ -0,0 +1,64 @@
from itertools import groupby
from odoo import models, _
from odoo.exceptions import UserError
class Sale(models.Model):
_inherit = 'crm.lead'
def action_send_whatsapp(self):
compose_form_id = self.env.ref('whatsapp_mail_messaging.whatsapp_message_wizard_form').id
ctx = dict(self.env.context)
message = "Hi" + " " + self.partner_id.name + ',' + '\n' + "Your Lead" + ' ' + self.name + " is ready for review.Do not hesitate to contact us if you have any Leads."
ctx.update({
'default_message': message,
'default_partner_id': self.partner_id.id,
'default_mobile': self.partner_id.mobile,
'default_image_1920': self.partner_id.image_1920,
})
return {
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'whatsapp.message.wizard',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
def check_customers(self, partner_ids):
partners = groupby(partner_ids)
return next(partners, True) and not next(partners, False)
def action_whatsapp_multi(self):
sale_order_ids = self.env['crm.lead'].browse(self.env.context.get('active_ids'))
partner_ids = []
for sale in sale_order_ids:
partner_ids.append(sale.partner_id.id)
partner_check = self.check_customers(partner_ids)
if partner_check:
sale_numbers = sale_order_ids.mapped('name')
sale_numbers = "\n".join(sale_numbers)
compose_form_id = self.env.ref('whatsapp_mail_messaging.whatsapp_message_wizard_form').id
ctx = dict(self.env.context)
message = "Hi" + " " + self.partner_id.name + ',' + '\n' + "Your Orders are" + '\n' + sale_numbers + \
' ' + '\n' + "is ready for review.Do not hesitate to contact us if you have any Leads."
ctx.update({
'default_message': message,
'default_partner_id': sale_order_ids[0].partner_id.id,
'default_mobile': sale_order_ids[0].partner_id.mobile,
'default_image_1920': sale_order_ids[0].partner_id.image_1920,
})
return {
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'whatsapp.message.wizard',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
else:
raise UserError(_(
'It seems that you have selected orders of more than one customer.'
'Try select orders of an unique customer'))

View File

@ -0,0 +1,64 @@
from itertools import groupby
from odoo import models, _
from odoo.exceptions import UserError
class Sale(models.Model):
_inherit = 'purchase.order'
def action_send_whatsapp(self):
compose_form_id = self.env.ref('whatsapp_mail_messaging.whatsapp_message_wizard_form').id
ctx = dict(self.env.context)
message = "Hi" + " " + self.partner_id.name + ',' + '\n' + "Your quotation" + ' ' + self.name + ' ' + "amounting" + ' ' + str(
self.amount_total) + self.currency_id.symbol + ' ' + "is ready for review.Do not hesitate to contact us if you have any questions."
ctx.update({
'default_message': message,
'default_partner_id': self.partner_id.id,
'default_mobile': self.partner_id.mobile,
'default_image_1920': self.partner_id.image_1920,
})
return {
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'whatsapp.message.wizard',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
def check_customers(self, partner_ids):
partners = groupby(partner_ids)
return next(partners, True) and not next(partners, False)
def action_whatsapp_multi(self):
sale_order_ids = self.env['purchase.order'].browse(self.env.context.get('active_ids'))
partner_ids = []
for sale in sale_order_ids:
partner_ids.append(sale.partner_id.id)
partner_check = self.check_customers(partner_ids)
if partner_check:
sale_numbers = sale_order_ids.mapped('name')
sale_numbers = "\n".join(sale_numbers)
compose_form_id = self.env.ref('whatsapp_mail_messaging.whatsapp_message_wizard_form').id
ctx = dict(self.env.context)
message = "Hi" + " " + self.partner_id.name + ',' + '\n' + "Your Orders are" + '\n' + sale_numbers + \
' ' + '\n' + "is ready for review.Do not hesitate to contact us if you have any questions."
ctx.update({
'default_message': message,
'default_partner_id': sale_order_ids[0].partner_id.id,
'default_mobile': sale_order_ids[0].partner_id.mobile,
'default_image_1920': sale_order_ids[0].partner_id.image_1920,
})
return {
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'whatsapp.message.wizard',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
else:
raise UserError(_(
'It seems that you have selected orders of more than one customer.'
'Try select orders of an unique customer'))

View File

@ -0,0 +1,63 @@
from itertools import groupby
from odoo import models, _
from odoo.exceptions import UserError
class Sale(models.Model):
_inherit = 'res.partner'
def action_send_whatsapp(self):
compose_form_id = self.env.ref('whatsapp_mail_messaging.whatsapp_message_wizard_form').id
ctx = dict(self.env.context)
message = "Hi" + " " + self.name + ' ,' + '\n'
ctx.update({
'default_message': message,
'default_partner_id': self.id,
'default_mobile': self.mobile,
'default_image_1920': self.image_1920,
})
return {
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'whatsapp.message.wizard',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
def check_customers(self, partner_ids):
partners = groupby(partner_ids)
return next(partners, True) and not next(partners, False)
def action_whatsapp_multi(self):
sale_order_ids = self.env['res.partner'].browse(self.env.context.get('active_ids'))
partner_ids = []
for sale in sale_order_ids:
partner_ids.append(sale.id)
partner_check = self.check_customers(partner_ids)
if partner_check:
sale_numbers = sale_order_ids.mapped('name')
sale_numbers = "\n".join(sale_numbers)
compose_form_id = self.env.ref('whatsapp_mail_messaging.whatsapp_message_wizard_form').id
ctx = dict(self.env.context)
message = "Hi" +'' + self.name
ctx.update({
'default_message': message,
'default_partner_id': sale_order_ids[0].id,
'default_mobile': sale_order_ids[0].mobile,
'default_image_1920': sale_order_ids[0].image_1920,
})
return {
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'whatsapp.message.wizard',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
else:
raise UserError(_(
'It seems that you have selected orders of more than one customer.'
'Try select orders of an unique Name'))

View File

@ -0,0 +1,88 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2020-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Sayooj A O(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from itertools import groupby
from odoo import models, _
from odoo.exceptions import UserError
class Sale(models.Model):
_inherit = 'sale.order'
def action_send_whatsapp(self):
compose_form_id = self.env.ref('whatsapp_mail_messaging.whatsapp_message_wizard_form').id
ctx = dict(self.env.context)
message = "Hi" + " " + self.partner_id.name + ',' + '\n' + "Your quotation" + ' ' + self.name + ' ' + "amounting" + ' ' + str(
self.amount_total) + self.currency_id.symbol + ' ' + "is ready for review.Do not hesitate to contact us if you have any questions."
ctx.update({
'default_message': message,
'default_partner_id': self.partner_id.id,
'default_mobile': self.partner_id.mobile,
'default_image_1920': self.partner_id.image_1920,
})
return {
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'whatsapp.message.wizard',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
def check_customers(self, partner_ids):
partners = groupby(partner_ids)
return next(partners, True) and not next(partners, False)
def action_whatsapp_multi(self):
sale_order_ids = self.env['sale.order'].browse(self.env.context.get('active_ids'))
partner_ids = []
for sale in sale_order_ids:
partner_ids.append(sale.partner_id.id)
partner_check = self.check_customers(partner_ids)
if partner_check:
sale_numbers = sale_order_ids.mapped('name')
sale_numbers = "\n".join(sale_numbers)
compose_form_id = self.env.ref('whatsapp_mail_messaging.whatsapp_message_wizard_form').id
ctx = dict(self.env.context)
message = "Hi" + " " + self.partner_id.name + ',' + '\n' + "Your Orders are" + '\n' + sale_numbers + \
' ' + '\n' + "is ready for review.Do not hesitate to contact us if you have any questions."
ctx.update({
'default_message': message,
'default_partner_id': sale_order_ids[0].partner_id.id,
'default_mobile': sale_order_ids[0].partner_id.mobile,
'default_image_1920': sale_order_ids[0].partner_id.image_1920,
})
return {
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'whatsapp.message.wizard',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
else:
raise UserError(_(
'It seems that you have selected orders of more than one customer.'
'Try select orders of an unique customer'))

View File

@ -0,0 +1,64 @@
from itertools import groupby
from odoo import models, _
from odoo.exceptions import UserError
class Sale(models.Model):
_inherit = 'stock.picking'
def action_send_whatsapp(self):
compose_form_id = self.env.ref('whatsapp_mail_messaging.whatsapp_message_wizard_form').id
ctx = dict(self.env.context)
message = "Hi" + " " + self.partner_id.name + ',' + '\n' + "Your Transfer" + ' ' + self.name + ' '+ "is ready for review.Do not hesitate to contact us if you have any questions."
ctx.update({
'default_message': message,
'default_partner_id': self.partner_id.id,
'default_mobile': self.partner_id.mobile,
'default_image_1920': self.partner_id.image_1920,
})
return {
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'whatsapp.message.wizard',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
def check_customers(self, partner_ids):
partners = groupby(partner_ids)
return next(partners, True) and not next(partners, False)
def action_whatsapp_multi(self):
sale_order_ids = self.env['stock.picking'].browse(self.env.context.get('active_ids'))
partner_ids = []
for sale in sale_order_ids:
partner_ids.append(sale.partner_id.id)
partner_check = self.check_customers(partner_ids)
if partner_check:
sale_numbers = sale_order_ids.mapped('name')
sale_numbers = "\n".join(sale_numbers)
compose_form_id = self.env.ref('whatsapp_mail_messaging.whatsapp_message_wizard_form').id
ctx = dict(self.env.context)
message = "Hi" + " " + self.partner_id.name + ',' + '\n' + "Your Orders are" + '\n' + sale_numbers + \
' ' + '\n' + "is ready for review.Do not hesitate to contact us if you have any transfer."
ctx.update({
'default_message': message,
'default_partner_id': sale_order_ids[0].partner_id.id,
'default_mobile': sale_order_ids[0].partner_id.mobile,
'default_image_1920': sale_order_ids[0].partner_id.image_1920,
})
return {
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'whatsapp.message.wizard',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
else:
raise UserError(_(
'It seems that you have selected orders of more than one customer.'
'Try select orders of an unique customer'))

View File

@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2020-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Sayooj A O(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class Website(models.Model):
_inherit = 'website'
mobile_number = fields.Char(string='Mobile Number')

View File

@ -0,0 +1,3 @@
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
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

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,711 @@
<!--- HERO CONTAINER -->
<div class="padding: 1.5rem !important">
<section class="container mt-4">
<div class="row"
style="border-radius: 10px !important; padding: 4rem 1.5rem; background-color: #f6f8f9 !important;">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h1 class=""
style="font-family: Montserrat, 'sans-serif'; color: #000 !important; font-weight: 800 !important; font-size: 2.5rem !important;">
Odoo Whatsapp Connector
</h1>
<h4 class="my-4 text-center"
style="font-family: Montserrat, 'sans-serif'; color: #1a1a1a !important; font-weight: 300 !important; font-size: 1.2rem !important;">
Added options for sending Whatsapp messages and Mails in systray bar,sale order, invoices, website portal view and share the access url of
documents using share option available in each records through Whatsapp web.</h4>
<img src="./assets/hero.gif" class="img-responsive" style="height: 429px !important; width: 600px !important">
</div>
</div>
</section>
<!--- FEATURES CONTAINER -->
<section class="container" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="row">
<div class="col-lg-6">
<div class="d-flex flex-column justify-column-center align-items-center"
style="background-color: #f6f8f9 !important; padding: 2rem !important; border-radius: 10px !important; height: 100% !important;">
<img src="./assets/icons/01.png" class="img-responsive"
style="height: 72px !important; width: 72px !important; margin-bottom: 1rem !important; ">
<h4 class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #000 !important; font-weight: 800 !important; font-size: 1.2rem !important; width: 80%;">
Whatsapp/Mail Icon in systray bar</h4>
<p class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #1a1a1a !important; font-weight: 300 !important; font-size: 1rem !important; margin-bottom: 0 !important;">
Using these icons we can send quick messages to any contacts through mail and whatsapp web.</p>
</div>
</div>
<div class="col-lg-6">
<div class="d-flex flex-column justify-column-center align-items-center"
style="background-color: #f6f8f9 !important; padding: 2rem !important; border-radius: 10px !important; height: 100% !important;">
<img src="./assets/icons/03.png" class="img-responsive"
style="height: 72px !important; width: 72px !important; margin-bottom: 1rem !important; ">
<h4 class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #000 !important; font-weight: 800 !important; font-size: 1.2rem !important; width: 80%;">
Whatsapp floating icon in website</h4>
<p class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #1a1a1a !important; font-weight: 300 !important; font-size: 1rem !important; margin-bottom: 0 !important;">
Added a whatsapp icon in website in which the customers can communicate with website through whatsapp.</p>
</div>
</div>
</div>
<div class="row" style="margin-top: 2rem !important">
<div class="col-lg-6">
<div class="d-flex flex-column justify-column-center align-items-center"
style="background-color: #f6f8f9 !important; padding: 2rem !important; border-radius: 10px !important; height: 100% !important;">
<img src="./assets/icons/04.png" class="img-responsive"
style="height: 72px !important; width: 72px !important; margin-bottom: 1rem !important; ">
<h4 class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #000 !important; font-weight: 800 !important; font-size: 1.2rem !important; width: 80%;">
Whatsapp button in Sales and Invoice</h4>
<p class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #1a1a1a !important; font-weight: 300 !important; font-size: 1rem !important; margin-bottom: 0 !important;">
Using this button we can send the order/invoice details to the customer of the
corresponding documents.. </p>
</div>
</div>
<div class="col-lg-6">
<div class="d-flex flex-column justify-column-center align-items-center"
style="background-color: #f6f8f9 !important; padding: 2rem !important; border-radius: 10px !important; height: 100% !important;">
<img src="./assets/icons/02.png" class="img-responsive"
style="height: 72px !important; width: 72px !important; margin-bottom: 1rem !important; ">
<h4 class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #000 !important; font-weight: 800 !important; font-size: 1.2rem !important; width: 80%;">
Added Whatsapp as a share option</h4>
<p class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #1a1a1a !important; font-weight: 300 !important; font-size: 1rem !important; margin-bottom: 0 !important;">
With this we can share the access link of document to customers through whatsapp web. </p>
</div>
</div>
</div>
</section>
<!--- END OF FEATURES CONTAINER -->
<!-- SCREENSHOTS SECTION -->
<section class="container" style="padding: 4rem 1.5rem 0rem;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #000 !important; font-weight: 800 !important; font-size: 2rem !important; width: 80%;">
Screenshots</h2>
</div>
<div class="col-lg-12 my-3" style="background-color: #f6f6f6 !important; padding: 4rem 3rem;">
<div class="d-flex mb-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important; ">
<h6 style="margin-top: 0.5rem; color: #fff !important;">1</h6>
</div>
<h6 class="mt-2 ml-2">Added Whatsapp and Mail icon in the systray bar</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_1.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">2</h6>
</div>
<h6 class="mt-2 ml-2">By clicking on the mail icon we will have a mail composing screen like below
which we can specify the content,customer,subject and attachments.</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_2.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">3</h6>
</div>
<h6 class="mt-2 ml-2">After click on send from the composing wizard the corresponding recipients will receive the mail.</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_3.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">4</h6>
</div>
<h6 class="mt-2 ml-2">We have to specify the mobile field in contact form along with the country code for filling
the mobile number automatically in the whatsapp message composing wizard.</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_4.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">5</h6>
</div>
<h6 class="mt-2 ml-2">After click on the whatsapp icon in systray, we will have a message composing screen like this.</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_5.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">6</h6>
</div>
<h6 class="mt-2 ml-2">We can use the below emojis in our message</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_6.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">6</h6>
</div>
<h6 class="mt-2 ml-2">After click on send , we will redirected to the whatsapp web along with our message</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_7.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">7</h6>
</div>
<h6 class="mt-2 ml-2">The message we entered in odoo will carried to the corresponding number in our contact.</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_8.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">8</h6>
</div>
<h6 class="mt-2 ml-2">In Invoice form view we will have a button "Send by Whatsapp"</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_9.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">9</h6>
</div>
<h6 class="mt-2 ml-2">By clicking on "Send by Whatsapp" button ,a popup will arrive with auto filled details such as recipient,number and required content,
we can edit those details if required.</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_10.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">10</h6>
</div>
<h6 class="mt-2 ml-2">The message will redirect to the whatsapp web with the details in the popup.</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_11.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">11</h6>
</div>
<h6 class="mt-2 ml-2">In Sale Order form view we will have a button "Send by Whatsapp"</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_12.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">12</h6>
</div>
<h6 class="mt-2 ml-2">By clicking on "Send by Whatsapp" button ,a popup will arrive with auto filled details such as recipient,number and required content,
we can edit those details if required.</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_13.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">13</h6>
</div>
<h6 class="mt-2 ml-2">The message will redirect to the whatsapp web with the details in the popup</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_14.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">14</h6>
</div>
<h6 class="mt-2 ml-2">In the website form view we can define the number along with country code required for communicating with the
website responsible.</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_15.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">15</h6>
</div>
<h6 class="mt-2 ml-2">There will be a whatsapp icon present in the website.</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_16.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">16</h6>
</div>
<h6 class="mt-2 ml-2">By clicking on the whatsapp floating icon it will redirect to whatsapp web with the recipient as the number specified in corresponding website</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_17.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">17</h6>
</div>
<h6 class="mt-2 ml-2">We will have a share menu in documents like sales order, invoices, purchase etc..</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_18.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">18</h6>
</div>
<h6 class="mt-2 ml-2">By clicking on that there will be an additional option 'Whatsapp" in the popup screen where we can add the customer
and additional contents if we need.</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_19.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">19</h6>
</div>
<h6 class="mt-2 ml-2">After click on send first it will redirected to then whatsapp web and then to corresponding contact in our whatsapp
along with the custom message and link for accessing the document.</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_20.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">19</h6>
</div>
<h6 class="mt-2 ml-2">In the sales and invoice list view, we will have an option after selecting the records in the list view.</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_21.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
<div class="col-lg-12" style="background-color: #ffffff !important; padding: 4rem 3rem;">
<div class="d-flex my-3">
<div class="d-flex justify-content-center align-items-center"
style="background-color: #3498DB !important; border: 4px solid #d6eaf8 !important; box-shadow: 0px 0px 0px 4px #ebf5fb !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;">
<h6 style="margin-top: 0.6rem; color: #fff !important;">19</h6>
</div>
<h6 class="mt-2 ml-2">We can send multiple document references to a single customer using this option,
we can only send documents of a single customer at a time.</h6>
</div>
<img src="assets/screenshots/whatsapp_mail_messaging_22.png" width="100%" class="img-resposive"
style="border-radius: 10px !important;">
</div>
</div>
</section>
<!-- END OF SCREENSHOTS SECTION -->
<!-- SUGGESTED PRODUCTS-->
<section class="container" style="margin-top: 6rem !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #000 !important; font-weight: 800 !important; font-size: 2rem !important; width: 80%;">
Suggested Products</h2>
<p class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #1a1a1a !important; font-weight: 300 !important; font-size: 1.3rem !important;">
Check out our other products</p>
</div>
<div class="col-lg-12 my-4">
<div id="suggestedSlider" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner">
<div class="carousel-item" style="min-height: 191px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/dynamic_accounts_report/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/dynamic_financial_report.jpg">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/dashboard_pos/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/pos_dashboard.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/sale_discount_total/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/discount.png">
</div>
</a>
</div>
</div>
<div class="carousel-item active" style="min-height: 191px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/hr_payroll_account_community/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/payroll_accounting.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/invoice_format_editor/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/invoice.jpg">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/14.0/shopify_odoo_connector/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/shopify.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#suggestedSlider" data-slide="prev" style="width:35px; color:#000">
<span class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span>
</a> <a class="carousel-control-next" href="#suggestedSlider" data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
</section>
<!-- END OF SUGGESTED PRODUCTS -->
<!-- OUR SERVICES -->
<section class="container" style="margin-top: 6rem !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #000 !important; font-weight: 800 !important; font-size: 2rem !important; width: 80%;">
Our Services</h2>
<p class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #1a1a1a !important; font-weight: 300 !important; font-size: 1.3rem !important;">
We provide following services</p>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo
Licensing Consultancy</h6>
</div>
</div>
</section>
<!-- END OF END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<section class="container" style="margin-top: 6rem !important;">
<div class="row">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #000 !important; font-weight: 800 !important; font-size: 2rem !important; width: 80%;">
Our Industries</h2>
<p class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #1a1a1a !important; font-weight: 300 !important; font-size: 1.3rem !important;">
Our Industry Specifics And Process Segments To Solve Your Complex Business Barriers.</p>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/education-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/service-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</section>
<!-- END OF END OF OUR INDUSTRIES -->
<!-- FOOTER -->
<!-- Footer Section -->
<section class="container" style="margin: 5rem auto 2rem;">
<div class="row" style="max-width:1540px;">
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<h2 class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #000 !important; font-weight: 800 !important; font-size: 2rem !important; width: 80%;">
Need Help?</h2>
<p class="text-center"
style="font-family: Montserrat, 'sans-serif'; color: #1a1a1a !important; font-weight: 300 !important; font-size: 1.3rem !important;">
Do you have any queries regarding our products &amp; services? Let us know.</p>
</div>
</div>
<!-- Contact Cards -->
<div class="row d-flex justify-content-center align-items-center" style="max-width:1540px; margin: 0 auto 2rem auto;">
<div class="col-lg-12" style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; ">
<div class="row mt-4">
<div class="col-lg-4">
<a href="mailto:odoo@cybrosys.com" target="_blank" class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #4d4d4d; color: #FFF; border-radius: 4px;"><i
class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a>
</div>
<div class="col-lg-4">
<a href="https://api.whatsapp.com/send?phone=918606827707" target="_blank"
class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #25D366; color: #FFF; border-radius: 4px;"><i
class="fa fa-whatsapp mr-2"></i>WhatsApp</a>
</div>
<div class="col-lg-4">
<a href="skype:cybrosystechnologies?chat" target="_blank" class="btn btn-block deep_hover"
style="text-decoration: none; background-color: #4d4d4d; color: #FFF; border-radius: 4px;"><i
class="fa fa-envelope mr-2"></i>cybrosystechnologies</a>
</div>
</div>
</div>
</div>
<!-- End of Contact Cards -->
</section>
<!-- Footer -->
<section class="oe_container" style="padding: 2rem 3rem 1rem;">
<div class="row" style="max-width:1540px; margin: 0 auto; margin-right: 3rem; ">
<!-- Logo -->
<div class="col-lg-12 d-flex justify-content-center align-items-center" style="margin-top: 3rem;">
<img src="https://www.cybrosys.com/images/logo.png" width="200px" height="auto" />
</div>
<!-- End of Logo -->
<div class="col-lg-12">
<hr
style="margin-top: 3rem;background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;">
<!-- End of Footer Section -->
</div>
</div>
</section>
<!-- END OF FOOTER -->

View File

@ -0,0 +1,4 @@
.o_systray_item .fa-whatsapp,
.o_systray_item .fa-envelope {
margin: 0 5px;
}

View File

@ -0,0 +1,22 @@
.cy_whatsapp_web{
position:fixed;
width:60px;
height:60px;
bottom:40px;
right:40px;
background-color:#25d366;
color:#FFF;
border-radius:50px;
text-align:center;
font-size:30px;
z-index:100;
}
.cy-icon{
margin-top:16px;
color: white;
}
.fa-whatsapp {
color:#FFF;
}

View File

@ -0,0 +1,22 @@
import { registry } from "@web/core/registry";
import { useService } from "@web/core/utils/hooks";
import { Component } from "@odoo/owl";
class SystrayMail extends Component {
static template = "whatsapp_mail_messaging.mail_icon";
setup() {
this.action = useService("action");
}
_onClick() {
this.action.doAction({
name: "Compose Mail",
res_model: "mail.compose.message",
views: [[false, "form"]],
type: "ir.actions.act_window",
target: "new",
});
}
}
export const systrayItem = {
Component: SystrayMail,
};
registry.category("systray").add("whatsapp_mail_messaging.mail_button", systrayItem, { sequence: 98 });

View File

@ -0,0 +1,24 @@
import { registry } from "@web/core/registry";
import { useService } from "@web/core/utils/hooks";
import { Component } from "@odoo/owl";
class SystrayWhatsapp extends Component {
static template = "whatsapp_mail_messaging.whatsapp_icon"; // اسم القالب
setup() {
this.action = useService("action");
}
_onClick() {
this.action.doAction({
name: "Compose Whatsapp Message",
res_model: "whatsapp.message.wizard",
views: [[false, "form"]],
type: "ir.actions.act_window",
target: "new",
});
}
}
export const systrayItem = {
Component: SystrayWhatsapp,
};
registry.category("systray").add("whatsapp_mail_messaging.whatsapp_button", systrayItem, { sequence: 99 });

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">
<t t-name="whatsapp_mail_messaging.mail_icon" owl="1">
<div class="o_systray_item" t-on-click.prevent="_onClick" title="Compose Mail" role="button">
<i class="fa fa-envelope"/>
</div>
</t>
</templates>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">
<t t-name="whatsapp_mail_messaging.whatsapp_icon" owl="1">
<div class="o_systray_item" t-on-click.prevent="_onClick" title="Send WhatsApp Message" role="button">
<i class="fa fa-whatsapp"/>
</div>
</t>
</templates>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record model="ir.ui.view" id="account_move_form_view_inherited">
<field name="name">account.move.form.view.inherited</field>
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='preview_invoice']" position="after">
<button type="object" class="btn btn-success"
name="action_send_whatsapp" icon="fa-whatsapp" string="Send by Whatsapp"/>
</xpath>
</field>
</record>
<record id="action_whatsapp_multi_account_move" model="ir.actions.server">
<field name="name">Send by Whatsapp</field>
<field name="model_id" ref="account.model_account_move"/>
<field name="binding_model_id" ref="account.model_account_move"/>
<field name="binding_view_types">list</field>
<field name="state">code</field>
<field name="code">
if records:
action = records.action_whatsapp_multi()
</field>
</record>
</odoo>

View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="whatsapp_res_view_form" model="ir.ui.view">
<field name="name">whatsapp.view.form.inherit.res</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='image_1920']" position="before">
<div class="oe_button_box" name="button_box">
<button type="object" class="btn btn-success"
name="action_send_whatsapp" icon="fa-whatsapp" string="Send by Whatsapp"/>
</div>
</xpath>
</field>
</record>
<record id="action_whatsapp_multi_res_partner" model="ir.actions.server">
<field name="name">Send by Whatsapp</field>
<field name="model_id" ref="base.model_res_partner"/>
<field name="binding_model_id" ref="base.model_res_partner"/>
<field name="binding_view_types">list</field>
<field name="state">code</field>
<field name="code">
if records:
action = records.action_whatsapp_multi()
</field>
</record>
</odoo>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="whatsapp_crm_view_form" model="ir.ui.view">
<field name="name">whatsapp.view.form.inherit.crm</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.crm_lead_view_form"/>
<field name="arch" type="xml">
<xpath expr="//form/header" position="inside">
<button type="object" class="btn btn-success"
name="action_send_whatsapp" icon="fa-whatsapp" string="Send by Whatsapp"/>
</xpath>
</field>
</record>
<record id="action_whatsapp_multi_crm_lead" model="ir.actions.server">
<field name="name">Send by Whatsapp</field>
<field name="model_id" ref="crm.model_crm_lead"/>
<field name="binding_model_id" ref="crm.model_crm_lead"/>
<field name="binding_view_types">list</field>
<field name="state">code</field>
<field name="code">
if records:
action = records.action_whatsapp_multi()
</field>
</record>
</odoo>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="ChatToCompany" name="Chat With Company" inherit_id="website.footer_custom">
<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">
<i class="fa fa-whatsapp cy-icon"/>
</a>
</xpath>
</template>
</odoo>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record model="ir.ui.view" id="purchase_order_form_view_inherited">
<field name="name">purchase.order.form.view.inherited</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_form"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_rfq_send']" position="after">
<button type="object" class="btn btn-success"
name="action_send_whatsapp" icon="fa-whatsapp" string="Send by Whatsapp"/>
</xpath>
</field>
</record>
<record id="action_whatsapp_multi_purchase_order" model="ir.actions.server">
<field name="name">Send by Whatsapp</field>
<field name="model_id" ref="purchase.model_purchase_order"/>
<field name="binding_model_id" ref="purchase.model_purchase_order"/>
<field name="binding_view_types">list</field>
<field name="state">code</field>
<field name="code">
if records:
action = records.action_whatsapp_multi()
</field>
</record>
</odoo>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record model="ir.ui.view" id="sale_order_form_view_inherited">
<field name="name">sale.order.form.view.inherited</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_quotation_send']" position="after">
<button type="object" class="btn btn-success"
name="action_send_whatsapp" icon="fa-whatsapp" string="Send by Whatsapp"/>
</xpath>
</field>
</record>
<record id="action_whatsapp_multi_sale_order" model="ir.actions.server">
<field name="name">Send by Whatsapp</field>
<field name="model_id" ref="sale.model_sale_order"/>
<field name="binding_model_id" ref="sale.model_sale_order"/>
<field name="binding_view_types">list</field>
<field name="state">code</field>
<field name="code">
if records:
action = records.action_whatsapp_multi()
</field>
</record>
</odoo>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="whatsapp_stock_view_form" model="ir.ui.view">
<field name="name">whatsapp.view.form.inherit.stock</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='do_print_picking']" position="after">
<button type="object" class="btn btn-success"
name="action_send_whatsapp" icon="fa-whatsapp" string="Send by Whatsapp"/>
</xpath>
</field>
</record>
<record id="action_whatsapp_multi_stock_picking" model="ir.actions.server">
<field name="name">Send by Whatsapp</field>
<field name="model_id" ref="stock.model_stock_picking"/>
<field name="binding_model_id" ref="stock.model_stock_picking"/>
<field name="binding_view_types">list</field>
<field name="state">code</field>
<field name="code">
if records:
action = records.action_whatsapp_multi()
</field>
</record>
</odoo>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="website_form_view" model="ir.ui.view">
<field name="name">website.form.inherit</field>
<field name="model">website</field>
<field name="inherit_id" ref="website.view_website_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="after">
<field name="mobile_number" widget="phone"/>
</xpath>
</field>
</record>
</odoo>

View File

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2020-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Sayooj A O(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import wh_message_wizard
from . import portal_share

View File

@ -0,0 +1,65 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2020-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Sayooj A O(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
import urllib.parse as urllib
from odoo import models, fields, api
class PortalShare(models.TransientModel):
_inherit = 'portal.share'
share_type = fields.Selection([
('mail', 'Mail'),
('whatsapp', 'Whatsapp')], string="Sharing Method", default="mail")
mobile_number = fields.Char()
partner_id = fields.Many2one('res.partner', string='Customer')
@api.onchange('partner_id')
def _onchange_partner_id(self):
self.mobile_number = self.partner_id.mobile
def action_send_whatsapp(self):
""""""
"""In this function we are redirecting to the whatsapp web
with required parameters"""
if self.note and self.mobile_number:
if self.res_model == 'sale.order':
common_message = 'You have been invited to access the following Sale Order.'
elif self.res_model == 'account.move':
common_message = 'You have been invited to access the following Invoice.'
elif self.res_model == 'purchase.order':
common_message = 'You have been invited to access the following Purchase.'
else:
common_message = 'You have been invited to access the following Document.'
message_string = self.note + '%0a' + common_message + '%0a' + urllib.quote(self.share_link)
related_record = self.env[self.res_model].search([('id', '=', int(self.res_id))])
related_record.message_post(body=message_string)
return {
'type': 'ir.actions.act_url',
'url': "https://api.whatsapp.com/send?phone=" + self.mobile_number + "&text=" + message_string,
'target': 'new',
'res_id': self.id,
}

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_portal_share_form_inherit" model="ir.ui.view">
<field name="name">view.portal.share.form.inherit</field>
<field name="model">portal.share</field>
<field name="inherit_id" ref="portal.portal_share_wizard"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='share_link']" position="before">
<field name="share_type" widget="radio"/>
</xpath>
<xpath expr="//button[@name='action_send_mail']" position="replace">
<button string="Send Mail" name="action_send_mail"
type="object" class="btn btn-primary"/>
</xpath>
<xpath expr="//button[@name='action_send_mail']" position="after">
<button string="Send Whatsapp" name="action_send_whatsapp"
type="object" class="btn btn-success" icon="fa-whatsapp"/>
</xpath>
<xpath expr="//field[@name='partner_ids']" position="replace">
<field name="partner_ids" widget="many2many_tags_email"
placeholder="Add contacts to share the document..."/>
</xpath>
<xpath expr="//field[@name='share_link']" position="after">
<group>
<field name="partner_id"/>
<field name="mobile_number"/>
</group>
</xpath>
<xpath expr="//field[@name='note']" position="replace">
<field name="note" placeholder="Add a note" widget="text_emojis"/>
</xpath>
</field>
</record>
</odoo>

View File

@ -0,0 +1,57 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2020-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Sayooj A O(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models, fields, api
class WhatsappSendMessage(models.TransientModel):
_name = 'whatsapp.message.wizard'
partner_id = fields.Many2one('res.partner', string="Recipient")
mobile = fields.Char(required=True, string="Contact Number")
message = fields.Text(string="Message", required=True)
image_1920 = fields.Binary(readonly=1)
@api.onchange('partner_id')
def _onchange_partner_id(self):
"""Function for fetching the mobile number and image of partner
in Odoo"""
self.mobile = self.partner_id.mobile
self.image_1920 = self.partner_id.image_1920
def send_message(self):
"""In this function we are redirecting to the whatsapp web
with required parameters"""
if self.message and self.mobile:
message_string = ''
message = self.message.split(' ')
for msg in message:
message_string = message_string + msg + '%20'
message_string = message_string[:(len(message_string) - 3)]
message_post_content = message_string
self.partner_id.message_post(body=message_post_content)
return {
'type': 'ir.actions.act_url',
'url': "https://api.whatsapp.com/send?phone=" + self.mobile + "&text=" + message_string,
'target': 'new',
'res_id': self.id,
}

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record id="whatsapp_message_wizard_form" model="ir.ui.view">
<field name="name">whatsapp.message.wizard.form</field>
<field name="model">whatsapp.message.wizard</field>
<field name="priority" eval="8"/>
<field name="arch" type="xml">
<form string="Whatsapp Message">
<group col="2" colspan="4">
<group>
<field name="partner_id"/>
<field name="mobile"/>
<field name="message" widget="text_emojis"/>
</group>
<group>
<field name="image_1920" widget='image' class="oe_avatar"
options='{"preview_image": "image", "size": [150, 150]}' nolabel="1"/>
</group>
</group>
<footer>
<button name="send_message" string="Send" type="object" class="oe_highlight"
icon="fa-whatsapp"/>
<button name="cancel" string="Cancel" special="cancel"/>
</footer>
</form>
</field>
</record>
</data>
</odoo>