Browse Source

Jan 11 : [ADD] Initial Commit 'barcode_capturing_sale_purchase'

pull/301/head
RisvanaCybro 1 year ago
parent
commit
6dcca28770
  1. 47
      barcode_capturing_sale_purchase/README.rst
  2. 20
      barcode_capturing_sale_purchase/__init__.py
  3. 52
      barcode_capturing_sale_purchase/__manifest__.py
  4. 6
      barcode_capturing_sale_purchase/doc/RELEASE_NOTES.md
  5. 21
      barcode_capturing_sale_purchase/models/__init__.py
  6. 55
      barcode_capturing_sale_purchase/models/purchase_order.py
  7. 47
      barcode_capturing_sale_purchase/models/sale_order.py
  8. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/check.png
  9. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/chevron.png
  10. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/cogs.png
  11. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/consultation.png
  12. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/ecom-black.png
  13. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/education-black.png
  14. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/hotel-black.png
  15. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/license.png
  16. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/lifebuoy.png
  17. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/manufacturing-black.png
  18. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/pos-black.png
  19. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/puzzle.png
  20. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/restaurant-black.png
  21. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/service-black.png
  22. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/trading-black.png
  23. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/training.png
  24. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/update.png
  25. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/user.png
  26. BIN
      barcode_capturing_sale_purchase/static/description/assets/icons/wrench.png
  27. BIN
      barcode_capturing_sale_purchase/static/description/assets/misc/categories.png
  28. BIN
      barcode_capturing_sale_purchase/static/description/assets/misc/check-box.png
  29. BIN
      barcode_capturing_sale_purchase/static/description/assets/misc/compass.png
  30. BIN
      barcode_capturing_sale_purchase/static/description/assets/misc/corporate.png
  31. BIN
      barcode_capturing_sale_purchase/static/description/assets/misc/customer-support.png
  32. BIN
      barcode_capturing_sale_purchase/static/description/assets/misc/cybrosys-logo.png
  33. BIN
      barcode_capturing_sale_purchase/static/description/assets/misc/features.png
  34. BIN
      barcode_capturing_sale_purchase/static/description/assets/misc/logo.png
  35. BIN
      barcode_capturing_sale_purchase/static/description/assets/misc/pictures.png
  36. BIN
      barcode_capturing_sale_purchase/static/description/assets/misc/pie-chart.png
  37. BIN
      barcode_capturing_sale_purchase/static/description/assets/misc/right-arrow.png
  38. BIN
      barcode_capturing_sale_purchase/static/description/assets/misc/star.png
  39. BIN
      barcode_capturing_sale_purchase/static/description/assets/misc/support.png
  40. BIN
      barcode_capturing_sale_purchase/static/description/assets/misc/whatsapp.png
  41. BIN
      barcode_capturing_sale_purchase/static/description/assets/modules/1.png
  42. BIN
      barcode_capturing_sale_purchase/static/description/assets/modules/2.png
  43. BIN
      barcode_capturing_sale_purchase/static/description/assets/modules/3.png
  44. BIN
      barcode_capturing_sale_purchase/static/description/assets/modules/4.png
  45. BIN
      barcode_capturing_sale_purchase/static/description/assets/modules/5.png
  46. BIN
      barcode_capturing_sale_purchase/static/description/assets/modules/6.gif
  47. BIN
      barcode_capturing_sale_purchase/static/description/assets/screenshots/barcodde_162.png
  48. BIN
      barcode_capturing_sale_purchase/static/description/assets/screenshots/barcode_16.png
  49. BIN
      barcode_capturing_sale_purchase/static/description/assets/screenshots/barcode_163.png
  50. BIN
      barcode_capturing_sale_purchase/static/description/assets/screenshots/hero.gif
  51. BIN
      barcode_capturing_sale_purchase/static/description/assets/screenshots/image_1.png
  52. BIN
      barcode_capturing_sale_purchase/static/description/assets/screenshots/image_2.png
  53. BIN
      barcode_capturing_sale_purchase/static/description/banner.jpg
  54. BIN
      barcode_capturing_sale_purchase/static/description/icon.png
  55. 552
      barcode_capturing_sale_purchase/static/description/index.html
  56. BIN
      barcode_capturing_sale_purchase/static/src/audio/beep_scan.mp3
  57. 3
      barcode_capturing_sale_purchase/static/src/css/styles.css
  58. 110
      barcode_capturing_sale_purchase/static/src/js/purchase_barcode.js
  59. 11584
      barcode_capturing_sale_purchase/static/src/js/quagga.js
  60. 11
      barcode_capturing_sale_purchase/static/src/js/registry_barcode_purchase.js
  61. 11
      barcode_capturing_sale_purchase/static/src/js/registry_barcode_sale.js
  62. 111
      barcode_capturing_sale_purchase/static/src/js/sale_barcode.js
  63. 19
      barcode_capturing_sale_purchase/views/purchase_order_views.xml
  64. 19
      barcode_capturing_sale_purchase/views/sale_order_views.xml

47
barcode_capturing_sale_purchase/README.rst

@ -0,0 +1,47 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
Scan Product Barcode for Sale & Purchase
========================================
This module captures barcode of products through system camera and add product
to order line.
Configuration
=============
* No additional configurations are required
Company
=======
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
=======
GNU LESSER GENERAL PUBLIC LICENSE, Version 3 (AGPLv3)
(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
Credits
=======
* Developer: (V16) RAHUL C K, Contact: odoo@cybrosys.com
Contacts
========
* Mail Contact : odoo@cybrosys.com
* Website : https://cybrosys.com
Bug Tracker
===========
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
Maintainer
==========
.. image:: https://cybrosys.com/images/logo.png
:target: https://cybrosys.com
This module is maintained by Cybrosys Technologies.
For support and more information, please visit https://www.cybrosys.com.
Further information
===================
HTML Description: `<static/description/index.html>`__

20
barcode_capturing_sale_purchase/__init__.py

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

52
barcode_capturing_sale_purchase/__manifest__.py

@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2023-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Rahul CK(<https://www.cybrosys.com>)
# you can modify it under the terms of the GNU AFFERO GENERAL
# PUBLIC LICENSE (AGPL v3), Version 3.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC
# LICENSE (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{
'name': "Scan Product Barcode for Sale & Purchase",
'version': '16.0.1.0.0',
'category': 'Extra Tools',
'summary': """Scan Barcode from Camera in sale and purchase orders.""",
'description': """Products can be added to sale or purchase orders by
scanning barcode of products through system camera. Products will be
automatically added to order line once the barcode is identified.""",
'author': "Cybrosys Techno Solutions",
'company': "Cybrosys Techno Solutions",
'maintainer': "Cybrosys Techno Solutions",
'website': "https://www.cybrosys.com",
'depends': ['sale_management', 'purchase'],
'data': [
'views/sale_order_views.xml',
'views/purchase_order_views.xml'
],
'assets': {
'web.assets_backend': [
'barcode_capturing_sale_purchase/static/src/js/registry_barcode_sale.js',
'barcode_capturing_sale_purchase/static/src/js/registry_barcode_purchase.js',
'barcode_capturing_sale_purchase/static/src/js/sale_barcode.js',
'barcode_capturing_sale_purchase/static/src/js/purchase_barcode.js',
'barcode_capturing_sale_purchase/static/src/js/quagga.js',
'barcode_capturing_sale_purchase/static/src/css/styles.css'
],
},
'images': ['static/description/banner.jpg'],
'license': 'AGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

6
barcode_capturing_sale_purchase/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <barcode_capturing_sale_purchase>
#### 29.09.2023
#### Version 16.0.1.0.0
#### ADD
- Initial commit for Scan Product Barcode for Sale & Purchase

21
barcode_capturing_sale_purchase/models/__init__.py

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

55
barcode_capturing_sale_purchase/models/purchase_order.py

@ -0,0 +1,55 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2023-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Rahul CK(<https://www.cybrosys.com>)
# you can modify it under the terms of the GNU AFFERO GENERAL
# PUBLIC LICENSE (AGPL v3), Version 3.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC
# LICENSE (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from odoo import api, models
class PurchaseOrder(models.Model):
"""Module is inherited and function is created to create a purchase
order line with the scanned barcode of product"""
_inherit = 'purchase.order'
@api.model
def barcode_search(self, args):
"""Purchase Order line is created and product is added by checking
the barcode. args contains the barcode of product and purchase order
id"""
product = self.env['product.product'].search([('barcode', '=',
args[0])])
if not product:
return True
else:
purchase_order = self.browse(args[1])
if purchase_order.order_line:
for rec in purchase_order.order_line:
if rec.product_id == product:
rec.product_qty += 1
return {
'type': 'ir.actions.client',
'tag': 'reload',
}
purchase_order.order_line.create({
'order_id': purchase_order.id,
'product_id': product.id,
'product_uom_qty': 1
})
return {
'type': 'ir.actions.client',
'tag': 'reload',
}

47
barcode_capturing_sale_purchase/models/sale_order.py

@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2023-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Rahul CK(<https://www.cybrosys.com>)
# you can modify it under the terms of the GNU AFFERO GENERAL
# PUBLIC LICENSE (AGPL v3), Version 3.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC
# LICENSE (AGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from odoo import api, models
class SaleOrder(models.Model):
"""Module is inherited and function is created to create a sale
order line with the scanned barcode of product"""
_inherit = 'sale.order'
@api.model
def barcode_search(self, args):
"""Sale Order line is created and product is added by checking
the barcode. args contains the barcode of product and sale order id."""
product = self.env['product.product'].search([('barcode', '=',
args[0])])
if not product:
return True
else:
sale_order = self.browse(args[1])
if sale_order.order_line:
for rec in sale_order.order_line:
if rec.product_id == product:
rec.product_uom_qty += 1
return
sale_order.order_line.create({
'order_id': sale_order.id,
'product_id': product.id,
'product_uom_qty': 1
})

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
barcode_capturing_sale_purchase/static/description/assets/modules/6.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1006 KiB

BIN
barcode_capturing_sale_purchase/static/description/assets/screenshots/barcodde_162.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 667 KiB

BIN
barcode_capturing_sale_purchase/static/description/assets/screenshots/barcode_16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

BIN
barcode_capturing_sale_purchase/static/description/assets/screenshots/barcode_163.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

BIN
barcode_capturing_sale_purchase/static/description/assets/screenshots/image_1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

BIN
barcode_capturing_sale_purchase/static/description/assets/screenshots/image_2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
barcode_capturing_sale_purchase/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
barcode_capturing_sale_purchase/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

552
barcode_capturing_sale_purchase/static/description/index.html

@ -0,0 +1,552 @@
<div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42" style="width: 42px; height: 42px;"/>
<div>
<div style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">Scan Product Barcode for Sale & Purchase</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">Scan Barcode of Products Through Camera in Sale and Purchase.</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif"
style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 45%; left: 12%; right: auto;"/>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Explore This
Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn
more about this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
features of this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
screenshots for this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pie-chart.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Overview
</h2>
</div>
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">
This module captures barcode of products through system camera and add product to order line.
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/features.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Features
</h2>
</div>
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 col-md-6">
<div class="d-flex align-items-center" style="margin-top: 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;">Barcode Capturing in Sale and Purchase</span>
</div>
<div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Products can be effortlessly added to the order line by scanning barcode.</span>
</div>
<div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Barcode can be scanned through camera without the help of barcode scanner.</span>
</div>
<div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Barcode of product can be set in product form.</span>
</div>
<div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px">
<img src="assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Barcode icon will be available in sale and purchase order.</span>
</div>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/pictures.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Screenshots
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Product Form</h3>
<img src="assets/screenshots/image_1.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: 400;">
The label of barcode is printed by clicking the 'PRINT LABELS' button.</h3>
<img src="assets/screenshots/image_2.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Sale Order</h3>
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: 400;">
A new button is added to scan barcode.</h3>
<img src="assets/screenshots/barcode_16.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: 400;">
When the barcode button is clicked a window with a video screen pops out. Show the barcode image on the camera to scan it. After that reload the page</h3>
<img src="assets/screenshots/barcodde_162.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: 400;">
The scanned product will be added to the order line.</h3>
<img src="assets/screenshots/barcode_163.png" class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/categories.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Related
Products
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/hide_menu_user/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/1.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/sales_credit_limit/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/2.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/inventory_barcode_scanning/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/3.png">
</div>
</a>
</div>
</div>
<div class="carousel-item active" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/sale_discount_total/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/4.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/hr_payroll_community/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/5.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/16.0/ohrms_core/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/6.gif">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="width:35px; color:#000"> <span
class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span>
</a> <a class="carousel-control-next" href="#demo1" data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
<!-- END OF RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</div>
<!-- END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our
Industries
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/education-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/service-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</div>
<!-- END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48" width="48" style="width: 42px; height: 42px;"/>
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help? Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52" width="52" style="width: 52px; height: 52px;"/>
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">+91 86068
27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>
<!-- END OF SUPPORT -->

BIN
barcode_capturing_sale_purchase/static/src/audio/beep_scan.mp3

Binary file not shown.

3
barcode_capturing_sale_purchase/static/src/css/styles.css

@ -0,0 +1,3 @@
.btn-close{
display:none;
}

110
barcode_capturing_sale_purchase/static/src/js/purchase_barcode.js

@ -0,0 +1,110 @@
/** @odoo-module **/
import { FormRenderer } from "@web/views/form/form_renderer";
const Dialog = require('web.Dialog');
import { useService } from "@web/core/utils/hooks";
import rpc from 'web.rpc';
import core from 'web.core';
const _t = core._t;
var beep = new Audio('/barcode_capturing_sale_purchase/static/src/audio/beep_scan.mp3');
export class ComPurchaseOrderRender extends FormRenderer {
setup() {
this.notification = useService("notification");
super.setup();
}
// Onclick of the barcode button this function is executed which creates a new window with video capture using
// quagga function, which will capture barcode shown to it.
// The result of barcode will be added to the corresponding purchase order.
async PurchaseBarcodeDialog(){
var self = this;
var load_params = self.props.record.__bm_load_params__;
if(load_params.res_id){
var order_id = load_params.res_id;
}
else{
if(load_params.res_ids[0]){
var order_id = load_params.res_ids[0];
}
else{
this.notification.add(this.env._t("Create or Save Purchase Order to start barcode scan"), {
title: this.env._t("Create/save Order"),
type: "danger",
});
return
}
}
var video = document.createElement('video');
video.setAttribute('id', 'barcode_id')
await navigator.mediaDevices.getUserMedia({ video: true })
.then(function (stream) {
video.srcObject = stream;
video.play();
const dialog = new Dialog(this, {
title: 'Barcode Scanner',
buttons:
[{
text: _t('close'), classes: 'btn-primary', close: true, click: function () {
Quagga.stop();
dialog.close();
var tracks = video.srcObject.getTracks();
tracks.forEach(function(track) {
track.stop();
});
}
}],
size: 'medium',
$content: video,
});
dialog.open();
Quagga.init({
inputStream : {
name : "Live",
type : "LiveStream",
constraints: {
video: {
facingMode: {
exact: "environment"
}
}
},
numOfWorkers : navigator.hardwareConcurrency,
target : video
},
decoder: {
readers : ['code_128_reader']
}
},
function(err){
if(err){
console.log(err);
return
}
Quagga.start();
}
);
var last_result=[];
Quagga.onDetected(function(result){
var last_code = result.codeResult.code;
last_result.push(last_code);
last_result=[];
beep.play();
Quagga.stop();
dialog.close();
var tracks = video.srcObject.getTracks();
tracks.forEach(function(track) {
track.stop();
});
rpc.query({model: "purchase.order", method: "barcode_search", args: [[last_code, order_id]]
})
.then(function (data) {
if(data == true){
self.notification.add(self.env._t("Product with the scanned Barcode Not Found in the system"), {
title: self.env._t("Product Not Found!"),
type: "danger",
});
}
});
});
});
}
}

11584
barcode_capturing_sale_purchase/static/src/js/quagga.js

File diff suppressed because one or more lines are too long

11
barcode_capturing_sale_purchase/static/src/js/registry_barcode_purchase.js

@ -0,0 +1,11 @@
/** @odoo-module **/
import { formView } from '@web/views/form/form_view';
import { registry } from "@web/core/registry";
import { ComPurchaseOrderRender } from '@barcode_capturing_sale_purchase/js/purchase_barcode';
//JsClassBarcodePurchase constant is added to views registry
export const JsClassBarcodePurchase = {
...formView,
Renderer: ComPurchaseOrderRender,
};
registry.category("views").add("purchase_order_barcode", JsClassBarcodePurchase);

11
barcode_capturing_sale_purchase/static/src/js/registry_barcode_sale.js

@ -0,0 +1,11 @@
/** @odoo-module **/
import { formView } from '@web/views/form/form_view';
import { registry } from "@web/core/registry";
import { ComSaleOrderRender } from '@barcode_capturing_sale_purchase/js/sale_barcode';
//JsClassBarcodeSale constant is added to views registry
export const JsClassBarcodeSale = {
...formView,
Renderer: ComSaleOrderRender,
};
registry.category("views").add("sale_order_barcode", JsClassBarcodeSale);

111
barcode_capturing_sale_purchase/static/src/js/sale_barcode.js

@ -0,0 +1,111 @@
/** @odoo-module **/
import { FormRenderer } from "@web/views/form/form_renderer";
const Dialog = require('web.Dialog');
import { useService } from "@web/core/utils/hooks";
import core from 'web.core';
const _t = core._t;
import rpc from 'web.rpc';
var beep = new Audio('/barcode_capturing_sale_purchase/static/src/audio/beep_scan.mp3');
export class ComSaleOrderRender extends FormRenderer {
setup() {
this.notification = useService("notification");
super.setup();
}
// Onclick of the barcode button this function is executed which creates a new window with video capture using
// quagga function, which will capture barcode shown to it.
// The result of barcode will be added to the corresponding purchase order.
async SaleBarcodeDialog(){
var self = this;
var load_params = this.props.record.__bm_load_params__;
if(load_params.res_id){
var order_id = load_params.res_id;
}
else{
if(load_params.res_ids[0]){
var order_id = load_params.res_ids[0];
}
else{
this.notification.add(this.env._t("Create or Save Sale Order to start barcode scan"), {
title: this.env._t("Create/save Order"),
type: "danger",
});
return
}
}
var video = document.createElement('video');
video.setAttribute('id', 'barcode_id')
await navigator.mediaDevices.getUserMedia({ video: true })
.then(function (stream) {
video.srcObject = stream;
video.play();
const dialog = new Dialog(this, {
title: 'Barcode Scanner',
buttons:
[{
text: _t('close'), classes: 'btn-primary', close: true, click: function () {
Quagga.stop();
dialog.close();
var tracks = video.srcObject.getTracks();
tracks.forEach(function(track) {
track.stop();
});
}
}],
size: 'medium',
$content: video,
});
dialog.open();
Quagga.init({
inputStream : {
name : "Live",
type : "LiveStream",
constraints: {
video: {
facingMode: {
exact: "environment"
}
}
},
numOfWorkers : navigator.hardwareConcurrency,
target : video
},
decoder: {
readers : ['code_128_reader']
}
},
function(err){
if(err){
console.log(err);
return
}
Quagga.start();
}
);
var last_result=[];
Quagga.onDetected(function(result){
var last_code = result.codeResult.code;
last_result.push(last_code);
last_result=[];
beep.play();
Quagga.stop();
dialog.close();
var tracks = video.srcObject.getTracks();
tracks.forEach(function(track) {
track.stop();
});
rpc.query({model: "sale.order", method: "barcode_search", args: [[last_code, order_id]]
})
.then(function (data) {
if(data == true){
self.notification.add(self.env._t("Product with the scanned Barcode Not Found in the system"), {
title: self.env._t("Product Not Found!"),
type: "danger",
});
}
});
});
});
}
}

19
barcode_capturing_sale_purchase/views/purchase_order_views.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Inherited purchase_order to add a barcode button in this model and on click of the button a js function is executed-->
<record id="purchase_order_form" model="ir.ui.view">
<field name="name">purchase.order.inherit.view.form.barcode.capturing.sale.purchase</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_form"/>
<field name="arch" type="xml">
<xpath expr="//form" position="attributes">
<attribute name="js_class">purchase_order_barcode</attribute>
</xpath>
<xpath expr="//sheet" position="inside">
<a href="#" t-on-click="PurchaseBarcodeDialog" data-hotkey="x">
<i class="fa fa-barcode" style="font-size:32px;color:black"/><b>SCAN BARCODE</b>
</a>
</xpath>
</field>
</record>
</odoo>

19
barcode_capturing_sale_purchase/views/sale_order_views.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Inherited sale_order to add a barcode button in this model and on click of the button a js function is executed-->
<record id="view_order_form" model="ir.ui.view">
<field name="name">sale.order.view.form.inherit.barcode.capturing.sale.purchase</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//form" position="attributes">
<attribute name="js_class">sale_order_barcode</attribute>
</xpath>
<xpath expr="//sheet" position="inside">
<a href="#" t-on-click="SaleBarcodeDialog" data-hotkey="x">
<i class="fa fa-barcode" style="font-size:32px;color:black"/> <b>SCAN BARCODE</b>
</a>
</xpath>
</field>
</record>
</odoo>
Loading…
Cancel
Save