|
|
@ -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
|
||||||
|
|
@ -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,
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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'))
|
||||||
|
|
@ -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'))
|
||||||
|
|
@ -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'))
|
||||||
|
|
@ -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'))
|
||||||
|
|
@ -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'))
|
||||||
|
|
@ -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'))
|
||||||
|
|
@ -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')
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
After Width: | Height: | Size: 325 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 310 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 576 B |
|
After Width: | Height: | Size: 733 B |
|
After Width: | Height: | Size: 404 B |
|
After Width: | Height: | Size: 492 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 911 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 673 B |
|
After Width: | Height: | Size: 878 B |
|
After Width: | Height: | Size: 653 B |
|
After Width: | Height: | Size: 905 B |
|
After Width: | Height: | Size: 839 B |
|
After Width: | Height: | Size: 427 B |
|
After Width: | Height: | Size: 627 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 988 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 180 KiB |
|
After Width: | Height: | Size: 184 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 111 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 505 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 239 KiB |
|
After Width: | Height: | Size: 210 KiB |
|
After Width: | Height: | Size: 165 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 157 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 221 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 204 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
|
@ -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 & 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 & 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 -->
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
.o_systray_item .fa-whatsapp,
|
||||||
|
.o_systray_item .fa-envelope {
|
||||||
|
margin: 0 5px;
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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 });
|
||||||
|
|
@ -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 });
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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,
|
||||||
|
}
|
||||||
|
|
@ -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>
|
||||||