Browse Source

Aug 31: [ADD] Initital Commits 'sales_order_double_approval'

pull/332/merge
Cybrosys Technologies 8 months ago
parent
commit
4b27143c97
  1. 49
      sales_order_double_approval/README.rst
  2. 22
      sales_order_double_approval/__init__.py
  3. 52
      sales_order_double_approval/__manifest__.py
  4. 6
      sales_order_double_approval/doc/RELEASE_NOTES.md
  5. 24
      sales_order_double_approval/models/__init__.py
  6. 36
      sales_order_double_approval/models/res_company.py
  7. 68
      sales_order_double_approval/models/res_config_settings.py
  8. 64
      sales_order_double_approval/models/sale_order.py
  9. BIN
      sales_order_double_approval/static/description/assets/icons/check.png
  10. BIN
      sales_order_double_approval/static/description/assets/icons/chevron.png
  11. BIN
      sales_order_double_approval/static/description/assets/icons/cogs.png
  12. BIN
      sales_order_double_approval/static/description/assets/icons/consultation.png
  13. BIN
      sales_order_double_approval/static/description/assets/icons/ecom-black.png
  14. BIN
      sales_order_double_approval/static/description/assets/icons/education-black.png
  15. BIN
      sales_order_double_approval/static/description/assets/icons/hotel-black.png
  16. BIN
      sales_order_double_approval/static/description/assets/icons/license.png
  17. BIN
      sales_order_double_approval/static/description/assets/icons/lifebuoy.png
  18. BIN
      sales_order_double_approval/static/description/assets/icons/manufacturing-black.png
  19. BIN
      sales_order_double_approval/static/description/assets/icons/pos-black.png
  20. BIN
      sales_order_double_approval/static/description/assets/icons/puzzle.png
  21. BIN
      sales_order_double_approval/static/description/assets/icons/restaurant-black.png
  22. BIN
      sales_order_double_approval/static/description/assets/icons/service-black.png
  23. BIN
      sales_order_double_approval/static/description/assets/icons/trading-black.png
  24. BIN
      sales_order_double_approval/static/description/assets/icons/training.png
  25. BIN
      sales_order_double_approval/static/description/assets/icons/update.png
  26. BIN
      sales_order_double_approval/static/description/assets/icons/user.png
  27. BIN
      sales_order_double_approval/static/description/assets/icons/wrench.png
  28. BIN
      sales_order_double_approval/static/description/assets/misc/categories.png
  29. BIN
      sales_order_double_approval/static/description/assets/misc/check-box.png
  30. BIN
      sales_order_double_approval/static/description/assets/misc/compass.png
  31. BIN
      sales_order_double_approval/static/description/assets/misc/corporate.png
  32. BIN
      sales_order_double_approval/static/description/assets/misc/customer-support.png
  33. BIN
      sales_order_double_approval/static/description/assets/misc/cybrosys-logo.png
  34. BIN
      sales_order_double_approval/static/description/assets/misc/features.png
  35. BIN
      sales_order_double_approval/static/description/assets/misc/logo.png
  36. BIN
      sales_order_double_approval/static/description/assets/misc/pictures.png
  37. BIN
      sales_order_double_approval/static/description/assets/misc/pie-chart.png
  38. BIN
      sales_order_double_approval/static/description/assets/misc/right-arrow.png
  39. BIN
      sales_order_double_approval/static/description/assets/misc/star.png
  40. BIN
      sales_order_double_approval/static/description/assets/misc/support.png
  41. BIN
      sales_order_double_approval/static/description/assets/misc/whatsapp.png
  42. BIN
      sales_order_double_approval/static/description/assets/modules/1.png
  43. BIN
      sales_order_double_approval/static/description/assets/modules/2.png
  44. BIN
      sales_order_double_approval/static/description/assets/modules/3.png
  45. BIN
      sales_order_double_approval/static/description/assets/modules/4.png
  46. BIN
      sales_order_double_approval/static/description/assets/modules/5.png
  47. BIN
      sales_order_double_approval/static/description/assets/modules/6.png
  48. BIN
      sales_order_double_approval/static/description/assets/screenshots/1.png
  49. BIN
      sales_order_double_approval/static/description/assets/screenshots/2.png
  50. BIN
      sales_order_double_approval/static/description/assets/screenshots/3.png
  51. BIN
      sales_order_double_approval/static/description/assets/screenshots/4.png
  52. BIN
      sales_order_double_approval/static/description/assets/screenshots/5.png
  53. BIN
      sales_order_double_approval/static/description/assets/screenshots/6.png
  54. BIN
      sales_order_double_approval/static/description/assets/screenshots/hero.gif
  55. BIN
      sales_order_double_approval/static/description/banner.png
  56. BIN
      sales_order_double_approval/static/description/icon.png
  57. 584
      sales_order_double_approval/static/description/index.html
  58. 27
      sales_order_double_approval/views/res_company_views.xml
  59. 63
      sales_order_double_approval/views/res_config_settings_views.xml
  60. 42
      sales_order_double_approval/views/sale_order_views.xml

49
sales_order_double_approval/README.rst

@ -0,0 +1,49 @@
.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg
:target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
Sales Order Double Approval
===========================
* Sales Order Double Approval module for Odoo 16.
Installation
============
- www.odoo.com/documentation/16.0/setup/install.html
- Install our custom addon
License
-------
Lesser General Public License v3.0 (LGPL v3)
(https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
Developers : (V16) Ajith V,
(V15) Mufeeda P P
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>`__

22
sales_order_double_approval/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import models

52
sales_order_double_approval/__manifest__.py

@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
{
'name': 'Sales Order Double Approval',
'version': '16.0.1.0.0',
'category': 'Sales',
'summary': """ "Sales Order Double Approval" is a process requiring two
separate approvals for a sales order to ensure accuracy,
compliance, and reduce the risk of errors and fraud. """,
'description': """ "Sales Order Double Approval" refers to a process where
a sales order must be reviewed and approved by two
separate individuals or departments before it is
finalized. This is implemented to ensure accuracy,
compliance, and reduce the risk of errors and fraud
in sales transactions. """,
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com/',
'depends': ['base', 'sale_management'],
'data': [
'views/res_company_views.xml',
'views/res_config_settings_views.xml',
'views/sale_order_views.xml'
],
'images': [
'static/description/banner.png',
],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

6
sales_order_double_approval/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <sales_order_double_approval>
#### 08.08.2024
#### Version 16.0.1.0.0
#### ADD
- Initial commit for Sales Order Double Approval Module

24
sales_order_double_approval/models/__init__.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import res_company
from . import res_config_settings
from . import sale_order

36
sales_order_double_approval/models/res_company.py

@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class ResCompany(models.Model):
"""
Inherits the 'res.company' model to add a field for double validation
on Sale Orders. This field determines if Sale Orders require approval.
"""
_inherit = 'res.company'
so_double_validation = fields.Boolean(
string="Sale Order Approval",
help="Enable this option to require double validation for sale orders. "
"When enabled, sale orders exceeding a specified minimum amount "
"will require approval by a sales manager.")

68
sales_order_double_approval/models/res_config_settings.py

@ -0,0 +1,68 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import api, fields, models
class ResConfigSettings(models.TransientModel):
"""
Inherits the 'res.config.settings' model to add configuration fields
for Sale Order Approval and Minimum Amount. Provides methods to get
and set these values from the 'ir.config_parameter' model.
"""
_inherit = 'res.config.settings'
so_approval = fields.Boolean(
string="Sale Order Approval",
help="Enable this option to require double validation for sale orders. "
"When enabled, sale orders exceeding the specified minimum amount "
"will require approval by a sales manager."
)
so_min_amount = fields.Monetary(
string="Minimum Amount",
help="Specify the minimum amount that triggers the double validation "
"for sale orders. Sale orders exceeding this amount will require "
"approval by a sales manager.")
@api.model
def get_values(self):
"""
Override to get the values of the custom fields from the 'ir.config_parameter' model.
"""
res = super(ResConfigSettings, self).get_values()
res['so_approval'] = self.env['ir.config_parameter'].sudo().get_param(
"sales_order_double_approval.so_approval", default="")
res['so_min_amount'] = self.env['ir.config_parameter'].sudo().get_param(
"sales_order_double_approval.so_min_amount", default="")
return res
@api.model
def set_values(self):
"""
Override to set the values of the custom fields in the 'ir.config_parameter' model.
"""
self.env['ir.config_parameter'].set_param(
"sales_order_double_approval.so_approval",
self.so_approval or '')
self.env['ir.config_parameter'].set_param(
"sales_order_double_approval.so_min_amount",
self.so_min_amount or '')
super(ResConfigSettings, self).set_values()

64
sales_order_double_approval/models/sale_order.py

@ -0,0 +1,64 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class SaleOrder(models.Model):
"""
Inherits the 'sale.order' model to add custom states for approval workflow.
Adds methods for approving and confirming sale orders based on company settings.
"""
_inherit = 'sale.order'
state = fields.Selection(selection_add=
[('to_approve', 'To Approve'),
('sent',)], ondelete={'to_approve': 'cascade'})
def button_approve(self):
"""
Method to approve the sale order and change its state to 'sale'.
"""
self.write({'state': 'sale'})
def action_confirm(self):
"""
Override to add double validation logic based on company settings.
Confirms the sale order if conditions are met, otherwise sets state to 'to_approve'.
"""
res = super(SaleOrder, self).action_confirm()
if self.company_id.so_double_validation:
if self.env['ir.config_parameter'].sudo().get_param(
'sales_order_double_approval.so_approval'):
if self.amount_total > float(
self.env['ir.config_parameter'].sudo().get_param(
'sales_order_double_approval.so_min_amount')):
if self.user_has_groups('sales_team.group_sale_manager'):
self.state = 'sale'
else:
self.state = 'to_approve'
return res
def action_cancel(self):
"""
Method to cancel the sale order and change its state to 'cancel'.
"""
self.state = 'cancel'

BIN
sales_order_double_approval/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
sales_order_double_approval/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
sales_order_double_approval/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
sales_order_double_approval/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
sales_order_double_approval/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
sales_order_double_approval/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
sales_order_double_approval/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
sales_order_double_approval/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
sales_order_double_approval/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
sales_order_double_approval/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
sales_order_double_approval/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
sales_order_double_approval/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
sales_order_double_approval/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
sales_order_double_approval/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
sales_order_double_approval/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
sales_order_double_approval/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
sales_order_double_approval/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
sales_order_double_approval/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
sales_order_double_approval/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
sales_order_double_approval/static/description/assets/misc/categories.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
sales_order_double_approval/static/description/assets/misc/check-box.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
sales_order_double_approval/static/description/assets/misc/compass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
sales_order_double_approval/static/description/assets/misc/corporate.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
sales_order_double_approval/static/description/assets/misc/customer-support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
sales_order_double_approval/static/description/assets/misc/cybrosys-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
sales_order_double_approval/static/description/assets/misc/features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

BIN
sales_order_double_approval/static/description/assets/misc/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
sales_order_double_approval/static/description/assets/misc/pictures.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
sales_order_double_approval/static/description/assets/misc/pie-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
sales_order_double_approval/static/description/assets/misc/right-arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

BIN
sales_order_double_approval/static/description/assets/misc/star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
sales_order_double_approval/static/description/assets/misc/support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
sales_order_double_approval/static/description/assets/misc/whatsapp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
sales_order_double_approval/static/description/assets/modules/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
sales_order_double_approval/static/description/assets/modules/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
sales_order_double_approval/static/description/assets/modules/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
sales_order_double_approval/static/description/assets/modules/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
sales_order_double_approval/static/description/assets/modules/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
sales_order_double_approval/static/description/assets/modules/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

BIN
sales_order_double_approval/static/description/assets/screenshots/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

BIN
sales_order_double_approval/static/description/assets/screenshots/hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

BIN
sales_order_double_approval/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
sales_order_double_approval/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

584
sales_order_double_approval/static/description/index.html

@ -0,0 +1,584 @@
<div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/>
<div>
<div style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
<div style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Odoo.sh
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Sales Order Double Approval.</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
Module For Double Approval Process in Sales Order. </p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif" class="img-responsive"
style="width: 100%; margin-left: auto; margin-right: auto;"/>
</div>
</div>
</div>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Explore This Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn more about this module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View features of this module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View screenshots for this module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Overview</h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">
Odoo Sales Order Double Approval Module will allow only the authorised
person to approve the sale order, if the sale order amount exceeds the
minimum amount.
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/features.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Features</h2>
</div>
<div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Double Approval process in sale order.
</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Set Two Step Verification on Sale Orders.
</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Manager can approve the sales order.
</span>
</div>
<div class="d-flex align-items-center"
style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Set a limit amount on Sale Order.
</span>
</div>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pictures.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Screenshots</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Configure the double approval in the company.
</h3>
<img src="assets/screenshots/1.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Sales manager can approve the sales order above the minimum
amount.
</h3>
<img src="assets/screenshots/2.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Configure Two Step Verification and the minimum amount in Sale >
Settings.
</h3>
<img src="assets/screenshots/3.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Sale Order in To Approve stage.
</h3>
<img src="assets/screenshots/4.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Authenticated person can approve or cancel the sale order.
</h3>
<img src="assets/screenshots/5.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Sale order is approved.
</h3>
<img src="assets/screenshots/6.png" class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Related Products</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/sale_discount_total/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/1.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/16.0/sale_report_advanced/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/2.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/16.0/sale_product_image/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/3.png">
</div>
</a>
</div>
</div>
<div class="carousel-item active"
style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/sale_customer_product_history/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/4.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/16.0/sale_order_discount_approval_odoo/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/5.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/16.0/edit_order_date/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="assets/modules/6.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" 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="#demo1"
data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i
class="fa fa-chevron-right"
style="font-size:24px"></i></span></a>
</div>
</div>
</div>
<!-- END OF RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our Services</h2>
</div>
<div class="container my-5">
<div class="row">
<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>
</div>
<!-- END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our Industries</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/ecom-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile friendly, awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; 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: 0px; 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: 0px; 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>
</div>
<!-- END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Support</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48"
style="width: 42px; height: 42px;"/>
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help?
Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4 d-flex justify-content-center align-items-center"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52"
style="width: 52px; height: 52px;"/>
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
+91 86068 27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>
<!-- END OF SUPPORT -->

27
sales_order_double_approval/views/res_company_views.xml

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--
This XML code defines a new view that extends the existing company form view in Odoo.
Specifically, it adds a new field 'so_double_validation' after the 'favicon' field.
This is used to enable double validation for sale orders within the company settings.
Attributes:
- id: Unique identifier for the new view record.
- model: Specifies the model this view is associated with, which is 'res.company'.
- inherit_id: Refers to the existing view 'base.view_company_form' to be inherited.
- arch: The architecture of the view, defined in XML.
-->
<record id="res_company_form_view_inherit_sales_order_double_approval"
model="ir.ui.view">
<field name="name">
res.company.form.view.inherit.sales.order.double.approval
</field>
<field name="model">res.company</field>
<field name="inherit_id" ref="base.view_company_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='favicon']" position="after">
<field name="so_double_validation"/>
</xpath>
</field>
</record>
</odoo>

63
sales_order_double_approval/views/res_config_settings_views.xml

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--
This XML code defines a new view that extends the existing configuration settings form view in Odoo.
It adds a section for Sale Order Approval settings, allowing users to configure whether sale orders
require manager approval above a certain minimum amount.
Attributes:
- id: Unique identifier for the new view record.
- model: Specifies the model this view is associated with, which is 'res.config.settings'.
- inherit_id: Refers to the existing view 'base.res_config_settings_view_form' to be inherited.
- arch: The architecture of the view, defined in XML.
The new section added includes:
- A heading 'Sale Order Approval'.
- A container div for sale order approval settings.
- A checkbox field 'so_approval' to enable or disable the approval requirement.
- An informational icon indicating that the settings are company-specific.
- A description explaining the purpose of the 'so_approval' field.
- A minimum amount field 'so_min_amount' that becomes visible when 'so_approval' is enabled.
-->
<record id="res_config_settings_form_view_inherit_sales_order_double_approval"
model="ir.ui.view">
<field name="name">
res.config.settings.form.view.inherit.sales.order.double.approval
</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@data-key='sale_management']//div[@id='pricing_setting_container']"
position="after">
<h2>Sale Order Approval</h2>
<div class="row mt16 o_settings_container"
name="so_approval_setting_container">
<div class="col-12 col-lg-6 o_setting_box" id="so_approval">
<div class="o_setting_left_pane">
<field name="so_approval"/>
</div>
<div class="o_setting_right_pane">
<label for="so_approval"/>
<span class="fa fa-lg fa-building-o"
title="Values set here are company-specific."
aria-label="Values set here are company-specific."
groups="base.group_multi_company"/>
<div class="text-muted">
Request managers to approve orders above a
minimum amount
</div>
<div class="content-group"
attrs="{'invisible': [('so_approval', '=', False)]}">
<div class="row mt16">
<label for="so_min_amount"
class="col-lg-4 o_light_label"/>
<field name="so_min_amount"/>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

42
sales_order_double_approval/views/sale_order_views.xml

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--
This XML code defines a new view that extends the existing sale order form view in Odoo.
It adds 'Approve' and 'Cancel' buttons next to the 'Send by Email' button in the sale order form.
These buttons are intended for use by sales managers to approve or cancel sale orders
that are in a specific state.
Attributes:
- id: Unique identifier for the new view record.
- model: Specifies the model this view is associated with, which is 'sale.order'.
- inherit_id: Refers to the existing view 'sale.view_order_form' to be inherited.
- arch: The architecture of the view, defined in XML.
The new buttons added include:
- A button 'Approve' that triggers the 'button_approve' method and is visible
only to members of the 'sales_team.group_sale_manager' group when the order is in 'to_approve' state.
- A button 'Cancel' that triggers the 'action_cancel' method and is also visible
only to members of the 'sales_team.group_sale_manager' group when the order is in 'to_approve' state.
-->
<record id="sale_order_form_view_inherit_sales_order_double_approval"
model="ir.ui.view">
<field name="name">
sale.order.form.view.inherit.sales.order.double.approval
</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_quotation_send']"
position="after">
<button name="button_approve" string="Approve"
class="oe_highlight" type="object"
groups="sales_team.group_sale_manager"
attrs="{'invisible':[('state', 'not in', 'to_approve')]}"/>
<button name="action_cancel" string="Cancel"
class="oe_highlight" type="object"
groups="sales_team.group_sale_manager"
attrs="{'invisible':[('state', 'not in', 'to_approve')]}"/>
</xpath>
</field>
</record>
</odoo>
Loading…
Cancel
Save