diff --git a/cw_sale/README.rst b/cw_sale/README.rst
new file mode 100644
index 000000000..5f44e3455
--- /dev/null
+++ b/cw_sale/README.rst
@@ -0,0 +1,41 @@
+Catch Weight - Sale
+===================
+* Catch Weight in Sales Module for Odoo 16
+
+Installation
+============
+ - www.odoo.com/documentation/16.0/setup/install.html
+ - Install our custom addon
+
+License
+-------
+General Public License, Version 3 (LGPL v3).
+(https://www.odoo.com/documentation/user/16.0/legal/licenses/licenses.html)
+
+Company
+-------
+* 'Cybrosys Techno Solutions `__
+
+Credits
+-------
+* Developer:
+(V16) Swaroop N P
+
+Contacts
+--------
+* Mail Contact : odoo@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
+==========
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit https://www.cybrosys.com
+
+Further information
+===================
+HTML Description: ``__
+
diff --git a/cw_sale/__init__.py b/cw_sale/__init__.py
new file mode 100644
index 000000000..06685e992
--- /dev/null
+++ b/cw_sale/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies().
+#
+# 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 .
+#
+#############################################################################
+from . import models
+
diff --git a/cw_sale/__manifest__.py b/cw_sale/__manifest__.py
new file mode 100644
index 000000000..ed0c6e360
--- /dev/null
+++ b/cw_sale/__manifest__.py
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies().
+#
+# 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 .
+#
+#############################################################################
+
+{
+ 'name': "Catch Weight - Sale",
+ 'description': """
+ Enable Catch Weight Management System in Sales Module
+ """,
+ 'summary': """Enable Catch Weight Management System in Sales Module""",
+ 'version': '16.0.1.0.0',
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'category': 'Extra Tools',
+ 'depends': ['sale_management', 'sale_stock', 'cw_stock', 'uom'],
+ 'data': [
+ 'views/sale_order_line_view.xml',
+ ],
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'application': False,
+ 'auto_install': False,
+
+}
diff --git a/cw_sale/doc/RELEASE_NOTES.md b/cw_sale/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..613d7b0a6
--- /dev/null
+++ b/cw_sale/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 18.11.2022
+#### Version 16.0.1.0.0
+#### ADD
+- Initial commit for Odoo 16 Catch Weight Sales
diff --git a/cw_sale/models/__init__.py b/cw_sale/models/__init__.py
new file mode 100644
index 000000000..f3d85aaf9
--- /dev/null
+++ b/cw_sale/models/__init__.py
@@ -0,0 +1,21 @@
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies().
+#
+# 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 .
+#
+#############################################################################
+
+from . import sale_order_line
diff --git a/cw_sale/models/sale_order_line.py b/cw_sale/models/sale_order_line.py
new file mode 100644
index 000000000..fbcdb928f
--- /dev/null
+++ b/cw_sale/models/sale_order_line.py
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies().
+#
+# 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 .
+#
+#############################################################################
+
+from odoo import models, fields, api
+
+
+class SaleOrderLine(models.Model):
+ _inherit = 'sale.order.line'
+
+ cw_qty = fields.Float(string='CW-Qty', digits=(16, 4),
+ help="Catch weight quantity")
+ category_id = fields.Many2one('uom.category',
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom', string='CW-Uom',
+ domain="[('category_id', '=', category_id)]",
+ help="Catch weight unit of measure",
+ store=True, )
+ cw_delivered = fields.Float(string='CW-Delivered', readonly=True,
+ compute='_cal_cw_computed', digits=(16, 4))
+ cw_invoiced = fields.Float(string='CW-Invoiced', readonly=True,
+ digits=(16, 4),
+ compute='_cal_cw_computed')
+
+ is_cw_product = fields.Boolean(string='Is CW Product',
+ compute="_compute_hide", default=False)
+
+ @api.depends('product_id')
+ def _compute_hide(self):
+ for rec in self:
+ rec.is_cw_product = bool(rec.product_id.catch_weigth_ok)
+
+ @api.onchange('product_id', 'product_uom_qty')
+ def onchange_product_id_inherit(self):
+ """Change product and product quantity
+ Calculating the cw unit of measure ,cw quantity and price"""
+ for rec in self:
+ if rec.product_id.catch_weigth_ok:
+ rec.price_unit = rec.product_id.list_price
+ rec.cw_uom_id = rec.product_id.cw_uom_id.id
+ if rec.cw_uom_id == rec.product_uom:
+ rec.cw_qty = rec.product_uom_qty
+ else:
+ rec.cw_qty = rec.product_uom_qty * rec.product_id.average_cw_qty
+
+ @api.onchange('cw_qty')
+ def cw_cty_changed(self):
+ """Calculating product qty based on cw qty"""
+ for rec in self:
+ if rec.product_id.catch_weigth_ok and rec.product_id.average_cw_qty != 0:
+ if rec.cw_uom_id == rec.product_uom:
+ rec.product_uom_qty = rec.cw_qty
+ else:
+ rec.product_uom_qty = rec.cw_qty / rec.product_id.average_cw_qty
+
+ def _cal_cw_computed(self):
+ """Calculating cw delivered and invoiced qty
+ Calculating cw uom """
+ for rec in self:
+ rec.update({
+ 'cw_delivered': rec.qty_delivered * rec.product_id.average_cw_qty,
+ 'cw_uom_id': rec.product_id.cw_uom_id,
+ 'cw_invoiced': rec.qty_invoiced * rec.product_id.average_cw_qty
+ })
diff --git a/cw_sale/static/description/assets/icons/check.png b/cw_sale/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/cw_sale/static/description/assets/icons/check.png differ
diff --git a/cw_sale/static/description/assets/icons/chevron.png b/cw_sale/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/cw_sale/static/description/assets/icons/chevron.png differ
diff --git a/cw_sale/static/description/assets/icons/cogs.png b/cw_sale/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/cw_sale/static/description/assets/icons/cogs.png differ
diff --git a/cw_sale/static/description/assets/icons/consultation.png b/cw_sale/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/cw_sale/static/description/assets/icons/consultation.png differ
diff --git a/cw_sale/static/description/assets/icons/ecom-black.png b/cw_sale/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/cw_sale/static/description/assets/icons/ecom-black.png differ
diff --git a/cw_sale/static/description/assets/icons/education-black.png b/cw_sale/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/cw_sale/static/description/assets/icons/education-black.png differ
diff --git a/cw_sale/static/description/assets/icons/hotel-black.png b/cw_sale/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/cw_sale/static/description/assets/icons/hotel-black.png differ
diff --git a/cw_sale/static/description/assets/icons/license.png b/cw_sale/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/cw_sale/static/description/assets/icons/license.png differ
diff --git a/cw_sale/static/description/assets/icons/lifebuoy.png b/cw_sale/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/cw_sale/static/description/assets/icons/lifebuoy.png differ
diff --git a/cw_sale/static/description/assets/icons/manufacturing-black.png b/cw_sale/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/cw_sale/static/description/assets/icons/manufacturing-black.png differ
diff --git a/cw_sale/static/description/assets/icons/pos-black.png b/cw_sale/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/cw_sale/static/description/assets/icons/pos-black.png differ
diff --git a/cw_sale/static/description/assets/icons/puzzle.png b/cw_sale/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/cw_sale/static/description/assets/icons/puzzle.png differ
diff --git a/cw_sale/static/description/assets/icons/restaurant-black.png b/cw_sale/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/cw_sale/static/description/assets/icons/restaurant-black.png differ
diff --git a/cw_sale/static/description/assets/icons/service-black.png b/cw_sale/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/cw_sale/static/description/assets/icons/service-black.png differ
diff --git a/cw_sale/static/description/assets/icons/trading-black.png b/cw_sale/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/cw_sale/static/description/assets/icons/trading-black.png differ
diff --git a/cw_sale/static/description/assets/icons/training.png b/cw_sale/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/cw_sale/static/description/assets/icons/training.png differ
diff --git a/cw_sale/static/description/assets/icons/update.png b/cw_sale/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/cw_sale/static/description/assets/icons/update.png differ
diff --git a/cw_sale/static/description/assets/icons/user.png b/cw_sale/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/cw_sale/static/description/assets/icons/user.png differ
diff --git a/cw_sale/static/description/assets/icons/wrench.png b/cw_sale/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/cw_sale/static/description/assets/icons/wrench.png differ
diff --git a/cw_sale/static/description/assets/misc/categories.png b/cw_sale/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/cw_sale/static/description/assets/misc/categories.png differ
diff --git a/cw_sale/static/description/assets/misc/check-box.png b/cw_sale/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/cw_sale/static/description/assets/misc/check-box.png differ
diff --git a/cw_sale/static/description/assets/misc/compass.png b/cw_sale/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/cw_sale/static/description/assets/misc/compass.png differ
diff --git a/cw_sale/static/description/assets/misc/corporate.png b/cw_sale/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/cw_sale/static/description/assets/misc/corporate.png differ
diff --git a/cw_sale/static/description/assets/misc/customer-support.png b/cw_sale/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/cw_sale/static/description/assets/misc/customer-support.png differ
diff --git a/cw_sale/static/description/assets/misc/cybrosys-logo.png b/cw_sale/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/cw_sale/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/cw_sale/static/description/assets/misc/features.png b/cw_sale/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/cw_sale/static/description/assets/misc/features.png differ
diff --git a/cw_sale/static/description/assets/misc/logo.png b/cw_sale/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/cw_sale/static/description/assets/misc/logo.png differ
diff --git a/cw_sale/static/description/assets/misc/pictures.png b/cw_sale/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/cw_sale/static/description/assets/misc/pictures.png differ
diff --git a/cw_sale/static/description/assets/misc/pie-chart.png b/cw_sale/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/cw_sale/static/description/assets/misc/pie-chart.png differ
diff --git a/cw_sale/static/description/assets/misc/right-arrow.png b/cw_sale/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/cw_sale/static/description/assets/misc/right-arrow.png differ
diff --git a/cw_sale/static/description/assets/misc/star.png b/cw_sale/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/cw_sale/static/description/assets/misc/star.png differ
diff --git a/cw_sale/static/description/assets/misc/support.png b/cw_sale/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/cw_sale/static/description/assets/misc/support.png differ
diff --git a/cw_sale/static/description/assets/misc/whatsapp.png b/cw_sale/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/cw_sale/static/description/assets/misc/whatsapp.png differ
diff --git a/cw_sale/static/description/assets/modules/1.png b/cw_sale/static/description/assets/modules/1.png
new file mode 100644
index 000000000..5238bdeab
Binary files /dev/null and b/cw_sale/static/description/assets/modules/1.png differ
diff --git a/cw_sale/static/description/assets/modules/2.png b/cw_sale/static/description/assets/modules/2.png
new file mode 100644
index 000000000..1ae7cfe3b
Binary files /dev/null and b/cw_sale/static/description/assets/modules/2.png differ
diff --git a/cw_sale/static/description/assets/modules/3.png b/cw_sale/static/description/assets/modules/3.png
new file mode 100644
index 000000000..3c3ff1afb
Binary files /dev/null and b/cw_sale/static/description/assets/modules/3.png differ
diff --git a/cw_sale/static/description/assets/modules/4.png b/cw_sale/static/description/assets/modules/4.png
new file mode 100644
index 000000000..3fae4631e
Binary files /dev/null and b/cw_sale/static/description/assets/modules/4.png differ
diff --git a/cw_sale/static/description/assets/modules/5.gif b/cw_sale/static/description/assets/modules/5.gif
new file mode 100644
index 000000000..2a5f8e659
Binary files /dev/null and b/cw_sale/static/description/assets/modules/5.gif differ
diff --git a/cw_sale/static/description/assets/modules/6.png b/cw_sale/static/description/assets/modules/6.png
new file mode 100644
index 000000000..7f2815273
Binary files /dev/null and b/cw_sale/static/description/assets/modules/6.png differ
diff --git a/cw_sale/static/description/assets/screenshots/hero.gif b/cw_sale/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..bc0d33878
Binary files /dev/null and b/cw_sale/static/description/assets/screenshots/hero.gif differ
diff --git a/cw_sale/static/description/assets/screenshots/screenshot-1.png b/cw_sale/static/description/assets/screenshots/screenshot-1.png
new file mode 100644
index 000000000..ad88ae358
Binary files /dev/null and b/cw_sale/static/description/assets/screenshots/screenshot-1.png differ
diff --git a/cw_sale/static/description/assets/screenshots/screenshot-2.png b/cw_sale/static/description/assets/screenshots/screenshot-2.png
new file mode 100644
index 000000000..690b9387e
Binary files /dev/null and b/cw_sale/static/description/assets/screenshots/screenshot-2.png differ
diff --git a/cw_sale/static/description/assets/screenshots/screenshot-3.png b/cw_sale/static/description/assets/screenshots/screenshot-3.png
new file mode 100644
index 000000000..d7e7eadf1
Binary files /dev/null and b/cw_sale/static/description/assets/screenshots/screenshot-3.png differ
diff --git a/cw_sale/static/description/assets/screenshots/screenshot-4.png b/cw_sale/static/description/assets/screenshots/screenshot-4.png
new file mode 100644
index 000000000..88f117b43
Binary files /dev/null and b/cw_sale/static/description/assets/screenshots/screenshot-4.png differ
diff --git a/cw_sale/static/description/assets/screenshots/screenshot-5.png b/cw_sale/static/description/assets/screenshots/screenshot-5.png
new file mode 100644
index 000000000..b57e22da3
Binary files /dev/null and b/cw_sale/static/description/assets/screenshots/screenshot-5.png differ
diff --git a/cw_sale/static/description/banner.png b/cw_sale/static/description/banner.png
new file mode 100644
index 000000000..6ecf714b2
Binary files /dev/null and b/cw_sale/static/description/banner.png differ
diff --git a/cw_sale/static/description/icon.png b/cw_sale/static/description/icon.png
new file mode 100644
index 000000000..fc52536e8
Binary files /dev/null and b/cw_sale/static/description/icon.png differ
diff --git a/cw_sale/static/description/index.html b/cw_sale/static/description/index.html
new file mode 100644
index 000000000..520cb44f7
--- /dev/null
+++ b/cw_sale/static/description/index.html
@@ -0,0 +1,572 @@
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+ Odoo.sh
+
+
+
+
+
+
+
Catch Weight Management : Sale
+
Enables The Catch Weight System In The Sale Module.
+ This module brings the catch weight system in the Sales module.We can We can enable the catch weight for each product, Sale and invoice products based on catch weight.
+
+
+
+
+
+
+
+
+
+
Features
+
+
+
+
+
+
+
+ Enable catch weight for each product.
+
+
+
+
+
+
+ Catch Weight In Sale Order
+
+
+
+
+
+
+
+
+ Catch Weight In Stock Picking
+
+
+
+
+
+
+ Products Can Be Invoiced Based On Catch Weight.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Screenshots
+
+
+
+
+
+
+
Enable Catch Weight On products
+
We can click on the check box "Catch Weight Product" to Enable The Catch weight on the selected product.
+
+
+
+
+
Setting Catch Weight UOM
+
We can set the Catch Weight UOM on each products and also set the sale price and cost based on UOM or Catch weight-UOM
+
\ No newline at end of file
diff --git a/cw_sale/views/sale_order_line_view.xml b/cw_sale/views/sale_order_line_view.xml
new file mode 100644
index 000000000..45f4a81fc
--- /dev/null
+++ b/cw_sale/views/sale_order_line_view.xml
@@ -0,0 +1,29 @@
+
+
+
+
+ sale.order.view.inherit1
+ sale.order
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cw_stock/README.rst b/cw_stock/README.rst
new file mode 100644
index 000000000..fd346ca0f
--- /dev/null
+++ b/cw_stock/README.rst
@@ -0,0 +1,41 @@
+Catch Weight - Stock V16
+========================
+* Catch Weight in Inventory Module for Odoo 16
+
+Installation
+============
+ - www.odoo.com/documentation/16.0/setup/install.html
+ - Install our custom addon
+
+License
+-------
+General Public License, Version 3 (LGPL v3).
+(https://www.odoo.com/documentation/user/16.0/legal/licenses/licenses.html)
+
+Company
+-------
+* 'Cybrosys Techno Solutions `__
+
+Credits
+-------
+* Developer:
+(V16) Swaroop N P
+
+Contacts
+--------
+* Mail Contact : odoo@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
+==========
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit https://www.cybrosys.com
+
+Further information
+===================
+HTML Description: ``__
+
diff --git a/cw_stock/__init__.py b/cw_stock/__init__.py
new file mode 100644
index 000000000..75c5e1fe0
--- /dev/null
+++ b/cw_stock/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies().
+#
+# 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 .
+#
+#############################################################################
+
+from . import models
+
diff --git a/cw_stock/__manifest__.py b/cw_stock/__manifest__.py
new file mode 100644
index 000000000..843a62608
--- /dev/null
+++ b/cw_stock/__manifest__.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies().
+#
+# 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 .
+#
+#############################################################################
+
+{
+ 'name': "Catch Weight - Stock",
+ 'description': """
+ Enable Catch Weight Management System in Inventory Module
+ """,
+ 'summary': """Catch Weight Management In Inventory Module""",
+ 'version': '16.0.1.0.0',
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'category': 'Extra Tools',
+ 'depends': ['base', 'stock', 'stock_account', 'product', 'uom'],
+ 'data': [
+ 'views/product_template_views.xml',
+ 'views/stock_scrap_views.xml',
+ 'views/stock_picking_views.xml',
+ 'views/stock_return_views.xml',
+ 'views/stock_move_line_views.xml',
+ 'views/stock_valuation_layer_views.xml',
+ ],
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'application': False,
+ 'auto_install': False,
+
+}
diff --git a/cw_stock/doc/RELEASE_NOTES.md b/cw_stock/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..ba667cefc
--- /dev/null
+++ b/cw_stock/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 18.11.2022
+#### Version 16.0.1.0.0
+#### ADD
+- Initial commit for Odoo 16 Catch Weight Stock
diff --git a/cw_stock/models/__init__.py b/cw_stock/models/__init__.py
new file mode 100644
index 000000000..224918995
--- /dev/null
+++ b/cw_stock/models/__init__.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies().
+#
+# 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 .
+#
+#############################################################################
+
+
+from . import product_template
+from . import stock_move
+from . import stock_move_line
+from . import stock_scrap
+from . import stock_valuation_layer
+from . import stock_picking_return_line
+
diff --git a/cw_stock/models/product_template.py b/cw_stock/models/product_template.py
new file mode 100644
index 000000000..db95c2ce8
--- /dev/null
+++ b/cw_stock/models/product_template.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies().
+#
+# 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 .
+#
+#############################################################################
+
+from odoo import models, fields, api
+
+
+class ProductTemplate(models.Model):
+ _inherit = 'product.template'
+
+ apply_cw = fields.Boolean()
+ category_id = fields.Many2one('uom.category',
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom', string='CW-Uom', stored=True,
+ help="Catch weight unit of measure",
+ domain="[('category_id', '=', category_id)]")
+ catch_weigth_ok = fields.Boolean(default=False,
+ string="Catch Weight Product")
+ average_cw_qty = fields.Float(string='Catch Weight', digits=(16, 4),
+ help="Catch weight quantity")
+
+ @api.onchange('cw_uom_id', 'uom_id')
+ def compute_weight(self):
+ """Calculating cw qty if uom and cw uom category is same"""
+ if self.uom_id.category_id == self.cw_uom_id.category_id:
+ self.average_cw_qty = self.cw_uom_id.factor / self.uom_id.factor
+ else:
+ self.average_cw_qty = 1.00
diff --git a/cw_stock/models/stock_move.py b/cw_stock/models/stock_move.py
new file mode 100644
index 000000000..7edad8a8e
--- /dev/null
+++ b/cw_stock/models/stock_move.py
@@ -0,0 +1,101 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies().
+#
+# 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 .
+#
+#############################################################################
+
+from odoo import models, fields, api
+
+
+class StockMove(models.Model):
+ _inherit = 'stock.move'
+
+ category_id = fields.Many2one('uom.category',
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom', string='CW-Uom',
+ help="Catch weight unit of measure",
+ domain="[('category_id', '=', category_id)]")
+ cw_demand = fields.Float(string='CW-Demand', default=1.0, required=True,
+ digits=(16, 4),
+ compute='_cal_cw_demand')
+ cw_reserved = fields.Float(string='CW-Reserved', compute='_cal_cw_demand',
+ digits=(16, 4))
+ cw_done = fields.Float(string='CW-Done', digits=(16, 4))
+ cw_hide = fields.Boolean(string='Is CW Product',
+ compute="_compute_hide", default=False)
+
+ @api.depends('product_id')
+ def _compute_hide(self):
+ for rec in self:
+ rec.cw_hide = bool(rec.product_id.catch_weigth_ok)
+
+ @api.onchange('product_id', 'product_uom_qty')
+ def product_id_changed(self):
+ """Calculating cw demand and cw uom"""
+ for rec in self:
+ rec.cw_demand = rec.product_uom_qty * rec.product_id.average_cw_qty
+ if rec.product_id.catch_weigth_ok:
+ rec.cw_uom_id = rec.product_id.cw_uom_id
+ else:
+ rec.cw_uom_id = None
+
+ @api.onchange('cw_done')
+ def cw_done_changed(self):
+ """Calculating done qty"""
+ for rec in self:
+ if rec.product_id.catch_weigth_ok and rec.product_id.average_cw_qty != 0:
+ rec.quantity_done = rec.cw_done / rec.product_id.average_cw_qty
+
+ @api.onchange('quantity_done')
+ def cw_cty_changed(self):
+ """Calculating cw done"""
+ for rec in self:
+ if rec.product_id.catch_weigth_ok:
+ rec.cw_done = rec.quantity_done * rec.product_id.average_cw_qty
+
+ @api.onchange('cw_demand')
+ def cw_demand_changed(self):
+ """Calculating cw qty"""
+ for rec in self:
+ if rec.product_id.catch_weigth_ok and rec.product_id.average_cw_qty != 0:
+ if rec.cw_uom_id == rec.product_uom:
+ rec.product_uom_qty = rec.cw_demand
+ else:
+ rec.product_uom_qty = rec.cw_demand / rec.product_id.average_cw_qty
+
+ @api.onchange('product_uom_qty')
+ def product_uom_qty_changed(self):
+ """Calculating cw demand"""
+ for rec in self:
+ if rec.product_id.catch_weigth_ok and rec.product_id.average_cw_qty != 0:
+ if rec.cw_uom_id == rec.product_uom:
+ rec.cw_demand = rec.product_uom_qty
+ else:
+ rec.product_uom_qty = rec.cw_demand / rec.product_id.average_cw_qty
+
+ def _cal_cw_demand(self):
+ """Calculating cw demand,cw uom, cw reserved and cw done"""
+ for rec in self:
+ rec.update(
+ {
+ 'cw_demand': rec.product_uom_qty * rec.product_id.average_cw_qty,
+ 'cw_uom_id': rec.product_id.cw_uom_id,
+ 'cw_done': rec.quantity_done * rec.product_id.average_cw_qty,
+ 'cw_reserved': rec.product_uom_qty * rec.product_id.average_cw_qty,
+ })
diff --git a/cw_stock/models/stock_move_line.py b/cw_stock/models/stock_move_line.py
new file mode 100644
index 000000000..8406f120b
--- /dev/null
+++ b/cw_stock/models/stock_move_line.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies().
+#
+# 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 .
+#
+#############################################################################
+
+from odoo import models, fields, api
+
+
+class StockMoveLine(models.Model):
+ _inherit = 'stock.move.line'
+
+ cw_qty_done = fields.Float(string='CW-Qty Done',
+ compute='_compute_cw_qty_done', default=0,
+ digits=(16, 4))
+ category_id = fields.Many2one('uom.category',
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom', string='CW-Uom',
+ domain="[('category_id', '=', category_id)]",
+ compute='_compute_cw_uom_id')
+ cw_hide = fields.Boolean(string='Is CW Product',
+ compute="_compute_hide", default=False)
+
+ @api.depends('product_id')
+ def _compute_cw_uom_id(self):
+ """Calculating cw uom"""
+ for rec in self:
+ if rec.product_id.catch_weigth_ok:
+ rec.cw_uom_id = rec.product_id.cw_uom_id
+ else:
+ rec.cw_uom_id = None
+
+ @api.depends('product_id')
+ def _compute_hide(self):
+ for rec in self:
+ rec.cw_hide = bool(rec.product_id.catch_weigth_ok)
+
+ @api.depends('product_id', 'qty_done')
+ def _compute_cw_qty_done(self):
+ """Calculating cw qty done"""
+ for rec in self:
+ if rec.product_id.catch_weigth_ok:
+ rec.cw_qty_done = rec.qty_done * rec.product_id.average_cw_qty
+ else:
+ rec.cw_qty_done = 0
diff --git a/cw_stock/models/stock_picking_return_line.py b/cw_stock/models/stock_picking_return_line.py
new file mode 100644
index 000000000..500abc9ed
--- /dev/null
+++ b/cw_stock/models/stock_picking_return_line.py
@@ -0,0 +1,73 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies().
+#
+# 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 .
+#
+#############################################################################
+
+from odoo import models, fields, api
+
+
+class StockReturnPickingLine(models.TransientModel):
+ _inherit = "stock.return.picking.line"
+
+ cw_qty = fields.Float(string='CW-Qty ', compute="_compute_cw_qty",
+ help="Catch weight quantity", digits=(16, 4))
+ category_id = fields.Many2one('uom.category',
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom', string='CW-Uom',
+ domain="[('category_id', '=', category_id)]",
+ compute='_compute_cw_uom_id',
+ readonly=True)
+ cw_hide = fields.Boolean(string='Is CW Product',
+ compute="_compute_hide",
+ default=False)
+
+ @api.depends('product_id')
+ def _compute_hide(self):
+ for rec in self:
+ rec.cw_hide = bool(rec.product_id.catch_weigth_ok)
+
+ @api.depends('product_id')
+ def _compute_cw_uom_id(self):
+ """Calculating cw uom"""
+ for rec in self:
+ if rec.product_id.catch_weigth_ok:
+ rec.cw_uom_id = rec.product_id.cw_uom_id
+ else:
+ rec.cw_uom_id = None
+
+ @api.depends('product_id', 'quantity')
+ def _compute_cw_qty(self):
+ """Calculating cw qty done"""
+ for rec in self:
+ if rec.product_id.catch_weigth_ok:
+ if rec.cw_uom_id == rec.uom_id:
+ rec.quantity = rec.cw_qty
+ else:
+ rec.cw_qty = rec.quantity * rec.product_id.average_cw_qty
+
+ @api.onchange('cw_qty')
+ def _onchange_cw_qty(self):
+ """Calculating cw qty from qty"""
+ for rec in self:
+ if rec.product_id.catch_weigth_ok and rec.product_id.average_cw_qty != 0:
+ if rec.cw_uom_id == rec.uom_id:
+ rec.quantity = rec.cw_qty
+ else:
+ rec.quantity = rec.cw_qty / rec.product_id.average_cw_qty
diff --git a/cw_stock/models/stock_scrap.py b/cw_stock/models/stock_scrap.py
new file mode 100644
index 000000000..9456a6ff5
--- /dev/null
+++ b/cw_stock/models/stock_scrap.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies().
+#
+# 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 .
+#
+#############################################################################
+
+from odoo import models, fields, api
+
+
+class StockScrap(models.Model):
+ _inherit = 'stock.scrap'
+
+ cw_qty = fields.Float(string='CW-Qty', digits=(16, 4),
+ compute='_compute_cw_qty',
+ help="Catch weight quantity")
+
+ category_id = fields.Many2one('uom.category',
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom', string='CW-Uom',
+ help="Catch weight unit of measure",
+ domain="[('category_id', '=', category_id)]",
+ compute='_compute_cw_uom_id'
+ )
+ toggle_cw = fields.Boolean(string='is_cw_product', default=False)
+
+ def _compute_cw_qty(self):
+ """computing the qty"""
+ if self.product_id.catch_weigth_ok and self.product_id.average_cw_qty != 0:
+ self.cw_qty = self.product_id.average_cw_qty * self.scrap_qty
+
+ def _compute_cw_uom_id(self):
+ """computing the cw uom id"""
+ if self.product_id.catch_weigth_ok:
+ self.update({'cw_uom_id': self.product_id.cw_uom_id})
+
+ @api.onchange('product_id', 'scrap_qty')
+ def _onchange_product(self):
+ """Calculating cw uom ,product uom and cw qty"""
+ self.toggle_cw = bool(self.product_id.catch_weigth_ok)
+ self.product_uom_id = self.product_id.uom_id
+ self.cw_uom_id = self.product_id.cw_uom_id
+ self.cw_qty = self.product_id.average_cw_qty * self.scrap_qty
+
+ @api.onchange('product_id')
+ def _onchange_product_id(self):
+ """Calculating scrap qty"""
+ self.scrap_qty = 1.0
+
+ @api.onchange('cw_qty')
+ def _onchange_cw_qty(self):
+ """Calculating cw qty from scrap qty"""
+ if self.product_id.catch_weigth_ok and self.product_id.average_cw_qty != 0:
+ if self.cw_uom_id == self.product_uom_id:
+ self.scrap_qty = self.cw_qty
+ else:
+ self.scrap_qty = self.cw_qty / self.product_id.average_cw_qty
+
+ @api.onchange('scrap_qty')
+ def _onchange_scrap_qty(self):
+ """Calculating scrap qty from cw qty"""
+ if self.product_id.catch_weigth_ok and self.product_id.average_cw_qty != 0:
+ if self.cw_uom_id == self.product_uom_id:
+ self.cw_qty = self.scrap_qty
+ else:
+ self.cw_qty = self.scrap_qty * self.product_id.average_cw_qty
diff --git a/cw_stock/models/stock_valuation_layer.py b/cw_stock/models/stock_valuation_layer.py
new file mode 100644
index 000000000..f43b4ac08
--- /dev/null
+++ b/cw_stock/models/stock_valuation_layer.py
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies().
+#
+# 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 .
+#
+#############################################################################
+
+from odoo import models, fields, api
+
+
+class StockValuationLayer(models.Model):
+ _inherit = 'stock.valuation.layer'
+
+ cw_qty_done = fields.Float(string='CW-Qty Done',
+ compute='_compute_cw_qty_done', digits=(16, 4))
+ category_id = fields.Many2one('uom.category',
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom', string='CW-Uom',
+ domain="[('category_id', '=', category_id)]",
+ compute='_compute_cw_uom_id')
+ cw_hide = fields.Boolean(string='Is CW Product',
+ compute="_compute_hide", default=False)
+
+ @api.depends('product_id')
+ def _compute_cw_uom_id(self):
+ """Calculating cw uom"""
+ for rec in self:
+ if rec.product_id.catch_weigth_ok:
+ rec.cw_uom_id = rec.product_id.cw_uom_id
+ else:
+ rec.cw_uom_id = None
+
+ @api.depends('product_id')
+ def _compute_hide(self):
+ for rec in self:
+ rec.cw_hide = bool(rec.product_id.catch_weigth_ok)
+
+ @api.depends('product_id', 'quantity')
+ def _compute_cw_qty_done(self):
+ """Calculating cw qty done"""
+ for rec in self:
+ if rec.product_id.catch_weigth_ok:
+ rec.cw_qty_done = rec.quantity * rec.product_id.average_cw_qty
+ else:
+ rec.cw_qty_done = 0
diff --git a/cw_stock/static/description/assets/icons/check.png b/cw_stock/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/cw_stock/static/description/assets/icons/check.png differ
diff --git a/cw_stock/static/description/assets/icons/chevron.png b/cw_stock/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/cw_stock/static/description/assets/icons/chevron.png differ
diff --git a/cw_stock/static/description/assets/icons/cogs.png b/cw_stock/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/cw_stock/static/description/assets/icons/cogs.png differ
diff --git a/cw_stock/static/description/assets/icons/consultation.png b/cw_stock/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/cw_stock/static/description/assets/icons/consultation.png differ
diff --git a/cw_stock/static/description/assets/icons/ecom-black.png b/cw_stock/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/cw_stock/static/description/assets/icons/ecom-black.png differ
diff --git a/cw_stock/static/description/assets/icons/education-black.png b/cw_stock/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/cw_stock/static/description/assets/icons/education-black.png differ
diff --git a/cw_stock/static/description/assets/icons/hotel-black.png b/cw_stock/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/cw_stock/static/description/assets/icons/hotel-black.png differ
diff --git a/cw_stock/static/description/assets/icons/license.png b/cw_stock/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/cw_stock/static/description/assets/icons/license.png differ
diff --git a/cw_stock/static/description/assets/icons/lifebuoy.png b/cw_stock/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/cw_stock/static/description/assets/icons/lifebuoy.png differ
diff --git a/cw_stock/static/description/assets/icons/manufacturing-black.png b/cw_stock/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/cw_stock/static/description/assets/icons/manufacturing-black.png differ
diff --git a/cw_stock/static/description/assets/icons/pos-black.png b/cw_stock/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/cw_stock/static/description/assets/icons/pos-black.png differ
diff --git a/cw_stock/static/description/assets/icons/puzzle.png b/cw_stock/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/cw_stock/static/description/assets/icons/puzzle.png differ
diff --git a/cw_stock/static/description/assets/icons/restaurant-black.png b/cw_stock/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/cw_stock/static/description/assets/icons/restaurant-black.png differ
diff --git a/cw_stock/static/description/assets/icons/service-black.png b/cw_stock/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/cw_stock/static/description/assets/icons/service-black.png differ
diff --git a/cw_stock/static/description/assets/icons/trading-black.png b/cw_stock/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/cw_stock/static/description/assets/icons/trading-black.png differ
diff --git a/cw_stock/static/description/assets/icons/training.png b/cw_stock/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/cw_stock/static/description/assets/icons/training.png differ
diff --git a/cw_stock/static/description/assets/icons/update.png b/cw_stock/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/cw_stock/static/description/assets/icons/update.png differ
diff --git a/cw_stock/static/description/assets/icons/user.png b/cw_stock/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/cw_stock/static/description/assets/icons/user.png differ
diff --git a/cw_stock/static/description/assets/icons/wrench.png b/cw_stock/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/cw_stock/static/description/assets/icons/wrench.png differ
diff --git a/cw_stock/static/description/assets/misc/categories.png b/cw_stock/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/cw_stock/static/description/assets/misc/categories.png differ
diff --git a/cw_stock/static/description/assets/misc/check-box.png b/cw_stock/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/cw_stock/static/description/assets/misc/check-box.png differ
diff --git a/cw_stock/static/description/assets/misc/compass.png b/cw_stock/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/cw_stock/static/description/assets/misc/compass.png differ
diff --git a/cw_stock/static/description/assets/misc/corporate.png b/cw_stock/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/cw_stock/static/description/assets/misc/corporate.png differ
diff --git a/cw_stock/static/description/assets/misc/customer-support.png b/cw_stock/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/cw_stock/static/description/assets/misc/customer-support.png differ
diff --git a/cw_stock/static/description/assets/misc/cybrosys-logo.png b/cw_stock/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/cw_stock/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/cw_stock/static/description/assets/misc/features.png b/cw_stock/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/cw_stock/static/description/assets/misc/features.png differ
diff --git a/cw_stock/static/description/assets/misc/logo.png b/cw_stock/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/cw_stock/static/description/assets/misc/logo.png differ
diff --git a/cw_stock/static/description/assets/misc/pictures.png b/cw_stock/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/cw_stock/static/description/assets/misc/pictures.png differ
diff --git a/cw_stock/static/description/assets/misc/pie-chart.png b/cw_stock/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/cw_stock/static/description/assets/misc/pie-chart.png differ
diff --git a/cw_stock/static/description/assets/misc/right-arrow.png b/cw_stock/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/cw_stock/static/description/assets/misc/right-arrow.png differ
diff --git a/cw_stock/static/description/assets/misc/star.png b/cw_stock/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/cw_stock/static/description/assets/misc/star.png differ
diff --git a/cw_stock/static/description/assets/misc/support.png b/cw_stock/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/cw_stock/static/description/assets/misc/support.png differ
diff --git a/cw_stock/static/description/assets/misc/whatsapp.png b/cw_stock/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/cw_stock/static/description/assets/misc/whatsapp.png differ
diff --git a/cw_stock/static/description/assets/modules/1.png b/cw_stock/static/description/assets/modules/1.png
new file mode 100644
index 000000000..5238bdeab
Binary files /dev/null and b/cw_stock/static/description/assets/modules/1.png differ
diff --git a/cw_stock/static/description/assets/modules/2.png b/cw_stock/static/description/assets/modules/2.png
new file mode 100644
index 000000000..1ae7cfe3b
Binary files /dev/null and b/cw_stock/static/description/assets/modules/2.png differ
diff --git a/cw_stock/static/description/assets/modules/3.png b/cw_stock/static/description/assets/modules/3.png
new file mode 100644
index 000000000..3c3ff1afb
Binary files /dev/null and b/cw_stock/static/description/assets/modules/3.png differ
diff --git a/cw_stock/static/description/assets/modules/4.png b/cw_stock/static/description/assets/modules/4.png
new file mode 100644
index 000000000..3fae4631e
Binary files /dev/null and b/cw_stock/static/description/assets/modules/4.png differ
diff --git a/cw_stock/static/description/assets/modules/5.gif b/cw_stock/static/description/assets/modules/5.gif
new file mode 100644
index 000000000..2a5f8e659
Binary files /dev/null and b/cw_stock/static/description/assets/modules/5.gif differ
diff --git a/cw_stock/static/description/assets/modules/6.png b/cw_stock/static/description/assets/modules/6.png
new file mode 100644
index 000000000..7f2815273
Binary files /dev/null and b/cw_stock/static/description/assets/modules/6.png differ
diff --git a/cw_stock/static/description/assets/screenshots/hero.gif b/cw_stock/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..811710d94
Binary files /dev/null and b/cw_stock/static/description/assets/screenshots/hero.gif differ
diff --git a/cw_stock/static/description/assets/screenshots/screenshot-1.png b/cw_stock/static/description/assets/screenshots/screenshot-1.png
new file mode 100644
index 000000000..ad88ae358
Binary files /dev/null and b/cw_stock/static/description/assets/screenshots/screenshot-1.png differ
diff --git a/cw_stock/static/description/assets/screenshots/screenshot-2.png b/cw_stock/static/description/assets/screenshots/screenshot-2.png
new file mode 100644
index 000000000..690b9387e
Binary files /dev/null and b/cw_stock/static/description/assets/screenshots/screenshot-2.png differ
diff --git a/cw_stock/static/description/assets/screenshots/screenshot-3.png b/cw_stock/static/description/assets/screenshots/screenshot-3.png
new file mode 100644
index 000000000..6b0b276df
Binary files /dev/null and b/cw_stock/static/description/assets/screenshots/screenshot-3.png differ
diff --git a/cw_stock/static/description/assets/screenshots/screenshot-4.png b/cw_stock/static/description/assets/screenshots/screenshot-4.png
new file mode 100644
index 000000000..03c7f32f1
Binary files /dev/null and b/cw_stock/static/description/assets/screenshots/screenshot-4.png differ
diff --git a/cw_stock/static/description/assets/screenshots/screenshot-5.png b/cw_stock/static/description/assets/screenshots/screenshot-5.png
new file mode 100644
index 000000000..744694be8
Binary files /dev/null and b/cw_stock/static/description/assets/screenshots/screenshot-5.png differ
diff --git a/cw_stock/static/description/banner.png b/cw_stock/static/description/banner.png
new file mode 100644
index 000000000..da0495bb6
Binary files /dev/null and b/cw_stock/static/description/banner.png differ
diff --git a/cw_stock/static/description/icon.png b/cw_stock/static/description/icon.png
new file mode 100644
index 000000000..107702502
Binary files /dev/null and b/cw_stock/static/description/icon.png differ
diff --git a/cw_stock/static/description/index.html b/cw_stock/static/description/index.html
new file mode 100644
index 000000000..1881c2a37
--- /dev/null
+++ b/cw_stock/static/description/index.html
@@ -0,0 +1,572 @@
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+ Odoo.sh
+
+
+
+
+
+
+
Catch Weight Management : Inventory
+
Enable The Catch Weight System In The Inventory Module.