@ -0,0 +1,23 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################# |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Techno Solutions(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,43 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################# |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Techno Solutions(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 Discount Manager Approval", |
||||
|
'version': '14.0.1.0.0', |
||||
|
'summary': """Discount limit for each employee in every point of sale""", |
||||
|
'description': """"This module helps you to set a discount limit for each employee in every point of sale. |
||||
|
It facilitate the manager approval when discount over the limit of employee""", |
||||
|
'category': 'Point Of Sale', |
||||
|
'author': 'Cybrosys Techno Solutions', |
||||
|
'company': 'Cybrosys Techno Solutions', |
||||
|
'maintainer': "Cybrosys Techno Solutions", |
||||
|
'website': "http://www.cybrosys.com", |
||||
|
'version': '14.0.1.0.0', |
||||
|
'depends': ['point_of_sale', 'hr'], |
||||
|
'data': [ |
||||
|
'views/hr_employee_inherit_view.xml', |
||||
|
'views/templates.xml', |
||||
|
], |
||||
|
'images': ['static/description/banner.jpg'], |
||||
|
'license': 'AGPL-3', |
||||
|
'installable': True, |
||||
|
'application': True, |
||||
|
} |
@ -0,0 +1,8 @@ |
|||||
|
## Module <pos_discount_manager> |
||||
|
|
||||
|
#### 15.05.2021 |
||||
|
#### Version 14.0.1.0.0 |
||||
|
##### ADD |
||||
|
- Initial commit |
||||
|
|
||||
|
|
@ -0,0 +1,23 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################# |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Techno Solutions(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 hr_employee_inherit |
@ -0,0 +1,31 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################# |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). |
||||
|
# Author: Cybrosys Techno Solutions(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, fields, api |
||||
|
|
||||
|
|
||||
|
class DiscountRestrictCat(models.Model): |
||||
|
_inherit = 'hr.employee' |
||||
|
|
||||
|
limited_discount = fields.Integer(string="Discount Limit") |
||||
|
|
||||
|
|
|
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 302 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 752 B |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 132 KiB |
After Width: | Height: | Size: 133 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 76 KiB |
After Width: | Height: | Size: 130 KiB |
After Width: | Height: | Size: 860 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 11 KiB |
@ -0,0 +1,613 @@ |
|||||
|
<div class="oe_styling_v8"> |
||||
|
<!-- HERO --> |
||||
|
<section class="oe_container" style="font-family: Montserrat, 'sans-serif'; padding:2rem 3rem 1rem"> |
||||
|
<div class="row deep-4" style="max-width:1540px; margin:0 auto; border-radius: 10px;"> |
||||
|
<!-- LEFT HERO --> |
||||
|
<div class="col-lg-6" style="margin-top: 0rem; padding: 3rem"> |
||||
|
<h1 class="font-weight-bold text-dark">Point of Sale Discount Manager Approval</h1> |
||||
|
<p class="lead text-dark">Discount limit for each employee in every point of sale</p> |
||||
|
<!-- KEY FEATURES --> |
||||
|
<h5 class="font-weight-bold text-dark mt-4">Key Features</h5> |
||||
|
<hr class="mb-4" style="border: 2px solid #377DFF; max-width: 50px; margin-left: 0;"> |
||||
|
|
||||
|
|
||||
|
<div class="d-flex justify-content-start align-items-center"> |
||||
|
<div class="p-3 d-flex justify-content-center align-items-center" |
||||
|
style="background-color: #FFBA08; height: 35px; width: 35px; border-radius: 50%;"><img |
||||
|
src="https://i.ibb.co/P1sH08G/shop-icon.png" height="20px" width="20px"></div> |
||||
|
<p class="font-weight-bold ml-2 tex-dark" style="margin-top: 20px;">Discount limits for employee.</p> |
||||
|
</div> |
||||
|
|
||||
|
<div class="d-flex justify-content-start align-items-center"> |
||||
|
<div class="p-3 d-flex justify-content-center align-items-center" |
||||
|
style="background-color: #F23970; height: 35px; width: 35px; border-radius: 50%;"><img |
||||
|
src="https://i.ibb.co/qNTqSKW/money-icon.png" height="20px" width="20px"></div> |
||||
|
<p class="font-weight-bold ml-2 tex-dark" style="margin-top: 20px;">Manager approval over the discount limit.</p> |
||||
|
</div> |
||||
|
|
||||
|
<!-- END OF KEY FEATURES --> |
||||
|
</div> |
||||
|
<!-- END OF LEFT HERO --> |
||||
|
<!-- RIGHT HERO --> |
||||
|
<div class="col-lg-6 bg-white" |
||||
|
style="background-image: url('/pos_discount_manager/static/description/assets/hero.png'); background-size: cover; background-repeat: no-repeat; margin-top: 0rem; padding: 3rem; border-radius: 0px 10px 10px 0px;"> |
||||
|
</div> |
||||
|
<!-- END OF RIGHT HERO --> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- END OF HERO --> |
||||
|
|
||||
|
<!-- TAB LIST --> |
||||
|
<section class="oe_container d-flex" style="margin: -1rem 0 3rem; padding:4rem 3rem 1rem"> |
||||
|
<div class="row bg-white deep-4" |
||||
|
style="max-width:1540px; margin:0 auto; padding: 3rem 2.5rem; border-radius: 10px;"> |
||||
|
<div class="col-lg-12"> |
||||
|
<h5 class="font-weight-bold text-dark mt-4">App Details</h5> |
||||
|
<hr class="mb-4" style="border: 2px solid #377DFF; max-width: 50px; margin-left: 0;"> |
||||
|
<!-- TAB LIST --> |
||||
|
<div class="row pt-3"> |
||||
|
<div class="col-md-4"> |
||||
|
<!-- PILLS --> |
||||
|
<div class="nav flex-column nav-pills" id="pills" role="tablist"> |
||||
|
|
||||
|
<a class="nav-link mb-2" |
||||
|
style="padding:2px; border-radius: 0px; background-color: none !important" id="pill1" |
||||
|
data-toggle="pill" href="#tab1" role="tab" aria-controls="tab1" aria-selected="true"> |
||||
|
<div class="bg-white p-2 d-flex justify-content-between align-items-center" |
||||
|
style="border: none;"> |
||||
|
<div class="d-flex"> |
||||
|
<div class="d-flex justify-content-center align-content-center" |
||||
|
style="width:30px; height:30px; background-color:#377DFF; border-radius:50%; padding:5px"> |
||||
|
<img class="img-fluid align-top" |
||||
|
src="https://i.ibb.co/ZVvdXQ6/doughnut-icon.png" width="40px" |
||||
|
height="40px"> |
||||
|
</div> |
||||
|
<div class="pl-2 mt-1"> |
||||
|
<h4 class="h6 mb-1 d-flex align-items-center text-dark font-weight-bold"> |
||||
|
Overview</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div style="font-size: 0.9rem;"> |
||||
|
<i class="fa fa-chevron-right" style="color: #dfe6e9;"></i> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
|
||||
|
<a class="nav-link mb-2" |
||||
|
style="padding:2px; border-radius: 0px; background-color: none !important" id="pill2" |
||||
|
data-toggle="pill" href="#tab2" role="tab" aria-controls="tab2" aria-selected="true"> |
||||
|
<div class="bg-white p-2 d-flex justify-content-between align-items-center" |
||||
|
style="border: none;"> |
||||
|
<div class="d-flex"> |
||||
|
<div class="d-flex justify-content-center align-content-center" |
||||
|
style="width:30px; height:30px; background-color:#377DFF; border-radius:50%; padding:5px"> |
||||
|
<img class="img-fluid align-top" |
||||
|
src="https://i.ibb.co/4d08Ryj/wrench-icon.png" width="40px" |
||||
|
height="40px"> |
||||
|
</div> |
||||
|
<div class="pl-2 mt-1"> |
||||
|
<h4 class="h6 mb-1 d-flex align-items-center text-dark font-weight-bold"> |
||||
|
Configuration</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div style="font-size: 0.9rem;"> |
||||
|
<i class="fa fa-chevron-right" style="color: #dfe6e9;"></i> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
|
||||
|
<a class="nav-link mb-2" |
||||
|
style="padding:2px; border-radius: 0px; background-color: none !important" id="pill3" |
||||
|
data-toggle="pill" href="#tab3" role="tab" aria-controls="tab3" aria-selected="true"> |
||||
|
<div class="bg-white p-2 d-flex justify-content-between align-items-center" |
||||
|
style="border: none;"> |
||||
|
<div class="d-flex"> |
||||
|
<div class="d-flex justify-content-center align-content-center" |
||||
|
style="width:30px; height:30px; background-color:#377DFF; border-radius:50%; padding:5px"> |
||||
|
<img class="img-fluid align-top" |
||||
|
src="https://i.ibb.co/4YYd6XQ/star-icon.png" width="40px" height="40px"> |
||||
|
</div> |
||||
|
<div class="pl-2 mt-1"> |
||||
|
<h4 class="h6 mb-1 d-flex align-items-center text-dark font-weight-bold"> |
||||
|
Features</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div style="font-size: 0.9rem;"> |
||||
|
<i class="fa fa-chevron-right" style="color: #dfe6e9;"></i> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
|
||||
|
<a class="nav-link mb-2" |
||||
|
style="padding:2px; border-radius: 0px; background-color: none !important" id="pill4" |
||||
|
data-toggle="pill" href="#tab4" role="tab" aria-controls="tab4" aria-selected="true"> |
||||
|
<div class="bg-white p-2 d-flex justify-content-between align-items-center" |
||||
|
style="border: none;"> |
||||
|
<div class="d-flex"> |
||||
|
<div class="d-flex justify-content-center align-content-center" |
||||
|
style="width:30px; height:30px; background-color:#377DFF; border-radius:50%; padding:5px"> |
||||
|
<img class="img-fluid align-top" |
||||
|
src="https://i.ibb.co/41xqSk5/picture-icon.png" width="30px" |
||||
|
height="30px"> |
||||
|
</div> |
||||
|
<div class="pl-2 mt-1"> |
||||
|
<h4 class="h6 mb-1 d-flex align-items-center text-dark font-weight-bold"> |
||||
|
Screenshots</h4> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div style="font-size: 0.9rem;"> |
||||
|
<i class="fa fa-chevron-right" style="color: #dfe6e9;"></i> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
|
||||
|
</div> |
||||
|
<!-- END OF PILLS --> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-md-8 pl-lg-4"> |
||||
|
<!-- PILL 1 --> |
||||
|
<div class="tab-content bg-white p-3" id="tab-content"> |
||||
|
<div class="tab-pane fade show active" id="tab1" role="tabpanel" aria-labelledby="pill1"> |
||||
|
<h5 class="mb-2">Point of Sale Discount Manager Approval</h5> |
||||
|
<p class="text-dark" style="font-size: 0.9rem"> |
||||
|
This module sets discount limit for each employee by manager. And manager approval over the discount limit by employee. |
||||
|
</p> |
||||
|
</div> |
||||
|
|
||||
|
<!-- END OF PILL 1 --> |
||||
|
|
||||
|
<!-- CONFIGURATION --> |
||||
|
<div class="tab-pane fade" id="tab2" role="tabpanel" aria-labelledby="pill2"> |
||||
|
<h5 class="mb-2">Configuration</h5> |
||||
|
|
||||
|
<ul> |
||||
|
<li>Sets discount limit for each employee.</li> |
||||
|
<li>Manager Can Set the PIN</li> |
||||
|
<li>Manager pin needed for approving the discount given by the employee.</li> |
||||
|
|
||||
|
</ul> |
||||
|
|
||||
|
</div> |
||||
|
<!-- END OF CONFIGURATION --> |
||||
|
|
||||
|
<!-- FEATURES --> |
||||
|
<div class="tab-pane fade" id="tab3" role="tabpanel" aria-labelledby="pill3"> |
||||
|
<h5 class="mb-2">Features</h5> |
||||
|
|
||||
|
<div class="row"> |
||||
|
<div class="col-lg-5 card p-3 m-3 bg-light d-flex flex-row justify-content-start align-items-center" |
||||
|
style="border-radius: 5px;"> |
||||
|
<div class="p-3 d-flex justify-content-center align-items-center" |
||||
|
style="background-color: #20bf6b; height: 55px; width: 55px; border-radius: 50%;"> |
||||
|
<img src="https://i.ibb.co/yXbGjgv/sync-icon.png" height="30px" |
||||
|
width="30px"> |
||||
|
</div> |
||||
|
|
||||
|
<h6 class="mt-2 ml-3">Sets discount limit for each employee</h6> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-5 card p-3 m-3 bg-light d-flex flex-row justify-content-start align-items-center" |
||||
|
style="border-radius: 5px;"> |
||||
|
<div class="p-3 d-flex justify-content-center align-items-center" |
||||
|
style="background-color: #F23970; height: 55px; width: 55px; border-radius: 50%;"> |
||||
|
<img src="https://i.ibb.co/P1sH08G/shop-icon.png" height="30px" |
||||
|
width="30px"> |
||||
|
</div> |
||||
|
|
||||
|
<h6 class="mt-2 ml-3">Manager pin needed for approving the discount given by the employee.</h6> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- END OF FEATURES --> |
||||
|
|
||||
|
<!-- SCREENSHOTS --> |
||||
|
<div class="tab-pane fade" id="tab4" role="tabpanel" aria-labelledby="pill4"> |
||||
|
<h5 class="mb-3">Screenshots</h5> |
||||
|
<img src="./assets/screenshots/1.png" |
||||
|
class="img-fluid img-thumbnail rounded mt-4"> |
||||
|
<h6 class="text-dark mt-3"> |
||||
|
Caption |
||||
|
</h6> |
||||
|
<p class="text-dark mb-3" style="font-size: 0.9rem"> |
||||
|
setting the discount to employee. |
||||
|
</p> |
||||
|
|
||||
|
<img src="./assets/screenshots/2.png" |
||||
|
class="img-fluid img-thumbnail rounded mt-4"> |
||||
|
<h6 class="text-dark mt-3"> |
||||
|
Caption |
||||
|
</h6> |
||||
|
<p class="text-dark mb-3" style="font-size: 0.9rem"> |
||||
|
set the pin to manager. |
||||
|
</p> |
||||
|
|
||||
|
<img src="./assets/screenshots/5.png" |
||||
|
class="img-fluid img-thumbnail rounded mt-4"> |
||||
|
<h6 class="text-dark mt-3"> |
||||
|
Caption |
||||
|
</h6> |
||||
|
<p class="text-dark mb-3" style="font-size: 0.9rem"> |
||||
|
set employee for sale. |
||||
|
</p> |
||||
|
|
||||
|
<img src="./assets/screenshots/3.png" |
||||
|
class="img-fluid img-thumbnail rounded mt-4"> |
||||
|
<h6 class="text-dark mt-3"> |
||||
|
Caption |
||||
|
</h6> |
||||
|
<p class="text-dark mb-3" style="font-size: 0.9rem"> |
||||
|
shop the product. |
||||
|
</p> |
||||
|
|
||||
|
<img src="./assets/screenshots/4.png" |
||||
|
class="img-fluid img-thumbnail rounded mt-4"> |
||||
|
<h6 class="text-dark mt-3"> |
||||
|
Caption |
||||
|
</h6> |
||||
|
<p class="text-dark mb-3" style="font-size: 0.9rem"> |
||||
|
manager approval for unlimited discount. |
||||
|
</p> |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
</div> |
||||
|
<!-- END OF SCREENSHOTS --> |
||||
|
|
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- END OF TAB LIST --> |
||||
|
<!-- Suggested Products --> |
||||
|
<section class="oe_container" style="padding:2rem 3rem 1rem; max-width:1540px; margin: 0 auto; "> |
||||
|
<h2 style="font-weight:600; text-align:center; margin-bottom:1rem; width:100%">Suggested Products</h2> |
||||
|
<hr |
||||
|
style="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;"> |
||||
|
<div id="suggestedSlider" class="row carousel slide mt-4" 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/13.0/project_task_timer/" 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="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/project_task_timer.png?ae168aa"> |
||||
|
</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/13.0/project_report_pdf/" 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="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/project_repo.png?ae168aa"> |
||||
|
</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/13.0/project_custom_gantt/" 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="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/project_gantt.png?ae168aa"> |
||||
|
</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/12.0/project_task_timer/" 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="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/task_image.png?ae168aa"> |
||||
|
</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/13.0/task_deadline_reminder/" 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="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/reminder.png?ae168aa"> |
||||
|
</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/12.0/project_report_pdf/" 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="//apps.odoocdn.com/apps/assets/14.0/custom_gantt_view/images/project_report.png?ae168aa"> |
||||
|
</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> |
||||
|
</section> |
||||
|
<!-- End of Suggested Products --> |
||||
|
<!-- Our Services --> |
||||
|
<section class="oe_container" style="padding:2rem 3rem 1rem"> |
||||
|
<!-- <h2 style="font-weight:600; text-align:center; margin-bottom:1rem; width:100%">Our Services</h2> |
||||
|
<hr |
||||
|
style="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;"> --> |
||||
|
<div class="row mt-4 position-relative" style="max-width:1540px; margin: 0 auto;"> |
||||
|
<div class="col-lg-12 jumbotron text-white position-relative shadow-lg" |
||||
|
style="background: #E0EAFC; background: -webkit-linear-gradient(to right, #f1f5fb, #E0EAFC); background: linear-gradient(to right, #f1f5fb, #E0EAFC); background-size: cover; background-position: bottom; border-radius: 10px;"> |
||||
|
<span class="badge badge-pill px-3 py-2 text-white shadow-sm font-weight-bold" |
||||
|
style="background-color: #377DFF;"><i class="fa fa-trophy mr-2"></i>Odoo Gold Partner</span> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-6 mt-4"> |
||||
|
<h1 class="text-dark">Our Services</h1> |
||||
|
<p class="lead text-dark">We provide following services</p> |
||||
|
<ul class="mt-4" style="list-style: none; padding: 0; line-height: 2.8; font-weight: 500;"> |
||||
|
<li><a class="text-dark" |
||||
|
href="https://www.cybrosys.com/odoo-customization-and-installation/" |
||||
|
style="color: white; text-decoration: none;" target="_blank"><i |
||||
|
class="fa fa-cogs mr-2" style="color: #377DFF; font-size: 1.5rem"></i>Odoo |
||||
|
Customization</a></li> |
||||
|
<li><a class="text-dark" href="https://www.cybrosys.com/odoo-erp-implementation/" |
||||
|
style="color: white; text-decoration: none;" target="_blank"><i |
||||
|
class="fa fa-wrench mr-2" style="color: #377DFF; font-size: 1.5rem"></i>Odoo |
||||
|
Implementation</a></li> |
||||
|
<li><a class="text-dark" href="https://www.cybrosys.com/odoo-erp-support/" |
||||
|
style="color: white; text-decoration: none;" target="_blank"><i |
||||
|
class="fa fa-life-ring mr-2" style="color: #377DFF; font-size: 1.5rem"></i>Odoo |
||||
|
Support</a></li> |
||||
|
<li><a class="text-dark" href="https://www.cybrosys.com/hire-odoo-developer/" |
||||
|
style=text-decoration: none;" target="_blank"><i class="fa fa-user mr-2" |
||||
|
style="color: #377DFF; font-size: 1.5rem"></i> |
||||
|
Hire |
||||
|
Odoo Developers</a></li> |
||||
|
</ul> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<img src="https://i.ibb.co/YLRGpvL/trophy.png" width="45%" height="auto" alt="Odoo Gold Partner" |
||||
|
class="position-absolute" style="right: 0; bottom: 0;"> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- End of Our Services --> |
||||
|
<!-- Our Industries --> |
||||
|
<section class="oe_container mt-4" style="padding:2rem 3rem 1rem"> |
||||
|
<div class="row" style="max-width:1540px; margin: 0 auto; "> |
||||
|
<div class="col-lg-12"> |
||||
|
<h2 style="font-weight:600; text-align:center; margin-bottom:1rem; width:100%">Our |
||||
|
Industries</h2> |
||||
|
<hr |
||||
|
style="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;"> |
||||
|
</div> |
||||
|
<div class="row mt-4 position-relative" style="max-width:1540px; margin: 0 auto;"> |
||||
|
<!-- Left Column --> |
||||
|
<div class="col-lg-6"> |
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 mb-3" style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/" target="_blank" |
||||
|
class="text-dark" style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="https://i.ibb.co/J3HsKWB/trading.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif">Trading</h4> |
||||
|
<p style="font-weight: 300;">Easily procure and sell your products</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 my-3" style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/education-erp-software/" target="_blank" |
||||
|
class="text-dark" style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="https://i.ibb.co/ssmySQK/education.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif">Education</h4> |
||||
|
<p style="font-weight: 300;">A Collaborative platform for educational |
||||
|
management</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 my-3" style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/" target="_blank" |
||||
|
class="text-dark" style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="https://i.ibb.co/fx6j6zY/manufacturing.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif">Manufacturing</h4> |
||||
|
<p style="font-weight: 300;">Plan, track and schedule your operations</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 my-3" style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/" target="_blank" |
||||
|
class="text-dark" style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="https://i.ibb.co/z6TK3yK/ecom.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif">E-commerce & Website</h4> |
||||
|
<p style="font-weight: 300;">Mobile friendly, awe-inspiring product pages |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- End of Left Column --> |
||||
|
<!-- Right Column --> |
||||
|
<div class="col-lg-6"> |
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 mb-3" style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/pos/" target="_blank" class="text-dark" |
||||
|
style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="https://i.ibb.co/Hh9pqjY/pos.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif">POS</h4> |
||||
|
<p style="font-weight: 300;">Easy configuring and convivial selling</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
|
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 my-3" style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/service-management/" target="_blank" |
||||
|
class="text-dark" style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="https://i.ibb.co/541x9sq/service.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif">Service Management</h4> |
||||
|
<p style="font-weight: 300;">Keep track of services and invoice accordingly |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 my-3" style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/restaurant-management/" target="_blank" |
||||
|
class="text-dark" style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="https://i.ibb.co/wYjn3HB/restaurant.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif">Restaurant</h4> |
||||
|
<p style="font-weight: 300;">Run your bar or restaurant methodica</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
|
||||
|
<div class="bg-white shadow px-4 py-3 my-3" style="border-radius: 10px;"> |
||||
|
<a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/" target="_blank" |
||||
|
class="text-dark" style="text-decoration: none;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-3 no-gutters"> |
||||
|
<img src="https://i.ibb.co/XbkbpwV/hotel.png"> |
||||
|
</div> |
||||
|
<div class="col-lg-9 no-gutters pt-3"> |
||||
|
<h4 style="font-family: Roboto, 'sans-serif">Hotel Management</h4> |
||||
|
<p style="font-weight: 300;">An all-inclusive hotel management application |
||||
|
</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- End of Right Column --> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- End of Our Industries--> |
||||
|
<!-- Footer Section --> |
||||
|
<section class="oe_container" style="padding:2rem 3rem 1rem"> |
||||
|
<div class="row" style="max-width:1540px; margin: 0 auto; "> |
||||
|
<div class="col-lg-12 mb-4"> |
||||
|
<h2 style="font-weight:600; text-align:center; margin-bottom:1rem; width:100%">Need Help?</h2> |
||||
|
<hr |
||||
|
style="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;"> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<!-- Contact Cards --> |
||||
|
<div class="row d-flex justify-content-center align-items-center" style="max-width:1540px; margin: 0 auto;"> |
||||
|
<div class="col-lg-3 shadow mt-2" |
||||
|
style="padding: 5rem 2rem 2rem; border-radius: 10px; margin-right: 3rem; border-top: 7px solid #546E7A; height: 300px;"> |
||||
|
<h5 class="font-weight-bold" style="font-family: Roboto, 'sans-serif';">Visit us</h5> |
||||
|
<p class="mb-4" style="color: #808e9b; font-size: 0.9rem;">Visit our website for more |
||||
|
information.</p> |
||||
|
<a href="https://cybrosys.com" target="_blank" class="btn btn-block mb-2 deep_hover" |
||||
|
style="text-decoration: none; background-color: #546E7A; color: #FFF; border-radius: 4px;">www.cybrosys.com</a> |
||||
|
</div> |
||||
|
|
||||
|
<div class="col-lg-3 shadow mt-2" |
||||
|
style="padding: 5rem 2rem 2rem; border-radius: 10px; margin-right: 3rem; border-top: 7px solid #b22126; height: 330px;"> |
||||
|
<h5 class="font-weight-bold" style="font-family: Roboto, 'sans-serif';">Write to us</h5> |
||||
|
<p class="mb-4" style="color: #808e9b; font-size: 0.9rem;">Do you have any queries regarding our |
||||
|
products & services? Let us know.</p> |
||||
|
<a href="mailto:odoo@cybrosys.com" target="_blank" class="btn btn-block mb-2 deep_hover" |
||||
|
style="text-decoration: none; background-color: #b22126; color: #FFF; border-radius: 4px;">odoo@cybrosys.com</a> |
||||
|
<a href="mailto:info@cybrosys.com" target="_blank" class="btn btn-block deep_hover" |
||||
|
style="text-decoration: none; background-color: #b22126; color: #FFF; border-radius: 4px;">info@cybrosys.com</a> |
||||
|
</div>b |
||||
|
|
||||
|
<div class="col-lg-3 shadow mt-2" |
||||
|
style="padding: 5rem 2rem 2rem; border-radius: 10px; margin-right: 3rem; border-top: 7px solid #546E7A; height: 300px;"> |
||||
|
<h5 class="font-weight-bold" style="font-family: Roboto, 'sans-serif';">Follow Us</h5> |
||||
|
<p class="mb-4" style="color: #808e9b; font-size: 0.9rem;">Follow us on social media for latest |
||||
|
updates.</p> |
||||
|
<div class="d-flex justify-content-begin align-items-center"> |
||||
|
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank" |
||||
|
class="btn mb-2 mr-2 deep_hover d-flex justify-content-center align-items-center" |
||||
|
style="text-decoration: none; background-color:#3b5998; color: #fff; height: 35px; width: 35px; border-radius: 4px;"><i |
||||
|
class="fa fa-facebook"></i></a> |
||||
|
|
||||
|
<a href="https://twitter.com/cybrosys" target="_blank" |
||||
|
class="btn mb-2 mr-2 deep_hover d-flex justify-content-center align-items-center" |
||||
|
style="text-decoration: none; background-color:#00acee ; color: #fff ; height: 35px; width: 35px; border-radius: 4px;"><i |
||||
|
class="fa fa-twitter"></i></a> |
||||
|
|
||||
|
<a href="https://www.youtube.com/channel/UCKjWLm7iCyOYINVspCSanjg" target="_blank" |
||||
|
class="btn mb-2 mr-2 deep_hover d-flex justify-content-center align-items-center" |
||||
|
style="text-decoration: none; background-color:#FF0000 ; color: #fff ; height: 35px; width: 35px; border-radius: 4px;"><i |
||||
|
class="fa fa-play"></i></a> |
||||
|
<a href="https://medium.com/cybrosys" target="_blank" |
||||
|
class="btn mb-2 deep_hover d-flex justify-content-center align-items-center" |
||||
|
style="text-decoration: none; background-color:#000 ; color: #fff ; height: 35px; width: 35px; border-radius: 4px;"><i |
||||
|
class="fa fa-medium"></i></a> |
||||
|
</div> |
||||
|
|
||||
|
</div> |
||||
|
<!-- End of Contact Cards --> |
||||
|
</div> |
||||
|
</section> |
||||
|
</div> |
||||
|
<!-- 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: 4rem;"> |
||||
|
<img src="https://www.cybrosys.com/images/logo.png" width="200px" height="auto" /> |
||||
|
</div> |
||||
|
<!-- End of Logo --> |
||||
|
<div class="col-lg-12" style="margin-top: 2rem;"> |
||||
|
<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> |
||||
|
</div> |
@ -0,0 +1,6 @@ |
|||||
|
.pos .popup.popup-number |
||||
|
{ |
||||
|
height:500px; |
||||
|
width:500px |
||||
|
|
||||
|
} |
@ -0,0 +1,84 @@ |
|||||
|
odoo.define('pos_discount_manager.DiscountButton', function(require) { |
||||
|
'use strict'; |
||||
|
|
||||
|
const PosComponent = require('point_of_sale.PosComponent'); |
||||
|
const ProductScreen = require('point_of_sale.ProductScreen'); |
||||
|
const { |
||||
|
useListener |
||||
|
} = require('web.custom_hooks'); |
||||
|
const Registries = require('point_of_sale.Registries'); |
||||
|
var models = require('point_of_sale.models'); |
||||
|
var DiscountButton = require('pos_discount.DiscountButton') |
||||
|
models.load_fields('hr.employee', ['limited_discount']); |
||||
|
|
||||
|
const DiscountButtonManger = (DiscountButton) => |
||||
|
class extends DiscountButton { |
||||
|
constructor() { |
||||
|
super(...arguments); |
||||
|
useListener('click', this.onClick); |
||||
|
} |
||||
|
async onClick() { |
||||
|
var self = this; |
||||
|
const { confirmed, payload } = await this.showPopup('NumberPopup',{ |
||||
|
title: this.env._t('Discount Percentage'), |
||||
|
startingValue: this.env.pos.config.discount_pc, |
||||
|
}); |
||||
|
if (confirmed) { |
||||
|
const val = Math.round(Math.max(0,Math.min(100,parseFloat(payload)))); |
||||
|
await self.apply_discount(val); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
async apply_discount(pc) { |
||||
|
var order = this.env.pos.get_order(); |
||||
|
var lines = order.get_orderlines(); |
||||
|
var product = this.env.pos.db.get_product_by_id(this.env.pos.config.discount_product_id[0]); |
||||
|
if (product === undefined) { |
||||
|
await this.showPopup('ErrorPopup', { |
||||
|
title : this.env._t("No discount product found"), |
||||
|
body : this.env._t("The discount product seems misconfigured. Make sure it is flagged as 'Can be Sold' and 'Available in Point of Sale'."), |
||||
|
}); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
// Remove existing discounts
|
||||
|
var i = 0; |
||||
|
while ( i < lines.length ) { |
||||
|
if (lines[i].get_product() === product) { |
||||
|
order.remove_orderline(lines[i]); |
||||
|
} else { |
||||
|
i++; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Add discount
|
||||
|
// We add the price as manually set to avoid recomputation when changing customer.
|
||||
|
var base_to_discount = order.get_total_without_tax(); |
||||
|
if (product.taxes_id.length){ |
||||
|
var first_tax = this.env.pos.taxes_by_id[product.taxes_id[0]]; |
||||
|
if (first_tax.price_include) { |
||||
|
base_to_discount = order.get_total_with_tax(); |
||||
|
} |
||||
|
} |
||||
|
var discount = - pc / 100.0 * base_to_discount; |
||||
|
|
||||
|
if( discount < 0 ){ |
||||
|
order.add_product(product, { |
||||
|
price: discount, |
||||
|
lst_price: discount, |
||||
|
extras: { |
||||
|
price_manually_set: true, |
||||
|
disc_percentage: pc, |
||||
|
}, |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
Registries.Component.extend(DiscountButton, DiscountButtonManger); |
||||
|
|
||||
|
return DiscountButtonManger; |
||||
|
|
||||
|
|
||||
|
}); |
@ -0,0 +1,147 @@ |
|||||
|
odoo.define('pos_discount_manager.ValidateManager', function(require) { |
||||
|
'use strict'; |
||||
|
|
||||
|
const { |
||||
|
parse |
||||
|
} = require('web.field_utils'); |
||||
|
const PosComponent = require('point_of_sale.PosComponent'); |
||||
|
const { |
||||
|
useErrorHandlers |
||||
|
} = require('point_of_sale.custom_hooks'); |
||||
|
const NumberBuffer = require('point_of_sale.NumberBuffer'); |
||||
|
const { |
||||
|
useListener |
||||
|
} = require('web.custom_hooks'); |
||||
|
const Registries = require('point_of_sale.Registries'); |
||||
|
const { |
||||
|
onChangeOrder |
||||
|
} = require('point_of_sale.custom_hooks'); |
||||
|
var PaymentScreen = require('point_of_sale.PaymentScreen') |
||||
|
|
||||
|
const ValidateManagers = (PaymentScreen) => |
||||
|
class extends PaymentScreen { |
||||
|
|
||||
|
constructor() { |
||||
|
|
||||
|
super(...arguments); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
async _finalizeValidation() { |
||||
|
if ((this.currentOrder.is_paid_with_cash() || this.currentOrder.get_change()) && this.env.pos.config.iface_cashdrawer) { |
||||
|
this.env.pos.proxy.printer.open_cashbox(); |
||||
|
} |
||||
|
|
||||
|
this.currentOrder.initialize_validation_date(); |
||||
|
this.currentOrder.finalized = true; |
||||
|
|
||||
|
let syncedOrderBackendIds = []; |
||||
|
|
||||
|
try { |
||||
|
if (this.currentOrder.is_to_invoice()) { |
||||
|
syncedOrderBackendIds = await this.env.pos.push_and_invoice_order( |
||||
|
this.currentOrder |
||||
|
); |
||||
|
} else { |
||||
|
syncedOrderBackendIds = await this.env.pos.push_single_order(this.currentOrder); |
||||
|
} |
||||
|
} catch (error) { |
||||
|
if (error instanceof Error) { |
||||
|
throw error; |
||||
|
} else { |
||||
|
await this._handlePushOrderError(error); |
||||
|
} |
||||
|
} |
||||
|
if (syncedOrderBackendIds.length && this.currentOrder.wait_for_push_order()) { |
||||
|
const result = await this._postPushOrderResolve( |
||||
|
this.currentOrder, |
||||
|
syncedOrderBackendIds |
||||
|
); |
||||
|
if (!result) { |
||||
|
await this.showPopup('ErrorPopup', { |
||||
|
title: 'Error: no internet connection.', |
||||
|
body: error, |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
var order = this.env.pos.get_order(); |
||||
|
|
||||
|
var employee_dis = this.env.pos.get_cashier()['limited_discount']; |
||||
|
var employee_name = this.env.pos.get_cashier()['name'] |
||||
|
|
||||
|
var flag = 1; |
||||
|
var global; |
||||
|
|
||||
|
var dis = 0; |
||||
|
for (var i = 0; i < order.orderlines.length; i++) { |
||||
|
dis = dis + order.orderlines.models[i].discount; |
||||
|
|
||||
|
|
||||
|
if (order.orderlines.models[i].discount > employee_dis || order.orderlines.models[i].disc_percentage > employee_dis || dis > employee_dis) { |
||||
|
flag = 0; |
||||
|
|
||||
|
|
||||
|
} |
||||
|
} |
||||
|
if (flag != 1) { |
||||
|
|
||||
|
const { |
||||
|
confirmed, |
||||
|
payload |
||||
|
} = await this.showPopup('NumberPopup', { |
||||
|
title: this.env._t(employee_name + ', your discount is over the limit. \n MANAGER pin for Approval'), |
||||
|
}); |
||||
|
|
||||
|
if (confirmed) { |
||||
|
var output = this.env.pos.employees.filter((obj) => obj.role == 'manager'); |
||||
|
var pin = output[0].pin |
||||
|
|
||||
|
if (Sha1.hash(payload) == pin) { |
||||
|
|
||||
|
} else { |
||||
|
this.showPopup('ErrorPopup', { |
||||
|
title: this.env._t(" MANAGER RESTRICTED YOUR DISCOUNT"), |
||||
|
body: this.env._t(employee_name + ", Your Manager pin is INCORRECT."), |
||||
|
|
||||
|
}); |
||||
|
return false; |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
this.showScreen(this.nextScreen); |
||||
|
|
||||
|
// If we succeeded in syncing the current order, and
|
||||
|
// there are still other orders that are left unsynced,
|
||||
|
// we ask the user if he is willing to wait and sync them.
|
||||
|
if (syncedOrderBackendIds.length && this.env.pos.db.get_orders().length) { |
||||
|
const { |
||||
|
confirmed |
||||
|
} = await this.showPopup('ConfirmPopup', { |
||||
|
title: this.env._t('Remaining unsynced orders'), |
||||
|
body: this.env._t( |
||||
|
'There are unsynced orders. Do you want to sync these orders?' |
||||
|
), |
||||
|
}); |
||||
|
if (confirmed) { |
||||
|
// NOTE: Not yet sure if this should be awaited or not.
|
||||
|
// If awaited, some operations like changing screen
|
||||
|
// might not work.
|
||||
|
this.env.pos.push_orders(); |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
Registries.Component.extend(PaymentScreen, ValidateManagers); |
||||
|
|
||||
|
return ValidateManagers; |
||||
|
|
||||
|
}); |
@ -0,0 +1,14 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<record model="ir.ui.view" id="discount_limit_category"> |
||||
|
<field name="name">DiscountLimit list</field> |
||||
|
<field name="model">hr.employee</field> |
||||
|
<field name="inherit_id" ref="hr.view_employee_form"/> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="//field[@name='job_id']" position="after"> |
||||
|
<field name="limited_discount" /> |
||||
|
|
||||
|
</xpath> |
||||
|
</field> |
||||
|
</record> |
||||
|
</odoo> |
@ -0,0 +1,12 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<odoo> |
||||
|
<template id="assets" inherit_id="point_of_sale.assets"> |
||||
|
<xpath expr="." position="inside"> |
||||
|
<script type="text/javascript" src="/pos_discount_manager/static/src/js/DiscountButton.js"></script> |
||||
|
<script type="text/javascript" src="/pos_discount_manager/static/src/js/ValidateManager.js"></script> |
||||
|
</xpath> |
||||
|
<xpath expr="//link[@id='pos-stylesheet']" position="after"> |
||||
|
<link rel="stylesheet" href="/pos_discount_manager/static/src/css/popup_size.css"/> |
||||
|
</xpath> |
||||
|
</template> |
||||
|
</odoo> |