Browse Source

[ADD] Initial Commit 'pos_discount_manager'

pull/168/head
Ajmal Cybro 4 years ago
parent
commit
6aca0e2fe6
  1. 23
      pos_discount_manager/__init__.py
  2. 43
      pos_discount_manager/__manifest__.py
  3. 8
      pos_discount_manager/doc/RELEASE_NOTES.md
  4. 23
      pos_discount_manager/models/__init__.py
  5. 31
      pos_discount_manager/models/hr_employee_inherit.py
  6. 2
      pos_discount_manager/security/ir.model.access.csv
  7. BIN
      pos_discount_manager/static/description/assets/box-icon.png
  8. BIN
      pos_discount_manager/static/description/assets/hero-bkg.jpg
  9. BIN
      pos_discount_manager/static/description/assets/hero.png
  10. BIN
      pos_discount_manager/static/description/assets/jobs-icon.png
  11. BIN
      pos_discount_manager/static/description/assets/money-icon.png
  12. BIN
      pos_discount_manager/static/description/assets/order-icon.png
  13. BIN
      pos_discount_manager/static/description/assets/refund-icon.png
  14. BIN
      pos_discount_manager/static/description/assets/screenshots/1.png
  15. BIN
      pos_discount_manager/static/description/assets/screenshots/2.png
  16. BIN
      pos_discount_manager/static/description/assets/screenshots/3.png
  17. BIN
      pos_discount_manager/static/description/assets/screenshots/4.png
  18. BIN
      pos_discount_manager/static/description/assets/screenshots/5.png
  19. BIN
      pos_discount_manager/static/description/assets/shop-icon.png
  20. BIN
      pos_discount_manager/static/description/assets/sync-icon.png
  21. BIN
      pos_discount_manager/static/description/banner.jpg
  22. BIN
      pos_discount_manager/static/description/icon.png
  23. 613
      pos_discount_manager/static/description/index.html
  24. 6
      pos_discount_manager/static/src/css/popup_size.css
  25. 84
      pos_discount_manager/static/src/js/DiscountButton.js
  26. 147
      pos_discount_manager/static/src/js/ValidateManager.js
  27. 14
      pos_discount_manager/views/hr_employee_inherit_view.xml
  28. 12
      pos_discount_manager/views/templates.xml

23
pos_discount_manager/__init__.py

@ -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

43
pos_discount_manager/__manifest__.py

@ -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,
}

8
pos_discount_manager/doc/RELEASE_NOTES.md

@ -0,0 +1,8 @@
## Module <pos_discount_manager>
#### 15.05.2021
#### Version 14.0.1.0.0
##### ADD
- Initial commit

23
pos_discount_manager/models/__init__.py

@ -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

31
pos_discount_manager/models/hr_employee_inherit.py

@ -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")

2
pos_discount_manager/security/ir.model.access.csv

@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_pos_discount_manager_pos_discount_manager,pos_discount_manager.pos_discount_manager,model_pos_discount_manager_pos_discount_manager,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_pos_discount_manager_pos_discount_manager pos_discount_manager.pos_discount_manager model_pos_discount_manager_pos_discount_manager base.group_user 1 1 1 1

BIN
pos_discount_manager/static/description/assets/box-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
pos_discount_manager/static/description/assets/hero-bkg.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
pos_discount_manager/static/description/assets/hero.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 KiB

BIN
pos_discount_manager/static/description/assets/jobs-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
pos_discount_manager/static/description/assets/money-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
pos_discount_manager/static/description/assets/order-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 B

BIN
pos_discount_manager/static/description/assets/refund-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
pos_discount_manager/static/description/assets/screenshots/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
pos_discount_manager/static/description/assets/screenshots/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

BIN
pos_discount_manager/static/description/assets/screenshots/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
pos_discount_manager/static/description/assets/screenshots/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
pos_discount_manager/static/description/assets/screenshots/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

BIN
pos_discount_manager/static/description/assets/shop-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 860 B

BIN
pos_discount_manager/static/description/assets/sync-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
pos_discount_manager/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
pos_discount_manager/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

613
pos_discount_manager/static/description/index.html

@ -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 &amp; 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>

6
pos_discount_manager/static/src/css/popup_size.css

@ -0,0 +1,6 @@
.pos .popup.popup-number
{
height:500px;
width:500px
}

84
pos_discount_manager/static/src/js/DiscountButton.js

@ -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;
});

147
pos_discount_manager/static/src/js/ValidateManager.js

@ -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;
});

14
pos_discount_manager/views/hr_employee_inherit_view.xml

@ -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>

12
pos_discount_manager/views/templates.xml

@ -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>
Loading…
Cancel
Save