Browse Source

May 30: [ADD] Initial Commit 'import_lots'

pull/320/head
RisvanaCybro 1 year ago
parent
commit
4302797e36
  1. 38
      import_lots/README.rst
  2. 24
      import_lots/__init__.py
  3. 45
      import_lots/__manifest__.py
  4. 22
      import_lots/controllers/__init__.py
  5. 57
      import_lots/controllers/import_lots.py
  6. 6
      import_lots/doc/RELEASE_NOTES.md
  7. 22
      import_lots/models/__init__.py
  8. 46
      import_lots/models/stock_move.py
  9. 2
      import_lots/security/ir.model.access.csv
  10. BIN
      import_lots/static/description/assets/icons/check.png
  11. BIN
      import_lots/static/description/assets/icons/chevron.png
  12. BIN
      import_lots/static/description/assets/icons/cogs.png
  13. BIN
      import_lots/static/description/assets/icons/consultation.png
  14. BIN
      import_lots/static/description/assets/icons/ecom-black.png
  15. BIN
      import_lots/static/description/assets/icons/education-black.png
  16. BIN
      import_lots/static/description/assets/icons/hotel-black.png
  17. BIN
      import_lots/static/description/assets/icons/license.png
  18. BIN
      import_lots/static/description/assets/icons/lifebuoy.png
  19. BIN
      import_lots/static/description/assets/icons/manufacturing-black.png
  20. BIN
      import_lots/static/description/assets/icons/pos-black.png
  21. BIN
      import_lots/static/description/assets/icons/puzzle.png
  22. BIN
      import_lots/static/description/assets/icons/restaurant-black.png
  23. BIN
      import_lots/static/description/assets/icons/service-black.png
  24. BIN
      import_lots/static/description/assets/icons/trading-black.png
  25. BIN
      import_lots/static/description/assets/icons/training.png
  26. BIN
      import_lots/static/description/assets/icons/update.png
  27. BIN
      import_lots/static/description/assets/icons/user.png
  28. BIN
      import_lots/static/description/assets/icons/wrench.png
  29. BIN
      import_lots/static/description/assets/misc/categories.png
  30. BIN
      import_lots/static/description/assets/misc/check-box.png
  31. BIN
      import_lots/static/description/assets/misc/compass.png
  32. BIN
      import_lots/static/description/assets/misc/corporate.png
  33. BIN
      import_lots/static/description/assets/misc/customer-support.png
  34. BIN
      import_lots/static/description/assets/misc/cybrosys-logo.png
  35. BIN
      import_lots/static/description/assets/misc/features.png
  36. BIN
      import_lots/static/description/assets/misc/logo.png
  37. BIN
      import_lots/static/description/assets/misc/pictures.png
  38. BIN
      import_lots/static/description/assets/misc/pie-chart.png
  39. BIN
      import_lots/static/description/assets/misc/right-arrow.png
  40. BIN
      import_lots/static/description/assets/misc/star.png
  41. BIN
      import_lots/static/description/assets/misc/support.png
  42. BIN
      import_lots/static/description/assets/misc/whatsapp.png
  43. BIN
      import_lots/static/description/assets/modules/sm01.png
  44. BIN
      import_lots/static/description/assets/modules/sm02.jpg
  45. BIN
      import_lots/static/description/assets/modules/sm03.png
  46. BIN
      import_lots/static/description/assets/modules/sm04.png
  47. BIN
      import_lots/static/description/assets/modules/sm05.jpg
  48. BIN
      import_lots/static/description/assets/screenshots/hero.gif
  49. BIN
      import_lots/static/description/assets/screenshots/scrn_001.png
  50. BIN
      import_lots/static/description/assets/screenshots/scrn_002.png
  51. BIN
      import_lots/static/description/assets/screenshots/scrn_003.png
  52. BIN
      import_lots/static/description/assets/screenshots/scrn_004.png
  53. BIN
      import_lots/static/description/assets/screenshots/scrn_005.png
  54. BIN
      import_lots/static/description/assets/screenshots/scrn_006.png
  55. BIN
      import_lots/static/description/assets/screenshots/scrn_007.png
  56. BIN
      import_lots/static/description/assets/screenshots/scrn_008.png
  57. BIN
      import_lots/static/description/assets/screenshots/scrn_009.png
  58. BIN
      import_lots/static/description/assets/screenshots/scrn_010.png
  59. BIN
      import_lots/static/description/assets/screenshots/scrn_011.png
  60. BIN
      import_lots/static/description/assets/screenshots/scrn_012.png
  61. BIN
      import_lots/static/description/banner.png
  62. BIN
      import_lots/static/description/icon.png
  63. 574
      import_lots/static/description/index.html
  64. 40
      import_lots/static/src/import_lots.js
  65. 14
      import_lots/views/stock_move_views.xml
  66. 22
      import_lots/wizard/__init__.py
  67. 121
      import_lots/wizard/lots_attachment.py
  68. 27
      import_lots/wizard/lots_attachment_view_form.xml

38
import_lots/README.rst

@ -0,0 +1,38 @@
.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg
:target: https://www.gnu.org/licenses/lgpl.html
:alt: License: LGPL-3
Import Lot from Excel
=====================
Module Helps to Import Lots From Excel Sheet to Stock Move Line.
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
Credits
-------
Developer: (V16) Sabeel B
Contact: odoo@cybrosys.com
Contacts
--------
* Mail Contact : odoo@cybrosys.com
* Website : https://cybrosys.com
Bug Tracker
-----------
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
Maintainer
==========
.. image:: https://cybrosys.com/images/logo.png
:target: https://cybrosys.com
This module is maintained by Cybrosys Technologies.
For support and more information, please visit `Our Website <https://cybrosys.com/>`__
Further information
===================
HTML Description: `<static/description/index.html>`__

24
import_lots/__init__.py

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

45
import_lots/__manifest__.py

@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Technologies(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
{
'name': 'Import Lot from Excel',
'version': '16.0.1.0.0',
'category': 'Warehouse',
'summary': 'Import lots and add while validating a purchase '
'order picking',
'description': 'Module helps to import lots and add to products in'
'purchase order line while validating a stock_picking ',
'author': 'Cybrosys Techno Solution',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solution',
'website': 'https://www.cybrosys.com',
'depends': ['stock', 'purchase'],
'data': [
'security/ir.model.access.csv',
'views/stock_move_views.xml',
'wizard/lots_attachment_view_form.xml'
],
'images': ['static/description/banner.png'],
'license': 'LGPL-3',
'installable': True,
'auto-install': False,
'application': False,
}

22
import_lots/controllers/__init__.py

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

57
import_lots/controllers/import_lots.py

@ -0,0 +1,57 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Technologies(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
import base64
import io
import openpyxl
from odoo import http
class ImportLots(http.Controller):
"""Class to handle excel download"""
@http.route('/download/excel', type='http', auth="user")
def download_excel_file(self):
"""Download sample Excel sheet"""
# Create a new workbook
wb = openpyxl.Workbook()
ws = wb.active
# Add headers
ws.append(['Lots', 'Product', 'Quantity'])
# Add sample data
data = [
('0000021', '[FURN_8220] Four Person Desk', 2.00),
('0000022', '[FURN_8220] Four Person Desk', 3.00),
('0000023', '[FURN_8900] Drawer Black', 6.00),
]
for row in data:
ws.append(row)
# Save the workbook to a BytesIO buffer
buffer = io.BytesIO()
wb.save(buffer)
buffer.seek(0)
# Convert the buffer content to base64
file_content_base64 = base64.b64encode(buffer.getvalue())
return http.send_file(io.BytesIO(base64.b64decode(file_content_base64)),
filename='my_excel_file.xlsx',
as_attachment=True,
mimetype='application/vnd.'
'openxmlformats-officedocument.'
'spreadsheetml.sheet')

6
import_lots/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <import_lots>
#### 22.05.2024
#### Version 16.0.1.0.0
#### ADD
- Initial commit for Import Lot from Excel

22
import_lots/models/__init__.py

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

46
import_lots/models/stock_move.py

@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Technologies(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from odoo import fields, models, _
class StockMove(models.Model):
"""Inheriting stock_move to add additional new field and function"""
_inherit = 'stock.move'
attachment = fields.Binary(string="Upload")
def action_return_lot_wizard(self):
"""Return lot_attachment Wizard"""
return {
'name': _('Import Lots'),
'type': 'ir.actions.act_window',
'view_mode': 'form',
'views': [(False, 'form')],
'res_model': 'lot.attachment',
'target': 'new',
'context': {
'default_product_id': self.product_id.id,
'default_demanded_quantity': self.product_uom_qty,
'default_picking_id': self.picking_id.id,
'default_move_id': self.id
},
}

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

@ -0,0 +1,2 @@
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_lot_attachment,access.lot.attachment,model_lot_attachment,base.group_user,1,1,1,1
1 id name model_id/id group_id/id perm_read perm_write perm_create perm_unlink
2 access_lot_attachment access.lot.attachment model_lot_attachment base.group_user 1 1 1 1

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
import_lots/static/description/assets/modules/sm01.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
import_lots/static/description/assets/modules/sm02.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
import_lots/static/description/assets/modules/sm03.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

BIN
import_lots/static/description/assets/modules/sm04.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
import_lots/static/description/assets/modules/sm05.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

BIN
import_lots/static/description/assets/screenshots/scrn_001.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
import_lots/static/description/assets/screenshots/scrn_002.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

BIN
import_lots/static/description/assets/screenshots/scrn_003.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
import_lots/static/description/assets/screenshots/scrn_004.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
import_lots/static/description/assets/screenshots/scrn_005.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
import_lots/static/description/assets/screenshots/scrn_006.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
import_lots/static/description/assets/screenshots/scrn_007.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

BIN
import_lots/static/description/assets/screenshots/scrn_008.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
import_lots/static/description/assets/screenshots/scrn_009.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

BIN
import_lots/static/description/assets/screenshots/scrn_010.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
import_lots/static/description/assets/screenshots/scrn_011.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
import_lots/static/description/assets/screenshots/scrn_012.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

BIN
import_lots/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
import_lots/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

574
import_lots/static/description/index.html

@ -0,0 +1,574 @@
<div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42" style="width: 42px; height: 42px;" />
<div>
<div
style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div
style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Import Lot from Excel</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">Module Allows to Import Lots in Picking-Receipt and Transfer from Excel File.</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif" class="img-responsive"
style="width: 100%; margin-left: auto; margin-right: auto;" />
</div>
</div>
</div>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/compass.png" />
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Explore This
Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn
more about this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36" />
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
features of this
module</span>
</div>
<img src="assets/misc/right-arrow.png" width="36" height="36" />
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span
style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
screenshots of 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">
By automating the import of lots, this module eliminates
the need for manual entry, reducing the risk of errors and
improving overall productivity. Users can quickly
import lots in bulk from vendors during incoming shipments and
for internal transfer processes, saving valuable time and streamlining operations.
With bulk import capabilities tailored specifically for lots,
users can efficiently manage inventory without the hassle of manual data entry.
This allows them to focus on more critical tasks, confident that lot management is handled efficiently.
By reducing the time spent on manual data entry and ensuring accuracy in lot tracking,
businesses can improve their overall efficiency and productivity in warehouse management.
</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;">Import Lots From Excel Sheet.</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;">Total Quantity Validation.</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;">Same Lot Name Validation.</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;">Supports Community and Enterprise.</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;"> Enable 'Lots & Serial Numbers'.</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Enable lots option under inventory from res_config_settings.</p>
<img src="assets/screenshots/scrn_001.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;"> Change Product Tracking.</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Choose/Create a product with tracking by lots.</p>
<img src="assets/screenshots/scrn_002.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;"> Create a Picking.</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
Create a new picking for the corresponding product with the operation type set to 'Receipt'.</p>
<img src="assets/screenshots/scrn_003.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;"> Click on The Button to Add Lots.</h3>
<img src="assets/screenshots/scrn_004.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;"> Click on The Button 'Import Lots from Sheet'.</h3>
<img src="assets/screenshots/scrn_005.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;"> Click on 'Download Sample File' to Download a Sample Excel Sheet.</h3>
<img src="assets/screenshots/scrn_006.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;"> Downloaded Sample File.</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">
User can edit/refer the sample sheet to import the lot(Use the same headers).</p>
<img src="assets/screenshots/scrn_007.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;">Upload an Excel Sheet.</h3>
<img src="assets/screenshots/scrn_008.png" class="img-thumbnail">
<img src="assets/screenshots/scrn_009.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;">Click on 'Import' to Import Lots.</h3>
<img src="assets/screenshots/scrn_010.png" class="img-thumbnail">
<img src="assets/screenshots/scrn_011.png" class="img-thumbnail">
<img src="assets/screenshots/scrn_012.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/advanced_chatter_view/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/sm01.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/hide_chatter/#" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/sm02.jpg">
</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/email_id_validation/#" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/sm03.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/activity_reminder/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/sm04.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/autosuggestion_in_discuss/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="assets/modules/sm05.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 -->

40
import_lots/static/src/import_lots.js

@ -0,0 +1,40 @@
/** @odoo-module **/
import { Dialog } from '@web/core/dialog/dialog';
import { useService } from "@web/core/utils/hooks";
import { registry } from "@web/core/registry";
import { Component, useRef, xml, onMounted } from "@odoo/owl";
import { GenerateDialog } from "@stock/widgets/generate_serial";
import { patch } from "@web/core/utils/patch";
class ImportLots extends Component {
static template = xml`<button class="btn btn-link" t-if="this.isVisible" t-on-click="openDialog">Import Lots from Sheet</button>`;
setup(){
this.action = useService("action");
this.orm = useService("orm");
}
get isVisible() {
return this.props.record.data.state !== 'done';
}
openDialog(ev){
this.action.doAction({
type: 'ir.actions.act_window',
name: 'Import Lots',
res_model: 'lot.attachment',
view_mode: 'form',
views: [
[false, 'form']
],
target: 'new',
context:{
default_product_id: this.props.record.data.product_id[0],
default_demanded_quantity: this.props.record.data.product_uom_qty,
default_picking_id: this.props.record.data.picking_id[0],
default_move_id: this.props.record.data.move_line_ids._config.context.default_move_id
}
})
}
}
registry.category("view_widgets").add("import_lot", {component: ImportLots});

14
import_lots/views/stock_move_views.xml

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Inherited stock_move for add a button -->
<record id="view_stock_move_operations" model="ir.ui.view">
<field name="name">stock.move.view.form.inherit.import.lot</field>
<field name="model">stock.move</field>
<field name="inherit_id" ref="stock.view_stock_move_operations"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='move_line_ids']" position="before">
<button string="Import Lots from Sheet" class="oe_highlight" type="object" name="action_return_lot_wizard"/>
</xpath>
</field>
</record>
</odoo>

22
import_lots/wizard/__init__.py

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

121
import_lots/wizard/lots_attachment.py

@ -0,0 +1,121 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Technologies(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from odoo import fields, models
from odoo import _
from odoo.exceptions import UserError
import openpyxl
import base64
from io import BytesIO
class LotsAttachment(models.TransientModel):
"""Class for lots wizard"""
_name = 'lot.attachment'
_description = "Lots Attachment"
picking_id = fields.Many2one('stock.picking',
string="Stock Picking",
help="Parent picking")
product_id = fields.Many2one('product.product',
string="Product",
help="Current product")
demanded_quantity = fields.Float(string="Quantity",
help="Product quantity demanded")
type = fields.Selection(string="Lots Type",
selection=[('lot', 'Lot'), ('serial', 'Serial')],
help="Choose a lot/serial")
move_id = fields.Many2one('stock.move', string="Stock Move",
help="Relation to stock_move")
attachment = fields.Binary(string="Upload",
help="Attach your file to import")
def import_lot(self):
"""Importing lots"""
current_move_id = self.env['stock.move'].browse(self.move_id.id)
wb = openpyxl.load_workbook(
filename=BytesIO(base64.b64decode(self.attachment)), read_only=True) \
if self.attachment else ""
ws = wb.active
# Check if product exists in the sheet
product_found = any(
record[1] == current_move_id.product_id.display_name for record in
ws.iter_rows(min_row=2, values_only=True))
if not product_found:
raise UserError(
_('The product "%s" does not exist in the sheet.') %
current_move_id.product_id.display_name)
# Check if lot name already exists in move line ids
if current_move_id.move_line_ids and any(record[0] in set(
current_move_id.move_line_ids.mapped('lot_name')) for record in
ws.iter_rows(min_row=2,
values_only=True)):
raise UserError(
_('This Lot name already exists in the move line.'))
# Calculate total sheet quantity for the product
total_sheet_quantity = sum(
record[2] for record in ws.iter_rows(min_row=2, values_only=True) if
record[1] == current_move_id.product_id.display_name)
# Check if total sheet quantity exceeds demand quantity of the product
if total_sheet_quantity > current_move_id.product_uom_qty:
raise UserError(
_('Total quantity in the sheet exceeds the demand quantity of '
'the product. Please adjust the quantities in the sheet.'))
# Prepare move line values to be written
vals_list = []
for record in ws.iter_rows(min_row=2, values_only=True):
lot_name, product_name, quantity = record
if product_name == current_move_id.product_id.display_name:
vals_list.append((0, 0, {
'lot_name': lot_name,
'qty_done': min(quantity, current_move_id.product_qty),
'move_id': current_move_id.id,
}))
# Write move line values
current_move_id.move_line_ids.unlink()
current_move_id.write({'move_line_ids': vals_list})
if self.picking_id.show_reserved:
view = self.env.ref('stock.view_stock_move_operations')
else:
view = self.env.ref('stock.view_stock_move_nosuggest_operations')
return {
'name': _('Detailed Operations'),
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'stock.move',
'views': [(view.id, 'form')],
'view_id': self.env.ref('stock.view_stock_move_operations').id,
'target': 'new',
'res_id': self.move_id.id,
'context': {
'default_move_line_ids': current_move_id.move_line_ids.ids,
'show_lots_text': True
},
}
def download_excel_file(self):
"""For downloading a sample excel file"""
return {
'type': 'ir.actions.act_url',
'url': '/download/excel',
'target': 'self',
'file_name': 'my_excel_file.xlsx'
}

27
import_lots/wizard/lots_attachment_view_form.xml

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Message Wizard View-->
<record id="lot_attachment_view_form" model="ir.ui.view">
<field name="name">lot.attachment.view.form</field>
<field name="model">lot.attachment</field>
<field name="arch" type="xml">
<form>
<group>
<field name="product_id" invisible="1"/>
<field name="demanded_quantity" invisible="1"/>
<field name="picking_id" invisible="1"/>
<field name="move_id" invisible="1"/>
<field name="attachment"/>
</group>
<footer>
<button name="download_excel_file" string="Download Sample File"
type="object" class="btn-primary"/>
<button string="Import" class="oe_highlight"
name="import_lot" type="object"/>
<button string="Cancel" class="oe_highlight" special="cancel"/>
</footer>
</form>
</field>
</record>
</odoo>
Loading…
Cancel
Save