Browse Source

Oct 26 : [ADD] Initial Commit 'barcode_capturing_sale_purchase'

pull/298/merge
RisvanaCybro 2 years ago
parent
commit
977e94e173
  1. 47
      barcode_capturing_sale_purchase/README.rst
  2. 20
      barcode_capturing_sale_purchase/__init__.py
  3. 43
      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. 46
      barcode_capturing_sale_purchase/models/purchase_order.py
  7. 46
      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/m1.png
  42. BIN
      barcode_capturing_sale_purchase/static/description/assets/modules/m2.png
  43. BIN
      barcode_capturing_sale_purchase/static/description/assets/modules/m3.jpg
  44. BIN
      barcode_capturing_sale_purchase/static/description/assets/modules/m4.png
  45. BIN
      barcode_capturing_sale_purchase/static/description/assets/modules/m5.png
  46. BIN
      barcode_capturing_sale_purchase/static/description/assets/modules/m6.png
  47. BIN
      barcode_capturing_sale_purchase/static/description/assets/screenshots/hero.gif
  48. BIN
      barcode_capturing_sale_purchase/static/description/assets/screenshots/image_1.png
  49. BIN
      barcode_capturing_sale_purchase/static/description/assets/screenshots/image_2.png
  50. BIN
      barcode_capturing_sale_purchase/static/description/assets/screenshots/image_3.png
  51. BIN
      barcode_capturing_sale_purchase/static/description/assets/screenshots/image_4.png
  52. BIN
      barcode_capturing_sale_purchase/static/description/assets/screenshots/image_5.png
  53. BIN
      barcode_capturing_sale_purchase/static/description/banner.jpg
  54. BIN
      barcode_capturing_sale_purchase/static/description/cybro_logo.png
  55. BIN
      barcode_capturing_sale_purchase/static/description/icon.png
  56. 633
      barcode_capturing_sale_purchase/static/description/index.html
  57. BIN
      barcode_capturing_sale_purchase/static/src/audio/beep_scan.mp3
  58. 3
      barcode_capturing_sale_purchase/static/src/css/styles.css
  59. 107
      barcode_capturing_sale_purchase/static/src/js/purchase_barcode.js
  60. 11583
      barcode_capturing_sale_purchase/static/src/js/quagga.js
  61. 114
      barcode_capturing_sale_purchase/static/src/js/sale_barcode.js
  62. 12
      barcode_capturing_sale_purchase/views/assets.xml
  63. 16
      barcode_capturing_sale_purchase/views/purchase_order_views.xml
  64. 16
      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/license-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 configuration required
Company
=======
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
=======
GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3)
(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
Credits
=======
* Developer: (V14) 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

43
barcode_capturing_sale_purchase/__manifest__.py

@ -0,0 +1,43 @@
# -*- 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': '14.0.1.0.0',
'category': 'Extra Tools',
'summary': """Scan Barcode from Camera.""",
'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',
'views/assets.xml'
],
'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>
#### 20.10.2023
#### Version 14.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

46
barcode_capturing_sale_purchase/models/purchase_order.py

@ -0,0 +1,46 @@
# -*- 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):
"""Purchase order is inherited and barcode scanning function is written
to add the scanned product to order line."""
_inherit = 'purchase.order'
@api.model
def barcode_search(self, args):
"""Purchase Order line is created and product is added by checking the
barcode"""
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
purchase_order.order_line.create({
'order_id': purchase_order.id,
'product_id': product.id,
'product_uom_qty': 1
})

46
barcode_capturing_sale_purchase/models/sale_order.py

@ -0,0 +1,46 @@
# -*- 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):
"""Purchase order is inherited and barcode scanning function is written
to add the scanned product to order line."""
_inherit = 'sale.order'
@api.model
def barcode_search(self, args):
"""Sale Order line is created and product is added by checking
the barcode"""
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/m1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
barcode_capturing_sale_purchase/static/description/assets/modules/m3.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 333 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
barcode_capturing_sale_purchase/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
barcode_capturing_sale_purchase/static/description/cybro_logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
barcode_capturing_sale_purchase/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

633
barcode_capturing_sale_purchase/static/description/index.html

@ -0,0 +1,633 @@
<div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/>
<div>
<div style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<!-- APP HERO -->
<div class="container">
<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;">
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>
</div>
</div>
</div>
<!-- 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;">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;">'Scan Barcode' button 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;">Sales 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: bold;">
The label of barcode is printed by clicking the 'Print Label' 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;">A new button is added to Scan Barcode </h3>
<img src="assets/screenshots/image_3.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
When the barcode button is clicked a window with a video screen pops out. Show the barcode image on the camera to scan it.</h3>
<img src="assets/screenshots/image_4.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">
The scanned product will be added to the order line. </h3>
<img src="assets/screenshots/image_5.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/14.0/login_using_qr/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="./assets/modules/m1.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/14.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/m2.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/14.0/field_timepicker/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="./assets/modules/m3.jpg"></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/14.0/openai_product_tag_descrption/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="./assets/modules/m4.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/14.0/product_image_suggestion/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="./assets/modules/m5.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/14.0/use_by_default_filter/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-radius: 0px;"
src="./assets/modules/m6.png"></div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev"
style="width:35px; color:#000"> <span
class="carousel-control-prev-icon"><i
class="fa fa-chevron-left"
style="font-size:24px"></i></span>
</a> <a class="carousel-control-next" href="#demo1"
data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i
class="fa fa-chevron-right"
style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
<!-- END OF RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/star.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/cogs.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/wrench.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/lifebuoy.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/user.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/puzzle.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/update.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/consultation.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/training.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="assets/icons/license.png" class="img-responsive"
height="48px" width="48px">
</div>
<h6 class="text-center"
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</div>
<!--END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/corporate.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Our
Industries
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/trading-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/pos-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/education-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/manufacturing-black.png"
class="img-responsive mb-3" height="48px"
width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/ecom-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/service-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/restaurant-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="assets/icons/hotel-black.png"
class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</div>
<!--END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
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;
}

107
barcode_capturing_sale_purchase/static/src/js/purchase_barcode.js

@ -0,0 +1,107 @@
odoo.define('barcode_capturing_sale_purchase.purchase_barcode', function (require) {
var Widget= require('web.Widget');
var widgetRegistry = require('web.widget_registry');
var FieldManagerMixin = require('web.FieldManagerMixin');
const Dialog = require('web.Dialog');
var core = require('web.core');
const _t = core._t;
var rpc = require('web.rpc');
var beep = new Audio('/barcode_capturing_sale_purchase/static/src/audio/beep_scan.mp3');
var PurchaseOrderBarcode = Widget.extend(FieldManagerMixin, {
init: function (parent, model, context) {
this._super(parent);
FieldManagerMixin.init.call(this);
this._super.apply(this, arguments);
document.addEventListener('click', this._onClickGlobal.bind(this));
},
/**
* Function will be executed when the barcode icon is clicked from the purchase form view and camera is opened to scan the barcode
* through camera.
*
* @param {ev} it contains the target when mouse is clicked and it checks in function if barcode icon is clicked.
*/
_onClickGlobal(ev){
var self = this;
var target = ev.target;
if(target.id == 'purchase_barcode_btn'){
var video = document.createElement('video');
video.setAttribute('id', 'barcode_id')
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();
});
var order_id = self.__parentedParent.allFieldWidgets['purchase.order_1'][0].res_id
rpc.query({model: "purchase.order", method: "barcode_search", args: [[last_code, order_id]]
})
.then(function (data) {
if(data == true){
alert("Product with the scanned Barcode Not Found in the system")
return;
}
});
});
});
}
},
});
widgetRegistry.add(
'purchase_barcode', PurchaseOrderBarcode
);
});

11583
barcode_capturing_sale_purchase/static/src/js/quagga.js

File diff suppressed because one or more lines are too long

114
barcode_capturing_sale_purchase/static/src/js/sale_barcode.js

@ -0,0 +1,114 @@
odoo.define('barcode_capturing_sale_purchase.sale_barcode', function (require) {
var Widget= require('web.Widget');
var widgetRegistry = require('web.widget_registry');
var FieldManagerMixin = require('web.FieldManagerMixin');
const Dialog = require('web.Dialog');
var core = require('web.core');
const _t = core._t;
var rpc = require('web.rpc');
var beep = new Audio('/barcode_capturing_sale_purchase/static/src/audio/beep_scan.mp3');
var SaleOrderBarcode = Widget.extend(FieldManagerMixin, {
init: function (parent, model, context) {
this._super(parent);
FieldManagerMixin.init.call(this);
this._super.apply(this, arguments);
document.addEventListener('click', this._onClickGlobal.bind(this));
},
/**
* Function will be executed when the barcode icon is clicked from the sale form view and camera is opened to scan the barcode
* through camera.
*
* @param {ev} it contains the target when mouse is clicked and it checks in function if barcode icon is clicked.
*/
_onClickGlobal(ev){
var self = this;
var target = ev.target;
if(target.id == 'sale_barcode_btn'){
var video = document.createElement('video');
video.setAttribute('id', 'barcode_id')
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();
});
if(self.__parentedParent){
var key = Object.keys(self.__parentedParent.allFieldWidgets)[0];
order_id = self.__parentedParent.allFieldWidgets[key][0].res_id
}
else{
return;
}
rpc.query({model: "sale.order", method: "barcode_search", args: [[last_code, order_id]]
})
.then(function (data) {
if(data == true){
alert("Product with the scanned Barcode Not Found in the system")
return;
}
});
});
});
}
},
});
widgetRegistry.add(
'sale_barcode', SaleOrderBarcode
);
});

12
barcode_capturing_sale_purchase/views/assets.xml

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Added js files and css file to web.assets_backend-->
<template id="assets_backend" name="barcode_sale_purchase assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/barcode_capturing_sale_purchase/static/src/js/purchase_barcode.js"/>
<script type="text/javascript" src="/barcode_capturing_sale_purchase/static/src/js/sale_barcode.js"/>
<script type="text/javascript" src="/barcode_capturing_sale_purchase/static/src/js/quagga.js"/>
<link rel="stylesheet" href="/barcode_capturing_sale_purchase/static/src/css/styles.css"/>
</xpath>
</template>
</odoo>

16
barcode_capturing_sale_purchase/views/purchase_order_views.xml

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Barcode button is added in purchase form view and widget is created and js function is called from form button.-->
<record id="purchase_order_form" model="ir.ui.view">
<field name="name">purchase.order.view.form.inherit.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="//sheet" position="inside">
<widget name="purchase_barcode">Scan Barcode</widget>
<i class="fa fa-barcode" style="font-size:20px;color:black"/>
<button id="purchase_barcode_btn" style="margin-bottom: 5px;margin-left:5px">Scan Barcode</button>
</xpath>
</field>
</record>
</odoo>

16
barcode_capturing_sale_purchase/views/sale_order_views.xml

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Barcode button is added in sale form view and widget is created and js function is called from form button-->
<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="//sheet" position="inside">
<widget name="sale_barcode">Scan Barcode</widget>
<i class="fa fa-barcode" style="font-size:20px;color:black"/>
<button id="sale_barcode_btn" style="margin-bottom: 5px;margin-left:5px">Scan Barcode</button>
</xpath>
</field>
</record>
</odoo>
Loading…
Cancel
Save