@ -0,0 +1,46 @@ |
|||||
|
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg |
||||
|
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html |
||||
|
:alt: License: AGPL-3 |
||||
|
|
||||
|
POS Service Charges |
||||
|
======================= |
||||
|
This module allows to set service charges for orders in POS by globally and session wise. |
||||
|
|
||||
|
Configuration |
||||
|
============= |
||||
|
* No additional configurations needed |
||||
|
|
||||
|
Company |
||||
|
------- |
||||
|
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
||||
|
|
||||
|
License |
||||
|
------- |
||||
|
Affero General Public License v3.0 (AGPL v3) |
||||
|
(https://www.gnu.org/licenses/agpl-3.0-standalone.html) |
||||
|
|
||||
|
Credits |
||||
|
------- |
||||
|
* Developer: Aysha Shalin, Contact: odoo@cybrosys.com |
||||
|
|
||||
|
Contacts |
||||
|
-------- |
||||
|
* Mail Contact : odoo@cybrosys.com |
||||
|
* Website : https://cybrosys.com |
||||
|
|
||||
|
Bug Tracker |
||||
|
----------- |
||||
|
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. |
||||
|
|
||||
|
Maintainer |
||||
|
========== |
||||
|
.. image:: https://cybrosys.com/images/logo.png |
||||
|
:target: https://cybrosys.com |
||||
|
|
||||
|
This module is maintained by Cybrosys Technologies. |
||||
|
|
||||
|
For support and more information, please visit `Our Website <https://cybrosys.com/>`__ |
||||
|
|
||||
|
Further information |
||||
|
=================== |
||||
|
HTML Description: `<static/description/index.html>`__ |
@ -0,0 +1,22 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Aysha Shalin (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
from . import models |
@ -0,0 +1,51 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Aysha Shalin (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
{ |
||||
|
'name': 'POS Service Charges', |
||||
|
'version': '15.0.1.0.0', |
||||
|
'category': 'Point Of Sale', |
||||
|
'summary': 'Add service charges to the Orders from POS.', |
||||
|
'description': """This module enables to set service charges for orders in |
||||
|
POS globally and session wise.""", |
||||
|
'author': 'Cybrosys Techno Solutions', |
||||
|
'company': 'Cybrosys Techno Solutions', |
||||
|
'maintainer': 'Cybrosys Techno Solutions', |
||||
|
'website': 'https://www.cybrosys.com', |
||||
|
'depends': ['base', 'point_of_sale'], |
||||
|
'data': [ |
||||
|
'views/res_config_settings_views.xml', |
||||
|
'views/pos_config_views.xml', |
||||
|
], |
||||
|
'assets': { |
||||
|
'point_of_sale.assets': [ |
||||
|
'service_charges_pos/static/src/js/service_charge_button.js', |
||||
|
], |
||||
|
'web.assets_qweb': [ |
||||
|
'service_charges_pos/static/src/xml/ServiceChargeButton.xml', |
||||
|
], |
||||
|
}, |
||||
|
'images': ['static/description/banner.png'], |
||||
|
'license': 'AGPL-3', |
||||
|
'installable': True, |
||||
|
'auto_install': False, |
||||
|
'application': False, |
||||
|
} |
@ -0,0 +1,7 @@ |
|||||
|
## Module <service_charges_pos> |
||||
|
|
||||
|
#### 20.07.2024 |
||||
|
#### Version 15.0.1.0.0 |
||||
|
##### ADD |
||||
|
|
||||
|
- Initial commit for POS Service Charges |
@ -0,0 +1,24 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Aysha Shalin (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
from . import pos_config |
||||
|
from . import pos_session |
||||
|
from . import res_config_settings |
@ -0,0 +1,149 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Aysha Shalin (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
from odoo import api, fields, models |
||||
|
|
||||
|
|
||||
|
class PosConfig(models.Model): |
||||
|
""" Inherits POS Configuration """ |
||||
|
_inherit = 'pos.config' |
||||
|
|
||||
|
is_session = fields.Boolean(string="Session", |
||||
|
compute='_compute_is_session', |
||||
|
help="Check it is for sessions", ) |
||||
|
is_service_charges = fields.Boolean(string="Service Charges", |
||||
|
help="Enable to add service charge") |
||||
|
charge_type = fields.Selection( |
||||
|
[('amount', 'Amount'), |
||||
|
('percentage', 'Percentage')], |
||||
|
string='Type', default='amount', |
||||
|
help="Can choose charge percentage or amount") |
||||
|
service_charge = fields.Float(string='Service Charge', |
||||
|
help="Charge need to apply") |
||||
|
service_product_id = fields.Many2one( |
||||
|
'product.product', |
||||
|
string='Service Product', |
||||
|
domain="[('available_in_pos', '=', " |
||||
|
"True)," |
||||
|
"('sale_ok', '=', True), " |
||||
|
"('type', '=', 'service')]", |
||||
|
help="Service product") |
||||
|
|
||||
|
has_service_charge = fields.Boolean(string='Service charge', |
||||
|
compute="_compute_has_service_charge") |
||||
|
config_visibility = fields.Selection([ |
||||
|
('global', 'Global'), |
||||
|
('session', 'Session')], |
||||
|
string="Visibility", compute="_compute_config_visibility", |
||||
|
help='Setup the Service charge globally or per session') |
||||
|
config_selection = fields.Selection([ |
||||
|
('amount', 'Amount'), |
||||
|
('percentage', 'Percentage')], |
||||
|
string='Selection type', compute="_compute_config_selection", |
||||
|
help='Set the service charge as a amount or percentage') |
||||
|
config_charge = fields.Float(string='Charge', |
||||
|
compute="_compute_config_charge", |
||||
|
help='Set a default service charge globally') |
||||
|
config_product_id = fields.Many2one('product.product', |
||||
|
string='Service Product', |
||||
|
domain="[('available_in_pos', '=', " |
||||
|
"True)," |
||||
|
"('sale_ok', '=', True), " |
||||
|
"('type', '=', 'service')]", |
||||
|
compute="_compute_config_product", |
||||
|
help='Set a service product globally') |
||||
|
|
||||
|
def _compute_is_session(self): |
||||
|
""" To check the service charge is set for session wise or globally """ |
||||
|
check_session = self.env['ir.config_parameter'].sudo().get_param( |
||||
|
'service_charges_pos.visibility') |
||||
|
if check_session == 'session': |
||||
|
self.is_session = True |
||||
|
else: |
||||
|
self.is_session = False |
||||
|
|
||||
|
@api.onchange('is_service_charges') |
||||
|
def onchange_is_service_charges(self): |
||||
|
""" When the service charge is enabled set the service product and |
||||
|
amount by default per session. """ |
||||
|
if self.is_service_charges: |
||||
|
if not self.service_product_id: |
||||
|
domain = [('available_in_pos', '=', True), |
||||
|
('sale_ok', '=', True), ('type', '=', 'service')] |
||||
|
self.service_product_id = self.env['product.product'].search( |
||||
|
domain, limit=1) |
||||
|
self.service_charge = 10.0 |
||||
|
else: |
||||
|
self.service_product_id = False |
||||
|
self.service_charge = 0.0 |
||||
|
|
||||
|
def _compute_has_service_charge(self): |
||||
|
""" To check if service charge is enabled from settings """ |
||||
|
if self.env['ir.config_parameter'].sudo().get_param( |
||||
|
'service_charges_pos.enable_service_charge'): |
||||
|
self.has_service_charge = True |
||||
|
else: |
||||
|
self.has_service_charge = False |
||||
|
|
||||
|
def _compute_config_visibility(self): |
||||
|
""" To obtain service charge type from res.config.settings """ |
||||
|
res = self.env['ir.config_parameter'].sudo() |
||||
|
if res.get_param( |
||||
|
'service_charges_pos.enable_service_charge'): |
||||
|
settings_visibility = res.get_param( |
||||
|
'service_charges_pos.visibility') |
||||
|
self.config_visibility = settings_visibility |
||||
|
else: |
||||
|
self.config_visibility = '' |
||||
|
|
||||
|
def _compute_config_charge(self): |
||||
|
""" To obtain service charge from res.config.settings """ |
||||
|
res = self.env['ir.config_parameter'].sudo() |
||||
|
if res.get_param( |
||||
|
'service_charges_pos.enable_service_charge'): |
||||
|
charge = res.get_param( |
||||
|
'service_charges_pos.global_charge') |
||||
|
self.config_charge = charge |
||||
|
else: |
||||
|
self.config_charge = 0 |
||||
|
|
||||
|
def _compute_config_selection(self): |
||||
|
""" To obtain service charge mode from res.config.settings """ |
||||
|
res = self.env['ir.config_parameter'].sudo() |
||||
|
if res.get_param( |
||||
|
'service_charges_pos.enable_service_charge'): |
||||
|
selection = res.get_param( |
||||
|
'service_charges_pos.global_selection') |
||||
|
self.config_selection = selection |
||||
|
else: |
||||
|
self.config_selection = '' |
||||
|
|
||||
|
def _compute_config_product(self): |
||||
|
""" To obtain service charge product from res.config.settings """ |
||||
|
res = self.env['ir.config_parameter'].sudo() |
||||
|
if res.get_param( |
||||
|
'service_charges_pos.enable_service_charge'): |
||||
|
product_id = res.get_param( |
||||
|
'service_charges_pos.global_product_id') |
||||
|
product = self.env['product.template'].browse(int(product_id)) |
||||
|
self.config_product_id = product.id |
||||
|
else: |
||||
|
self.config_product_id = '' |
@ -0,0 +1,48 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Aysha Shalin (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
from odoo import models |
||||
|
|
||||
|
|
||||
|
class PosSession(models.Model): |
||||
|
""" Inherits POS Session """ |
||||
|
_inherit = 'pos.session' |
||||
|
|
||||
|
def _pos_ui_models_to_load(self): |
||||
|
""" Supering the function for loading res.config.settings to pos |
||||
|
session""" |
||||
|
result = super()._pos_ui_models_to_load() |
||||
|
result.append('res.config.settings') |
||||
|
return result |
||||
|
|
||||
|
def _loader_params_res_config_settings(self): |
||||
|
""" Returning the field required """ |
||||
|
return { |
||||
|
'search_params': { |
||||
|
'fields': ['enable_service_charge', 'visibility', |
||||
|
'global_selection', 'global_charge', |
||||
|
'global_product_id'], |
||||
|
}, |
||||
|
} |
||||
|
|
||||
|
def _get_pos_ui_res_config_settings(self, params): |
||||
|
""" Returns the model """ |
||||
|
return self.env['res.config.settings'].sudo().search_read(**params['search_params']) |
@ -0,0 +1,71 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Aysha Shalin (odoo@cybrosys.com) |
||||
|
# |
||||
|
# You can modify it under the terms of the GNU AFFERO |
||||
|
# GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
|
# (AGPL v3) along with this program. |
||||
|
# If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
from odoo import api, fields, models |
||||
|
|
||||
|
|
||||
|
class ResConfigSettings(models.TransientModel): |
||||
|
""" Inherits configuration Settings """ |
||||
|
_inherit = "res.config.settings" |
||||
|
|
||||
|
enable_service_charge = fields.Boolean( |
||||
|
string="Service Charges", |
||||
|
config_parameter="service_charges_pos.enable_service_charge", |
||||
|
help="Enable to add service charge") |
||||
|
visibility = fields.Selection([ |
||||
|
('global', 'Global'), |
||||
|
('session', 'Session')], |
||||
|
default='global', string="Visibility", |
||||
|
config_parameter="service_charges_pos.visibility", |
||||
|
help='Setup the Service charge globally or per session') |
||||
|
global_selection = fields.Selection([ |
||||
|
('amount', 'Amount'), |
||||
|
('percentage', 'Percentage')], |
||||
|
string='Type', default='amount', |
||||
|
config_parameter="service_charges_pos.global_selection", |
||||
|
help='Set the service charge as a amount or percentage') |
||||
|
global_charge = fields.Float( |
||||
|
string='Service Charge', |
||||
|
default=10, |
||||
|
config_parameter="service_charges_pos.global_charge", |
||||
|
help='Set a default service charge globally') |
||||
|
global_product_id = fields.Many2one( |
||||
|
'product.product', |
||||
|
string='Service Product', |
||||
|
domain="[('available_in_pos', '=', True)," |
||||
|
" ('sale_ok', '=', True),('type', '=', 'service')]", |
||||
|
config_parameter="service_charges_pos.global_product_id", |
||||
|
help='Set a service product globally') |
||||
|
|
||||
|
@api.onchange('enable_service_charge') |
||||
|
def onchange_enable_service_charge(self): |
||||
|
""" When the service charge is enabled, set service product and amount |
||||
|
by default globally """ |
||||
|
if self.enable_service_charge: |
||||
|
if not self.global_product_id: |
||||
|
domain = [('available_in_pos', '=', True), |
||||
|
('sale_ok', '=', True), ('type', '=', 'service')] |
||||
|
self.global_product_id = self.env[ |
||||
|
'product.product'].search( |
||||
|
domain, limit=1) |
||||
|
else: |
||||
|
self.global_product_id = False |
||||
|
self.global_charge = 0.0 |
After Width: | Height: | Size: 3.6 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: 911 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 3.4 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: 104 KiB |
After Width: | Height: | Size: 119 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 338 KiB |
After Width: | Height: | Size: 448 KiB |
After Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 336 KiB |
After Width: | Height: | Size: 439 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 97 KiB |
After Width: | Height: | Size: 445 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 9.0 KiB |
@ -0,0 +1,545 @@ |
|||||
|
<div class="container" style="padding: 1rem !important; margin-bottom: 1rem !important;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between" style="border-bottom: 1px solid #d5d5d5;"> |
||||
|
<div class="my-3"> |
||||
|
<img src="./assets/icons/logo.png" style="width: auto !important; height: 40px !important;"> |
||||
|
</div> |
||||
|
<div class="my-3 d-flex align-items-center"> |
||||
|
<div style="background-color: #7C7BAD !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;"> |
||||
|
<i class="fa fa-check mr-1"></i>Community |
||||
|
</div> |
||||
|
<div style="background-color: #875A7B !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;"> |
||||
|
<i class="fa fa-check mr-1"></i>Enterprise |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="container" style="padding: 0rem 1.5rem 4rem !important"> |
||||
|
<div class="row" style="height: 900px !important;"> |
||||
|
<div class="col-sm-12 col-md-12 col-lg-12" style="padding: 4rem 1rem !important; background-color: #714B67 !important; height: 600px !important; border-radius: 20px !important;"> |
||||
|
<h1 style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #FFFFFF !important; font-size: 3.5rem !important; text-align: center !important;"> |
||||
|
POS Service Charges |
||||
|
</h1> |
||||
|
<p style="font-family: 'Montserrat', sans-serif !important; font-weight: 300 !important; color: #FFFFFF !important; font-size: 1.4rem !important; text-align: center !important;"> |
||||
|
This module allows you to set service charges for an order by globally and session wise. |
||||
|
</p> |
||||
|
<img src="./assets/screenshots/hero.gif" class="img-responsive" width="100%" height="auto" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="row"> |
||||
|
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin-bottom: 2rem !important"> |
||||
|
<h2 style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> |
||||
|
<i class="fa fa-compass mr-2"></i>Explore this module |
||||
|
</h2> |
||||
|
</div> |
||||
|
<div class="col-md-6"> |
||||
|
<a href="#overview" style="text-decoration: none !important;"> |
||||
|
<div class="row" style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> |
||||
|
<div class="col-8"> |
||||
|
<h3 style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">Overview</h3> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> |
||||
|
Learn more about this module |
||||
|
</p> |
||||
|
</div> |
||||
|
<div class="col-4 text-right d-flex justify-content-end align-items-center"> |
||||
|
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div class="col-md-6"> |
||||
|
<a href="#configuration" style="text-decoration: none !important;"> |
||||
|
<div class="row" style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> |
||||
|
<div class="col-8"> |
||||
|
<h3 style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> |
||||
|
Configuration</h3> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> |
||||
|
View configurations for this module |
||||
|
</p> |
||||
|
</div> |
||||
|
<div class="col-4 text-right d-flex justify-content-end align-items-center"> |
||||
|
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div class="col-md-6"> |
||||
|
<a href="#features" style="text-decoration: none !important;"> |
||||
|
<div class="row" style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> |
||||
|
<div class="col-8"> |
||||
|
<h3 style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> |
||||
|
Features</h3> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> |
||||
|
View features of this module |
||||
|
</p> |
||||
|
</div> |
||||
|
<div class="col-4 text-right d-flex justify-content-end align-items-center"> |
||||
|
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
<div class="col-md-6"> |
||||
|
<a href="#screenshots" style="text-decoration: none !important;"> |
||||
|
<div class="row" style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> |
||||
|
<div class="col-8"> |
||||
|
<h3 style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;">Screenshots</h3> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> |
||||
|
See key screenshots of this module |
||||
|
</p> |
||||
|
</div> |
||||
|
<div class="col-4 text-right d-flex justify-content-end align-items-center"> |
||||
|
<i class="fa fa-chevron-right" style="color: #714B67 !important;"></i> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="row" id="overview"> |
||||
|
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> |
||||
|
<h2 style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> |
||||
|
<i class="fa fa-pie-chart mr-2"></i>Overview |
||||
|
</h2> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-mg-12 pl-3"> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important; line-height: 30px !important;"> |
||||
|
This module crafted by Cybrosys Technologies provides an option to set the Service charge in every order of POS. |
||||
|
The main feature of the module is possible to set the Service charge for every session or globally. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="row" id="features"> |
||||
|
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> |
||||
|
<h2 style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> |
||||
|
<i class="fa fa-star mr-2"></i>Features |
||||
|
</h2> |
||||
|
</div> |
||||
|
<div class="col-md-6 pl-3 py-3 d-flex"> |
||||
|
<div> |
||||
|
<img src="assets/icons/check.png"> |
||||
|
</div> |
||||
|
<div> |
||||
|
<h4 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Global or session</h4> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
When enable the service charge in configuration settings of POS you can choose either Global or session. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-6 pl-3 py-3 d-flex"> |
||||
|
<div> |
||||
|
<img src="assets/icons/check.png"> |
||||
|
</div> |
||||
|
<div> |
||||
|
<h4 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Default Service charge</h4> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
You can set a default service charge. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-6 pl-3 py-3 d-flex"> |
||||
|
<div> |
||||
|
<img src="assets/icons/check.png"> |
||||
|
</div> |
||||
|
<div> |
||||
|
<h4 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Percentage or amount</h4> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
We can set the service charge as percentage or amount. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-md-6 pl-3 py-3 d-flex"> |
||||
|
<div> |
||||
|
<img src="assets/icons/check.png"> |
||||
|
</div> |
||||
|
<div> |
||||
|
<h4 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> |
||||
|
Dynamical service charge</h4> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
Possible to set the service charge dynamically for a order. |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<div class="row" id="screenshots"> |
||||
|
<div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> |
||||
|
<h2 style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> |
||||
|
<i class="fa fa-image mr-2"></i>Screenshots |
||||
|
</h2> |
||||
|
</div> |
||||
|
<div class="col-lg-12 my-2"> |
||||
|
<h4 class="mt-2" style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">Configuration Settings for Service charge(Globally)</h4> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
In the general settings of POS, you can see the option Service charge.Enable the option and under that you can see the option 'Global' and 'Session'.</br> |
||||
|
Service Product: You can choose a service product there.The Latest service product will be there by default(should be service and can be sold)</br> |
||||
|
Type: The service charge can be added on the order as amount or percentage of the total amount. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/1.png" class="img-responsive img-thumbnail border" width="100%" height="auto" /> |
||||
|
</div> |
||||
|
<div class="col-lg-12 my-2"> |
||||
|
<h4 class="mt-2" style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">Service charge Button</h4> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
You can see the Service charge button.Clicking the button will lead to a NumberPopup with the default service charge that we set before. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/2.png" class="img-responsive img-thumbnail border" width="100%" height="auto" /> |
||||
|
</div> |
||||
|
<div class="col-lg-12 my-2"> |
||||
|
<img src="assets/screenshots/3.png" class="img-responsive img-thumbnail border" width="100%" height="auto" /> |
||||
|
</div> |
||||
|
<div class="col-lg-12 my-2"> |
||||
|
<h4 class="mt-2" style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">Percentage</h4> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
You can also add the percentage of total amount as service charge by enabling the field percentage in settings. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/4.png" class="img-responsive img-thumbnail border" width="100%" height="auto" /> |
||||
|
</div> |
||||
|
<div class="col-lg-12 my-2"> |
||||
|
<img src="assets/screenshots/5.png" class="img-responsive img-thumbnail border" width="100%" height="auto" /> |
||||
|
</div> |
||||
|
<div class="col-lg-12 my-2"> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
15% of the total amount is added as service charge on order. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/6.png" class="img-responsive img-thumbnail border" width="100%" height="auto" /> |
||||
|
</div> |
||||
|
<div class="col-lg-12 my-2"> |
||||
|
<h4 class="mt-2" style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">Configuration Settings for Service charge(Session)</h4> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
Enable the selection field 'session'.If enable it the service charge will appear on every session. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/7.png" class="img-responsive img-thumbnail border" width="100%" height="auto" /> |
||||
|
</div> |
||||
|
<div class="col-lg-12 my-2"> |
||||
|
<p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> |
||||
|
In every session you can see the option.Then you can set service charge percentage or amount as like global. |
||||
|
</p> |
||||
|
<img src="assets/screenshots/8.png" class="img-responsive img-thumbnail border" width="100%" height="auto" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<!-- SUGGESTED PRODUCTS --> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center" style="text-align: center; padding: 2.5rem 1rem !important;"> |
||||
|
<h2 style="color: #212529 !important;">Suggested Products</h2> |
||||
|
<hr style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" /> |
||||
|
<div id="demo1" class="row carousel slide" data-ride="carousel"> |
||||
|
<!-- The slideshow --> |
||||
|
<div class="carousel-inner"> |
||||
|
<div class="carousel-item active" style="min-height:0px"> |
||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/15.0/point_of_sale_logo/" 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/point_of_sale_logo.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/15.0/pos_magnify_image/" 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_magnify_image.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/15.0/pos_product_creation/" 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_product_creation.png"> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="carousel-item" style="min-height:0px"> |
||||
|
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> |
||||
|
<a href="https://apps.odoo.com/apps/modules/15.0/pos_mrp_order/" 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_mrp_order.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/15.0/pos_order_line_image/" 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_order_line_image.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/15.0/product_exchange_pos_sys/" 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/product_exchange_pos_sys.png"> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- Left and right controls --> |
||||
|
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="left:-25px;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="#demo1" data-slide="next" style="right:-25px;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> |
||||
|
<!-- 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 style="color: #212529 !important;">Our Services</h2> |
||||
|
<hr style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" /> |
||||
|
</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 style="color: #212529 !important;">Our Industries</h2> |
||||
|
<hr style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" /> |
||||
|
</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 style="color: #212529 !important;">Need Help?</h2> |
||||
|
<hr style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;" /> |
||||
|
</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-6"> |
||||
|
<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-6"> |
||||
|
<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> |
||||
|
</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 --> |
||||
|
|
||||
|
</div> |
@ -0,0 +1,108 @@ |
|||||
|
odoo.define('service_charges_pos.ServiceChargeButton', function(require) { |
||||
|
'use strict'; |
||||
|
|
||||
|
const PosComponent = require('point_of_sale.PosComponent'); |
||||
|
const ProductScreen = require('point_of_sale.ProductScreen'); |
||||
|
const Registries = require('point_of_sale.Registries'); |
||||
|
const {useListener} = require("@web/core/utils/hooks"); |
||||
|
|
||||
|
class ServiceChargeButton extends PosComponent { |
||||
|
setup() { |
||||
|
super.setup(); |
||||
|
useListener('click', this._onClick); |
||||
|
} |
||||
|
// Click event for button service charge
|
||||
|
async _onClick() { |
||||
|
if (this.env.pos.config.has_service_charge){ |
||||
|
var global_selection = this.env.pos.config.config_selection |
||||
|
var global_charge = this.env.pos.config.config_charge |
||||
|
var visibility = this.env.pos.config.config_visibility |
||||
|
var global_product = this.env.pos.config.config_product_id[0] |
||||
|
|
||||
|
var order = this.env.pos.get_order(); |
||||
|
var lines = order.get_orderlines(); |
||||
|
if (visibility == 'global') { |
||||
|
var product = this.env.pos.db.get_product_by_id(global_product) |
||||
|
if (product === undefined) { |
||||
|
await this.showPopup('ErrorPopup', { |
||||
|
title: this.env._t("No service product found"), |
||||
|
body: this.env._t("The service product seems misconfigured. Make sure it is flagged as 'Can be Sold' and 'Available in Point of Sale'."), |
||||
|
}); |
||||
|
return; |
||||
|
} |
||||
|
// Remove existing discounts
|
||||
|
lines.filter(line => line.get_product() === product) |
||||
|
.forEach(line => order.remove_orderline(line)); |
||||
|
const { |
||||
|
confirmed, |
||||
|
payload |
||||
|
} = await this.showPopup('NumberPopup', { |
||||
|
title: this.env._t('Service Charge'), |
||||
|
startingValue: parseInt(global_charge), |
||||
|
isInputSelected: true |
||||
|
}); |
||||
|
if (confirmed) |
||||
|
if (payload > 0) { |
||||
|
if (global_selection == 'amount') { |
||||
|
order.add_product(product, { |
||||
|
price: payload |
||||
|
}); |
||||
|
} else { |
||||
|
var total_amount = order.get_total_with_tax() |
||||
|
var per_amount = payload / 100 * total_amount |
||||
|
order.add_product(product, { |
||||
|
price: per_amount |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} else { |
||||
|
var type = this.env.pos.config.charge_type |
||||
|
var product = this.env.pos.db.get_product_by_id(this.env.pos.config.service_product_id[0]); |
||||
|
if (product === undefined) { |
||||
|
await this.showPopup('ErrorPopup', { |
||||
|
title: this.env._t("No service product found"), |
||||
|
body: this.env._t("The service product seems misconfigured. Make sure it is flagged as 'Can be Sold' and 'Available in Point of Sale'."), |
||||
|
}); |
||||
|
return; |
||||
|
} |
||||
|
// Remove existing discounts
|
||||
|
lines.filter(line => line.get_product() === product) |
||||
|
.forEach(line => order.remove_orderline(line)); |
||||
|
const { |
||||
|
confirmed, |
||||
|
payload |
||||
|
} = await this.showPopup('NumberPopup', { |
||||
|
title: this.env._t('Service Charge'), |
||||
|
startingValue: this.env.pos.config.service_charge, |
||||
|
isInputSelected: true |
||||
|
}); |
||||
|
if (confirmed){ |
||||
|
if (payload > 0) { |
||||
|
if (type == 'amount') { |
||||
|
order.add_product(product, { |
||||
|
price: payload |
||||
|
}); |
||||
|
} else { |
||||
|
var total_amount = order.get_total_with_tax() |
||||
|
var per_amount = payload / 100 * total_amount |
||||
|
order.add_product(product, { |
||||
|
price: per_amount |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
ServiceChargeButton.template = 'service_charges_pos.ServiceChargeButton'; |
||||
|
ProductScreen.addControlButton({ |
||||
|
component: ServiceChargeButton, |
||||
|
condition: function() { |
||||
|
return true |
||||
|
}, |
||||
|
}); |
||||
|
Registries.Component.add(ServiceChargeButton); |
||||
|
return ServiceChargeButton; |
||||
|
}); |
@ -0,0 +1,12 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<templates id="template" xml:space="preserve"> |
||||
|
<!-- Template for service charge button in product screen --> |
||||
|
<t t-name="service_charges_pos.ServiceChargeButton" owl="1"> |
||||
|
<t t-if="env.pos.config.has_service_charge"> |
||||
|
<div class="control-button"> |
||||
|
<i class="fa fa-calculator" role="img" aria-label="Service Charge" title="Service Charge"/> |
||||
|
Service Charge |
||||
|
</div> |
||||
|
</t> |
||||
|
</t> |
||||
|
</templates> |
@ -0,0 +1,48 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<record id="pos_config_view_form" model="ir.ui.view"> |
||||
|
<field name="name">pos.config.view.form.inherit.service.charges.pos</field> |
||||
|
<field name="model">pos.config</field> |
||||
|
<field name="inherit_id" ref="point_of_sale.pos_config_view_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//div[@id='other_devices']" position="after"> |
||||
|
<div class="col-xs-12 col-lg-6 o_setting_box" attrs="{'invisible':[('is_session','=',False)]}"> |
||||
|
<div class="o_setting_left_pane"> |
||||
|
<field name="is_session" invisible="1"/> |
||||
|
</div> |
||||
|
<div class="o_setting_left_pane"> |
||||
|
<field name="is_service_charges"/> |
||||
|
</div> |
||||
|
<div class="o_setting_right_pane"> |
||||
|
<label for="is_service_charges"/> |
||||
|
<div class="text-muted">Allow service charges on |
||||
|
orders |
||||
|
</div> |
||||
|
<div class="content-group " |
||||
|
attrs="{'invisible':[('is_service_charges','=',False)]}"> |
||||
|
<div class="row"> |
||||
|
<label for="charge_type" |
||||
|
class="col-lg-3 o_light_label"/> |
||||
|
<field name="charge_type" widget="radio" |
||||
|
options="{'horizontal': true}" |
||||
|
class="o_light_label" |
||||
|
attrs="{'required':[('is_service_charges','=',True)]}"/> |
||||
|
</div> |
||||
|
<div class="row mt16"> |
||||
|
<label for="service_product_id" |
||||
|
class="col-lg-3 o_light_label"/> |
||||
|
<field name="service_product_id" |
||||
|
attrs="{'required':[('is_service_charges','=',True)]}"/> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<label for="service_charge" |
||||
|
class="col-lg-3 o_light_label"/> |
||||
|
<field name="service_charge"/> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
</odoo> |
@ -0,0 +1,54 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<record id="res_config_settings_view_form" model="ir.ui.view"> |
||||
|
<field name="name">res.config.settings.view.form.inherit.service.charges.pos</field> |
||||
|
<field name="model">res.config.settings</field> |
||||
|
<field name="inherit_id" |
||||
|
ref="point_of_sale.res_config_settings_view_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//div[@id='multiple_prices_setting']" position="after"> |
||||
|
<div class="col-xs-12 col-lg-6 o_setting_box"> |
||||
|
<div class="o_setting_left_pane"> |
||||
|
<field name="enable_service_charge"/> |
||||
|
</div> |
||||
|
<div class="o_setting_right_pane"> |
||||
|
<label for="enable_service_charge"/> |
||||
|
<div class="text-muted">Allow service charges on |
||||
|
orders |
||||
|
</div> |
||||
|
<div class="row" attrs="{'invisible':[('enable_service_charge','=',False)]}"> |
||||
|
<label for="visibility" |
||||
|
class="col-lg-3 o_light_label"/> |
||||
|
<field name="visibility" widget="radio" |
||||
|
options="{'horizontal': true}" |
||||
|
class="o_light_label" |
||||
|
attrs="{'required':[('enable_service_charge','=',True)]}"/> |
||||
|
</div> |
||||
|
<div class="content-group " |
||||
|
attrs="{'invisible':['|',('enable_service_charge','=',False),('visibility','=','session')]}"> |
||||
|
<div class="row"> |
||||
|
<label for="global_selection" |
||||
|
class="col-lg-3 o_light_label"/> |
||||
|
<field name="global_selection" widget="radio" |
||||
|
options="{'horizontal': true}" |
||||
|
class="o_light_label" |
||||
|
attrs="{'required':[('enable_service_charge','=',True)]}"/> |
||||
|
</div> |
||||
|
<div class="row mt16"> |
||||
|
<label for="global_product_id" |
||||
|
class="col-lg-3 o_light_label"/> |
||||
|
<field name="global_product_id" |
||||
|
attrs="{'required':[('enable_service_charge','=',True)]}"/> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<label for="global_charge" |
||||
|
class="col-lg-3 o_light_label"/> |
||||
|
<field name="global_charge"/> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
</odoo> |