Browse Source

Feb 01 : [UPDT] Module Updated 'digital_signature'

pull/267/merge
RisvanaCybro 1 year ago
parent
commit
4f7d108e2e
  1. 27
      digital_signature/README.rst
  2. 4
      digital_signature/__init__.py
  3. 40
      digital_signature/__manifest__.py
  4. 9
      digital_signature/doc/RELEASE_NOTES.md
  5. 11
      digital_signature/models/__init__.py
  6. 131
      digital_signature/models/account_move.py
  7. 72
      digital_signature/models/inventory.py
  8. 80
      digital_signature/models/invoice.py
  9. 80
      digital_signature/models/purchase_order.py
  10. 37
      digital_signature/models/res_company.py
  11. 71
      digital_signature/models/res_config_settings.py
  12. 117
      digital_signature/models/stock_picking.py
  13. 0
      digital_signature/static/description/assets/icons/check.png
  14. 0
      digital_signature/static/description/assets/icons/chevron.png
  15. 0
      digital_signature/static/description/assets/icons/cogs.png
  16. 0
      digital_signature/static/description/assets/icons/consultation.png
  17. 0
      digital_signature/static/description/assets/icons/ecom-black.png
  18. 0
      digital_signature/static/description/assets/icons/education-black.png
  19. 0
      digital_signature/static/description/assets/icons/hotel-black.png
  20. 0
      digital_signature/static/description/assets/icons/license.png
  21. 0
      digital_signature/static/description/assets/icons/lifebuoy.png
  22. 0
      digital_signature/static/description/assets/icons/manufacturing-black.png
  23. 0
      digital_signature/static/description/assets/icons/pos-black.png
  24. 0
      digital_signature/static/description/assets/icons/puzzle.png
  25. 0
      digital_signature/static/description/assets/icons/restaurant-black.png
  26. 0
      digital_signature/static/description/assets/icons/service-black.png
  27. 0
      digital_signature/static/description/assets/icons/trading-black.png
  28. 0
      digital_signature/static/description/assets/icons/training.png
  29. 0
      digital_signature/static/description/assets/icons/update.png
  30. 0
      digital_signature/static/description/assets/icons/user.png
  31. 0
      digital_signature/static/description/assets/icons/wrench.png
  32. BIN
      digital_signature/static/description/assets/modules/1.png
  33. BIN
      digital_signature/static/description/assets/modules/2.png
  34. BIN
      digital_signature/static/description/assets/modules/3.png
  35. BIN
      digital_signature/static/description/assets/modules/4.png
  36. BIN
      digital_signature/static/description/assets/modules/5.gif
  37. BIN
      digital_signature/static/description/assets/modules/6.png
  38. BIN
      digital_signature/static/description/assets/modules/l1.png
  39. BIN
      digital_signature/static/description/assets/modules/l2.png
  40. BIN
      digital_signature/static/description/assets/modules/l3.png
  41. BIN
      digital_signature/static/description/assets/modules/l4.png
  42. BIN
      digital_signature/static/description/assets/modules/l5.png
  43. BIN
      digital_signature/static/description/assets/modules/l6.png
  44. BIN
      digital_signature/static/description/assets/screenshots/1.png
  45. BIN
      digital_signature/static/description/assets/screenshots/10.png
  46. BIN
      digital_signature/static/description/assets/screenshots/11.png
  47. BIN
      digital_signature/static/description/assets/screenshots/12.png
  48. BIN
      digital_signature/static/description/assets/screenshots/13.png
  49. BIN
      digital_signature/static/description/assets/screenshots/14.png
  50. BIN
      digital_signature/static/description/assets/screenshots/15.png
  51. BIN
      digital_signature/static/description/assets/screenshots/16.png
  52. BIN
      digital_signature/static/description/assets/screenshots/17.png
  53. BIN
      digital_signature/static/description/assets/screenshots/2.png
  54. BIN
      digital_signature/static/description/assets/screenshots/3.png
  55. BIN
      digital_signature/static/description/assets/screenshots/4.png
  56. BIN
      digital_signature/static/description/assets/screenshots/5.png
  57. BIN
      digital_signature/static/description/assets/screenshots/6.png
  58. BIN
      digital_signature/static/description/assets/screenshots/8.png
  59. BIN
      digital_signature/static/description/assets/screenshots/9.png
  60. BIN
      digital_signature/static/description/assets/screenshots/Screenshot1.png
  61. BIN
      digital_signature/static/description/assets/screenshots/Screenshot10.png
  62. BIN
      digital_signature/static/description/assets/screenshots/Screenshot11.png
  63. BIN
      digital_signature/static/description/assets/screenshots/Screenshot2.png
  64. BIN
      digital_signature/static/description/assets/screenshots/Screenshot3.png
  65. BIN
      digital_signature/static/description/assets/screenshots/Screenshot4.png
  66. BIN
      digital_signature/static/description/assets/screenshots/Screenshot5.png
  67. BIN
      digital_signature/static/description/assets/screenshots/Screenshot6.png
  68. BIN
      digital_signature/static/description/assets/screenshots/Screenshot7.png
  69. BIN
      digital_signature/static/description/assets/screenshots/Screenshot8.png
  70. BIN
      digital_signature/static/description/assets/screenshots/Screenshot9.png
  71. BIN
      digital_signature/static/description/assets/screenshots/hero.gif
  72. BIN
      digital_signature/static/description/banner.png
  73. BIN
      digital_signature/static/description/icon.png
  74. 578
      digital_signature/static/description/index.html
  75. 25
      digital_signature/static/src/css/signature_stamp.css
  76. 173
      digital_signature/views/account_move_templates.xml
  77. 7
      digital_signature/views/account_move_views.xml
  78. 31
      digital_signature/views/inventory.xml
  79. 29
      digital_signature/views/invoice_report.xml
  80. 31
      digital_signature/views/purchase_order.xml
  81. 112
      digital_signature/views/purchase_order_templates.xml
  82. 33
      digital_signature/views/purchase_order_views.xml
  83. 28
      digital_signature/views/purchase_report_inherit.xml
  84. 20
      digital_signature/views/res_company_views.xml
  85. 215
      digital_signature/views/res_config_settings.xml
  86. 313
      digital_signature/views/res_config_settings_views.xml
  87. 60
      digital_signature/views/stock_picking_report.xml
  88. 416
      digital_signature/views/stock_picking_templates.xml
  89. 32
      digital_signature/views/stock_picking_views.xml

27
digital_signature/README.rst

@ -1,29 +1,35 @@
.. image:: https://img.shields.io/badge/licence-LGPL--3-green.svg
:target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
Digital Signature In Purchase Order, Invoice, Inventory Digital Signature In Purchase Order, Invoice, Inventory
======================================================= =======================================================
* Digital Signature in Purchase Order, Invoice, Inventory * This module provide feature to add the digital signature and company stamp on
purchase order, invoice, and inventory.
Installation Installation
============ ============
- www.odoo.com/documentation/15.0/setup/install.html - www.odoo.com/documentation/16.0/setup/install.html
- Install our custom addon - Install our custom addon
License License
------- -------
General Public License, Version 3 (LGPL v3). General Public License, Version 3 (LGPL-3).
(https://www.odoo.com/documentation/user/13.0/legal/licenses/licenses.html) (https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
Company Company
------- -------
* 'Cybrosys Techno Solutions <https://cybrosys.com/>`__ * `Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits Credits
------- -------
* Developer: * Developers: (V16) LAJINA,Ranjith R Contact : odoo@cybrosys.com
(V15) Noorjahan @ Cybrosys
Contacts Contacts
-------- --------
* Mail Contact : odoo@cybrosys.com * Mail Contact : odoo@cybrosys.com
* Website : https://cybrosys.com
Bug Tracker Bug Tracker
----------- -----------
@ -31,11 +37,12 @@ Bugs are tracked on GitHub Issues. In case of trouble, please check there if you
Maintainer Maintainer
========== ==========
This module is maintained by Cybrosys Technologies. .. image:: https://cybrosys.com/images/logo.png
:target: https://cybrosys.com
For support and more information, please visit https://www.cybrosys.com This module is maintained by Cybrosys Technologies.
For support and more information, please visit `Our Website <https://cybrosys.com/>`__
Further information Further information
=================== ===================
HTML Description: `<static/description/index.html>`__ HTML Description: `<static/description/index.html>`__

4
digital_signature/__init__.py

@ -1,9 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
############################################################################# #############################################################################
#
# Cybrosys Technologies Pvt. Ltd. # Cybrosys Technologies Pvt. Ltd.
# #
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) # Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) # Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
# #
# You can modify it under the terms of the GNU LESSER # You can modify it under the terms of the GNU LESSER
@ -19,5 +18,4 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
from . import models from . import models

40
digital_signature/__manifest__.py

@ -1,9 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
############################################################################# #############################################################################
#
# Cybrosys Technologies Pvt. Ltd. # Cybrosys Technologies Pvt. Ltd.
# #
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) # Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) # Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
# #
# You can modify it under the terms of the GNU LESSER # You can modify it under the terms of the GNU LESSER
@ -19,28 +18,37 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
{ {
'name': 'Digital Signature In Purchase Order, Invoice, Inventory', 'name': 'Digital Signature In Purchase Order, Invoice, Inventory',
'summary': 'Digital Signature in Purchase Order, Invoice, Inventory V15', 'version': '16.0.2.1.0',
'version': '16.0.1.0.0', 'category': 'Extra Tools',
'category': 'Tools', 'summary': """This module provide feature to add the digital signature and
'description': """Digital Signature in Purchase Order, Invoice, Inventory V15""", company stamp.""",
'description': """Module helps to add the digital signature and company
stamp to the report of the purchase order, invoice, and inventory.""",
'author': 'Cybrosys Techno Solutions', 'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions', 'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions', 'maintainer': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com',
'depends': ['purchase', 'stock', 'account'], 'depends': ['purchase', 'stock', 'account'],
'data': [ 'data': [
'views/res_config_settings.xml', 'views/purchase_order_views.xml',
'views/purchase_order.xml', 'views/account_move_views.xml',
'views/inventory.xml', 'views/purchase_order_templates.xml',
'views/invoice.xml', 'views/stock_picking_views.xml',
'views/purchase_report_inherit.xml', 'views/account_move_templates.xml',
'views/stock_picking_report.xml', 'views/res_company_views.xml',
'views/invoice_report.xml', 'views/stock_picking_templates.xml',
'views/res_config_settings_views.xml',
], ],
'installable': True, 'assets': {
'application': False, 'web.report_assets_common': [
'digital_signature/static/src/css/signature_stamp.css',
],
},
'images': ['static/description/banner.png'], 'images': ['static/description/banner.png'],
'license': 'LGPL-3', 'license': 'LGPL-3',
'installable': True,
'auto_install': False,
'application': False,
} }

9
digital_signature/doc/RELEASE_NOTES.md

@ -1,6 +1,11 @@
## Module <digital_signature> ## Module <digital_signature>
#### 19.10.2023 #### 01.07.2022
#### Version 16.0.1.1.0 #### Version 16.0.1.1.0
#### ADD #### ADD
- Initial commit for Odoo 16 Digital Signature - Initial commit for Digital Signature In Purchase Order, Invoice, Inventory
#### 26.10.2023
#### Version 16.0.2.1.0
#### UPDT
- Added the company stamp feature in Purchase Order, Invoice and Inventory

11
digital_signature/models/__init__.py

@ -1,9 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
############################################################################# #############################################################################
#
# Cybrosys Technologies Pvt. Ltd. # Cybrosys Technologies Pvt. Ltd.
# #
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) # Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) # Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
# #
# You can modify it under the terms of the GNU LESSER # You can modify it under the terms of the GNU LESSER
@ -19,8 +18,8 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
from . import account_move
from . import res_config_settings
from . import purchase_order from . import purchase_order
from . import inventory from . import res_company
from . import invoice from . import res_config_settings
from . import stock_picking

131
digital_signature/models/account_move.py

@ -0,0 +1,131 @@
# -*- coding: utf-8 -*-
#############################################################################
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-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, _
from odoo.exceptions import UserError
class AccountMove(models.Model):
"""Inherited the account move model for showing the digital signature
and company stamp in both invoice and bill"""
_inherit = "account.move"
_description = 'Account Move'
@api.model
def _default_show_signature(self):
""" Returns the value of digital sign from Invoice setting
for invoice"""
return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.show_digital_sign_invoice')
@api.model
def _default_enable_sign(self):
"""Returns the value of enable options from Invoice setting"""
return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.enable_options_invoice')
@api.model
def _default_show_sign_bill(self):
""" Returns the value of signature from Invoice setting for bill"""
return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.show_digital_sign_bill')
@api.model
def _default_show_stamp_invoice(self):
""" Returns the value of company stamp from Invoice setting
for invoice"""
return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.show_company_stamp_invoice')
@api.model
def _default_show_stamp_bill(self):
""" Returns the value of company stamp from Invoice setting
for bill"""
return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.show_company_stamp_bill')
digital_sign = fields.Binary(string='Signature',
help="Signature of accounting management "
"person")
sign_by = fields.Char(string='Signed By', help="Name of signed person")
designation = fields.Char(string='Designation',
help="Designation for signed person")
sign_on = fields.Datetime(string='Signed On', help="Date of sign")
show_signature = fields.Boolean('Show Signature',
default=_default_show_signature,
compute='_compute_show_signature',
help="Field to get the value in setting"
" to current model")
show_sign_bill = fields.Boolean('Show Signature',
default=_default_show_sign_bill,
compute='_compute_show_sign_bill',
help="Field to get the value in setting to "
"current model")
enable_others = fields.Boolean(default=_default_enable_sign,
compute='_compute_enable_others',
help="Field to get the value in setting to "
"current model")
show_stamp_invoice = fields.Boolean(default=_default_show_stamp_invoice,
compute='_compute_show_stamp_invoice',
help="Field to get the value in setting"
" to current model")
stamp_invoicing = fields.Selection([
('customer_invoice', 'Customer Invoice'),
('vendor_bill', 'Vendor Bill'), ('both', 'Both'),
], string="Company Stamp Applicable",
compute='_compute_stamp_invoicing', help="Field to get the value in "
"setting to current model")
def _compute_show_signature(self):
""" Compute the value of digital signature"""
for record in self:
record.show_signature = self._default_show_signature()
def _compute_enable_others(self):
""" Compute the value of enable options from the invoicing setting"""
for record in self:
record.enable_others = self._default_enable_sign()
def _compute_show_sign_bill(self):
""" Compute the value of digital signature in bill"""
for record in self:
record.show_sign_bill = self._default_show_sign_bill()
def _compute_stamp_invoicing(self):
""" Compute the value, which report has applied the stamp"""
for invoice in self:
invoice.stamp_invoicing = self.env['ir.config_parameter']. \
sudo().get_param(
'digital_signature.company_stamp_applicable_invoicing')
def _compute_show_stamp_invoice(self):
""" Compute the value of company stamp"""
for invoice in self:
invoice.show_stamp_invoice = self._default_show_stamp_invoice()
def action_post(self):
"""Validate the signature is missing or not"""
res = super(AccountMove, self).action_post()
if self.env[
'ir.config_parameter'].sudo().get_param(
'digital_signature.confirm_sign_invoice') and \
self.digital_sign is False:
raise UserError(_("Signature is missing"))
return res

72
digital_signature/models/inventory.py

@ -1,72 +0,0 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-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 models, fields, api, _
from odoo.exceptions import Warning, UserError
class InventoryInherit(models.Model):
_inherit = "stock.picking"
def _default_show_sign(self):
return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.show_digital_sign_inventory')
def _default_enable_options(self):
return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.enable_options_inventory')
digital_sign = fields.Binary(string='Signature')
sign_by = fields.Char(string='Signed By')
designation = fields.Char(string='Designation')
sign_on = fields.Datetime(string='Signed On')
show_sign = fields.Boolean(default=_default_show_sign,
compute='_compute_show_sign')
enable_option = fields.Boolean(default=_default_enable_options,
compute='_compute_enable_optiion')
sign_applicable = fields.Selection([
('picking_operations', 'Picking Operations'),
('delivery', 'Delivery Slip'),
('both', 'Both'),
], string="Sign Applicable inside", compute='_compute_sign_applicable')
def button_validate(self):
res = super(InventoryInherit, self).button_validate()
if self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.confirm_sign_inventory') and self.digital_sign is False:
raise UserError('Signature is missing')
return res
def _compute_show_sign(self):
show_signature = self._default_show_sign()
for record in self:
record.show_sign = show_signature
def _compute_enable_optiion(self):
enable_others = self._default_enable_options()
for record in self:
record.enable_option = enable_others
def _compute_sign_applicable(self):
for rec in self:
rec.sign_applicable = self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.sign_applicable')

80
digital_signature/models/invoice.py

@ -1,80 +0,0 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2022-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 models, fields, api, _
from odoo.exceptions import Warning, UserError
class InvoiceInherit(models.Model):
_inherit = "account.move"
@api.model
def _default_show_sign(self):
return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.show_digital_sign_invoice')
@api.model
def _default_enable_sign(self):
return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.enable_options_invoice')
@api.model
def _default_show_sign_bill(self):
return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.show_digital_sign_bill')
digital_sign = fields.Binary(string='Signature')
sign_by = fields.Char(string='Signed By')
designation = fields.Char(string='Designation')
sign_on = fields.Datetime(string='Signed On')
show_signature = fields.Boolean('Show Signature',
default=_default_show_sign,
compute='_compute_show_signature')
show_sign_bill = fields.Boolean('Show Signature',
default=_default_show_sign_bill,
compute='_compute_show_sign_bill')
enable_others = fields.Boolean(default=_default_enable_sign,
compute='_compute_enable_others')
def action_post(self):
res = super(InvoiceInherit, self).action_post()
if self.env[
'ir.config_parameter'].sudo().get_param(
'digital_signature.confirm_sign_invoice') and self.digital_sign is False:
raise UserError(_("Signature is missing"))
return res
def _compute_show_signature(self):
show_signature = self._default_show_sign()
for record in self:
record.show_signature = show_signature
def _compute_enable_others(self):
enable_others = self._default_enable_sign()
for record in self:
record.enable_others = enable_others
def _compute_show_sign_bill(self):
show_sign_bill = self._default_show_sign_bill()
for record in self:
record.show_sign_bill = show_sign_bill

80
digital_signature/models/purchase_order.py

@ -1,9 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
############################################################################# #############################################################################
#
# Cybrosys Technologies Pvt. Ltd. # Cybrosys Technologies Pvt. Ltd.
# #
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) # Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) # Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
# #
# You can modify it under the terms of the GNU LESSER # You can modify it under the terms of the GNU LESSER
@ -19,49 +18,76 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
from odoo import api, fields, models, _
from odoo import models, fields, api, _ from odoo.exceptions import UserError
from odoo.exceptions import Warning, UserError
class PurchaseOrderInherit(models.Model): class PurchaseOrder(models.Model):
"""Inherited the purchase order model for showing the digital signature
and company stamp in the purchase report"""
_inherit = "purchase.order" _inherit = "purchase.order"
_description = 'Purchase Order'
@api.model @api.model
def _default_show_sign(self): def _default_show_sign(self):
""" Returns the value of digital sign from Purchase setting"""
return self.env['ir.config_parameter'].sudo().get_param( return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.show_digital_sign_po') 'digital_signature.show_digital_sign_po')
@api.model @api.model
def _default_enable_sign(self): def _default_enable_sign(self):
"""Returns the value of enable options from Purchase setting"""
return self.env['ir.config_parameter'].sudo().get_param( return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.enable_options_po') 'digital_signature.enable_options_po')
digital_sign = fields.Binary(string='Signature') @api.model
sign_by = fields.Char(string='Signed By') def _default_show_stamp_po(self):
designation = fields.Char(string='Designation') """ Returns the value of company stamp from purchase setting"""
sign_on = fields.Datetime(string='Signed On') return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.show_company_stamp_po')
digital_sign = fields.Binary(string='Signature', help="Signature of "
"purchase management"
"person")
sign_by = fields.Char(string='Signed By', help="Name of signed person")
designation = fields.Char(string='Designation',
help="Designation for signed person")
sign_on = fields.Datetime(string='Signed On', help="Date of sign")
show_signature = fields.Boolean('Show Signature', show_signature = fields.Boolean('Show Signature',
default=_default_show_sign, default=_default_show_sign,
compute='_compute_show_signature') compute='_compute_show_signature',
enable_others = fields.Boolean(default=_default_enable_sign, help="Field to get the value in setting to "
compute='_compute_enable_others') "current model")
enable_sign = fields.Boolean(default=_default_enable_sign,
def button_confirm(self): compute='_compute_enable_sign',
res = super(PurchaseOrderInherit, self).button_confirm() help="Field to get the value in setting to "
if self.env[ "current model")
'ir.config_parameter'].sudo().get_param( show_stamp_po = fields.Boolean(default=_default_show_stamp_po,
'digital_signature.confirm_sign_po') and self.digital_sign is False: compute='_compute_show_stamp_po',
raise UserError(_("Signature is missing")) help="Field to get the value in setting to "
"current model")
return res
def _compute_show_signature(self): def _compute_show_signature(self):
show_signature = self._default_show_sign() """ Compute the value of digital signature"""
for record in self: for record in self:
record.show_signature = show_signature record.show_signature = self._default_show_sign()
def _compute_enable_others(self): def _compute_enable_sign(self):
enable_others = self._default_enable_sign() """ Compute the value of enable options from the purchase settings"""
for record in self: for record in self:
record.enable_others = enable_others record.enable_sign = self._default_enable_sign()
def _compute_show_stamp_po(self):
""" Compute the value of company stamp"""
for record in self:
record.show_stamp_po = self._default_show_stamp_po()
def button_confirm(self):
"""Validate the signature is missing or not"""
res = super(PurchaseOrder, self).button_confirm()
if self.env[
'ir.config_parameter'].sudo(). \
get_param('digital_signature.confirm_sign_po') \
and self.digital_sign is False:
raise UserError(_("Signature is missing"))
return res

37
digital_signature/models/res_company.py

@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
#############################################################################
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-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):
"""Inherited the res company for setting the company stamp"""
_inherit = 'res.company'
_description = 'Company'
stamp = fields.Binary(string="Stamp", help="Company stamp")
position = fields.Selection(selection=[
('left', 'Left'),
('right', 'Right'),
('center', 'Center'),
], string='Position', tracking=True, default="left",
help="The position is used to position the signature and company "
"stamp in reports")

71
digital_signature/models/res_config_settings.py

@ -1,9 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
############################################################################# #############################################################################
#
# Cybrosys Technologies Pvt. Ltd. # Cybrosys Technologies Pvt. Ltd.
# #
# Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) # Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>) # Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
# #
# You can modify it under the terms of the GNU LESSER # You can modify it under the terms of the GNU LESSER
@ -19,36 +18,76 @@
# If not, see <http://www.gnu.org/licenses/>. # If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################# #############################################################################
from odoo import fields, models
from odoo import models, fields, api, _
class ResConfigurationInherit(models.TransientModel): class ResConfigSettings(models.TransientModel):
"""Inherited the res config settings for returning the value of digital
signature and company stamp from settings"""
_inherit = 'res.config.settings' _inherit = 'res.config.settings'
show_digital_sign_po = fields.Boolean( show_digital_sign_po = fields.Boolean(
config_parameter='digital_signature.show_digital_sign_po') config_parameter='digital_signature.show_digital_sign_po',
help="Enable to show sign in purchase order")
enable_options_po = fields.Boolean( enable_options_po = fields.Boolean(
config_parameter='digital_signature.enable_options_po') config_parameter='digital_signature.enable_options_po',
help="Enable to option in purchase order")
confirm_sign_po = fields.Boolean( confirm_sign_po = fields.Boolean(
config_parameter='digital_signature.confirm_sign_po') config_parameter='digital_signature.confirm_sign_po',
help="Enable to confirm sign in purchase order")
show_digital_sign_inventory = fields.Boolean( show_digital_sign_inventory = fields.Boolean(
config_parameter='digital_signature.show_digital_sign_inventory') config_parameter='digital_signature.show_digital_sign_inventory',
help="Enable to show sign in inventory")
enable_options_inventory = fields.Boolean( enable_options_inventory = fields.Boolean(
config_parameter='digital_signature.enable_options_inventory') config_parameter='digital_signature.enable_options_inventory',
help="Enable to option in inventory")
sign_applicable = fields.Selection([ sign_applicable = fields.Selection([
('picking_operations', 'Picking Operations'), ('picking_operations', 'Picking Operations'),
('delivery', 'Delivery Slip'), ('both', 'Both'), ('delivery', 'Delivery Slip'), ('both', 'Both'),
], string="Sign Applicable inside", ], string="Sign Applicable inside",
default="picking_operations", default="picking_operations",
config_parameter='digital_signature.sign_applicable') config_parameter='digital_signature.sign_applicable',
help="Options to whether the feature have to available")
confirm_sign_inventory = fields.Boolean( confirm_sign_inventory = fields.Boolean(
config_parameter='digital_signature.confirm_sign_inventory') config_parameter='digital_signature.confirm_sign_inventory',
help="Enable to confirm sign in inventory")
show_digital_sign_invoice = fields.Boolean( show_digital_sign_invoice = fields.Boolean(
config_parameter='digital_signature.show_digital_sign_invoice') config_parameter='digital_signature.show_digital_sign_invoice',
help="Enable to show sign in invoice")
enable_options_invoice = fields.Boolean( enable_options_invoice = fields.Boolean(
config_parameter='digital_signature.enable_options_invoice') config_parameter='digital_signature.enable_options_invoice',
help="Enable to option in invoice")
confirm_sign_invoice = fields.Boolean( confirm_sign_invoice = fields.Boolean(
config_parameter='digital_signature.confirm_sign_invoice') config_parameter='digital_signature.confirm_sign_invoice',
help="Enable to confirm sign in inventory"
)
show_digital_sign_bill = fields.Boolean( show_digital_sign_bill = fields.Boolean(
config_parameter='digital_signature.show_digital_sign_bill') config_parameter='digital_signature.show_digital_sign_bill',
help="Enable to confirm sign in bill")
show_company_stamp_po = fields.Boolean(
config_parameter='digital_signature.show_company_stamp_po',
help="Enable to confirm stamp in purchase order")
show_company_stamp_inventory = fields.Boolean(
config_parameter='digital_signature.show_company_stamp_inventory',
help="Enable to confirm stamp in inventory")
show_company_stamp_invoice = fields.Boolean(
config_parameter='digital_signature.show_company_stamp_invoice',
help="Enable to confirm stamp in invoice")
show_company_stamp_bill = fields.Boolean(
config_parameter='digital_signature.show_company_stamp_bill',
help="Enable to confirm stamp in bill")
company_stamp_applicable = fields.Selection([
('picking_stamp', 'Picking Operations'),
('delivery_stamp', 'Delivery Slip'), ('both_stamp', 'Both'),
], string="Company Stamp Applicable",
default="picking_stamp",
config_parameter='digital_signature.company_stamp_applicable',
help="Options to whether the feature have to available"
)
company_stamp_applicable_invoicing = fields.Selection([
('customer_invoice', 'Customer Invoice'),
('vendor_bill', 'Vendor Bill'), ('both', 'Both'),
], string="Company Stamp Applicable",
default="customer_invoice",
config_parameter='digital_signature.company_stamp_applicable_invoicing',
help="Options to whether the feature have to available")

117
digital_signature/models/stock_picking.py

@ -0,0 +1,117 @@
# -*- coding: utf-8 -*-
#############################################################################
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-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
from odoo.exceptions import UserError
class StockPicking(models.Model):
"""Inherited the stock picking for showing the digital signature
and company stamp in both report of picking operations and delivery slip"""
_inherit = "stock.picking"
def _default_show_sign(self):
""" Returns the value of digital sign from inventory setting"""
return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.show_digital_sign_inventory')
def _default_enable_option(self):
"""Returns the value of enable options from inventory setting"""
return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.enable_options_inventory')
def _default_show_stamp(self):
"""Returns the value of company stampfrom inventory setting"""
return self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.show_company_stamp_inventory')
digital_sign = fields.Binary(string='Signature',
help="Signature of inventory "
"management person")
sign_by = fields.Char(string='Signed By',
help="Name of signed person")
designation = fields.Char(string='Designation',
help="Designation for signed person")
sign_on = fields.Datetime(string='Signed On', help="Date of sign")
show_sign = fields.Boolean(default=_default_show_sign,
compute='_compute_show_sign',
help="Field to get the value in setting to "
"current model")
enable_option = fields.Boolean(default=_default_enable_option,
compute='_compute_enable_option',
help="Field to get the value in setting to "
"current model")
sign_applicable = fields.Selection([
('picking_operations', 'Picking Operations'),
('delivery', 'Delivery Slip'),
('both', 'Both'),
], string="Sign Applicable inside", compute='_compute_sign_applicable',
help="Field to get the value in setting to current model")
stamp_applicable = fields.Selection([
('picking_stamp', 'Picking Operations'),
('delivery_stamp', 'Delivery Slip'),
('both_stamp', 'Both')], string="stamp",
compute='_compute_stamp_applicable')
show_stamp = fields.Boolean(default=_default_show_stamp,
compute='_compute_show_stamp',
help="Field to get the value in setting "
"to current model")
def _compute_show_sign(self):
"""Function to compute the value of digital signature"""
for record in self:
record.show_sign = self._default_show_sign()
def _compute_enable_option(self):
"""Function to compute the value of enable options from the
inventory setting"""
for record in self:
record.enable_option = self._default_enable_option()
def _compute_sign_applicable(self):
"""Function to compute the value, which report has applied
the signature"""
for rec in self:
rec.sign_applicable = self.env['ir.config_parameter'].sudo(). \
get_param(
'digital_signature.sign_applicable')
def _compute_stamp_applicable(self):
"""Function to compute the value which report has applied
the signature"""
for rec in self:
rec.stamp_applicable = self.env['ir.config_parameter'].sudo(). \
get_param(
'digital_signature.company_stamp_applicable')
def _compute_show_stamp(self):
"""Function to compute the value which report has applied the stamp"""
for stamp in self:
stamp.show_stamp = self._default_show_stamp()
def button_validate(self):
""" Function to validate the signature is missing or not"""
res = super(StockPicking, self).button_validate()
if self.env['ir.config_parameter'].sudo().get_param(
'digital_signature.confirm_sign_inventory') and \
self.digital_sign is False:
raise UserError('Signature is missing')
return res

0
digital_signature/static/description/assets/icons/check.png

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

0
digital_signature/static/description/assets/icons/chevron.png

Before

Width:  |  Height:  |  Size: 310 B

After

Width:  |  Height:  |  Size: 310 B

0
digital_signature/static/description/assets/icons/cogs.png

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

0
digital_signature/static/description/assets/icons/consultation.png

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

0
digital_signature/static/description/assets/icons/ecom-black.png

Before

Width:  |  Height:  |  Size: 576 B

After

Width:  |  Height:  |  Size: 576 B

0
digital_signature/static/description/assets/icons/education-black.png

Before

Width:  |  Height:  |  Size: 733 B

After

Width:  |  Height:  |  Size: 733 B

0
digital_signature/static/description/assets/icons/hotel-black.png

Before

Width:  |  Height:  |  Size: 911 B

After

Width:  |  Height:  |  Size: 911 B

0
digital_signature/static/description/assets/icons/license.png

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

0
digital_signature/static/description/assets/icons/lifebuoy.png

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

0
digital_signature/static/description/assets/icons/manufacturing-black.png

Before

Width:  |  Height:  |  Size: 673 B

After

Width:  |  Height:  |  Size: 673 B

0
digital_signature/static/description/assets/icons/pos-black.png

Before

Width:  |  Height:  |  Size: 878 B

After

Width:  |  Height:  |  Size: 878 B

0
digital_signature/static/description/assets/icons/puzzle.png

Before

Width:  |  Height:  |  Size: 653 B

After

Width:  |  Height:  |  Size: 653 B

0
digital_signature/static/description/assets/icons/restaurant-black.png

Before

Width:  |  Height:  |  Size: 905 B

After

Width:  |  Height:  |  Size: 905 B

0
digital_signature/static/description/assets/icons/service-black.png

Before

Width:  |  Height:  |  Size: 839 B

After

Width:  |  Height:  |  Size: 839 B

0
digital_signature/static/description/assets/icons/trading-black.png

Before

Width:  |  Height:  |  Size: 427 B

After

Width:  |  Height:  |  Size: 427 B

0
digital_signature/static/description/assets/icons/training.png

Before

Width:  |  Height:  |  Size: 627 B

After

Width:  |  Height:  |  Size: 627 B

0
digital_signature/static/description/assets/icons/update.png

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

0
digital_signature/static/description/assets/icons/user.png

Before

Width:  |  Height:  |  Size: 988 B

After

Width:  |  Height:  |  Size: 988 B

0
digital_signature/static/description/assets/icons/wrench.png

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

BIN
digital_signature/static/description/assets/modules/5.gif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

BIN
digital_signature/static/description/assets/modules/l1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
digital_signature/static/description/assets/modules/l2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
digital_signature/static/description/assets/modules/l3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
digital_signature/static/description/assets/modules/l4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
digital_signature/static/description/assets/modules/l5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

BIN
digital_signature/static/description/assets/modules/l6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
digital_signature/static/description/assets/screenshots/10.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
digital_signature/static/description/assets/screenshots/11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

BIN
digital_signature/static/description/assets/screenshots/12.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

BIN
digital_signature/static/description/assets/screenshots/13.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

BIN
digital_signature/static/description/assets/screenshots/14.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

BIN
digital_signature/static/description/assets/screenshots/15.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
digital_signature/static/description/assets/screenshots/16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

BIN
digital_signature/static/description/assets/screenshots/17.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
digital_signature/static/description/assets/screenshots/8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

BIN
digital_signature/static/description/assets/screenshots/9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

BIN
digital_signature/static/description/assets/screenshots/Screenshot1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 KiB

BIN
digital_signature/static/description/assets/screenshots/Screenshot10.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

BIN
digital_signature/static/description/assets/screenshots/Screenshot11.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

BIN
digital_signature/static/description/assets/screenshots/Screenshot2.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

BIN
digital_signature/static/description/assets/screenshots/Screenshot3.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

BIN
digital_signature/static/description/assets/screenshots/Screenshot4.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 KiB

BIN
digital_signature/static/description/assets/screenshots/Screenshot5.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 222 KiB

BIN
digital_signature/static/description/assets/screenshots/Screenshot6.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 KiB

BIN
digital_signature/static/description/assets/screenshots/Screenshot7.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

BIN
digital_signature/static/description/assets/screenshots/Screenshot8.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

BIN
digital_signature/static/description/assets/screenshots/Screenshot9.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 345 KiB

BIN
digital_signature/static/description/banner.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 152 KiB

BIN
digital_signature/static/description/icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 22 KiB

578
digital_signature/static/description/index.html

@ -1,15 +1,15 @@
<div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;"> <div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR --> <!-- TITLE BAR -->
<div <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;"> 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" <img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/> style="width: 42px; height: 42px;"/>
<div> <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;" <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"> class="mr-2">
<i class="fa fa-check mr-1"></i>Community <i class="fa fa-check mr-1"></i>Community
</div> </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;" <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"> class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise <i class="fa fa-check mr-1"></i>Enterprise
</div> </div>
@ -20,32 +20,33 @@
</div> </div>
</div> </div>
<!-- END OF TITLE BAR --> <!-- END OF TITLE BAR -->
<div class="container">
<!-- APP HERO --> <div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;"> <h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Digital Signature In Purchase, Inventory, Invoice Digital Signature In Purchase Order, Invoice, Inventory</h1>
</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;"> <p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
A Module for adding Digital Signatures in Purchase, Inventory, Invoices A Module for Adding Digital Signature and Company Stamp in
</p> Purchase,
Inventory, Invoices</p>
<!-- END OF APP HERO --> <!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif" <img src="assets/screenshots/hero.gif" class="img-responsive"
style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 45%; left: 12%; right: auto;"/> style="width: 100%; margin-left: auto; margin-right: auto;"/>
</div>
</div>
</div>
</div> </div>
<!-- NAVIGATION SECTION --> <!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center" <div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;"> style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2" <div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="/assets/misc/compass.png"/> <img src="assets/misc/compass.png"/>
</div> </div>
<h2 class="mt-2" <h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Explore This Explore This
Module Module</h2>
</h2>
</div> </div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;"> <div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3"> <div class="col-sm-12 col-md-6 my-3">
@ -53,17 +54,12 @@
<div class="d-flex justify-content-between align-items-center" <div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;"> style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div> <div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;"> <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
Overview <span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn
</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">
Learn
more about this more about this
module module</span>
</span>
</div> </div>
<img src="/assets/misc/right-arrow.png" width="36" height="36"/> <img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div> </div>
</a> </a>
</div> </div>
@ -72,17 +68,12 @@
<div class="d-flex justify-content-between align-items-center" <div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;"> style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div> <div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;"> <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
Features <span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">
View
features of this features of this
module module</span>
</span>
</div> </div>
<img src="/assets/misc/right-arrow.png" width="36" height="36"/> <img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div> </div>
</a> </a>
</div> </div>
@ -91,17 +82,12 @@
<div class="d-flex justify-content-between align-items-center" <div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;"> style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div> <div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;"> <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
Screenshots <span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">
View
screenshots for this screenshots for this
module module</span>
</span>
</div> </div>
<img src="/assets/misc/right-arrow.png" width="36" height="36"/> <img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div> </div>
</a> </a>
</div> </div>
@ -110,10 +96,11 @@
<!-- OVERVIEW SECTION --> <!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center" <div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview"> style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="overview">
<div class="d-flex justify-content-center align-items-center mr-2" <div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="/assets/misc/pie-chart.png"/> <img src="assets/misc/pie-chart.png"/>
</div> </div>
<h2 class="mt-2" <h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
@ -122,7 +109,8 @@
</div> </div>
<div class="row" <div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">This module helps to add the digital signature <div class="col-sm-12 py-4">
This module helps to add the digital signature and company stamp
in purchase order, delivery slip, picking operations, customer invoices in purchase order, delivery slip, picking operations, customer invoices
and vendor bills, and other details like signed by, designation, and and vendor bills, and other details like signed by, designation, and
date. Configurations for setting the signature as mandatory, if it is date. Configurations for setting the signature as mandatory, if it is
@ -133,10 +121,11 @@
<!-- FEATURES SECTION --> <!-- FEATURES SECTION -->
<div class="d-flex align-items-center" <div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features"> style="border-bottom: 2px solid #714B67; padding: 15px 0px;"
id="features">
<div class="d-flex justify-content-center align-items-center mr-2" <div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="/assets/misc/features.png"/> <img src="assets/misc/features.png"/>
</div> </div>
<h2 class="mt-2" <h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
@ -146,34 +135,37 @@
<div class="row" <div class="row"
style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> 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="col-sm-12 col-md-6">
<div class="d-flex align-items-start" <div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px"> style="margin-top: 40px; margin-bottom: 40px">
<img src="/assets/misc/check-box.png" class="mr-2"/> <img src="assets/misc/check-box.png" class="mr-2"/>
<div> <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Add Company Stamp in Reports</span>
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Print digital signature in reports
</span>
</div> </div>
</div> <div class="d-flex align-items-center"
<div class="d-flex align-items-start"
style="margin-top: 40px; margin-bottom: 40px"> style="margin-top: 40px; margin-bottom: 40px">
<img src="/assets/misc/check-box.png" class="mr-2"/> <img src="assets/misc/check-box.png" class="mr-2"/>
<div> <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Option to configure the Alignment of Signature and
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> Stamp in Different Positions
Enable other options to add signature details
</span> </span>
</div> </div>
</div> <div class="d-flex align-items-center"
<div class="d-flex align-items-start"
style="margin-top: 40px; margin-bottom: 40px"> style="margin-top: 40px; margin-bottom: 40px">
<img src="/assets/misc/check-box.png" class="mr-2"/> <img src="assets/misc/check-box.png" class="mr-2"/>
<div> <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Add Digital Signature in Reports
<span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Check signature before Confirmations
</span> </span>
</div> </div>
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Enable "Other Options" to Add Signature Details
</span>
</div> </div>
<div class="d-flex align-items-center"
style="margin-top: 40px; margin-bottom: 40px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> Check signature before Confirmations
</span>
</div>
</div> </div>
</div> </div>
<!-- END OF FEATURES SECTION --> <!-- END OF FEATURES SECTION -->
@ -184,100 +176,135 @@
id="screenshots"> id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2" <div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="/assets/misc/pictures.png"/> <img src="assets/misc/pictures.png"/>
</div> </div>
<h2 class="mt-2" <h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Screenshots Screenshots
</h2> </h2>
</div> </div>
<div class="row"> <div class="col-lg-12 my-2">
<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;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Settings in Purchase Module to Show Signature in Purchase Order Companies users have the ability to add and configure the Company
Stamp and its position.
</h3> </h3>
<img src="/assets/screenshots/Screenshot1.png" <img src="assets/screenshots/1.png"
class="img-thumbnail"> class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div class="col-lg-12 my-2">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Enable Other Options to add extra signature details, Check Enable "Show Digital Sign in Purchase Order" to display the option for adding a
signature before confirmation to raise a warning When signature Signature in Purchase Orders and include the signature in Purchase Order
is missing Report.
</h3> </h3>
<img src="/assets/screenshots/Screenshot2.png" <img src="assets/screenshots/2.png"
class="img-thumbnail"> class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div class="col-lg-12 my-2">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Digital Signature Fields in Purchase Order You can activate the " Other Sign Options" feature to include additional
signature details and enable "Check Sign Before Confirmation" to receive
warning if signature is missing.
</h3> </h3>
<img src="/assets/screenshots/Screenshot3.png" <img src="assets/screenshots/3.png"
class="img-thumbnail"> class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div class="col-lg-12 my-2">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Digital Signature in Pdf Report Option to upload Signature for the Purchase Order
</h3> </h3>
<img src="/assets/screenshots/Screenshot4.png" <img src="assets/screenshots/4.png"
class="img-thumbnail"> class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div class="col-lg-12 my-2">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Raise warning when signature is missing Enable "Show Company Stamp in Purchase Orders" to show the Company Stamp
in purchase order receipt.
</h3> </h3>
<img src="/assets/screenshots/Screenshot5.png" <img src="assets/screenshots/5.png"
class="img-thumbnail"> class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div class="col-lg-12 my-2">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Signature Configuration in Inventory Settings Digital Signature and Company Stamp in Pdf Report Based on the
Position.
</h3> </h3>
<img src="/assets/screenshots/Screenshot6.png" <img src="assets/screenshots/6.png"
class="img-thumbnail"> class="img-thumbnail">
</div> </div>
</div> <div class="col-lg-12 my-2">
<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;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Signature Configuration in Invoice Settings Enable "Show Company Stamp in Inventory" to show Company Stamp in the
Inventory Report.
</h3> </h3>
<img src="/assets/screenshots/Screenshot7.png" <img src="assets/screenshots/8.png"
class="img-thumbnail"> class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div class="col-lg-12 my-2">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Digital Signature in Picking Operation Enable "Show Digital Sign in Inventory" to display the option for adding a
Signature in the Inventory Transfer and subsequently include the Signature
in the Inventory Report
</h3> </h3>
<img src="/assets/screenshots/Screenshot8.png" <img src="assets/screenshots/9.png"
class="img-thumbnail"> class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div class="col-lg-12 my-2">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Digital Signature in Delivery Slip Enable "Other Sign Options" to show option to add additional Signature details
</h3> </h3>
<img src="/assets/screenshots/Screenshot9.png" <img src="assets/screenshots/17.png"
class="img-thumbnail"> class="img-thumbnail">
</div> <img src="assets/screenshots/16.png"
<div style="display: block; margin: 30px auto;"> class="img-thumbnail">
</div>
<div class="col-lg-12 my-2">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Digital Signature in Customer Invoice Digital Signature and Company Stamp in Picking Operations Based on
the Position.
</h3> </h3>
<img src="/assets/screenshots/Screenshot10.png" <img src="assets/screenshots/10.png"
class="img-thumbnail"> class="img-thumbnail">
</div> </div>
<div style="display: block; margin: 30px auto;"> <div class="col-lg-12 my-2">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Digital Signature in Vendor Bill Digital Signature and Company Stamp in Delivery Slip Based on the
Position.
</h3> </h3>
<img src="/assets/screenshots/Screenshot11.png" <img src="assets/screenshots/11.png"
class="img-thumbnail"> class="img-thumbnail">
</div>
</div>
</div> </div>
<div class="col-lg-12 my-2">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Enable "Show Digital Sign in Customer Invoice" to display option for adding a
Signature in the Invoice and subsequently include the signature in the Invoice Report</h3>
<img src="assets/screenshots/12.png"
class="img-thumbnail">
</div>
<div class="col-lg-12 my-2">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Enable "Show Company Stamp in Invoice" to show the Company Stamp
in Invoice. </h3>
<img src="assets/screenshots/13.png"
class="img-thumbnail">
</div>
<div class="col-lg-12 my-2">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Digital Signature in Customer Invoice Based on the
Position.
</h3>
<img src="assets/screenshots/14.png"
class="img-thumbnail">
</div>
<div class="col-lg-12 my-2">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
Digital Signature in Vendor Bill Based on the
Position.
</h3>
<img src="assets/screenshots/15.png"
class="img-thumbnail">
</div>
<!-- END OF SCREENSHOTS SECTION --> <!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS --> <!-- RELATED PRODUCTS -->
@ -285,7 +312,7 @@
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2" <div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="/assets/misc/categories.png"/> <img src="assets/misc/categories.png"/>
</div> </div>
<h2 class="mt-2" <h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
@ -297,74 +324,73 @@
<div class="col-sm-12"> <div class="col-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel"> <div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow --> <!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;"> <div class="carousel-inner" style="padding:30px">
<div class="carousel-item" style="min-height: 198.656px;"> <div class="carousel-item" style="min-height:198.656px">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left"> style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/dynamic_accounts_report/" <a href="https://apps.odoo.com/apps/modules/16.0/dashboard_pos/"
target="_blank"> target="_blank">
<div style="border-radius:10px"> <div style="border-radius:10px">
<img class="img img-responsive center-block" <img class="img img-responsive center-block"
style="border-radius: 0px;" style="border-radius:0px"
src="//apps.odoocdn.com/apps/assets/15.0/account_day_book/assets/modules/dynamic_accounts_report.png?3e73b0c"> src="assets/modules/l1.png">
</div> </div>
</a> </a>
</div> </div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left"> style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/custom_gantt_view/" <a href="https://apps.odoo.com/apps/modules/16.0/custom_receipts_for_pos/#"
target="_blank"> target="_blank">
<div style="border-radius:10px"> <div style="border-radius:10px">
<img class="img img-responsive center-block" <img class="img img-responsive center-block"
style="border-radius: 0px;" style="border-radius:0px"
src="//apps.odoocdn.com/apps/assets/15.0/account_day_book/assets/modules/custom_gantt_view.png?3e73b0c"> src="assets/modules/l2.png">
</div> </div>
</a> </a>
</div> </div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left"> style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/project_custom_gantt/" <a href="https://apps.odoo.com/apps/modules/16.0/login_pos_direct/#"
target="_blank"> target="_blank">
<div style="border-radius:10px"> <div style="border-radius:10px">
<img class="img img-responsive center-block" <img class="img img-responsive center-block"
style="border-radius: 0px;" style="border-radius:0px"
src="//apps.odoocdn.com/apps/assets/15.0/account_day_book/assets/modules/project_custom_gantt.png?3e73b0c"> src="assets/modules/l3.png">
</div> </div>
</a> </a>
</div> </div>
</div> </div>
<div class="carousel-item active" <div class="carousel-item active" style="min-height:198.656px">
style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left"> style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/account_reports_xlsx/" <a href="https://apps.odoo.com/apps/modules/16.0/pos_report_generator/"
target="_blank"> target="_blank">
<div style="border-radius:10px"> <div style="border-radius:10px">
<img class="img img-responsive center-block" <img class="img img-responsive center-block"
style="border-radius: 0px;" style="border-radius:0px"
src="//apps.odoocdn.com/apps/assets/15.0/account_day_book/assets/modules/account_reports_xlsx.png?3e73b0c"> src="assets/modules/l4.png">
</div> </div>
</a> </a>
</div> </div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left"> style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/base_accounting_kit/" <a href="https://apps.odoo.com/apps/modules/16.0/pos_receipt_extend/"
target="_blank"> target="_blank">
<div style="border-radius:10px"> <div style="border-radius:10px">
<img class="img img-responsive center-block" <img class="img img-responsive center-block"
style="border-radius: 0px;" style="border-radius:0px"
src="//apps.odoocdn.com/apps/assets/15.0/account_day_book/assets/modules/base_accounting_kit.gif?3e73b0c"> src="assets/modules/l5.png">
</div> </div>
</a> </a>
</div> </div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16"
style="float:left"> style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/hr_payroll_community/" <a href="https://apps.odoo.com/apps/modules/16.0/pos_product_creation/"
target="_blank"> target="_blank">
<div style="border-radius:10px"> <div style="border-radius:10px">
<img class="img img-responsive center-block" <img class="img img-responsive center-block"
style="border-radius: 0px;" style="border-radius:0px"
src="//apps.odoocdn.com/apps/assets/15.0/account_day_book/assets/modules/hr_payroll_community.png?3e73b0c"> src="assets/modules/l6.png">
</div> </div>
</a> </a>
</div> </div>
@ -372,21 +398,15 @@
</div> </div>
<!-- Left and right controls --> <!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev" <a class="carousel-control-prev" href="#demo1" data-slide="prev"
style="width:35px; color:#000"> style="width:35px; color:#000"> <span
<span class="carousel-control-prev-icon"><i
class="carousel-control-prev-icon">
<i
class="fa fa-chevron-left" class="fa fa-chevron-left"
style="font-size:24px"></i> style="font-size:24px"></i></span>
</span> </a> <a class="carousel-control-next" href="#demo1"
</a>
<a class="carousel-control-next" href="#demo1"
data-slide="next" style="width:35px; color:#000"> data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"> <span class="carousel-control-next-icon"><i
<i
class="fa fa-chevron-right" class="fa fa-chevron-right"
style="font-size:24px"></i> style="font-size:24px"></i></span>
</span>
</a> </a>
</div> </div>
</div> </div>
@ -394,21 +414,14 @@
<!-- END OF RELATED PRODUCTS --> <!-- END OF RELATED PRODUCTS -->
<!-- OUR SERVICES --> <!-- OUR SERVICES -->
<section class="container" style="margin-top: 6rem !important;">
<div class="d-flex align-items-center" <div class="row">
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> <div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<div class="d-flex justify-content-center align-items-center mr-2" <h2 style="color: #212529 !important;">Our Services</h2>
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> <hr
<img src="/assets/misc/star.png"/> style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/>
</div> </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="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" <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;"> style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
@ -418,8 +431,7 @@
<h6 class="text-center" <h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo Odoo
Customization Customization</h6>
</h6>
</div> </div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
@ -431,8 +443,7 @@
<h6 class="text-center" <h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo Odoo
Implementation Implementation</h6>
</h6>
</div> </div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
@ -444,8 +455,7 @@
<h6 class="text-center" <h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo Odoo
Support Support</h6>
</h6>
</div> </div>
@ -459,8 +469,7 @@
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire Hire
Odoo Odoo
Developer Developer</h6>
</h6>
</div> </div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
@ -472,8 +481,7 @@
<h6 class="text-center" <h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo Odoo
Integration Integration</h6>
</h6>
</div> </div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
@ -485,8 +493,7 @@
<h6 class="text-center" <h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo Odoo
Migration Migration</h6>
</h6>
</div> </div>
@ -499,8 +506,7 @@
<h6 class="text-center" <h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo Odoo
Consultancy Consultancy</h6>
</h6>
</div> </div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
@ -512,8 +518,7 @@
<h6 class="text-center" <h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo Odoo
Implementation Implementation</h6>
</h6>
</div> </div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
@ -525,220 +530,207 @@
<h6 class="text-center" <h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo Odoo
Licensing Consultancy Licensing Consultancy</h6>
</h6>
</div> </div>
</div> </div>
</section>
</div> <!-- END OF OUR SERVICES -->
<!-- END OF END OF OUR SERVICES -->
<!-- OUR INDUSTRIES --> <!-- OUR INDUSTRIES -->
<section class="container" style="margin-top: 6rem !important;">
<div class="d-flex align-items-center" <div class="row">
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> <div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<div class="d-flex justify-content-center align-items-center mr-2" <h2 style="color: #212529 !important;">Our Industries</h2>
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> <hr
<img src="/assets/misc/corporate.png"/> style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/>
</div> </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="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center" <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;"> style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/trading-black.png" <img src="./assets/icons/trading-black.png"
class="img-responsive mb-3" height="48px" width="48px"> class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> <h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading Trading
</h5> </h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure Easily procure
and and
sell your products sell your products</p>
</p>
</div> </div>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center" <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;"> style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/pos-black.png" <img src="./assets/icons/pos-black.png"
class="img-responsive mb-3" height="48px" width="48px"> class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> <h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS POS
</h5> </h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy Easy
configuration configuration
and convivial experience and convivial experience</p>
</p>
</div> </div>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center" <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;"> style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/education-black.png" <img src="./assets/icons/education-black.png"
class="img-responsive mb-3" height="48px" width="48px"> class="img-responsive mb-3" height="48px"
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education Education
</h5> </h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for A platform for
educational management educational management</p>
</p>
</div> </div>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center" <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;"> style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/manufacturing-black.png" <img src="./assets/icons/manufacturing-black.png"
class="img-responsive mb-3" height="48px" class="img-responsive mb-3" height="48px"
width="48px"> width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> <h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing Manufacturing
</h5> </h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and Plan, track and
schedule your operations schedule your operations</p>
</p>
</div> </div>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center" <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;"> style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/ecom-black.png" <img src="./assets/icons/ecom-black.png"
class="img-responsive mb-3" height="48px" width="48px"> class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> <h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website E-commerce &amp; Website
</h5> </h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile Mobile
friendly, friendly,
awe-inspiring product pages awe-inspiring product pages</p>
</p>
</div> </div>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center" <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;"> style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/service-black.png" <img src="./assets/icons/service-black.png"
class="img-responsive mb-3" height="48px" width="48px"> class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> <h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management Service Management
</h5> </h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of Keep track of
services and invoice services and invoice</p>
</p>
</div> </div>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center" <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;"> style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/restaurant-black.png" <img src="./assets/icons/restaurant-black.png"
class="img-responsive mb-3" height="48px" width="48px"> class="img-responsive mb-3" height="48px"
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> width="48px">
<h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant Restaurant
</h5> </h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or Run your bar or
restaurant methodically restaurant methodically</p>
</p>
</div> </div>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center" <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;"> style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/hotel-black.png" <img src="./assets/icons/hotel-black.png"
class="img-responsive mb-3" height="48px" width="48px"> class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> <h5
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management Hotel Management
</h5> </h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An An
all-inclusive all-inclusive
hotel management application hotel management application</p>
</p>
</div> </div>
</div> </div>
</div> </div>
</div> </section>
<!-- END OF END OF OUR INDUSTRIES --> <!-- END OF OUR INDUSTRIES -->
<!-- SUPPORT --> <!-- FOOTER -->
<div class="d-flex align-items-center" <!-- Footer Section -->
style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> <section class="container" style="margin: 5rem auto 2rem;">
<div class="d-flex justify-content-center align-items-center mr-2" <div class="row" style="max-width:1540px;">
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> <div class="col-lg-12 d-flex flex-column justify-content-center align-items-center">
<img src="/assets/misc/customer-support.png"/> <h2 style="color: #212529 !important;">Need Help?</h2>
</div> <hr
<h2 class="mt-2" style="border: 3px solid #714B67 !important; background-color: #714B67 !important; width: 80px !important; margin-bottom: 2rem !important;"/>
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"
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>
<!-- Contact Cards -->
<div class="row d-flex justify-content-center align-items-center"
style="max-width:1540px; margin: 0 auto 2rem auto;">
<div class="col-lg-12"
style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; ">
<div class="row mt-4">
<div class="col-lg-6">
<a href="mailto:odoo@cybrosys.com" target="_blank"
class="btn btn-block mb-2 deep_hover"
style="text-decoration: none; background-color: #4d4d4d; color: #FFF; border-radius: 4px;"><i
class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a>
</div> </div>
<div class="col-sm-12 col-md-6"> <div class="col-lg-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> <a href="https://api.whatsapp.com/send?phone=918606827707"
<div class="mr-4" target="_blank"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> class="btn btn-block mb-2 deep_hover"
<img src="/assets/misc/whatsapp.png" height="52" width="52" style="text-decoration: none; background-color: #25D366; color: #FFF; border-radius: 4px;"><i
style="width: 52px; height: 52px;"/> class="fa fa-whatsapp mr-2"></i>+91 86068 27707</a>
</div> </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> </div>
<!-- End of Contact Cards -->
</section>
<!-- Footer -->
<section class="oe_container" style="padding: 2rem 3rem 1rem;">
<div class="row"
style="max-width:1540px; margin: 0 auto; margin-right: 3rem; ">
<!-- Logo -->
<div class="col-lg-12 d-flex justify-content-center align-items-center"
style="margin-top: 3rem;">
<img src="https://www.cybrosys.com/images/logo.png" width="200px"
height="auto"/>
</div> </div>
<div class="row"> <!-- End of Logo -->
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center"> <div class="col-lg-12">
<img src="/assets/misc/logo.png" width="144" height="31" <hr
style="width:144px; height: 31px; margin-top: 40px;"/> 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>
</div> </div>
</div> </section>
<!-- END OF SUPPORT --> <!-- END OF FOOTER -->

25
digital_signature/static/src/css/signature_stamp.css

@ -0,0 +1,25 @@
.left{
max-height: 4cm;
max-width: 4cm;
padding-top: 50px;
float:left;
}
.right {
max-height: 4cm;
max-width: 4cm;
padding-top: 50px;
float:right
}
.center {
max-height: 4cm;
max-width: 4cm;
padding-top: 50px;
margin-left: 300px;
}
.center_sign {
max-height: 4cm;
max-width: 6cm;
padding-top: 50px;
margin-left: 400px;
margin-top: -153px;
}

173
digital_signature/views/account_move_templates.xml

@ -0,0 +1,173 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Report template for invoice -->
<template id="account_report_invoice_document_inherit_digital_signature"
inherit_id="account.report_invoice_document">
<xpath expr="//div[@id='qrcode']" position="after">
<div id="signature" class="row justify-content-end">
<t t-if="o.company_id.position == 'left'">
<div>
<t t-if="o.move_type == 'out_invoice' and o.stamp_invoicing =='customer_invoice'">
<t t-if="o.show_stamp_invoice and o.company_id.stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="left"/>
</t>
<t t-if="o.show_signature and o.digital_sign" >
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;"/>
<p t-field="o.sign_by"
style="margin-left:160px;"/>
<p t-field="o.sign_on"
style="margin-left:160px;"/>
<p t-field="o.designation"
style="margin-left:160px;"/>
</t>
</t>
<t t-if="o.move_type == 'in_invoice' and o.stamp_invoicing =='vendor_bill'">
<t t-if="o.show_stamp_invoice and o.company_id.stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="left"/>
</t>
<t t-if="o.show_signature and o.digital_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;"/>
<p t-field="o.sign_by"
style="margin-left:160px;"/>
<p t-field="o.sign_on"
style="margin-left:160px;"/>
<p t-field="o.designation"
style="margin-left:160px;"/>
</t>
</t>
<t t-if="o.stamp_invoicing =='both'">
<t t-if="o.show_stamp_invoice and o.company_id.stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="left"/>
</t>
<t t-if="o.show_signature and o.digital_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;"/>
<p t-field="o.sign_by"
style="margin-left:160px;"/>
<p t-field="o.sign_on"
style="margin-left:160px;"/>
<p t-field="o.designation"
style="margin-left:160px;"/>
</t>
</t>
</div>
</t>
<t t-if="o.company_id.position == 'right'">
<div>
<t t-if="o.move_type == 'out_invoice' and o.stamp_invoicing =='customer_invoice'">
<t t-if="o.show_stamp_invoice and o.company_id.stamp">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 8cm;
padding-top: 50px;" class="right"/>
</t>
<t t-if="o.show_signature and o.digital_sign">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="right"/>
<p t-field="o.sign_by"
style="padding-top: 100px;margin-left: 650px;"/>
<p t-field="o.sign_on"
style="margin-left: 650px;"/>
<p t-field="o.designation"
style="margin-left: 650px;"/>
</t>
</t>
<t t-if="o.move_type == 'in_invoice' and o.stamp_invoicing =='vendor_bill'">
<t t-if="o.show_stamp_invoice">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 8cm;
padding-top: 50px;" class="right"/>
</t>
<t t-if="o.show_signature and o.digital_sign">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="right"/>
<p t-field="o.sign_by"
style="padding-top: 100px;margin-left: 650px;"/>
<p t-field="o.sign_on"
style="margin-left: 650px;"/>
<p t-field="o.designation"
style="margin-left: 650px;"/>
</t>
</t>
<t t-if="o.stamp_invoicing =='both'">
<t t-if="o.show_stamp_invoice and o.company_id.stamp">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 8cm;
padding-top: 50px;" class="right"/>
</t>
<t t-if="o.show_signature and o.digital_sign">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="right"/>
<p t-field="o.sign_by"
style="padding-top: 100px;margin-left: 650px;"/>
<p t-field="o.sign_on"
style="margin-left: 650px;"/>
<p t-field="o.designation"
style="margin-left: 650px;"/>
</t>
</t>
</div>
</t>
<t t-if="o.company_id.position == 'center'">
<div>
<t t-if="o.move_type == 'out_invoice' and o.stamp_invoicing =='customer_invoice'">
<t t-if="o.show_stamp_invoice and o.company_id.stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="center"/>
</t>
<t t-if="o.show_signature and o.digital_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
class="center_sign"/>
<p t-field="o.sign_by" style="margin-left: 420px;
margin-top: -10px;"/>
<p t-field="o.sign_on" style="margin-left: 420px;
margin-top: -10px;"/>
<p t-field="o.designation" style="margin-left: 420px;
margin-top: -10px;"/>
</t>
</t>
<t t-if="o.move_type == 'in_invoice' and o.stamp_invoicing =='vendor_bill'">
<t t-if="o.show_stamp_invoice and o.company_id.stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="center"/>
</t>
<t t-if="o.show_signature and o.digital_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
class="center_sign"/>
<p t-field="o.sign_by" style="margin-left: 420px;
margin-top: -10px;"/>
<p t-field="o.sign_on" style="margin-left: 420px;
margin-top: -10px;"/>
<p t-field="o.designation" style="margin-left: 420px;
margin-top: -10px;"/>
</t>
</t>
<t t-if="o.stamp_invoicing =='both'">
<t t-if="o.show_stamp_invoice and o.company_id.stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="center"/>
</t>
<t t-if="o.show_signature and o.digital_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
class="center_sign"/>
<p t-field="o.sign_by" style="margin-left: 420px;
margin-top: -10px;"/>
<p t-field="o.sign_on" style="margin-left: 420px;
margin-top: -10px;"/>
<p t-field="o.designation" style="margin-left: 420px;
margin-top: -10px;"/>
</t>
</t>
</div>
</t>
</div>
</xpath>
</template>
</odoo>

7
digital_signature/views/invoice.xml → digital_signature/views/account_move_views.xml

@ -1,12 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<odoo> <odoo>
<record model="ir.ui.view" id="account_move_inherit"> <!-- Inheriting view account move form -->
<field name="name">account.move.inherit</field> <record id="view_move_form" model="ir.ui.view">
<field name="name">account.move.view.form.inherit.digital.signature
</field>
<field name="model">account.move</field> <field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form"/> <field name="inherit_id" ref="account.view_move_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//page[@id='invoice_tab']" position="after"> <xpath expr="//page[@id='invoice_tab']" position="after">
<field name="show_signature" invisible="1"/> <field name="show_signature" invisible="1"/>
<field name="show_sign_bill" invisible="1"/>
<page string="Digital Signature" <page string="Digital Signature"
attrs="{'invisible': ['|', ('show_signature','=',False), attrs="{'invisible': ['|', ('show_signature','=',False),
('move_type', '!=', 'out_invoice')]}"> ('move_type', '!=', 'out_invoice')]}">

31
digital_signature/views/inventory.xml

@ -1,31 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="inventory_view_form_inherit" model="ir.ui.view">
<field name="name">inventory.view.form.inherit</field>
<field name="model">stock.picking</field>
<field name="priority" eval="20"/>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='move_ids_without_package']"
position="after">
<group>
<field name="show_sign" invisible="1"/>
<field name="enable_option" invisible="1"/>
<field name="sign_applicable" invisible="1"/>
<group name="inventory_signature" string="Digital Signature"
attrs="{'invisible': [('show_sign','=',False)]}">
<field name="digital_sign"/>
<field name="sign_by"
attrs="{'invisible': [('enable_option','=',
False)]}"/>
<field name="designation"
attrs="{'invisible': [('enable_option','=',False)]}"/>
<field name="sign_on"
attrs="{'invisible': [('enable_option','=',False)]}"/>
</group>
</group>
</xpath>
</field>
</record>
</odoo>

29
digital_signature/views/invoice_report.xml

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="report_invoice_report_inherit_sale" inherit_id="account.report_invoice_document">
<!-- Inherits from 'account.report_invoice_document'. -->
<xpath expr="//div[@id='qrcode']" position="after">
<div id="signature" class="row justify-content-end">
<div class="col-4">
<!-- Within the 'signature' div, create a column with a width of 4 units. -->
<table class="table table-sm">
<!-- Check if 'o.digital_sign' exists before proceeding. -->
<div t-if="o.digital_sign" class="mt32 ml64 mr4" name="signature">
<!-- Display the image using 'image_data_uri(o.digital_sign)' as the source. -->
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 8cm; padding-top: 50px;"/>
</div>
<tr>
<td class="text-right" style="border: 1px solid white; background:none;">
<!-- Display 'sign_by', 'sign_on', and 'designation' fields if they exist. -->
<p t-if="o.sign_by" t-field="o.sign_by"/>
<p t-if="o.sign_on" t-field="o.sign_on"/>
<p t-if="o.designation" t-field="o.designation"/>
</td>
</tr>
</table>
</div>
</div>
</xpath>
</template>
</odoo>

31
digital_signature/views/purchase_order.xml

@ -1,31 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="purchase_order_view_form_inherit" model="ir.ui.view">
<field name="name">purchase.order.view.form.inherit</field>
<field name="model">purchase.order</field>
<field name="priority" eval="20"/>
<field name="inherit_id" ref="purchase.purchase_order_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('clearfix')]" position="before">
<group>
<group name="purchase_signature" string="Digital Signature"
attrs="{'invisible': [('show_signature','=',False)]}">
<field name="show_signature" invisible="1"/>
<field name="enable_others" invisible="1"/>
<field name="digital_sign"/>
<field name="sign_by"
attrs="{'invisible': [
('enable_others','=',False)]}"
/>
<field name="designation"
attrs="{'invisible': [
('enable_others','=',False)]}"/>
<field name="sign_on"
attrs="{'invisible': [
('enable_others','=',False)]}"/>
</group>
</group>
</xpath>
</field>
</record>
</odoo>

112
digital_signature/views/purchase_order_templates.xml

@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- Report template for purchase order report -->
<template
id="purchase_report_purchaseorder_document_inherit_digital_signature"
inherit_id="purchase.report_purchaseorder_document">
<xpath expr="//div[@id='total']" position="after">
<div id="signature" class="row justify-content-end">
<t t-if="o.company_id.position == 'left'">
<div>
<t t-if="o.company_id.stamp and o.show_stamp_po and
o.digital_sign and o.show_signature">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="left"/>
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;"/>
<p t-field="o.sign_by"
style="margin-left:160px;"/>
<p t-field="o.sign_on"
style="margin-left:160px;"/>
<p t-field="o.designation"
style="margin-left:160px;"/>
</t>
<t t-elif="o.company_id.stamp and o.show_stamp_po">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="left"/>
</t>
<t t-elif="o.digital_sign and o.show_signature">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 50px;"/>
<p t-field="o.sign_by"
style="margin-left:50px;"/>
<p t-field="o.sign_on"
style="margin-left:50px;"/>
<p t-field="o.designation"
style="margin-left:50px;"/>
</t>
</div>
</t>
<t t-if="o.company_id.position == 'right'">
<div>
<t t-if="o.company_id.stamp and o.digital_sign and
o.show_stamp_po and o.show_signature">
<t t-if="o.company_id.stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="right"/>
</t>
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 8cm;
padding-top: 50px;" class="right"/>
<p t-field="o.sign_by"
style="padding-top: 150px; margin-left: 650px;"/>
<p t-field="o.sign_on"
style="margin-left: 650px;"/>
<p t-field="o.designation"
style="margin-left: 650px;"/>
</t>
<t t-elif="o.company_id.stamp and o.show_stamp_po">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="right"/>
</t>
<t t-elif="o.digital_sign and o.show_signature">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 8cm;
padding-top: 50px;" class="right"/>
<p t-field="o.sign_by"
style="padding-top: 150px;margin-left:700px;"/>
<p t-field="o.sign_on"
style="margin-left: 700px;"/>
<p t-field="o.designation"
style="margin-left: 700px;"/>
</t>
</div>
</t>
<t t-if="o.company_id.position == 'center'">
<div>
<t t-if="o.company_id.stamp and o.digital_sign and
o.show_stamp_po and o.show_signature">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="center"/>
<img t-att-src="image_data_uri(o.digital_sign)"
class="center_sign"/>
<p t-field="o.sign_by" style="margin-left: 420px;
margin-top: -10px;"/>
<p t-field="o.sign_on" style="margin-left: 420px;
margin-top: -10px;"/>
<p t-field="o.designation" style="margin-left: 420px;
margin-top: -10px;"/>
</t>
<t t-elif="o.company_id.stamp and o.show_stamp_po">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="center"/>
</t>
<t t-elif="o.digital_sign and o.show_signature">
<img t-att-src="image_data_uri(o.digital_sign)"
class="center"/>
<p t-field="o.sign_by" style="margin-left: 320px;
margin-top: -10px;"/>
<p t-field="o.sign_on" style="margin-left: 320px;
margin-top: -10px;"/>
<p t-field="o.designation" style="margin-left: 320px;
margin-top: -10px;"/>
</t>
</div>
</t>
</div>
</xpath>
</template>
</odoo>

33
digital_signature/views/purchase_order_views.xml

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Inheriting view for purchase order form -->
<record id="purchase_order_form" model="ir.ui.view">
<field name="name">purchase.order.view.form.inherit.digital.signature
</field>
<field name="model">purchase.order</field>
<field name="priority" eval="20"/>
<field name="inherit_id" ref="purchase.purchase_order_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('clearfix')]" position="before">
<group>
<group name="purchase_signature" string="Digital Signature"
attrs="{'invisible': [('show_signature','=',False)]}">
<field name="show_signature" invisible="1"/>
<field name="enable_sign" invisible="1"/>
<field name="digital_sign"/>
<field name="sign_by"
attrs="{'invisible': [
('enable_sign','=',False)]}"
/>
<field name="designation"
attrs="{'invisible': [
('enable_sign','=',False)]}"/>
<field name="sign_on"
attrs="{'invisible': [
('enable_sign','=',False)]}"/>
</group>
</group>
</xpath>
</field>
</record>
</odoo>

28
digital_signature/views/purchase_report_inherit.xml

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- Inheriting from 'purchase.report_purchaseorder_document'. -->
<template id="purchase_report_inherit" inherit_id="purchase.report_purchaseorder_document">
<xpath expr="//div[@id='total']" position="after">
<div id="signature" class="row justify-content-end">
<div class="col-4">
<table class="table table-sm">
<!-- Check if 'digital_sign' exists before proceeding. -->
<div t-if="o.digital_sign" class="mt32 ml64 mr4" name="signature">
<!-- Display the digital signature as an image. -->
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 8cm; padding-top: 50px;"/>
</div>
<tr>
<td class="text-right" style="border: 1px solid white; background:none;">
<!-- Display 'sign_by', 'sign_on', and 'designation' fields if they exist. -->
<p t-if="o.sign_by" t-field="o.sign_by"/>
<p t-if="o.sign_on" t-field="o.sign_on"/>
<p t-if="o.designation" t-field="o.designation"/>
</td>
</tr>
</table>
</div>
</div>
</xpath>
</template>
</odoo>

20
digital_signature/views/res_company_views.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- Inheriting view for res company form -->
<record id="view_company_form" model="ir.ui.view">
<field name="name">res.company.view.form.inherit.digital_signature
</field>
<field name="model">res.company</field>
<field name="inherit_id" ref="base.view_company_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='general_info']" position="after">
<page name="stamp" string="Stamp">
<group>
<field name="stamp" widget="image"/>
<field name="position"/>
</group>
</page>
</xpath>
</field>
</record>
</odoo>

215
digital_signature/views/res_config_settings.xml

@ -1,215 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="res_config_settings_view_form_purchase_inherit"
model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.purchase</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="10"/>
<field name="inherit_id"
ref="purchase.res_config_settings_view_form_purchase" />
<field name="arch" type="xml">
<xpath expr="//div[@data-key='purchase']/div[
@name='matrix_setting_container']"
position="after">
<h2>Digital Signature</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="show_digital_sign_po"/>
</div>
<div class="o_setting_right_pane">
<label for="show_digital_sign_po"
string="Show Digital Sign
in Purchase Orders?"/>
<div class="text-muted">
Show digital sign inside purchase orders
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
attrs="{'invisible': [
('show_digital_sign_po', '==', False)]}">
<div class="o_setting_left_pane">
<field name="enable_options_po"/>
</div>
<div class="o_setting_right_pane">
<label for="enable_options_po"
string="Enable Other Sign Options"/>
<div class="text-muted">
Enable Other Sign Option
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
attrs="{'invisible': [
('show_digital_sign_po', '==', False)]}">
<div class="o_setting_left_pane">
<field name="confirm_sign_po"/>
</div>
<div class="o_setting_right_pane">
<label for="confirm_sign_po"
string="Check Sign
before confirmation"/>
<div class="text-muted">
Check Sign before confirmation
purchase Order
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
<record id="res_config_settings_view_form_stock_inherit" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.stock</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="10"/>
<field name="inherit_id" ref="stock.res_config_settings_view_form" />
<field name="arch" type="xml">
<xpath expr="//div[@data-key='stock']/div[
@name='warehouse_setting_container']" position="after">
<h2>Digital Signature</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="show_digital_sign_inventory"/>
</div>
<div class="o_setting_right_pane">
<label for="show_digital_sign_inventory"
string="Show Digital Sign in Inventory?"/>
<div class="text-muted">
Show digital sign inside inventory
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
attrs="{'invisible': [
('show_digital_sign_inventory', '==', False)]}">
<div class="o_setting_left_pane">
<field name="enable_options_inventory"/>
</div>
<div class="o_setting_right_pane">
<label for="enable_options_inventory"
string="Enable Other Sign Options"/>
<div class="text-muted">
Enable Other Sign Option
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="show_sign_in_inventory"
attrs="{'invisible': [
('show_digital_sign_inventory', '==', False)]}">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<label for="sign_applicable"/>
<div class="text-muted">
Show digital sign inside delivery slip,
inventory options or both
</div>
<div class="content-group">
<div class="mt16">
<field name="sign_applicable"
class="o_light_label"
widget="radio"/>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
attrs="{'invisible': [
('show_digital_sign_inventory', '==', False)]}">
<div class="o_setting_left_pane">
<field name="confirm_sign_inventory"/>
</div>
<div class="o_setting_right_pane">
<label for="confirm_sign_inventory"
string="Check Sign before confirmation"/>
<div class="text-muted">
Check Sign before confirmation
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
<record id="res_config_settings_view_form_invoice_inherit"
model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.invoice</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="10"/>
<field name="inherit_id" ref="account.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@data-key='account']/div[
@id='print_vendor_checks_setting_container']" position="after">
<h2>Digital Signature</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="show_digital_sign_invoice"/>
</div>
<div class="o_setting_right_pane">
<label for="show_digital_sign_invoice"
string="Show Digital Sign in
Customer Invoice?"/>
<div class="text-muted">
Show digital sign inside customer invoice
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
attrs="{'invisible': [
('show_digital_sign_invoice', '==', False),
('show_digital_sign_bill', '==', False)]}">
<div class="o_setting_left_pane">
<field name="enable_options_invoice"/>
</div>
<div class="o_setting_right_pane">
<label for="enable_options_invoice"
string="Enable Other Sign Options"/>
<div class="text-muted">
Enable Other Sign Option
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
attrs="{'invisible': [
('show_digital_sign_invoice', '==', False),
('show_digital_sign_bill', '==', False)]}">
<div class="o_setting_left_pane">
<field name="confirm_sign_invoice"/>
</div>
<div class="o_setting_right_pane">
<label for="confirm_sign_invoice"
string="Check Sign before confirmation"/>
<div class="text-muted">
Check Sign before confirmation
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="show_digital_sign_bill"/>
</div>
<div class="o_setting_right_pane">
<label for="show_digital_sign_bill"
string="Show Digital Sign in Vendor Bill?"/>
<div class="text-muted">
Show digital sign inside vendor bill
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

313
digital_signature/views/res_config_settings_views.xml

@ -0,0 +1,313 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Inheriting view for purchase order settings -->
<record id="res_config_settings_view_form_purchase"
model="ir.ui.view">
<field name="name">
res.config.settings.view.form.inherit.digital.signature
</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="10"/>
<field name="inherit_id"
ref="purchase.res_config_settings_view_form_purchase"/>
<field name="arch" type="xml">
<xpath expr="//div[@data-key='purchase']/div[
@name='matrix_setting_container']"
position="after">
<h2>Digital Signature</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="show_digital_sign_po"/>
</div>
<div class="o_setting_right_pane">
<label for="show_digital_sign_po"
string="Show Digital Sign
in Purchase Orders?"/>
<div class="text-muted">
Enable to show digital sign inside purchase orders
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
attrs="{'invisible': [
('show_digital_sign_po', '==', False)]}">
<div class="o_setting_left_pane">
<field name="enable_options_po"/>
</div>
<div class="o_setting_right_pane">
<label for="enable_options_po"
string="Other Sign Options"/>
<div class="text-muted">
Enable to show other sign option
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
attrs="{'invisible': [
('show_digital_sign_po', '==', False)]}">
<div class="o_setting_left_pane">
<field name="confirm_sign_po"/>
</div>
<div class="o_setting_right_pane">
<label for="confirm_sign_po"
string="Check Sign
Before Confirmation"/>
<div class="text-muted">
Check Sign Before Confirmation
Purchase Order
</div>
</div>
</div>
</div>
</xpath>
<xpath expr="//div[@data-key='purchase']/div[
@name='matrix_setting_container']" position="after">
<h2>Company Stamp</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="show_company_stamp_po"/>
</div>
<div class="o_setting_right_pane">
<label for="show_company_stamp_po"
string="Show Company Stamp
in Purchase Orders?"/>
<div class="text-muted">
Enable to show company stamp inside purchase orders
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
<!--Inheriting view for inventory setting form -->
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">
res.config.settings.view.form.inherit.digital.signature
</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="10"/>
<field name="inherit_id" ref="stock.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@data-key='stock']/div[
@name='warehouse_setting_container']" position="after">
<h2>Digital Signature</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="show_digital_sign_inventory"/>
</div>
<div class="o_setting_right_pane">
<label for="show_digital_sign_inventory"
string="Show Digital Sign in Inventory?"/>
<div class="text-muted">
Enable to show digital signature inside inventory
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
attrs="{'invisible': [
('show_digital_sign_inventory', '==', False)]}">
<div class="o_setting_left_pane">
<field name="enable_options_inventory"/>
</div>
<div class="o_setting_right_pane">
<label for="enable_options_inventory"
string="Other Sign Options"/>
<div class="text-muted">
Enable to get Other Sign Option
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="show_sign_in_inventory"
attrs="{'invisible': [
('show_digital_sign_inventory', '==', False)]}">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<label for="sign_applicable"/>
<div class="text-muted">
Enable to show digital sign inside delivery slip,
inventory options or both
</div>
<div class="content-group">
<div class="mt16">
<field name="sign_applicable"
class="o_light_label"
widget="radio"/>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
attrs="{'invisible': [
('show_digital_sign_inventory', '==', False)]}">
<div class="o_setting_left_pane">
<field name="confirm_sign_inventory"/>
</div>
<div class="o_setting_right_pane">
<label for="confirm_sign_inventory"
string="Check Sign Before Confirmation"/>
<div class="text-muted">
Enable to Check Sign Before Confirmation
</div>
</div>
</div>
</div>
</xpath>
<xpath expr="//div[@data-key='stock']/div[
@name='warehouse_setting_container']" position="after">
<h2>Company Stamp</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="show_company_stamp_inventory"/>
</div>
<div class="o_setting_right_pane">
<label for="show_digital_sign_inventory"
string="Show Company Stamp in Inventory?"/>
<div class="text-muted">
Enable to show company stamp inside inventory
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="show_company_stamp_inventory"
attrs="{'invisible': [
('show_company_stamp_inventory', '==', False)]}">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<label for="company_stamp_applicable"/>
<div class="text-muted">
Enable to show company stamp inside delivery slip,
inventory options or both
</div>
<div class="content-group">
<div class="mt16">
<field name="company_stamp_applicable"
class="o_light_label"
widget="radio"/>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
<!-- View for account move settings form -->
<record id="res_config_settings_view_form_account"
model="ir.ui.view">
<field name="name">
res.config.settings.view.form.inherit.digital.signature
</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="10"/>
<field name="inherit_id" ref="account.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@data-key='account']/div[
@id='print_vendor_checks_setting_container']" position="after">
<h2>Digital Signature</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="show_digital_sign_invoice"/>
</div>
<div class="o_setting_right_pane">
<label for="show_digital_sign_invoice"
string="Show Digital Sign in
Customer Invoice?"/>
<div class="text-muted">
Enable to show digital sign inside customer invoice
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
attrs="{'invisible': [
('show_digital_sign_invoice', '==', False),
('show_digital_sign_bill', '==', False)]}">
<div class="o_setting_left_pane">
<field name="enable_options_invoice"/>
</div>
<div class="o_setting_right_pane">
<label for="enable_options_invoice"
string="Other Sign Options"/>
<div class="text-muted">
Enable to Get Other Sign Option
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
attrs="{'invisible': [
('show_digital_sign_invoice', '==', False),
('show_digital_sign_bill', '==', False)]}">
<div class="o_setting_left_pane">
<field name="confirm_sign_invoice"/>
</div>
<div class="o_setting_right_pane">
<label for="confirm_sign_invoice"
string="Check Sign Before Confirmation"/>
<div class="text-muted">
Enable to Check Sign Before Confirmation
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="show_digital_sign_bill"/>
</div>
<div class="o_setting_right_pane">
<label for="show_digital_sign_bill"
string="Show Digital Sign in Vendor Bill?"/>
<div class="text-muted">
Enable to show digital sign inside vendor bill
</div>
</div>
</div>
</div>
</xpath>
<xpath expr="//div[@data-key='account']/div[
@id='print_vendor_checks_setting_container']" position="after">
<h2>Company stamp</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="show_company_stamp_invoice"/>
</div>
<div class="o_setting_right_pane">
<label for="show_company_stamp_invoice"
string="Show Company Stamp in Invoicing?"/>
<div class="text-muted">
Enable to show company stamp inside invoicing
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="show_company_stamp_inventory"
attrs="{'invisible': [
('show_company_stamp_invoice', '==', False)]}">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<label for="company_stamp_applicable"/>
<div class="text-muted">
Enable to show company stamp inside customer invoice,
vendor bill
or both
</div>
<div class="content-group">
<div class="mt16">
<field name="company_stamp_applicable_invoicing"
class="o_light_label"
widget="radio"/>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

60
digital_signature/views/stock_picking_report.xml

@ -1,60 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Inheriting from 'stock.report_picking'. -->
<template id="stock_picking_report_inherit" inherit_id="stock.report_picking">
<xpath expr="//table" position="after">
<div id="signature" class="row justify-content-end">
<!-- Check if 'sign_applicable' is 'picking_operations' or 'both' for displaying the signature. -->
<t t-if="o.sign_applicable == 'picking_operations' or o.sign_applicable == 'both">
<div class="col-4">
<table class="table table-sm">
<!-- Check if 'digital_sign' exists before proceeding. -->
<div t-if="o.digital_sign" class="mt32 ml64 mr4" name="signature">
<!-- Display the digital signature as an image. -->
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 8cm; padding-top: 50px;"/>
</div>
<tr>
<td class="text-right" style="border: 1px solid white; background:none;">
<!-- Display 'sign_by', 'sign_on', and 'designation' fields if they exist. -->
<p t-if="o.sign_by" t-field="o.sign_by"/>
<p t-if="o.sign_on" t-field="o.sign_on"/>
<p t-if="o.designation" t-field="o.designation"/>
</td>
</tr>
</table>
</div>
</t>
</div>
</xpath>
</template>
<!-- Inheriting from 'stock.report_delivery_document'. -->
<template id="stock_delivery_slip_inherit" inherit_id="stock.report_delivery_document">
<xpath expr="//div[@name='signature']" position="before">
<div id="signature" class="row justify-content-end">
<!-- Check if 'sign_applicable' is 'delivery' or 'both' for displaying the signature. -->
<t t-if="o.sign_applicable == 'delivery' or o.sign_applicable == 'both'">
<div class="col-4">
<table class="table table-sm">
<!-- Check if 'digital_sign' exists before proceeding. -->
<div t-if="o.digital_sign" class="mt32 ml64 mr4" name="signature">
<!-- Display the digital signature as an image. -->
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 8cm; padding-top: 50px;"/>
</div>
<tr>
<td class="text-right" style="border: 1px solid white; background:none;">
<!-- Display 'sign_by', 'sign_on', and 'designation' fields if they exist. -->
<p t-if="o.sign_by" t-field="o.sign_by"/>
<p t-if="o.sign_on" t-field="o.sign_on"/>
<p t-if="o.designation" t-field="o.designation"/>
</td>
</tr>
</table>
</div>
</t>
</div>
</xpath>
</template>
</odoo>

416
digital_signature/views/stock_picking_templates.xml

@ -0,0 +1,416 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- Report template for picking operation -->
<template id="stock_report_picking_inherit_digital_signature"
inherit_id="stock.report_picking">
<xpath expr="//table" position="after">
<div id="signature" class="row justify-content-end">
<t t-if="o.company_id.position == 'left'">
<div>
<t t-if="o.company_id.stamp and
o.stamp_applicable == 'picking_stamp'
and o.sign_applicable == 'picking_operations'
and o.digital_sign and o.show_sign and o.show_stamp or
o.sign_applicable=='both' and o.stamp_applicable == 'both_stamp'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="left"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;"/>
<p t-field="o.sign_by"
style="margin-left:160px;"/>
<p t-field="o.sign_on"
style="margin-left:160px;"/>
<p t-field="o.designation"
style="margin-left:160px;"/>
</t>
</t>
<t t-elif="o.company_id.stamp and
o.stamp_applicable == 'picking_stamp' and
o.show_stamp or o.stamp_applicable == 'both_stamp'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="left"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;"/>
<p t-field="o.sign_by"
style="margin-left:160px;"/>
<p t-field="o.sign_on"
style="margin-left:160px;"/>
<p t-field="o.designation"
style="margin-left:160px;"/>
</t>
</t>
<t t-elif="o.digital_sign and
o.sign_applicable == 'picking_operations' and o.show_sign
or o.sign_applicable == 'both' and o.digital_sign ">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="left"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;"/>
<p t-field="o.sign_by"
style="margin-left:160px;"/>
<p t-field="o.sign_on"
style="margin-left:160px;"/>
<p t-field="o.designation"
style="margin-left:160px;"/>
</t>
</t>
</div>
</t>
<t t-if="o.company_id.position == 'right'">
<div>
<t t-if="o.company_id.stamp and
o.stamp_applicable == 'picking_stamp' and
o.sign_applicable == 'picking_operations' and
o.digital_sign and o.show_sign and o.show_stamp or
o.sign_applicable=='both' and
o.stamp_applicable == 'both_stamp'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="right"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;" class="right"/>
<p t-field="o.sign_by"
style="padding-top: 150px;margin-left: 550px;"/>
<p t-field="o.sign_on"
style="margin-left: 550px;"/>
<p t-field="o.designation"
style="margin-left: 550px;"/>
</t>
</t>
<t t-elif="o.company_id.stamp and
o.stamp_applicable == 'picking_stamp' and
o.show_stamp or o.stamp_applicable == 'both_stamp'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="right"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;" class="right"/>
<p t-field="o.sign_by"
style="padding-top: 150px;margin-left: 550px;"/>
<p t-field="o.sign_on"
style="margin-left: 550px;"/>
<p t-field="o.designation"
style="margin-left: 550px;"/>
</t>
</t>
<t t-elif="o.digital_sign and
o.sign_applicable == 'picking_operations' and
o.show_sign or o.sign_applicable == 'both'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="right"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;" class="right"/>
<p t-field="o.sign_by"
style="padding-top: 150px;margin-left: 550px;"/>
<p t-field="o.sign_on"
style="margin-left: 550px;"/>
<p t-field="o.designation"
style="margin-left: 550px;"/>
</t>
</t>
</div>
</t>
<t t-if="o.company_id.position == 'center'">
<div>
<t t-if="o.company_id.stamp and
o.stamp_applicable == 'picking_stamp' and
o.sign_applicable == 'picking_operations' and
o.digital_sign and o.show_sign and o.show_stamp or
o.sign_applicable=='both' and
o.stamp_applicable == 'both_stamp'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="center"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 50px;" class="center"/>
<p t-field="o.sign_by"
style="margin-left: 320px;
margin-top: -10px;"/>
<p t-field="o.sign_on"
style="margin-left: 320px;
margin-top: -10px;"/>
<p t-field="o.designation"
style="margin-left: 320px;
margin-top: -10px;"/>
</t>
</t>
<t t-elif="o.company_id.stamp and
o.stamp_applicable == 'picking_stamp' and
o.show_stamp or o.stamp_applicable == 'both_stamp'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="center"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 50px;" class="center"/>
<p t-field="o.sign_by"
style="margin-left: 320px;
margin-top: -10px;"/>
<p t-field="o.sign_on"
style="margin-left: 320px;
margin-top: -10px;"/>
<p t-field="o.designation"
style="margin-left: 320px;
margin-top: -10px;"/>
</t>
</t>
<t t-elif="o.digital_sign and
o.sign_applicable == 'picking_operations' and
o.show_sign or o.sign_applicable== 'both' ">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="center"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 50px;" class="center"/>
<p t-field="o.sign_by"
style="margin-left: 320px;
margin-top: -10px;"/>
<p t-field="o.sign_on"
style="margin-left: 320px;
margin-top: -10px;"/>
<p t-field="o.designation"
style="margin-left: 320px;
margin-top: -10px;"/>
</t>
</t>
</div>
</t>
</div>
</xpath>
</template>
<!-- Report template for delivery slip-->
<template id="stock_report_delivery_document_inherit_digital_signature"
inherit_id="stock.report_delivery_document">
<xpath expr="//div[@name='signature']" position="before">
<div id="signature" class="row justify-content-end">
<t t-if="o.company_id.position == 'left'">
<div>
<t t-if="o.company_id.stamp and
o.stamp_applicable == 'delivery_stamp' and
o.digital_sign and o.show_sign and
o.sign_applicable == 'delivery' or
o.sign_applicable=='both' and o.stamp_applicable == 'both_stamp'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="left"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;"/>
<p t-field="o.sign_by"
style="margin-left:160px;"/>
<p t-field="o.sign_on"
style="margin-left:160px;"/>
<p t-field="o.designation"
style="margin-left:160px;"/>
</t>
</t>
<t t-elif="o.company_id.stamp and
o.stamp_applicable == 'delivery_stamp' and
o.show_stamp or o.stamp_applicable == 'both_stamp'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="left"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;"/>
<p t-field="o.sign_by"
style="margin-left:160px;"/>
<p t-field="o.sign_on"
style="margin-left:160px;"/>
<p t-field="o.designation"
style="margin-left:160px;"/>
</t>
</t>
<t t-elif="o.digital_sign and o.sign_applicable == 'delivery'
and o.show_sign or o.sign_applicable == 'both'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="left"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;"/>
<p t-field="o.sign_by"
style="margin-left:160px;"/>
<p t-field="o.sign_on"
style="margin-left:160px;"/>
<p t-field="o.designation"
style="margin-left:160px;"/>
</t>
</t>
</div>
</t>
<t t-if="o.company_id.position == 'right'">
<div>
<t t-if="o.company_id.stamp and
o.stamp_applicable == 'delivery_stamp' and o.digital_sign
and o.show_sign and o.sign_applicable == 'delivery' and
o.show_stamp or o.sign_applicable=='both' and
o.stamp_applicable == 'both_stamp'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="right"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;" class="right"/>
<p t-field="o.sign_by"
style="padding-top: 150px;margin-left: 550px;"/>
<p t-field="o.sign_on"
style="margin-left: 550px;"/>
<p t-field="o.designation"
style="margin-left: 550px;"/>
</t>
</t>
<t t-elif="o.company_id.stamp and
o.stamp_applicable == 'delivery_stamp' and
o.show_stamp or o.stamp_applicable == 'both_stamp'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="right"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;" class="right"/>
<p t-field="o.sign_by"
style="padding-top: 150px;margin-left: 550px;"/>
<p t-field="o.sign_on"
style="margin-left: 550px;"/>
<p t-field="o.designation"
style="margin-left: 550px;"/>
</t>
</t>
<t t-elif="o.digital_sign and
o.sign_applicable == 'delivery' and
o.show_sign or o.sign_applicable == 'both'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="right"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 60px;" class="right"/>
<p t-field="o.sign_by"
style="padding-top: 150px;margin-left: 550px;"/>
<p t-field="o.sign_on"
style="margin-left: 550px;"/>
<p t-field="o.designation"
style="margin-left: 550px;"/>
</t>
</t>
</div>
</t>
<t t-if="o.company_id.position == 'center'">
<div>
<t t-if="o.company_id.stamp and
o.stamp_applicable == 'delivery_stamp' and
o.digital_sign and o.show_sign and
o.sign_applicable == 'delivery' and o.show_stamp or
o.sign_applicable=='both' and
o.stamp_applicable == 'both_stamp'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="center"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 50px;" class="center"/>
<p t-field="o.sign_by"
style="margin-left: 320px;
margin-top: -10px;"/>
<p t-field="o.sign_on"
style="margin-left: 320px;
margin-top: -10px;"/>
<p t-field="o.designation"
style="margin-left: 320px;
margin-top: -10px;"/>
</t>
</t>
<t t-elif="o.company_id.stamp and
o.stamp_applicable == 'delivery_stamp' and
o.show_stamp or o.stamp_applicable == 'both_stamp'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="center"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 50px;" class="center"/>
<p t-field="o.sign_by"
style="margin-left: 320px;
margin-top: -10px;"/>
<p t-field="o.sign_on"
style="margin-left: 320px;
margin-top: -10px;"/>
<p t-field="o.designation"
style="margin-left: 320px;
margin-top: -10px;"/>
</t>
</t>
<t t-elif="o.digital_sign and o.sign_applicable == 'delivery'
and o.show_sign or o.sign_applicable == 'both'">
<t t-if="o.show_stamp">
<img t-att-src="image_data_uri(o.company_id.stamp)"
class="center"/>
</t>
<t t-if="o.show_sign">
<img t-att-src="image_data_uri(o.digital_sign)"
style="max-height: 4cm; max-width: 6cm;
padding-top: 50px;" class="center"/>
<p t-field="o.sign_by"
style="margin-left: 320px;
margin-top: -10px;"/>
<p t-field="o.sign_on"
style="margin-left: 320px;
margin-top: -10px;"/>
<p t-field="o.designation"
style="margin-left: 320px;
margin-top: -10px;"/>
</t>
</t>
</div>
</t>
</div>
</xpath>
</template>
</odoo>

32
digital_signature/views/stock_picking_views.xml

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Inheriting view for stock picking form -->
<record id="view_picking_form" model="ir.ui.view">
<field name="name">stock.picking.view.form.inherit.digital.signature
</field>
<field name="model">stock.picking</field>
<field name="priority" eval="20"/>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='move_ids_without_package']"
position="after">
<group>
<field name="show_sign" invisible="1"/>
<field name="enable_option" invisible="1"/>
<field name="sign_applicable" invisible="1"/>
<group name="inventory_signature" string="Digital Signature"
attrs="{'invisible': [('show_sign','=',False)]}">
<field name="digital_sign"/>
<field name="sign_by"
attrs="{'invisible': [('enable_option','=',
False)]}"/>
<field name="designation"
attrs="{'invisible': [('enable_option','=',False)]}"/>
<field name="sign_on"
attrs="{'invisible': [('enable_option','=',False)]}"/>
</group>
</group>
</xpath>
</field>
</record>
</odoo>
Loading…
Cancel
Save