diff --git a/account_move_multi_cancel/README.rst b/account_move_multi_cancel/README.rst
new file mode 100755
index 000000000..dcc3aef61
--- /dev/null
+++ b/account_move_multi_cancel/README.rst
@@ -0,0 +1,47 @@
+.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg
+ :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
+ :alt: License: LGPL-3
+
+Mass Journal Entry Cancel
+=========================
+This module helps to cancel or reset multiple journal entries
+
+Configuration
+=============
+* No additional configuration required
+
+Company
+-------
+*`Cybrosys Techno Solutions `__
+
+License
+-------
+General Public License, Version 3 (LGPL v3).
+(https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
+
+Credits
+-------
+Developer: (V14) Mohammed Dilshad Tk @cybrosys, 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 further information, please visit `Our Website `__
+
+Further information
+===================
+HTML Description: ``__
\ No newline at end of file
diff --git a/account_move_multi_cancel/__init__.py b/account_move_multi_cancel/__init__.py
new file mode 100755
index 000000000..c187831d1
--- /dev/null
+++ b/account_move_multi_cancel/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Mohammed Dilshad Tk (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 .
+#
+#############################################################################
+from . import models
+from . import wizard
diff --git a/account_move_multi_cancel/__manifest__.py b/account_move_multi_cancel/__manifest__.py
new file mode 100755
index 000000000..e0ad846fc
--- /dev/null
+++ b/account_move_multi_cancel/__manifest__.py
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Mohammed Dilshad Tk (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 .
+#
+#############################################################################
+{
+ 'name': "Mass Journal Entry Cancel",
+ "version": "14.0.1.0.0",
+ "category": "Accounting",
+ "summary": "User can cancel or reset multiple journal entries ",
+ "description": " This module helps cancel or reset multiple journal"
+ "entries simultaneously.User can select multiple journal"
+ "entries from the tree view and we can either cancel or"
+ "reset selected journal entries. ",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['account'],
+ 'data': [
+ 'security/account_move_multi_cancel_groups.xml',
+ 'security/ir.model.access.csv',
+ 'data/ir_actions_data.xml',
+ 'wizard/account_move_cancel_reset_views.xml'
+ ],
+ 'images': ['static/description/banner.png'],
+ 'license': 'LGPL-3',
+ 'installable': True,
+ 'application': False,
+ 'auto_install': False,
+}
diff --git a/account_move_multi_cancel/data/ir_actions_data.xml b/account_move_multi_cancel/data/ir_actions_data.xml
new file mode 100755
index 000000000..11e7cedec
--- /dev/null
+++ b/account_move_multi_cancel/data/ir_actions_data.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+ Multiple Journal Entry Cancel
+
+
+ list
+
+ code
+
+ action = record.cancel_multiple_journal_entry()
+
+
+
+
+ Multiple Journal Entry Reset
+
+
+ list
+
+ code
+
+ action = record.reset_multiple_journal_entry()
+
+
+
+
\ No newline at end of file
diff --git a/account_move_multi_cancel/doc/RELEASE_NOTES.md b/account_move_multi_cancel/doc/RELEASE_NOTES.md
new file mode 100755
index 000000000..ef3d9abef
--- /dev/null
+++ b/account_move_multi_cancel/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 08.11.2023
+#### Version 14.0.1.0.0
+#### ADD
+- Initial commit for Mass Journal Entry Cancel
diff --git a/account_move_multi_cancel/models/__init__.py b/account_move_multi_cancel/models/__init__.py
new file mode 100755
index 000000000..7f570e1b8
--- /dev/null
+++ b/account_move_multi_cancel/models/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Mohammed Dilshad Tk (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 .
+#
+#############################################################################
+from . import account_move
diff --git a/account_move_multi_cancel/models/account_move.py b/account_move_multi_cancel/models/account_move.py
new file mode 100755
index 000000000..7e6817d05
--- /dev/null
+++ b/account_move_multi_cancel/models/account_move.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Mohammed Dilshad Tk (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 .
+#
+#############################################################################
+from odoo import models
+
+
+class AccountMove(models.Model):
+ """ Class for cancel and reset the journal entries """
+ _inherit = "account.move"
+
+ def cancel_multiple_journal_entry(self):
+ """ Return the confirmation window for cancel journal entry """
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Multiple Journal Entry Cancel',
+ 'view_mode': 'form',
+ 'views': [(self.env.ref('account_move_multi_cancel.'
+ 'account_move_cancel_reset_view_form')
+ .id, 'form')],
+ 'target': 'new',
+ 'res_model': 'account.move.cancel.reset',
+ 'context': {
+ 'active_ids': self._context.get('active_ids')
+ }
+ }
+
+ def reset_multiple_journal_entry(self):
+ """ Return the confirmation window for reset journal entry """
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Multiple Journal Entry Reset',
+ 'view_mode': 'form',
+ 'views': [(self.env.ref(
+ 'account_move_multi_cancel.reset_account_move_cancel_reset_view_form')
+ .id, 'form')],
+ 'target': 'new',
+ 'res_model': 'account.move.cancel.reset',
+ 'context': {
+ 'active_ids': self._context.get('active_ids')
+ }
+ }
diff --git a/account_move_multi_cancel/security/account_move_multi_cancel_groups.xml b/account_move_multi_cancel/security/account_move_multi_cancel_groups.xml
new file mode 100755
index 000000000..24c06dab7
--- /dev/null
+++ b/account_move_multi_cancel/security/account_move_multi_cancel_groups.xml
@@ -0,0 +1,8 @@
+
+
+
+
+ Manage Multiple Journal Entry Cancel
+
+
+
diff --git a/account_move_multi_cancel/security/ir.model.access.csv b/account_move_multi_cancel/security/ir.model.access.csv
new file mode 100755
index 000000000..1738f55b9
--- /dev/null
+++ b/account_move_multi_cancel/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_account_move_cancel_reset,access.account.move.cancel.reset,model_account_move_cancel_reset,account_move_multi_cancel_group_user,1,1,1,1
diff --git a/account_move_multi_cancel/static/description/assets/icons/check.png b/account_move_multi_cancel/static/description/assets/icons/check.png
new file mode 100755
index 000000000..c8e85f51d
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/check.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/chevron.png b/account_move_multi_cancel/static/description/assets/icons/chevron.png
new file mode 100755
index 000000000..2089293d6
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/chevron.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/cogs.png b/account_move_multi_cancel/static/description/assets/icons/cogs.png
new file mode 100755
index 000000000..95d0bad62
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/cogs.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/consultation.png b/account_move_multi_cancel/static/description/assets/icons/consultation.png
new file mode 100755
index 000000000..8319d4baa
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/consultation.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/ecom-black.png b/account_move_multi_cancel/static/description/assets/icons/ecom-black.png
new file mode 100755
index 000000000..a9385ff13
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/ecom-black.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/education-black.png b/account_move_multi_cancel/static/description/assets/icons/education-black.png
new file mode 100755
index 000000000..3eb09b27b
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/education-black.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/hotel-black.png b/account_move_multi_cancel/static/description/assets/icons/hotel-black.png
new file mode 100755
index 000000000..130f613be
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/hotel-black.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/license.png b/account_move_multi_cancel/static/description/assets/icons/license.png
new file mode 100755
index 000000000..a5869797e
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/license.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/lifebuoy.png b/account_move_multi_cancel/static/description/assets/icons/lifebuoy.png
new file mode 100755
index 000000000..658d56ccc
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/lifebuoy.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/manufacturing-black.png b/account_move_multi_cancel/static/description/assets/icons/manufacturing-black.png
new file mode 100755
index 000000000..697eb0e9f
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/manufacturing-black.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/pos-black.png b/account_move_multi_cancel/static/description/assets/icons/pos-black.png
new file mode 100755
index 000000000..97c0f90c1
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/pos-black.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/puzzle.png b/account_move_multi_cancel/static/description/assets/icons/puzzle.png
new file mode 100755
index 000000000..65cf854e7
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/puzzle.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/restaurant-black.png b/account_move_multi_cancel/static/description/assets/icons/restaurant-black.png
new file mode 100755
index 000000000..4a35eb939
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/restaurant-black.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/service-black.png b/account_move_multi_cancel/static/description/assets/icons/service-black.png
new file mode 100755
index 000000000..301ab51cb
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/service-black.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/trading-black.png b/account_move_multi_cancel/static/description/assets/icons/trading-black.png
new file mode 100755
index 000000000..9398ba2f1
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/trading-black.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/training.png b/account_move_multi_cancel/static/description/assets/icons/training.png
new file mode 100755
index 000000000..884ca024d
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/training.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/update.png b/account_move_multi_cancel/static/description/assets/icons/update.png
new file mode 100755
index 000000000..ecbc5a01a
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/update.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/user.png b/account_move_multi_cancel/static/description/assets/icons/user.png
new file mode 100755
index 000000000..6ffb23d9f
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/user.png differ
diff --git a/account_move_multi_cancel/static/description/assets/icons/wrench.png b/account_move_multi_cancel/static/description/assets/icons/wrench.png
new file mode 100755
index 000000000..6c04dea0f
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/icons/wrench.png differ
diff --git a/account_move_multi_cancel/static/description/assets/misc/categories.png b/account_move_multi_cancel/static/description/assets/misc/categories.png
new file mode 100755
index 000000000..bedf1e0b1
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/misc/categories.png differ
diff --git a/account_move_multi_cancel/static/description/assets/misc/check-box.png b/account_move_multi_cancel/static/description/assets/misc/check-box.png
new file mode 100755
index 000000000..42caf24b9
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/misc/check-box.png differ
diff --git a/account_move_multi_cancel/static/description/assets/misc/compass.png b/account_move_multi_cancel/static/description/assets/misc/compass.png
new file mode 100755
index 000000000..d5fed8faa
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/misc/compass.png differ
diff --git a/account_move_multi_cancel/static/description/assets/misc/corporate.png b/account_move_multi_cancel/static/description/assets/misc/corporate.png
new file mode 100755
index 000000000..2eb13edbf
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/misc/corporate.png differ
diff --git a/account_move_multi_cancel/static/description/assets/misc/customer-support.png b/account_move_multi_cancel/static/description/assets/misc/customer-support.png
new file mode 100755
index 000000000..79efc72ed
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/misc/customer-support.png differ
diff --git a/account_move_multi_cancel/static/description/assets/misc/cybrosys-logo.png b/account_move_multi_cancel/static/description/assets/misc/cybrosys-logo.png
new file mode 100755
index 000000000..cc3cc0ccf
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/account_move_multi_cancel/static/description/assets/misc/features.png b/account_move_multi_cancel/static/description/assets/misc/features.png
new file mode 100755
index 000000000..b41769f77
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/misc/features.png differ
diff --git a/account_move_multi_cancel/static/description/assets/misc/logo.png b/account_move_multi_cancel/static/description/assets/misc/logo.png
new file mode 100755
index 000000000..478462d3e
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/misc/logo.png differ
diff --git a/account_move_multi_cancel/static/description/assets/misc/pictures.png b/account_move_multi_cancel/static/description/assets/misc/pictures.png
new file mode 100755
index 000000000..56d255fe9
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/misc/pictures.png differ
diff --git a/account_move_multi_cancel/static/description/assets/misc/pie-chart.png b/account_move_multi_cancel/static/description/assets/misc/pie-chart.png
new file mode 100755
index 000000000..426e05244
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/misc/pie-chart.png differ
diff --git a/account_move_multi_cancel/static/description/assets/misc/right-arrow.png b/account_move_multi_cancel/static/description/assets/misc/right-arrow.png
new file mode 100755
index 000000000..730984a06
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/misc/right-arrow.png differ
diff --git a/account_move_multi_cancel/static/description/assets/misc/star.png b/account_move_multi_cancel/static/description/assets/misc/star.png
new file mode 100755
index 000000000..2eb9ab29f
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/misc/star.png differ
diff --git a/account_move_multi_cancel/static/description/assets/misc/support.png b/account_move_multi_cancel/static/description/assets/misc/support.png
new file mode 100755
index 000000000..4f18b8b82
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/misc/support.png differ
diff --git a/account_move_multi_cancel/static/description/assets/misc/whatsapp.png b/account_move_multi_cancel/static/description/assets/misc/whatsapp.png
new file mode 100755
index 000000000..d513a5356
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/misc/whatsapp.png differ
diff --git a/account_move_multi_cancel/static/description/assets/modules/approval_image.png b/account_move_multi_cancel/static/description/assets/modules/approval_image.png
new file mode 100755
index 000000000..84fe94e80
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/modules/approval_image.png differ
diff --git a/account_move_multi_cancel/static/description/assets/modules/budget_image.png b/account_move_multi_cancel/static/description/assets/modules/budget_image.png
new file mode 100755
index 000000000..fe6aa6fe4
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/modules/budget_image.png differ
diff --git a/account_move_multi_cancel/static/description/assets/modules/export_image.png b/account_move_multi_cancel/static/description/assets/modules/export_image.png
new file mode 100755
index 000000000..4e4ea0e51
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/modules/export_image.png differ
diff --git a/account_move_multi_cancel/static/description/assets/modules/magento_image.png b/account_move_multi_cancel/static/description/assets/modules/magento_image.png
new file mode 100755
index 000000000..39de0820f
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/modules/magento_image.png differ
diff --git a/account_move_multi_cancel/static/description/assets/modules/pos_image.png b/account_move_multi_cancel/static/description/assets/modules/pos_image.png
new file mode 100755
index 000000000..c5932894b
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/modules/pos_image.png differ
diff --git a/account_move_multi_cancel/static/description/assets/modules/shopify_image.png b/account_move_multi_cancel/static/description/assets/modules/shopify_image.png
new file mode 100755
index 000000000..c6d92c16d
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/modules/shopify_image.png differ
diff --git a/account_move_multi_cancel/static/description/assets/screenshots/hero.gif b/account_move_multi_cancel/static/description/assets/screenshots/hero.gif
new file mode 100755
index 000000000..5f343fd0a
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/screenshots/hero.gif differ
diff --git a/account_move_multi_cancel/static/description/assets/screenshots/img1.png b/account_move_multi_cancel/static/description/assets/screenshots/img1.png
new file mode 100755
index 000000000..886cb0b24
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/screenshots/img1.png differ
diff --git a/account_move_multi_cancel/static/description/assets/screenshots/img2.png b/account_move_multi_cancel/static/description/assets/screenshots/img2.png
new file mode 100755
index 000000000..5e4769bb3
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/screenshots/img2.png differ
diff --git a/account_move_multi_cancel/static/description/assets/screenshots/img3.png b/account_move_multi_cancel/static/description/assets/screenshots/img3.png
new file mode 100755
index 000000000..cb95d6592
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/screenshots/img3.png differ
diff --git a/account_move_multi_cancel/static/description/assets/screenshots/img4.png b/account_move_multi_cancel/static/description/assets/screenshots/img4.png
new file mode 100755
index 000000000..4a4216a48
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/screenshots/img4.png differ
diff --git a/account_move_multi_cancel/static/description/assets/screenshots/img5.png b/account_move_multi_cancel/static/description/assets/screenshots/img5.png
new file mode 100755
index 000000000..ce2205e56
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/screenshots/img5.png differ
diff --git a/account_move_multi_cancel/static/description/assets/screenshots/img6.png b/account_move_multi_cancel/static/description/assets/screenshots/img6.png
new file mode 100755
index 000000000..c9e2fbcb8
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/screenshots/img6.png differ
diff --git a/account_move_multi_cancel/static/description/assets/screenshots/img7.png b/account_move_multi_cancel/static/description/assets/screenshots/img7.png
new file mode 100755
index 000000000..961638d24
Binary files /dev/null and b/account_move_multi_cancel/static/description/assets/screenshots/img7.png differ
diff --git a/account_move_multi_cancel/static/description/banner.png b/account_move_multi_cancel/static/description/banner.png
new file mode 100755
index 000000000..750f949f9
Binary files /dev/null and b/account_move_multi_cancel/static/description/banner.png differ
diff --git a/account_move_multi_cancel/static/description/icon.png b/account_move_multi_cancel/static/description/icon.png
new file mode 100755
index 000000000..9cc102c96
Binary files /dev/null and b/account_move_multi_cancel/static/description/icon.png differ
diff --git a/account_move_multi_cancel/static/description/index.html b/account_move_multi_cancel/static/description/index.html
new file mode 100755
index 000000000..062d46384
--- /dev/null
+++ b/account_move_multi_cancel/static/description/index.html
@@ -0,0 +1,501 @@
+
+ This module helps cancel or reset multiple journal entries simultaneously.
+ User can select multiple journal entries from the tree view,
+ we can either cancel or reset selected journal entries
+
+
+
+
+
+
+
+
+
Features
+
+
+
+
+
+
+ Available in Odoo 14.0
+ Community, Enterprise and Odoo Sh
+
+
+
+ User can select multiple journal entries and cancel very quick
+
+
+
+ User can select multiple journal entries and reset very quick
+
+
+
+
+
+
+
+
+
+
Screenshots
+
+
+
+
+
+
User groups
+
+
Go to Settings -> Users & Companies -> Users
+
+ We can enable the checkbox to get cancel and reset button under action menu of journal entry
+
+
+
+
+
Multiple Entry cancel
+
+
Go to Invoicing -> Accounting ->Journal Entries
+ ->
+ select the journal entries in the posted state and click Multiple Journal Entry Cancel in the action menu
+
+
+
+
Journal entry canceling confirmation
+
+
By Clicking Multiple Journal Entry Cancel you will get a wizard and click MASS CANCEL JOURNAL ENTRY
+
+
+
+
+
Canceled Journal Entries
+
+
We can see the selected journal entries has been canceled
+
+
+
+
+
Resetting the cancelled entries
+
+
We can select multiple cancelled entries and click Multiple Journal Entry Reset button form action
+
+
+
Journal entry reset confirmation
+
+
+ By Clicking Multiple Journal Entry Reset you will get a wizard and click MASS RESET JOURNAL ENTRY
+
+
+
Reset the Journal Entries
+
+
+ We can see the selected journal entries has been reset to draft state
+
\ No newline at end of file
diff --git a/account_move_multi_cancel/wizard/__init__.py b/account_move_multi_cancel/wizard/__init__.py
new file mode 100755
index 000000000..8da8dc6fa
--- /dev/null
+++ b/account_move_multi_cancel/wizard/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Mohammed Dilshad Tk (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 .
+#
+#############################################################################
+from . import account_move_cancel_reset
diff --git a/account_move_multi_cancel/wizard/account_move_cancel_reset.py b/account_move_multi_cancel/wizard/account_move_cancel_reset.py
new file mode 100755
index 000000000..81df81b0e
--- /dev/null
+++ b/account_move_multi_cancel/wizard/account_move_cancel_reset.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Mohammed Dilshad Tk (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 .
+#
+#############################################################################
+from odoo import models, _
+from odoo.exceptions import ValidationError
+
+
+class AccountMoveCancelReset(models.TransientModel):
+ """ Wizard for cancel and reset of journal entries"""
+ _name = "account.move.cancel.reset"
+ _description = "Wizard for cancel journal entries"
+
+ def action_mass_journal_entry_cancel(self):
+ """ Cancel all the selected journal entries"""
+ for account in self.env['account.move'].browse(
+ self._context['active_ids']):
+ if account.state == "posted":
+ account.button_draft()
+ account.button_cancel()
+ else:
+ raise ValidationError(
+ _("The selected journal entry %s is not in posted state")
+ % account.name)
+
+ def action_mass_journal_entry_reset(self):
+ """ Reset all the selected journal entries to draft state"""
+ for account in self.env['account.move'].browse(
+ self._context['active_ids']):
+ if account.state == "cancel":
+ account.button_draft()
+ else:
+ raise ValidationError(
+ _("The selected journal entry %s is not in cancel state")
+ % account.name)
diff --git a/account_move_multi_cancel/wizard/account_move_cancel_reset_views.xml b/account_move_multi_cancel/wizard/account_move_cancel_reset_views.xml
new file mode 100755
index 000000000..2b807c743
--- /dev/null
+++ b/account_move_multi_cancel/wizard/account_move_cancel_reset_views.xml
@@ -0,0 +1,56 @@
+
+
+
+
+ account.move.cancel.reset.view.form
+ account.move.cancel.reset
+
+
+
+
+
+
+ account.move.cancel.reset.view.form
+ account.move.cancel.reset
+
+
+
+
+
+
+ Multiple Journal Entry Cancel
+ account.move.cancel.reset
+ form
+ new
+
+
+ Multiple Journal Entry Cancel
+
+
+
+
diff --git a/adult_daycare_center/README.rst b/adult_daycare_center/README.rst
new file mode 100755
index 000000000..979846dda
--- /dev/null
+++ b/adult_daycare_center/README.rst
@@ -0,0 +1,42 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3 file
+
+Adult Daycare Center
+=====================
+Adult Day Care Center For Senior Citizens helps to manage Adult Daycare Center and Daycare activities.
+
+License
+-------
+GNU AFFERO GENERAL PUBLIC LICENSE Version 3 (AGPL v3)
+( http://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+Credits
+-------
+Developer: (V14) Vishnu P, 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 `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/adult_daycare_center/__init__.py b/adult_daycare_center/__init__.py
new file mode 100644
index 000000000..335030738
--- /dev/null
+++ b/adult_daycare_center/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from . import controllers
+from . import models
diff --git a/adult_daycare_center/__manifest__.py b/adult_daycare_center/__manifest__.py
new file mode 100644
index 000000000..0b74b3d8e
--- /dev/null
+++ b/adult_daycare_center/__manifest__.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-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': "Adult Daycare Center",
+ 'version': '14.0.1.0.0',
+ 'category': 'Extra Tools',
+ 'summary': """ Adult Day Care Center For Senior Citizens """,
+ 'description': """ Adult Day Care Center For Senior Citizens to manage
+ Adult Daycare Center and Daycare activities""",
+ 'author': "Cybrosys Techno Solutions",
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['crm', 'project', 'sale_management', 'website', 'account',
+ 'hr'],
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'data/website_menu_data.xml',
+ 'views/res_partner_views.xml',
+ 'views/crm_lead_views.xml',
+ 'views/product_template_views.xml',
+ 'views/assessment_request_templates.xml',
+ 'views/activity_type_views.xml',
+ 'views/daycare_activities_views.xml',
+ 'views/sale_order_views.xml',
+ 'views/adult_daycare_center_menus.xml',
+ 'report/res_partner_reports.xml',
+ 'report/crm_lead_reports.xml',
+ 'report/sale_order_templates.xml',
+ ],
+ 'images': ['static/description/banner.jpg'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/adult_daycare_center/controllers/__init__.py b/adult_daycare_center/controllers/__init__.py
new file mode 100644
index 000000000..be6d5f6d1
--- /dev/null
+++ b/adult_daycare_center/controllers/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from . import adult_daycare_center
diff --git a/adult_daycare_center/controllers/adult_daycare_center.py b/adult_daycare_center/controllers/adult_daycare_center.py
new file mode 100644
index 000000000..c03f1dd7d
--- /dev/null
+++ b/adult_daycare_center/controllers/adult_daycare_center.py
@@ -0,0 +1,99 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import http
+from odoo.http import request
+
+
+class RoomBooking(http.Controller):
+ """ Controller for assessment_request website page """
+ @http.route(['/assessment_request'], type='http', auth="public",
+ website=True)
+ def assessment_request(self, **kw):
+ """Function for render assessment request form"""
+ values = {
+ 'guests': request.env['res.partner'].sudo().search([]),
+ 'rooms': request.env['crm.lead'].sudo().search([])
+ }
+ return request.render("adult_daycare_center.assessment_request_form",
+ values)
+
+ @http.route(['/assessment_request/submit'], type='http', auth="public",
+ website=True, csrf=False)
+ def assessment_request_submit(self, **kw):
+ """Function for assessment request submission"""
+ lead = request.env['crm.lead'].sudo().create({
+ 'type': 'lead',
+ 'name': kw.get('subject'),
+ 'contact_name': kw.get('applicant_name'),
+ 'birth_date': kw.get('birth_date'),
+ 'gender': kw.get('gender'),
+ 'street': kw.get('street'),
+ 'city': kw.get('city'),
+ 'marital_status': kw.get('marital_status'),
+ 'present_living': kw.get('living_arrangement'),
+ 'medicaid': kw.get('medicaid'),
+ 'medicare': kw.get('medicare'),
+ 'supplemental_income': kw.get('sup_sec_income'),
+ 'interest_program': kw.get('why_interest'),
+ 'previous_experience': kw.get('experience'),
+ 'where_when': kw.get('where_when'),
+ 'living_with_whom': kw.get('living_with_whom'),
+ 'relationship_responsible_relative': kw.get('relation_with_living'),
+ 'nearest_relative': kw.get('nearest_relative'),
+ 'nearest_relative_relation': kw.get('nearest_relative_relation'),
+ 'employed_at': kw.get('employed_where'),
+ 'business_phone': kw.get('business_phone'),
+ 'emergency_name': kw.get('emergency_contact_1'),
+ 'applicant_relationship': kw.get('applicant_relation_1'),
+ 'emergency_address': kw.get('emergency_address_1'),
+ 'emergency_phone': kw.get('emergency_phone_1'),
+ 'first_emergency_name': kw.get('emergency_contact_2'),
+ 'second_applicant_relationship': kw.get('applicant_relation_2'),
+ 'first_emergency_address': kw.get('emergency_address_2'),
+ 'first_emergency_phone': kw.get('emergency_phone_2'),
+ 'physician_name': kw.get('physician_name'),
+ 'physician_address': kw.get('physician_address'),
+ 'physician_phone': kw.get('physician_phone'),
+ 'physician_last_visit': kw.get('physician_last_visit'),
+ 'dentist_name': kw.get('dentist_name'),
+ 'dentist_address': kw.get('dentist_address'),
+ 'dentist_phone': kw.get('dentist_phone'),
+ 'dentist_last_visit': kw.get('dentist_last_visit'),
+ 'transportation': kw.get('transport_provider'),
+ 'arrival_time': kw.get('arrive_time'),
+ 'departure_time': kw.get('departure_time'),
+ 'special_diet': kw.get('diet'),
+ 'diet_detail': kw.get('diet_detail'),
+ 'allergies': kw.get('allergies'),
+ 'request_assurance': kw.get('request_assurance'),
+ 'paid_by': kw.get('paid_by'),
+ 'paid_by_name': kw.get('paid_by_name'),
+ 'paid_by_phone': kw.get('paid_by_phone'),
+ 'your_email': kw.get('email'),
+ 'email_from': kw.get('email'),
+ 'hospital_name': kw.get('hospital_choice'),
+ })
+ vals = {
+ 'lead': lead,
+ }
+ return request.render(
+ "adult_daycare_center.assessment_request_submit_template", vals)
diff --git a/adult_daycare_center/data/website_menu_data.xml b/adult_daycare_center/data/website_menu_data.xml
new file mode 100644
index 000000000..6005150a3
--- /dev/null
+++ b/adult_daycare_center/data/website_menu_data.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ Self Assessment Request
+ /assessment_request
+
+ 22
+
+
diff --git a/adult_daycare_center/doc/RELEASE_NOTES.md b/adult_daycare_center/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..a86bf3cf6
--- /dev/null
+++ b/adult_daycare_center/doc/RELEASE_NOTES.md
@@ -0,0 +1,7 @@
+## Module
+
+#### 31.10.2023
+#### Version 14.0.1.0.0
+#### ADD
+
+- Initial commit for Adult Daycare Center
diff --git a/adult_daycare_center/models/__init__.py b/adult_daycare_center/models/__init__.py
new file mode 100644
index 000000000..32246f6ac
--- /dev/null
+++ b/adult_daycare_center/models/__init__.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from . import activity_type
+from . import crm_lead
+from . import daycare_activities
+from . import product_template
+from . import res_partner
+from . import sale_order
diff --git a/adult_daycare_center/models/activity_type.py b/adult_daycare_center/models/activity_type.py
new file mode 100644
index 000000000..7b70282d2
--- /dev/null
+++ b/adult_daycare_center/models/activity_type.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import fields, models
+
+
+class ActivityType(models.Model):
+ """ Adding fields for activity type """
+ _name = 'activity.type'
+ _description = 'Activity Types'
+
+ name = fields.Char(string='Name', help='Activity Type Name')
diff --git a/adult_daycare_center/models/crm_lead.py b/adult_daycare_center/models/crm_lead.py
new file mode 100644
index 000000000..d627a21be
--- /dev/null
+++ b/adult_daycare_center/models/crm_lead.py
@@ -0,0 +1,198 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import fields, models
+
+
+class CrmLead(models.Model):
+ """ Adding fields in crm lead for day care """
+ _inherit = 'crm.lead'
+
+ birth_date = fields.Date(string='Birthdate', help='Date of Birth')
+ gender = fields.Selection([('Male', 'Male'), ('Female', 'Female')],
+ string='Gender', help='Gender of the person')
+ medicaid = fields.Integer(string='Medicaid', help='To add medicaid details')
+ medicare = fields.Integer(string='Medicare', help='To add medicare details')
+ supplemental_income = fields.Float(string='Supplemental Security Income',
+ help='To add supplemental security'
+ ' income details')
+ interest_program = fields.Char(string='Interest In Program',
+ help='To add reason of interest in program')
+ previous_experience = fields.Selection([('Yes', 'Yes'),
+ ('No', 'No')],
+ string='Previous Experience',
+ help='Do you have previous program '
+ 'experience')
+ where_when = fields.Char(string='Where and When',
+ help='Where and when you have previous'
+ ' program experience')
+ marital_status = fields.Selection(
+ [('Single', 'Single'), ('Married', 'Married'),
+ ('Separated', 'Separated'), ('Widowed', 'Widowed'),
+ ('Divorced', 'Divorced')], string='Marital Status',
+ help='To add marital status of person')
+ present_living = fields.Selection([
+ ('With Relative', 'With Relative'),
+ ('With Non-Relative', 'With Non-Relative'),
+ ('Home Alone', 'Alone(Home/Apartment)'),
+ ('Alone Single', 'Alone(Single Room)')],
+ string='Present Living Arrangement',
+ help='To add the person present Living Agreement')
+ living_with_whom = fields.Char(string='Living With Whom',
+ help='To add person living with whom')
+ living_with = fields.Char(string='Living With',
+ help='To add person living with details')
+ relationship_responsible_relative = fields.Char(
+ string='Relationship Responsible Relative',
+ help='To add details of relationship responsible relative')
+ nearest_relative = fields.Char(string='Nearest Relative',
+ help='To add nearest relative of the person')
+ nearest_relative_relation = fields.Char(string='Nearest Relative Relation',
+ help='Nearest relative '
+ 'relation with the person')
+ business_phone = fields.Char(string='Business Phone',
+ help='To add business Phone Number')
+ emergency_name = fields.Char(string='Emergency Name', help='To add '
+ 'emergency Name')
+ applicant_relationship = fields.Char(string='Applicant Relationship',
+ help='To add relationship with'
+ 'applicant')
+ emergency_address = fields.Text(string='Emergency Address',
+ help='To add emergency contact address')
+ emergency_phone = fields.Char(string='Emergency Phone',
+ help='To add emergency Phone Number')
+ first_emergency_name = fields.Char(string='Emergency Name#1',
+ help='To add emergency contact name#1')
+ second_applicant_relationship = fields.Char(
+ string='Applicant Relationship#2',
+ help='To add relationship with applicant#2')
+ first_emergency_address = fields.Text(string='Emergency Address#1',
+ help='To add emergency address of #1')
+ first_emergency_phone = fields.Char(string='Emergency Phone#1',
+ help='To add emergency'
+ 'phone number of #1')
+ physician_name = fields.Char(string='Physician Name',
+ help='To add name of physician')
+ physician_address = fields.Text(string='Physician Address',
+ help='To add address of physician')
+ physician_phone = fields.Char(string='Physician Phone',
+ help='To add phone number of physician')
+ physician_last_visit = fields.Date(string='Physician Last Visit',
+ help='To add last visit date with '
+ 'physician')
+ dentist_name = fields.Char(string='Dentist Name', help='To add name of'
+ ' dentist')
+ dentist_address = fields.Text(string='Dentist Address',
+ help='To add address of dentist')
+ dentist_phone = fields.Char(string='Dentist Phone',
+ help='To add phone number of dentist')
+ dentist_last_visit = fields.Date(string='Dentist Last Visit',
+ help='To add last visit with dentist')
+ transportation = fields.Selection(
+ [('Relative or Friend', 'Relative or Friend'),
+ ('Public Transportation', 'Public Transportation'),
+ ('Blessed Assurance', 'Blessed Assurance')],
+ string='Transportation', help='To add transportation with')
+ arrival_time = fields.Float(string='Arrival TIme', help='To add time of '
+ 'arrival')
+ departure_time = fields.Float(string='Departure Time',
+ help='To add time of departure')
+ special_diet = fields.Selection([('Yes', 'Yes'), ('No', 'No')],
+ string='Special Diet',
+ help='To add person have any special Diet?')
+ responsible = fields.Char(string='Responsible', help='To add '
+ 'responsible person')
+ paid_by = fields.Selection([('Myself', 'Myself'),
+ ('Relative', 'Relative'),
+ ('Another Party', 'Another Party')],
+ string='Paid By', help='To add paid by details')
+ paid_by_name = fields.Char(string='Payer Name', help='To add name of payer')
+ paid_by_phone = fields.Char(string='Payer Phone',
+ help='To add phone number of payer')
+ your_email = fields.Char(string='Your Email', help='To add your email '
+ 'address', )
+ hospital_name = fields.Char(string='Hospital Name', help='Name of Hospital')
+ today_date = fields.Date(string='Today Date', default=fields.Date.today,
+ help="Today's Date")
+ diet_detail = fields.Char(string='Diet Detail', help='Details of your Diet')
+ allergies = fields.Char(string='List of Allergies',
+ help='To add person allergy details')
+ time_request = fields.Char(string='Time Request',
+ help='To add time request of the person')
+ employed_at = fields.Char(string='Employed At', help='To add employed at'
+ ' details')
+ request_assurance = fields.Char(string='Blessed Assurance',
+ help='To add blessed assurance details')
+
+ def action_updt_adult_info(self):
+ """
+ This function Updates the daycare data inside res.partner with the
+ corresponding data in the crm.lead model
+ """
+ adult_person = self.env['res.partner'].browse(self.partner_id.id)
+ adult_person.update({
+ 'is_customer': True,
+ 'is_adult_member': True,
+ 'medicare_no': self.medicare,
+ 'medicaid_no': self.medicaid,
+ 'birth_date': self.birth_date,
+ 'marital_status': self.marital_status,
+ 'physician': self.physician_name,
+ 'physician_address': self.physician_address,
+ 'physician_phone': self.physician_phone,
+ 'dentist': self.dentist_name,
+ 'dentist_address': self.dentist_address,
+ 'dentist_phone': self.dentist_phone,
+ 'dentist_last_visit': self.dentist_last_visit,
+ 'transportation': self.transportation,
+ 'arrival_time': self.arrival_time,
+ 'departure_time': self.departure_time,
+ 'special_diet': self.special_diet,
+ 'diet_detail': self.diet_detail,
+ 'allergies': self.allergies,
+ 'time_request': self.time_request,
+ 'emergency_name': self.emergency_name,
+ 'applicant_relationship': self.applicant_relationship,
+ 'emergency_address': self.emergency_address,
+ 'emergency_phone': self.emergency_phone,
+ 'first_emergency_name': self.first_emergency_name,
+ 'second_applicant_relationship': self.second_applicant_relationship,
+ 'first_emergency_address': self.first_emergency_address,
+ 'first_emergency_phone': self.first_emergency_phone,
+ 'responsible': self.responsible,
+ 'paid_by': self.paid_by,
+ 'paid_by_name': self.paid_by_name,
+ 'paid_by_phone': self.paid_by_phone,
+ 'your_email': self.your_email,
+ 'hospital_name': self.hospital_name,
+ 'today_date': self.today_date,
+ 'interest_program': self.interest_program,
+ 'previous_experience': self.previous_experience,
+ 'where_when': self.where_when,
+ 'present_living': self.present_living,
+ 'living_with_whom': self.living_with_whom,
+ 'living_with': self.living_with,
+ 'relationship_responsible_relative': self.relationship_responsible_relative,
+ 'nearest_relative': self.nearest_relative,
+ 'nearest_relative_relation': self.nearest_relative_relation,
+ 'business_phone': self.business_phone,
+ 'employed_at': self.employed_at,
+ })
diff --git a/adult_daycare_center/models/daycare_activities.py b/adult_daycare_center/models/daycare_activities.py
new file mode 100644
index 000000000..021374df7
--- /dev/null
+++ b/adult_daycare_center/models/daycare_activities.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import fields, models
+
+
+class DaycareActivities(models.Model):
+ """ Adding fields and functionalities in daycare activities"""
+ _name = 'daycare.activities'
+ _description = 'Day Care Activities'
+
+ activity_type_id = fields.Many2one('activity.type', string='Name',
+ required=True, help='To add name of'
+ ' activity')
+ product_id = fields.Many2one('product.template',
+ string='Product',
+ domain=[('is_adult_activity', '=', True)],
+ help='To add product details', required=True, )
+ notes = fields.Char(string='Notes', help='To add notes')
+ time_in = fields.Float(string='Time In', help='To add time in details')
+ time_out = fields.Float(string='Time Out', help='To add time out details')
+ responsible_id = fields.Many2one('res.users',
+ string='Responsible By',
+ help='To add responsible person details')
+ res_partner_id = fields.Many2one('res.partner',
+ string='Partner',
+ help='Partner Details')
diff --git a/adult_daycare_center/models/product_template.py b/adult_daycare_center/models/product_template.py
new file mode 100644
index 000000000..ef2e1abbc
--- /dev/null
+++ b/adult_daycare_center/models/product_template.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import fields, models
+
+
+class ProductTemplate(models.Model):
+ """ Adding boolean field for adult activity in product"""
+ _inherit = 'product.template'
+
+ is_adult_activity = fields.Boolean(string='Is Adult Activity?',
+ help='To mark is adult activity or not')
diff --git a/adult_daycare_center/models/res_partner.py b/adult_daycare_center/models/res_partner.py
new file mode 100644
index 000000000..d92f38a83
--- /dev/null
+++ b/adult_daycare_center/models/res_partner.py
@@ -0,0 +1,191 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import api, fields, models
+
+
+class AdultMembers(models.Model):
+ """ Inherit res partner add fields """
+ _inherit = 'res.partner'
+
+ is_customer = fields.Boolean(string='Is A Customer',
+ help='If user is a customer, enable this '
+ 'option')
+ is_adult_member = fields.Boolean(string='Is Adult Member?',
+ help='If user is a adult member, enable '
+ 'this option')
+ social_security_no = fields.Integer(string='Social Security Number',
+ help='To add social security number')
+ medicare_no = fields.Integer(string='Medicare Number',
+ help='To add Medicare number')
+ medicaid_no = fields.Integer(string='Medicaid Number',
+ help='To add Medicaid number')
+ birth_date = fields.Date(string='Birth Date', help='To add date of birth')
+ age = fields.Integer(string='Age', help='To add age of person')
+ referred_by_id = fields.Many2one('res.partner',
+ string='Referred By',
+ help='To add referred details')
+ marital_status = fields.Selection(
+ [('Single', 'Single'), ('Married', 'Married'),
+ ('Separated', 'Separated'), ('Widowed', 'Widowed'),
+ ('Divorced', 'Divorced')], string='Marital Status',
+ help='To add marital details of the person')
+ place_birth = fields.Char(string='Birth Place',
+ help='To add place of birth')
+ responsible_id = fields.Many2one('hr.employee',
+ string='Responsible Party/Guardian',
+ help='To add responsible party/guardian')
+ responsible_address = fields.Text(string='Address',
+ help='To add responsible address')
+ responsible_telephone = fields.Char(string='Telephone',
+ help='To add responsible '
+ 'telephone number')
+ care_provider_id = fields.Many2one('hr.employee',
+ string='Primary Care Provider',
+ help='To add primary care '
+ 'provider details')
+ care_provider_address = fields.Text(string='Address',
+ help='To add address of care provider')
+ care_provider_telephone = fields.Text(string='Telephone',
+ help='To add care provider '
+ 'telephone number')
+ physician = fields.Char(string='Physician', help='To add physician details')
+ physician_address = fields.Text(string='Address',
+ help='To add address of physician')
+ physician_phone = fields.Char(string='Phone',
+ help='To add phone number of physician')
+ travel_by = fields.Selection([('Car', 'Car'), ('Bus', 'Bus')],
+ string='Travel By', help='To add '
+ 'travel by details')
+ travel_assistance = fields.Boolean(string='Is Need Travel Assistance',
+ help='To add travel assistance details')
+ present_medical = fields.Char(string='Present Diagnoses/Medical Problems',
+ help='To add Present '
+ 'diagnoses/medical problems'
+ )
+ other_disability = fields.Char(string='Other Disability',
+ help='To add other disabilities')
+ weight = fields.Float(string='Weight', help='To add weight')
+ height = fields.Float(string='Height', help='To add height')
+ dentist = fields.Char(string='Dentist Name', help='To add name of dentist')
+ dentist_address = fields.Text(string='Address', help='To add '
+ 'address of dentist')
+ dentist_phone = fields.Char(string='Phone', help='To add '
+ 'phone number of dentist')
+ dentist_last_visit = fields.Date(string='Dentist Last Visit',
+ help="To add dentist's last visit date")
+ daycare_activities_ids = fields.One2many('daycare.activities',
+ 'res_partner_id',
+ string='Daycare Activities',
+ help='To add daycare '
+ 'activity details')
+ transportation = fields.Selection(
+ [('Relative or Friend', 'Relative or Friend'),
+ ('Public Transportation', 'Public Transportation'),
+ ('Blessed Assurance', 'Blessed Assurance')],
+ string='Transportation', help='To add transportation details')
+ arrival_time = fields.Float(string='Arrival TIme', help='To add '
+ 'time of arrival')
+ departure_time = fields.Float(string='Departure Time',
+ help='To add time of departure')
+ special_diet = fields.Selection([('Yes', 'Yes'), ('No', 'No')],
+ string='Special Diet',
+ help='To add special diet details')
+ diet_detail = fields.Char(string='Diet Detail', help='To add details of '
+ 'diet of the person')
+ allergies = fields.Char(string='List of Allergies',
+ help='To add allergies of the person')
+ time_request = fields.Char(string='Time Request',
+ help='To add time request details')
+ emergency_name = fields.Char(string='Emergency Name',
+ help='To add emergency contact name')
+ applicant_relationship = fields.Char(string='Applicant Relationship',
+ help='To add relationship with'
+ ' Applicant')
+ emergency_address = fields.Text(string='Emergency address',
+ help='To add address of emergency contact')
+ emergency_phone = fields.Char(string='Emergency phone',
+ help='To add phone number of '
+ 'emergency Contact')
+ first_emergency_name = fields.Char(string='Emergency Name#1',
+ help='To add name of emergency #1')
+ second_applicant_relationship = fields.Char(
+ string='Applicant Relationship#2',
+ help='To add applicant relationship with #2'
+ )
+ first_emergency_address = fields.Text(string='Emergency Address#1',
+ help='To add emergency address of #1')
+ first_emergency_phone = fields.Char(string='Emergency Phone#1',
+ help='To add emergency '
+ 'phone number of #1')
+ responsible = fields.Char(string='Responsible', help='To add '
+ 'responsible Details')
+ paid_by = fields.Selection([('Myself', 'Myself'),
+ ('Relative', 'Relative'),
+ ('Another Party', 'Another Party')],
+ string='Paid By', help='To add paid by details')
+ paid_by_name = fields.Char(string='Payer Name', help='To add name of payer')
+ paid_by_phone = fields.Char(string='Payer Phone',
+ help='To add phone number of payer')
+ your_email = fields.Char(string='Email', help='To add email')
+ hospital_name = fields.Char(string='Hospital Name', help='To add '
+ 'name of hospital')
+ today_date = fields.Date(string='Today Date', help='To add today date')
+ interest_program = fields.Char(string='Interest In Program',
+ help='To add reason of interest in program')
+ previous_experience = fields.Selection([('Yes', 'Yes'), ('No', 'No')],
+ string='Previous Experience',
+ help='To add have previous'
+ ' experience with program ')
+ where_when = fields.Char(string='Where and When',
+ help='To add where and when you have '
+ 'previous experience')
+ present_living = fields.Selection([
+ ('With Relative', 'With Relative'),
+ ('With Non-Relative', 'With Non-Relative'),
+ ('Home Alone', 'Alone(Home/Apartment)'),
+ ('Alone Single', 'Alone(Single Room)')],
+ string='Present Living Arrangement',
+ help='To add present Living arrangement')
+ living_with_whom = fields.Char(string='Living With Whom',
+ help='To add person living with whom')
+ living_with = fields.Char(string='Living With', help='To add '
+ 'person living with')
+ relationship_responsible_relative = fields.Char(
+ string='Relationship Responsible Relative',
+ help='To add relationship responsible relative details')
+ nearest_relative = fields.Char(string='Nearest Relative',
+ help='To add nearest relative of the person')
+ nearest_relative_relation = fields.Char(string='Nearest Relative Relation',
+ help='To add nearest '
+ 'relative relation details')
+ business_phone = fields.Char(string='Business Phone',
+ help='To add business phone number')
+ employed_at = fields.Char(string='Employed At',
+ help='To add where you employed at')
+
+ @api.onchange('is_adult_member')
+ def _onchange_is_adult_member(self):
+ """
+ When is_adult_member is True, is_customer becomes True and if
+ is_adult_member is False then, is_customer becomes False
+ """
+ self.is_customer = self.is_adult_member
diff --git a/adult_daycare_center/models/sale_order.py b/adult_daycare_center/models/sale_order.py
new file mode 100644
index 000000000..88262640b
--- /dev/null
+++ b/adult_daycare_center/models/sale_order.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions (Contact : odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import api, fields, models
+
+
+class SaleOrder(models.Model):
+ """ Inherit sale order and add adult person id"""
+ _inherit = 'sale.order'
+
+ adult_person_id = fields.Many2one('res.partner',
+ string='Adult Person',
+ domain="[('is_adult_member', '=', True)]",
+ help='To add is adult person or not')
+
+ @api.onchange('adult_person_id')
+ def _onchange_adult_person_id(self):
+ """
+ When adult_person_id is chosen corresponding activities loads
+ to the order lines
+ """
+ product = []
+ for rec in self.adult_person_id.daycare_activities_ids:
+ product_id = self.env['product.product'].search([
+ ('product_tmpl_id', '=', rec.product_id.id)])
+ product.append(product_id)
+ self.write({'order_line': [(5, 0)]})
+ self.update({
+ 'order_line': [(0, 0, {
+ 'product_id': rec.id,
+ 'product_uom': rec.uom_id.id,
+ 'product_uom_qty': 1,
+ 'name': rec.name,
+ 'price_unit': rec.list_price,
+ }) for rec in product],
+ })
diff --git a/adult_daycare_center/report/crm_lead_reports.xml b/adult_daycare_center/report/crm_lead_reports.xml
new file mode 100644
index 000000000..a661e0332
--- /dev/null
+++ b/adult_daycare_center/report/crm_lead_reports.xml
@@ -0,0 +1,372 @@
+
+
+
+
+ Adult Care Details
+ crm.lead
+ qweb-pdf
+ adult_daycare_center.adult_care_crm_lead_report
+ adult_daycare_center.adult_care_crm_lead_report
+
+ report
+
+
+
+
+
+
+ This fully integrated app allows for the management of adult day care
+ services and activities alongside Odoo's standard applications.
+ Its easy to use and very user-friendly.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+ Management of Adult dare care request
+
+
+
+
+
+
+
+
+
+ Printing Adult Dare Care registration pdf report
+
+
+
+
+
+
+
+
+
+
+ Quote/Sales order can be created from Day Care
+ Registration
+
+
+
+
+
+
+
+
+
+ Task generation from Sales order
+
+
+
+
+
+
+
+
+
+ Communication in open chatter for more details gathering.
+
+
+
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+
+
+ Create an Assessment Request
+
+ From the website, you can fill out the form and submit an
+ assessment request.
+
+
+
+
+
+
+
+
+ After submitting the form, you will get a view like this.
+
+
+
+
+
+ You can see all the request submitted by going to Day Care -->
+ Requests --> Day Care Requests.
+
+
+
+
+
+
+ A Lead will be generated. All datas can be seen under the Day
+ Care Information tab.
+
+
+
+
+
+
+
+ You can convert lead to opportunity by clicking on the button
+ 'CONVERT TO OPPORTUNITY'. So the request will be confirmed.
+
+
+
+
+
+
+ And the lead will be converted to opportunity. And also all the
+ daycare information will be there.
+
+
+
+
+
+
+ You can Update all the information in the form to corresponding
+ adult by clicking 'UPDATE ADULT INFORMATION' button.
+
+
+
+
+
+ You can see all the Adult Members data by going through Day
+ Care --> Members --> Adult Members.
+
+
+
+
+
+ You can see 'Is A Customer' and 'Is Adult Member'
+
+
+
+
+
+ Under the Applicant Information tab , the personal information
+ of the applicant can be seen.
+
+
+
+
+
+ Under the Medical Details tab , the medical detail of the
+ applicant can be seen.
+
+
+
+
+
+ Under the Lead Detail tab , all the lead datas can be seen.
+
+
+
+
+
+ You can create activity type by going to Day Care -->
+ Configuration --> Activity type.
+
+
+
+
+
+ You can create activities by going to Day Care --> Activities
+ --> Adult Activities.
+
+
+
+
+
+ We need to set the product type as Service Product
+
+
+
+
+
+ Need to set the Service tracking as 'Create a task in sales
+ order's project' from sales tab to create project and task from
+ sale order while confirm the sale order.
+
+
+
+
+
+ You can add Day Care Activities for the adult member under the
+ Day Care Activities tab.
+
+
+
+
+
+ You can create an order for the adult member by going to the
+ Day Care --> Orders --> Quotations.
+
+
+
+
+
+ When you choose the Adult Person, the corresponding activity
+ products will be loaded to the order line.
+
+
+
+
+
+ When you confirm the sale order, there will be project and task
+ created and can be accessed using the smart button marked.
+
+
+
+
+
+ This is the Project created.
+
+
+
+
+
+ And these are the tasks created under the project.
+
+
+
+
+
+ Under the Reports --> Activity Type, you can see all the
+ activity set to the adult members.
+
+
+
+
+
+ You can print the Adult Care Details of an Adult Member from
+ the members form view itself.
+
+
+
+
+
+
+
+
+ Likewise you can print the approved day care request detail
+ from its form view.
+
+
+
+
+
+
+
+
+ When you are printing Quotation/Sale order, the Adult Person
+ will be visible.
+ Your Day Care Assessment Request is "".
+
+ Please Note it for further communication.
+
+ You Will Receive Email from our Team
+ shortly.
+
+ Please reply to that mail for feature
+ conversation.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/advanced_chatter_view/static/src/xml/chatter_container.xml b/advanced_chatter_view/static/src/xml/chatter_container.xml
new file mode 100644
index 000000000..692a290e3
--- /dev/null
+++ b/advanced_chatter_view/static/src/xml/chatter_container.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
Message
+
+
+
Log Note
+
+
+
Activities
+
+
+
+
+
\ No newline at end of file
diff --git a/advanced_chatter_view/static/src/xml/chatter_topbar.xml b/advanced_chatter_view/static/src/xml/chatter_topbar.xml
new file mode 100644
index 000000000..251095b76
--- /dev/null
+++ b/advanced_chatter_view/static/src/xml/chatter_topbar.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/advanced_chatter_view/views/assets.xml b/advanced_chatter_view/views/assets.xml
new file mode 100644
index 000000000..72e0941f5
--- /dev/null
+++ b/advanced_chatter_view/views/assets.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/all_in_one_dynamic_custom_fields/README.rst b/all_in_one_dynamic_custom_fields/README.rst
new file mode 100644
index 000000000..dfc3a71e3
--- /dev/null
+++ b/all_in_one_dynamic_custom_fields/README.rst
@@ -0,0 +1,48 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+All In One Dynamic Fields
+=========================
+*This module is used to add dynamic field to form and tree view of any model as per requirement
+
+Configuration
+=============
+* Add users to the two user groups
+ - User: can see dynamic field created by administrator
+ - Administrator: can create new dynamic field
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+License
+-------
+Affero General Public License v3.0 (AGPL v3)
+
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Credits
+-------
+* Developer: (V14) Ruksana P, Contact: odoo@cybrosys.com
+
+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
+==========
+.. 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 `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/all_in_one_dynamic_custom_fields/__init__.py b/all_in_one_dynamic_custom_fields/__init__.py
new file mode 100644
index 000000000..8aa1e9d92
--- /dev/null
+++ b/all_in_one_dynamic_custom_fields/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ruksana P ()
+#
+# This program is free software: you can modify
+# it under the terms of the GNU Affero General Public License (AGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+###############################################################################
+from . import models
diff --git a/all_in_one_dynamic_custom_fields/__manifest__.py b/all_in_one_dynamic_custom_fields/__manifest__.py
new file mode 100644
index 000000000..e509916e0
--- /dev/null
+++ b/all_in_one_dynamic_custom_fields/__manifest__.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ruksana P ()
+#
+# This program is free software: you can modify
+# it under the terms of the GNU Affero General Public License (AGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+###############################################################################
+{
+ 'name': 'All In One Dynamic Fields',
+ 'version': '14.0.1.0.0',
+ 'category': 'Extra Tools',
+ 'summary': 'Create Custom Fields As Per Your Need Without Any Coding.',
+ 'description': """This module is used to add dynamic field of any type to
+ form and tree view of any model as per requirement.""",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['base'],
+ 'data': [
+ 'security/all_in_one_dynamic_custom_fields_groups.xml',
+ 'security/ir.model.access.csv',
+ 'data/dynamic_field_widgets_data.xml',
+ 'views/dynamic_fields_views.xml',
+ ],
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': True,
+}
diff --git a/all_in_one_dynamic_custom_fields/data/dynamic_field_widgets_data.xml b/all_in_one_dynamic_custom_fields/data/dynamic_field_widgets_data.xml
new file mode 100644
index 000000000..c20c0777b
--- /dev/null
+++ b/all_in_one_dynamic_custom_fields/data/dynamic_field_widgets_data.xml
@@ -0,0 +1,36 @@
+
+
+
+
+ image
+ Image
+
+
+ many2many_tags
+ Many2many Tags
+
+
+ binary
+ Binary
+
+
+ radio
+ Radio
+
+
+ priority
+ Priority
+
+
+ monetary
+ Monetary
+
+
+ selection
+ Selection
+
+
diff --git a/all_in_one_dynamic_custom_fields/doc/RELEASE_NOTES.md b/all_in_one_dynamic_custom_fields/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..83780d8b1
--- /dev/null
+++ b/all_in_one_dynamic_custom_fields/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 07.12.2023
+#### Version 14.0.1.0.0
+##### ADD
+- Initial commit for All In One Dynamic Fields
diff --git a/all_in_one_dynamic_custom_fields/models/__init__.py b/all_in_one_dynamic_custom_fields/models/__init__.py
new file mode 100644
index 000000000..8f8182a54
--- /dev/null
+++ b/all_in_one_dynamic_custom_fields/models/__init__.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ruksana P ()
+#
+# This program is free software: you can modify
+# it under the terms of the GNU Affero General Public License (AGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+###############################################################################
+from . import dynamic_fields
+from . import dynamic_field_widgets
+from . import ir_model_fields
diff --git a/all_in_one_dynamic_custom_fields/models/dynamic_field_widgets.py b/all_in_one_dynamic_custom_fields/models/dynamic_field_widgets.py
new file mode 100644
index 000000000..32beefe83
--- /dev/null
+++ b/all_in_one_dynamic_custom_fields/models/dynamic_field_widgets.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ruksana P ()
+#
+# This program is free software: you can modify
+# it under the terms of the GNU Affero General Public License (AGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+###############################################################################
+from odoo import models, fields
+
+
+class DynamicFieldWidgets(models.Model):
+ """ We can't filter a selection field dynamically so when we select a field
+ its widgets also need to change according to the selected field type,
+ we can't do it by a 'selection' field, need a 'Many2one' field.
+ """
+ _name = 'dynamic.field.widgets'
+ _rec_name = 'description'
+ _description = 'Field Widgets'
+
+ name = fields.Char(string="Name", help="Enter the name")
+ description = fields.Char(string="Description",
+ help="Enter the description of field")
diff --git a/all_in_one_dynamic_custom_fields/models/dynamic_fields.py b/all_in_one_dynamic_custom_fields/models/dynamic_fields.py
new file mode 100644
index 000000000..6c09e8391
--- /dev/null
+++ b/all_in_one_dynamic_custom_fields/models/dynamic_fields.py
@@ -0,0 +1,264 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ruksana P ()
+#
+# This program is free software: you can modify
+# it under the terms of the GNU Affero General Public License (AGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+###############################################################################
+from odoo import api, fields, models, _
+from odoo.exceptions import ValidationError
+
+
+class DynamicFields(models.Model):
+ _name = 'dynamic.fields'
+ _rec_name = 'field_description'
+ _description = 'Custom Dynamic Fields'
+ _inherit = 'ir.model.fields'
+
+ @api.model
+ def get_possible_field_types(self):
+ """Return all available field types other than 'One2many' and
+ 'reference' fields."""
+ field_list = sorted((key, key) for key in fields.MetaField.by_type)
+ field_list.remove(('one2many', 'one2many'))
+ field_list.remove(('reference', 'reference'))
+ return field_list
+
+ dynamic_field_id = fields.Many2one('ir.model.fields', string='Field Name',
+ required=True, ondelete='cascade',
+ help='Please Enter the name of field')
+ position = fields.Selection([('before', 'Before'), ('after', 'After')],
+ string='Position', required=True,
+ help='Select the position of dynamic field '
+ 'relative to reference field')
+ model_id = fields.Many2one('ir.model', string='Model', required=True,
+ index=True, ondelete='cascade',
+ help="Mention the model name for this field "
+ "to be added")
+ ref_model_id = fields.Many2one('ir.model', string='Reference Model',
+ help='Choose the model id for which we want '
+ 'to add field', index=True, )
+ selection_field = fields.Char(string="Selection Options",
+ help='Enter the selection options')
+ field_type = fields.Selection(selection='get_possible_field_types',
+ string='Field Type', required=True,
+ help='Select the field type here')
+ ttype = fields.Selection(string="Field Type", related='field_type',
+ help='Select the field type here')
+ widget_id = fields.Many2one('dynamic.field.widgets', string='Widget',
+ help='Choose the field widget')
+ groups = fields.Many2many('res.groups', 'employee_dynamic_fields_group_rel',
+ 'field_id', 'group_id', string='Group',
+ help='Enter the group for which this field is'
+ ' visible')
+ is_extra_features = fields.Boolean(string="Show Extra Properties",
+ help='Please enable this field for extra'
+ ' attributes')
+ status = fields.Selection([('draft', 'Draft'), ('form', 'Field Created'),
+ ('tree', 'Added in Tree View')], string='Status',
+ index=True, readonly=True, tracking=True,
+ copy=False, default='draft',
+ help='The status of dynamic field creation')
+ form_view_id = fields.Many2one('ir.ui.view', string="Form View ID",
+ required=True, help='Enter the form view id')
+ form_view_inherit = fields.Char(string="Form View Inherit Id",
+ related='form_view_id.xml_id',
+ help='Enter the inherited form view id')
+ custom_form_view_id = fields.Many2one('ir.ui.view', string="Form View ID",
+ help='Enter the custom form view id')
+ is_field_in_tree = fields.Boolean(string="Add Field to the Tree View",
+ help='Enable for tree view')
+ tree_view_id = fields.Many2one('ir.ui.view', string="Tree View ID",
+ help='Enter the tree view id', )
+ tree_view_inherit = fields.Char(string="Tree View Inherit Id",
+ related='tree_view_id.xml_id',
+ help='Enter the inherited tree view id')
+ custom_tree_view_id = fields.Many2one('ir.ui.view', string="Tree View ID",
+ help='Enter the custom tree view id')
+
+ @api.onchange('model_id')
+ def _onchange_model_id(self):
+ """Return the corresponding form, tree view id and field records"""
+ form_view_ids = self.model_id.view_ids.filtered(
+ lambda l: l.type == 'form' and l.mode == 'primary')
+ tree_view_ids = self.model_id.view_ids.filtered(
+ lambda l: l.type == 'tree' and l.mode == 'primary')
+ field_records = self.env['ir.model.fields'].sudo().search([
+ ('model', '=', self.model_id.model)])
+ field_list = [field.id for rec in field_records for field in rec]
+ return {'domain': {
+ 'form_view_id': [('id', 'in', form_view_ids.ids)],
+ 'tree_view_id': [('id', 'in', tree_view_ids.ids)],
+ 'dynamic_field_id': [('id', 'in', field_list)]
+ }}
+
+ @api.onchange('field_type')
+ def _onchange_field_type(self):
+ """When changing field type, this method returns widget of
+ corresponding field type"""
+ widget_mapping = {
+ 'binary': [('name', '=', 'image')],
+ 'many2many': [('name', 'in', ['many2many_tags', 'binary'])],
+ 'selection': [('name', 'in', ['radio', 'priority'])],
+ 'float': [('name', '=', 'monetary')],
+ 'many2one': [('name', '=', 'selection')],
+ }
+ return {'domain': {'widget': widget_mapping.get(self.field_type,
+ [('id', '=', False)])}}
+
+ def action_create_dynamic_fields(self):
+ """ The 'CREATE FIELD' button method is used to add new field to form
+ view of required model"""
+ self.write({'status': 'form'})
+ if self.field_type == 'monetary' and not self.env[
+ 'ir.model.fields'].sudo().search([('model', '=', self.model_id.id),
+ ('name', '=', 'currency_id')]):
+ self.env['ir.model.fields'].sudo().create({
+ 'name': 'x_currency_id',
+ 'field_description': 'Currency',
+ 'model_id': self.model_id.id,
+ 'ttype': 'many2one',
+ 'relation': 'res.currency',
+ 'is_dynamic_field': True
+ })
+ self.env['ir.model.fields'].sudo().create({
+ 'name': self.name,
+ 'field_description': self.field_description,
+ 'model_id': self.model_id.id,
+ 'ttype': self.field_type,
+ 'relation': self.ref_model_id.model,
+ 'required': self.required,
+ 'index': self.index,
+ 'store': self.store,
+ 'help': self.help,
+ 'readonly': self.readonly,
+ 'selection': self.selection_field,
+ 'copied': self.copied,
+ 'is_dynamic_field': True
+ })
+ inherit_form_view_name = str(
+ self.form_view_id.name) + ".inherit.dynamic.custom." + str(
+ self.field_description) + ".field"
+ xml_id = self.form_view_id.xml_id
+ inherit_id = self.env.ref(xml_id)
+ arch_base = _(''
+ ''
+ ''
+ ''
+ ''
+ '') % (self.dynamic_field_id.name,
+ self.position, self.name)
+ if self.widget_id:
+ arch_base = _(''
+ ''
+ ''
+ ''
+ ''
+ '') % (self.dynamic_field_id.name,
+ self.position, self.name,
+ self.widget_id.name)
+ self.custom_form_view_id = self.env['ir.ui.view'].sudo().create({
+ 'name': inherit_form_view_name,
+ 'type': 'form',
+ 'model': self.model_id.model,
+ 'mode': 'extension',
+ 'inherit_id': inherit_id.id,
+ 'arch_base': arch_base,
+ 'active': True
+ })
+ return {
+ 'type': 'ir.actions.client',
+ 'tag': 'reload',
+ }
+
+ def action_add_field_to_tree_view(self):
+ """ Button 'Add to Tree View' is used add the created dynamic field to
+ tree view of corresponding model"""
+ tree_view = self.env['ir.ui.view'].search(
+ [('model', '=', self.model_id.model), ('type', '=', 'tree')])
+ view_id_tree = self.env.ref(self.tree_view_inherit)
+ if tree_view and view_id_tree.arch:
+ if self.is_field_in_tree:
+ inherit_tree_view_name = str(
+ self.tree_view_id.name) + ".inherit.dynamic.custom" + \
+ str(self.field_description) + ".field"
+ tree_view_arch_base = _(
+ ''
+ ''
+ ''''''
+ ''''''
+ ''''''
+ '''''') % self.name
+ self.custom_tree_view_id = self.env['ir.ui.view'].sudo().create(
+ {'name': inherit_tree_view_name,
+ 'type': 'tree',
+ 'model': self.model_id.model,
+ 'mode': 'extension',
+ 'inherit_id': self.tree_view_id.id,
+ 'arch_base': tree_view_arch_base,
+ 'active': True})
+ self.write({'status': 'tree'})
+ return {
+ 'type': 'ir.actions.client',
+ 'tag': 'reload',
+ }
+ else:
+ raise ValidationError(
+ _('Error! Selected Model You cannot add a custom field to the '
+ 'tree view.'))
+
+ @api.depends('model_id')
+ @api.onchange('model_id')
+ def onchange_domain(self):
+ """Return the fields that currently present in the form"""
+ form_view_ids = self.model_id.view_ids.filtered(
+ lambda l: l.type == 'form' and l.mode == 'primary')
+ tree_view_ids = self.model_id.view_ids.filtered(
+ lambda l: l.type == 'tree' and l.mode == 'primary')
+ field_records = self.env['ir.model.fields'].sudo().search([
+ ('model', '=', self.model_id.model)])
+ field_list = [field.id for record in field_records for field in record]
+ return {'domain': {
+ 'form_view_id': [('id', 'in', form_view_ids.ids)],
+ 'tree_view_id': [('id', 'in', tree_view_ids.ids)],
+ 'position_field': [('id', 'in', field_list)]
+ }}
+
+ @api.depends('field_type')
+ @api.onchange('field_type')
+ def onchange_field_type(self):
+ """"Onchange method of field_type, when changing field type it will
+ return domain for widget """
+ widget_mappings = {
+ 'binary': [('name', '=', 'image')],
+ 'many2many': [('name', 'in', ['many2many_tags', 'binary'])],
+ 'selection': [('name', 'in', ['radio', 'priority'])],
+ 'float': [('name', '=', 'monetary')],
+ 'many2one': [('name', '=', 'selection')],
+ }
+ return {'domain': {'widget': widget_mappings.get(self.field_type,
+ [('id', '=', False)])}}
+
+ def unlink(self):
+ """ Unlinking method of dynamic field"""
+ if self.form_view_id:
+ self.form_view_id.active = False
+ if self.tree_view_id:
+ self.tree_view_id.active = False
+ result = super().unlink()
+ return result
diff --git a/all_in_one_dynamic_custom_fields/models/ir_model_fields.py b/all_in_one_dynamic_custom_fields/models/ir_model_fields.py
new file mode 100644
index 000000000..2621d3a8c
--- /dev/null
+++ b/all_in_one_dynamic_custom_fields/models/ir_model_fields.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ruksana P ()
+#
+# This program is free software: you can modify
+# it under the terms of the GNU Affero General Public License (AGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+###############################################################################
+from odoo import models, fields
+
+
+class IrModelFields(models.Model):
+ """Adding a new field to understand the dynamically created fields."""
+ _inherit = 'ir.model.fields'
+
+ is_dynamic_field = fields.Boolean(string="Dynamic Field",
+ help='Enable this field for dynamic field'
+ 'creation')
diff --git a/all_in_one_dynamic_custom_fields/security/all_in_one_dynamic_custom_fields_groups.xml b/all_in_one_dynamic_custom_fields/security/all_in_one_dynamic_custom_fields_groups.xml
new file mode 100644
index 000000000..a268d1181
--- /dev/null
+++ b/all_in_one_dynamic_custom_fields/security/all_in_one_dynamic_custom_fields_groups.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ All in One Custom Dynamic Fields
+ Helps you handle your All-in-One Custom
+ Dynamic Fields Permissions
+
+ 5
+
+
+ User
+
+
+
+ Administrator
+
+
+
+
+
diff --git a/all_in_one_dynamic_custom_fields/security/ir.model.access.csv b/all_in_one_dynamic_custom_fields/security/ir.model.access.csv
new file mode 100644
index 000000000..4115f1f3c
--- /dev/null
+++ b/all_in_one_dynamic_custom_fields/security/ir.model.access.csv
@@ -0,0 +1,4 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_all_in_one_dynamic_custom_fields_administrator,dynamic.fields.administrator,model_dynamic_fields,all_in_one_dynamic_custom_fields.all_in_one_dynamic_custom_fields_group_administrator,1,1,1,1
+access_all_in_one_dynamic_custom_fields_user,dynamic.fields.user,model_dynamic_fields,all_in_one_dynamic_custom_fields.all_in_one_dynamic_custom_fields_group_user,1,0,0,0
+access_dynamic_field_widgets_administrator,dynamic.field.widgets.administrator,model_dynamic_field_widgets,all_in_one_dynamic_custom_fields.all_in_one_dynamic_custom_fields_group_administrator,1,1,1,1
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/check.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/check.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/chevron.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/chevron.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/cogs.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/cogs.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/consultation.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/consultation.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/ecom-black.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/ecom-black.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/education-black.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/education-black.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/hotel-black.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/hotel-black.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/license.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/license.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/lifebuoy.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/lifebuoy.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/manufacturing-black.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/manufacturing-black.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/pos-black.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/pos-black.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/puzzle.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/puzzle.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/restaurant-black.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/restaurant-black.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/service-black.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/service-black.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/trading-black.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/trading-black.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/training.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/training.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/update.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/update.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/user.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/user.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/icons/wrench.png b/all_in_one_dynamic_custom_fields/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/icons/wrench.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/misc/categories.png b/all_in_one_dynamic_custom_fields/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/misc/categories.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/misc/check-box.png b/all_in_one_dynamic_custom_fields/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/misc/check-box.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/misc/compass.png b/all_in_one_dynamic_custom_fields/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/misc/compass.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/misc/corporate.png b/all_in_one_dynamic_custom_fields/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/misc/corporate.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/misc/customer-support.png b/all_in_one_dynamic_custom_fields/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/misc/customer-support.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/misc/cybrosys-logo.png b/all_in_one_dynamic_custom_fields/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/misc/features.png b/all_in_one_dynamic_custom_fields/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/misc/features.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/misc/logo.png b/all_in_one_dynamic_custom_fields/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/misc/logo.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/misc/pictures.png b/all_in_one_dynamic_custom_fields/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/misc/pictures.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/misc/pie-chart.png b/all_in_one_dynamic_custom_fields/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/misc/pie-chart.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/misc/right-arrow.png b/all_in_one_dynamic_custom_fields/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/misc/right-arrow.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/misc/star.png b/all_in_one_dynamic_custom_fields/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/misc/star.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/misc/support.png b/all_in_one_dynamic_custom_fields/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/misc/support.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/misc/whatsapp.png b/all_in_one_dynamic_custom_fields/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/misc/whatsapp.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/modules/custom_list.png b/all_in_one_dynamic_custom_fields/static/description/assets/modules/custom_list.png
new file mode 100644
index 000000000..0d6fb2983
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/modules/custom_list.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/modules/hide_menu.png b/all_in_one_dynamic_custom_fields/static/description/assets/modules/hide_menu.png
new file mode 100644
index 000000000..edf70dd15
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/modules/hide_menu.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/modules/list_view_image.png b/all_in_one_dynamic_custom_fields/static/description/assets/modules/list_view_image.png
new file mode 100644
index 000000000..510d36ae9
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/modules/list_view_image.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/modules/login_qr.png b/all_in_one_dynamic_custom_fields/static/description/assets/modules/login_qr.png
new file mode 100644
index 000000000..b8fb879b0
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/modules/login_qr.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/modules/to_do_list.png b/all_in_one_dynamic_custom_fields/static/description/assets/modules/to_do_list.png
new file mode 100644
index 000000000..36fdb1ae4
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/modules/to_do_list.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/modules/user_log.png b/all_in_one_dynamic_custom_fields/static/description/assets/modules/user_log.png
new file mode 100644
index 000000000..ec782bb13
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/modules/user_log.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/1.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/1.png
new file mode 100644
index 000000000..0bfcbb092
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/1.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/10.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/10.png
new file mode 100644
index 000000000..395abb1a0
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/10.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/11.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/11.png
new file mode 100644
index 000000000..ba94a7fa4
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/11.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/2.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/2.png
new file mode 100644
index 000000000..83fbfdc8a
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/2.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/3.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/3.png
new file mode 100644
index 000000000..258d85c58
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/3.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/4.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/4.png
new file mode 100644
index 000000000..7a06a2777
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/4.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/5.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/5.png
new file mode 100644
index 000000000..72d3fec2a
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/5.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/6.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/6.png
new file mode 100644
index 000000000..ea896bc6e
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/6.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/7.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/7.png
new file mode 100644
index 000000000..cacc5f84e
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/7.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/8.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/8.png
new file mode 100644
index 000000000..28f086d15
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/8.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/9.png b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/9.png
new file mode 100644
index 000000000..aa70981cb
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/9.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/hero.gif b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..b87e964b8
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/assets/screenshots/hero.gif differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/banner.png b/all_in_one_dynamic_custom_fields/static/description/banner.png
new file mode 100644
index 000000000..28b9db980
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/banner.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/icon.png b/all_in_one_dynamic_custom_fields/static/description/icon.png
new file mode 100644
index 000000000..c07ba4d92
Binary files /dev/null and b/all_in_one_dynamic_custom_fields/static/description/icon.png differ
diff --git a/all_in_one_dynamic_custom_fields/static/description/index.html b/all_in_one_dynamic_custom_fields/static/description/index.html
new file mode 100644
index 000000000..971bcaa14
--- /dev/null
+++ b/all_in_one_dynamic_custom_fields/static/description/index.html
@@ -0,0 +1,662 @@
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+ Odoo.sh
+
+
+
+
+
+
+
+
+
+ All In One Dynamic Fields
+
+ Create Custom Fields In Any Module Without Any Coding.
+ All in One Custom Dynamic Fields module helps with easy creation of
+ custom fields in as per you need without any coding.
+ This module helps to add new fields on the form view and tree view as
+ per requirement.
+
+
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+ Creates custom fields in any modules without coding.
+
+
+
+ The position of the fields can be easily set.
+
+
+
+ Widgets can be selected for custom fields.
+
+
+
+ Can set the field properties (help,required,copied,read-only,indexed)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+
+ Create Custom Dynamic Fields
+
+
+ After installation, give the user access to 'All in One Custom
+ Dynamic Fields' from user settings.
+
+
+
+
+
+ Create Fields
+
+
+ Open the module and Click CREATE button to create new custom
+ fields and fill the details.Then click the CREATE FIELD.
+
+
+
+
+
+ Model
+
+
+ Select the Model for which you want to create a custom
+ field.
+
+
+
+
+ Field Type
+
+
+ Choose the Field Type
+
+
+
+
+ List / Tree View
+
+
+ The custom field also we can add to the module List/Tree view.
+
+
+
+
+
+
+
+ Sale Order Form View
+
+
+ A new custom field is created in the sale order form view.
+
+
+
+
+ Sale Order Tree/List View
+
+
+ A new custom field is created in the sale order tree view.
+
+
+
+
+
+
diff --git a/auto_database_backup/data/data.xml b/auto_database_backup/data/data.xml
index 8ce1a5625..82b7e00af 100644
--- a/auto_database_backup/data/data.xml
+++ b/auto_database_backup/data/data.xml
@@ -12,7 +12,7 @@
1days-1
- False
+ True
@@ -128,4 +128,4 @@
-
\ No newline at end of file
+
diff --git a/auto_logout_idle_user_odoo/README.rst b/auto_logout_idle_user_odoo/README.rst
new file mode 100755
index 000000000..41d0251ec
--- /dev/null
+++ b/auto_logout_idle_user_odoo/README.rst
@@ -0,0 +1,50 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Logout Idle User
+================
+user can see their personal information and can download
+
+
+Configuration
+=============
+* No additional configurations needed
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+Credits
+-------
+* Developer : (V14) Yadhukrishnan, odoo@cybrosys.com
+
+
+Contacts
+--------
+* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
+
+License
+-------
+Affero General Public License, Version 3 `(AGPL v3).
+`__
+
+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 `__
+
+Further information
+===================
+HTML Description: ``__
+
+
diff --git a/auto_logout_idle_user_odoo/__init__.py b/auto_logout_idle_user_odoo/__init__.py
new file mode 100755
index 000000000..1e015eaa4
--- /dev/null
+++ b/auto_logout_idle_user_odoo/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Yadhukrishnan K (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+################################################################################
+from . import controllers
+from . import models
diff --git a/auto_logout_idle_user_odoo/__manifest__.py b/auto_logout_idle_user_odoo/__manifest__.py
new file mode 100755
index 000000000..997c1d0e4
--- /dev/null
+++ b/auto_logout_idle_user_odoo/__manifest__.py
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Yadhukrishnan K (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+################################################################################
+{
+ 'name': 'Logout Idle User',
+ 'version': '14.0.1.0.0',
+ 'summary': 'Auto logout idle user with fixed time',
+ 'description': """User can fix the timer in the user's profile, if the user
+ is in idle mode the user will logout from session
+ automatically""",
+ 'category': 'Extra Tools',
+ 'author': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'license': 'AGPL-3',
+ 'depends': ['base'],
+ 'images': ['static/description/banner.png'],
+ 'data': [
+ 'views/res_users_views.xml',
+ 'views/assets.xml'
+ ],
+ 'qweb': ['static/src/xml/systray.xml'],
+ 'installable': True,
+ 'application': False,
+ 'auto_install': False
+}
diff --git a/auto_logout_idle_user_odoo/controllers/__init__.py b/auto_logout_idle_user_odoo/controllers/__init__.py
new file mode 100755
index 000000000..7a9ee874c
--- /dev/null
+++ b/auto_logout_idle_user_odoo/controllers/__init__.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Yadhukrishnan K (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+################################################################################
+from . import auto_logout_idle_user_odoo
diff --git a/auto_logout_idle_user_odoo/controllers/auto_logout_idle_user_odoo.py b/auto_logout_idle_user_odoo/controllers/auto_logout_idle_user_odoo.py
new file mode 100755
index 000000000..65a15cd3e
--- /dev/null
+++ b/auto_logout_idle_user_odoo/controllers/auto_logout_idle_user_odoo.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Yadhukrishnan K (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+################################################################################
+from odoo import http
+from odoo.http import request
+
+
+class AutoLogoutIdleUSer(http.Controller):
+ """
+ The EasyLanguageSelector passing minute that selected in the login user
+ account.
+
+ Methods:
+ get_idle_time(self):
+ when the page is loaded adding total activated languages options
+ to the selection field.
+ return a list variable.
+
+ """
+
+ @http.route('/get_idle_time/timer', auth='public', type='json')
+ def get_idle_time(self):
+ """
+
+ Summary:
+ Getting value that selected from the login user account and pass it
+ to the js function.
+ return:
+ type:It is a variable, that contain selected minutes.
+
+ """
+ if request.env.user.enable_idle:
+ return request.env.user.idle_time
diff --git a/auto_logout_idle_user_odoo/doc/RELEASE_NOTES.md b/auto_logout_idle_user_odoo/doc/RELEASE_NOTES.md
new file mode 100755
index 000000000..d346c5b4f
--- /dev/null
+++ b/auto_logout_idle_user_odoo/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 02.09.2023
+#### Version 14.0.1.0.0
+##### ADD
+- Initial Commit for Logout Idle User
diff --git a/auto_logout_idle_user_odoo/models/__init__.py b/auto_logout_idle_user_odoo/models/__init__.py
new file mode 100755
index 000000000..af6528027
--- /dev/null
+++ b/auto_logout_idle_user_odoo/models/__init__.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Yadhukrishnan K (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+################################################################################
+from . import res_users
diff --git a/auto_logout_idle_user_odoo/models/res_users.py b/auto_logout_idle_user_odoo/models/res_users.py
new file mode 100755
index 000000000..dc163a518
--- /dev/null
+++ b/auto_logout_idle_user_odoo/models/res_users.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Yadhukrishnan K (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+################################################################################
+from odoo import models, fields
+
+
+class ResUsers(models.Model):
+ """In the class Users is used to adding fields in 'res.users' for getting
+ idle time of user"""
+ _inherit = "res.users"
+
+ enable_idle = fields.Boolean(string="Enable Idle Time",
+ help="Enable Idle Timer")
+ idle_time = fields.Integer(string="Idle Time (In minutes)", default=10,
+ help="Set Idle Time For theis User")
+
+ _sql_constraints = [
+ ('positive_idle_time', 'CHECK(idle_time >= 1)',
+ 'Idle Time should be a positive number.'),
+ ]
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/check.png b/auto_logout_idle_user_odoo/static/description/assets/icons/check.png
new file mode 100755
index 000000000..c8e85f51d
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/check.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/chevron.png b/auto_logout_idle_user_odoo/static/description/assets/icons/chevron.png
new file mode 100755
index 000000000..2089293d6
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/chevron.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/cogs.png b/auto_logout_idle_user_odoo/static/description/assets/icons/cogs.png
new file mode 100755
index 000000000..95d0bad62
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/cogs.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/consultation.png b/auto_logout_idle_user_odoo/static/description/assets/icons/consultation.png
new file mode 100755
index 000000000..8319d4baa
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/consultation.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/ecom-black.png b/auto_logout_idle_user_odoo/static/description/assets/icons/ecom-black.png
new file mode 100755
index 000000000..a9385ff13
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/ecom-black.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/education-black.png b/auto_logout_idle_user_odoo/static/description/assets/icons/education-black.png
new file mode 100755
index 000000000..3eb09b27b
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/education-black.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/hotel-black.png b/auto_logout_idle_user_odoo/static/description/assets/icons/hotel-black.png
new file mode 100755
index 000000000..130f613be
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/hotel-black.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/license.png b/auto_logout_idle_user_odoo/static/description/assets/icons/license.png
new file mode 100755
index 000000000..a5869797e
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/license.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/lifebuoy.png b/auto_logout_idle_user_odoo/static/description/assets/icons/lifebuoy.png
new file mode 100755
index 000000000..658d56ccc
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/lifebuoy.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/manufacturing-black.png b/auto_logout_idle_user_odoo/static/description/assets/icons/manufacturing-black.png
new file mode 100755
index 000000000..697eb0e9f
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/manufacturing-black.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/pos-black.png b/auto_logout_idle_user_odoo/static/description/assets/icons/pos-black.png
new file mode 100755
index 000000000..97c0f90c1
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/pos-black.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/puzzle.png b/auto_logout_idle_user_odoo/static/description/assets/icons/puzzle.png
new file mode 100755
index 000000000..65cf854e7
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/puzzle.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/restaurant-black.png b/auto_logout_idle_user_odoo/static/description/assets/icons/restaurant-black.png
new file mode 100755
index 000000000..4a35eb939
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/restaurant-black.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/service-black.png b/auto_logout_idle_user_odoo/static/description/assets/icons/service-black.png
new file mode 100755
index 000000000..301ab51cb
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/service-black.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/trading-black.png b/auto_logout_idle_user_odoo/static/description/assets/icons/trading-black.png
new file mode 100755
index 000000000..9398ba2f1
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/trading-black.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/training.png b/auto_logout_idle_user_odoo/static/description/assets/icons/training.png
new file mode 100755
index 000000000..884ca024d
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/training.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/update.png b/auto_logout_idle_user_odoo/static/description/assets/icons/update.png
new file mode 100755
index 000000000..ecbc5a01a
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/update.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/user.png b/auto_logout_idle_user_odoo/static/description/assets/icons/user.png
new file mode 100755
index 000000000..6ffb23d9f
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/user.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/icons/wrench.png b/auto_logout_idle_user_odoo/static/description/assets/icons/wrench.png
new file mode 100755
index 000000000..6c04dea0f
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/icons/wrench.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/misc/categories.png b/auto_logout_idle_user_odoo/static/description/assets/misc/categories.png
new file mode 100755
index 000000000..bedf1e0b1
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/misc/categories.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/misc/check-box.png b/auto_logout_idle_user_odoo/static/description/assets/misc/check-box.png
new file mode 100755
index 000000000..42caf24b9
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/misc/check-box.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/misc/compass.png b/auto_logout_idle_user_odoo/static/description/assets/misc/compass.png
new file mode 100755
index 000000000..d5fed8faa
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/misc/compass.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/misc/corporate.png b/auto_logout_idle_user_odoo/static/description/assets/misc/corporate.png
new file mode 100755
index 000000000..2eb13edbf
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/misc/corporate.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/misc/customer-support.png b/auto_logout_idle_user_odoo/static/description/assets/misc/customer-support.png
new file mode 100755
index 000000000..79efc72ed
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/misc/customer-support.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/misc/cybrosys-logo.png b/auto_logout_idle_user_odoo/static/description/assets/misc/cybrosys-logo.png
new file mode 100755
index 000000000..cc3cc0ccf
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/misc/features.png b/auto_logout_idle_user_odoo/static/description/assets/misc/features.png
new file mode 100755
index 000000000..b41769f77
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/misc/features.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/misc/logo.png b/auto_logout_idle_user_odoo/static/description/assets/misc/logo.png
new file mode 100755
index 000000000..478462d3e
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/misc/logo.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/misc/pictures.png b/auto_logout_idle_user_odoo/static/description/assets/misc/pictures.png
new file mode 100755
index 000000000..56d255fe9
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/misc/pictures.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/misc/pie-chart.png b/auto_logout_idle_user_odoo/static/description/assets/misc/pie-chart.png
new file mode 100755
index 000000000..426e05244
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/misc/pie-chart.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/misc/right-arrow.png b/auto_logout_idle_user_odoo/static/description/assets/misc/right-arrow.png
new file mode 100755
index 000000000..730984a06
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/misc/right-arrow.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/misc/star.png b/auto_logout_idle_user_odoo/static/description/assets/misc/star.png
new file mode 100755
index 000000000..2eb9ab29f
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/misc/star.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/misc/support.png b/auto_logout_idle_user_odoo/static/description/assets/misc/support.png
new file mode 100755
index 000000000..4f18b8b82
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/misc/support.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/misc/whatsapp.png b/auto_logout_idle_user_odoo/static/description/assets/misc/whatsapp.png
new file mode 100755
index 000000000..d513a5356
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/misc/whatsapp.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/modules/l1.png b/auto_logout_idle_user_odoo/static/description/assets/modules/l1.png
new file mode 100755
index 000000000..84fe94e80
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/modules/l1.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/modules/l2.png b/auto_logout_idle_user_odoo/static/description/assets/modules/l2.png
new file mode 100755
index 000000000..74ce220e6
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/modules/l2.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/modules/l3.png b/auto_logout_idle_user_odoo/static/description/assets/modules/l3.png
new file mode 100755
index 000000000..c6d92c16d
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/modules/l3.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/modules/l4.png b/auto_logout_idle_user_odoo/static/description/assets/modules/l4.png
new file mode 100755
index 000000000..c5932894b
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/modules/l4.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/modules/l5.png b/auto_logout_idle_user_odoo/static/description/assets/modules/l5.png
new file mode 100755
index 000000000..e0964f1e3
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/modules/l5.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/screenshots/Screenshot.png b/auto_logout_idle_user_odoo/static/description/assets/screenshots/Screenshot.png
new file mode 100755
index 000000000..8264cabdf
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/screenshots/Screenshot.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/screenshots/Screenshot2.png b/auto_logout_idle_user_odoo/static/description/assets/screenshots/Screenshot2.png
new file mode 100755
index 000000000..01929f453
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/screenshots/Screenshot2.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/screenshots/Screenshot3.png b/auto_logout_idle_user_odoo/static/description/assets/screenshots/Screenshot3.png
new file mode 100755
index 000000000..f66a6d909
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/screenshots/Screenshot3.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/assets/screenshots/hero.gif b/auto_logout_idle_user_odoo/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..8605b5e03
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/assets/screenshots/hero.gif differ
diff --git a/auto_logout_idle_user_odoo/static/description/banner.png b/auto_logout_idle_user_odoo/static/description/banner.png
new file mode 100755
index 000000000..2771b75d3
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/banner.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/icon.png b/auto_logout_idle_user_odoo/static/description/icon.png
new file mode 100755
index 000000000..ca7fb560e
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/icon.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/images/checked.png b/auto_logout_idle_user_odoo/static/description/images/checked.png
new file mode 100755
index 000000000..c8e371fae
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/images/checked.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/images/hero.png b/auto_logout_idle_user_odoo/static/description/images/hero.png
new file mode 100755
index 000000000..4ad813b12
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/images/hero.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/images/link.png b/auto_logout_idle_user_odoo/static/description/images/link.png
new file mode 100755
index 000000000..7e85ab08b
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/images/link.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/images/list.png b/auto_logout_idle_user_odoo/static/description/images/list.png
new file mode 100755
index 000000000..a5bc5bc64
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/images/list.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/images/logo.png b/auto_logout_idle_user_odoo/static/description/images/logo.png
new file mode 100755
index 000000000..478462d3e
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/images/logo.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/images/modules/approval_image.png b/auto_logout_idle_user_odoo/static/description/images/modules/approval_image.png
new file mode 100755
index 000000000..84fe94e80
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/images/modules/approval_image.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/images/modules/dynamic_image.png b/auto_logout_idle_user_odoo/static/description/images/modules/dynamic_image.png
new file mode 100755
index 000000000..74ce220e6
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/images/modules/dynamic_image.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/images/modules/mulitple-ref_image.png b/auto_logout_idle_user_odoo/static/description/images/modules/mulitple-ref_image.png
new file mode 100755
index 000000000..e0964f1e3
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/images/modules/mulitple-ref_image.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/images/modules/pos_image.png b/auto_logout_idle_user_odoo/static/description/images/modules/pos_image.png
new file mode 100755
index 000000000..c5932894b
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/images/modules/pos_image.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/images/modules/shopify_image.png b/auto_logout_idle_user_odoo/static/description/images/modules/shopify_image.png
new file mode 100755
index 000000000..c6d92c16d
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/images/modules/shopify_image.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/images/my leave analysis.png b/auto_logout_idle_user_odoo/static/description/images/my leave analysis.png
new file mode 100755
index 000000000..d197936e0
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/images/my leave analysis.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/images/partner.png b/auto_logout_idle_user_odoo/static/description/images/partner.png
new file mode 100755
index 000000000..33b2bdfd1
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/images/partner.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/images/printer.png b/auto_logout_idle_user_odoo/static/description/images/printer.png
new file mode 100755
index 000000000..30cd46210
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/images/printer.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/images/return.png b/auto_logout_idle_user_odoo/static/description/images/return.png
new file mode 100755
index 000000000..653707227
Binary files /dev/null and b/auto_logout_idle_user_odoo/static/description/images/return.png differ
diff --git a/auto_logout_idle_user_odoo/static/description/index.html b/auto_logout_idle_user_odoo/static/description/index.html
new file mode 100755
index 000000000..140ad4b2c
--- /dev/null
+++ b/auto_logout_idle_user_odoo/static/description/index.html
@@ -0,0 +1,543 @@
+
+
\ No newline at end of file
diff --git a/auto_logout_idle_user_odoo/static/src/js/systray.js b/auto_logout_idle_user_odoo/static/src/js/systray.js
new file mode 100755
index 000000000..a41a1ac6b
--- /dev/null
+++ b/auto_logout_idle_user_odoo/static/src/js/systray.js
@@ -0,0 +1,122 @@
+odoo.define('auto_logout_idle_user_odoo.systray', function(require) {
+ "use strict";
+ var SystrayMenu = require('web.SystrayMenu');
+ var Widget = require('web.Widget');
+ var ajax = require('web.ajax');
+ var TimerWidget = Widget.extend({
+ template: 'TimerSystray',
+ willStart: function() {
+ var self = this;
+ return this._super().then(function() {
+ self.get_idle_time();
+ });
+ },
+ /**
+ Getting minutes through python for the corresponding user
+ */
+ get_idle_time: function() {
+ var self = this
+ var now = new Date().getTime();
+ ajax.rpc('/get_idle_time/timer').then(function(data) {
+ if (data) {
+ self.minutes = data
+ self.idle_timer()
+ }
+ })
+ },
+ /**
+ Passing values of the countdown to the xml
+ */
+ idle_timer: function() {
+ var self = this;
+ var nowt = new Date().getTime();
+ var date = new Date(nowt);
+ date.setMinutes(date.getMinutes() + self.minutes);
+ var updatedTimestamp = date.getTime();
+ /** Running the count down using setInterval function */
+ var idle = setInterval(function() {
+ var now = new Date().getTime();
+ var distance = updatedTimestamp - now;
+ var days = Math.floor(distance / (1000 * 60 * 60 * 24));
+ var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
+ var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
+ var seconds = Math.floor((distance % (1000 * 60)) / 1000);
+ if (hours && days) {
+ self.el.querySelector("#idle_timer").innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";
+ } else if (hours) {
+ self.el.querySelector("#idle_timer").innerHTML = hours + "h " + minutes + "m " + seconds + "s ";
+ } else {
+ self.el.querySelector("#idle_timer").innerHTML = minutes + "m " + seconds + "s ";
+ if(minutes == 1 && seconds == 0){
+ self.displayNotification({
+ message: ("You will be logged out in 1 minute."),
+ sticky: true,
+ })
+ }
+ }
+ /** If the countdown is zero the link is redirect to the login page*/
+ if (distance < 0) {
+ clearInterval(idle);
+ self.el.querySelector("#idle_timer").innerHTML = "EXPIRED";
+ location.replace("/web/session/logout")
+ }
+ }, 1000);
+ /**
+ Checking if the onmousemove event is occur
+ */
+ document.onmousemove = () => {
+ var nowt = new Date().getTime();
+ var date = new Date(nowt);
+ date.setMinutes(date.getMinutes() + self.minutes);
+ updatedTimestamp = date.getTime();
+
+ };
+ /**
+ Checking if the onkeypress event is occur
+ */
+ document.onkeypress = () => {
+ var nowt = new Date().getTime();
+ var date = new Date(nowt);
+ date.setMinutes(date.getMinutes() + self.minutes);
+ updatedTimestamp = date.getTime();
+ };
+ /**
+ Checking if the onclick event is occur
+ */
+ document.onclick = () => {
+ var nowt = new Date().getTime();
+ var date = new Date(nowt);
+ date.setMinutes(date.getMinutes() + self.minutes);
+ updatedTimestamp = date.getTime();
+ };
+ /**
+ Checking if the ontouchstart event is occur
+ */
+ document.ontouchstart = () => {
+ var nowt = new Date().getTime();
+ var date = new Date(nowt);
+ date.setMinutes(date.getMinutes() + self.minutes);
+ updatedTimestamp = date.getTime();
+ }
+ /**
+ Checking if the onmousedown event is occur
+ */
+ document.onmousedown = () => {
+ var nowt = new Date().getTime();
+ var date = new Date(nowt);
+ date.setMinutes(date.getMinutes() + self.minutes);
+ updatedTimestamp = date.getTime();
+ }
+ /**
+ Checking if the onload event is occur
+ */
+ document.onload = () => {
+ var nowt = new Date().getTime();
+ var date = new Date(nowt);
+ date.setMinutes(date.getMinutes() + self.minutes);
+ updatedTimestamp = date.getTime();
+ }
+ },
+ });
+ SystrayMenu.Items.push(TimerWidget);
+})
\ No newline at end of file
diff --git a/auto_logout_idle_user_odoo/static/src/xml/systray.xml b/auto_logout_idle_user_odoo/static/src/xml/systray.xml
new file mode 100755
index 000000000..4872bd457
--- /dev/null
+++ b/auto_logout_idle_user_odoo/static/src/xml/systray.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/auto_logout_idle_user_odoo/views/assets.xml b/auto_logout_idle_user_odoo/views/assets.xml
new file mode 100755
index 000000000..15c3ee8b0
--- /dev/null
+++ b/auto_logout_idle_user_odoo/views/assets.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/auto_logout_idle_user_odoo/views/res_users_views.xml b/auto_logout_idle_user_odoo/views/res_users_views.xml
new file mode 100755
index 000000000..7a1070073
--- /dev/null
+++ b/auto_logout_idle_user_odoo/views/res_users_views.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ res.users.view.form.inherit.auto.logout.idle.user.odoo
+ res.users
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/barcode_capturing_sale_purchase/README.rst b/barcode_capturing_sale_purchase/README.rst
new file mode 100644
index 000000000..095a4dbdd
--- /dev/null
+++ b/barcode_capturing_sale_purchase/README.rst
@@ -0,0 +1,47 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Scan Product Barcode for Sale & Purchase
+========================================
+
+This module captures barcode of products through system camera and add product to order line.
+
+Configuration
+=============
+No additional configuration required
+
+Company
+=======
+* `Cybrosys Techno Solutions `__
+
+License
+=======
+GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3)
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Credits
+=======
+* Developer: (V14) RAHUL C K, Contact: odoo@cybrosys.com
+
+Contacts
+========
+* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
+
+Bug Tracker
+===========
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Maintainer
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit https://www.cybrosys.com.
+
+Further information
+===================
+HTML Description: ``__
diff --git a/barcode_capturing_sale_purchase/__init__.py b/barcode_capturing_sale_purchase/__init__.py
new file mode 100644
index 000000000..d835cf9c5
--- /dev/null
+++ b/barcode_capturing_sale_purchase/__init__.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+# 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/barcode_capturing_sale_purchase/__manifest__.py b/barcode_capturing_sale_purchase/__manifest__.py
new file mode 100644
index 000000000..b91581e54
--- /dev/null
+++ b/barcode_capturing_sale_purchase/__manifest__.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+# 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': "Scan Product Barcode for Sale & Purchase",
+ 'version': '14.0.1.0.0',
+ 'category': 'Extra Tools',
+ 'summary': """Scan Barcode from Camera.""",
+ 'description': """Products can be added to sale or purchase orders by
+ scanning barcode of products through system camera. Products will be
+ automatically added to order line once the barcode is identified.""",
+ 'author': "Cybrosys Techno Solutions",
+ 'company': "Cybrosys Techno Solutions",
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['sale_management', 'purchase'],
+ 'data': [
+ 'views/sale_order_views.xml',
+ 'views/purchase_order_views.xml',
+ 'views/assets.xml'
+ ],
+ 'images': ['static/description/banner.jpg'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/barcode_capturing_sale_purchase/doc/RELEASE_NOTES.md b/barcode_capturing_sale_purchase/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..7ca93e6cf
--- /dev/null
+++ b/barcode_capturing_sale_purchase/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 20.10.2023
+#### Version 14.0.1.0.0
+#### ADD
+- Initial commit for Scan Product Barcode for Sale & Purchase
diff --git a/barcode_capturing_sale_purchase/models/__init__.py b/barcode_capturing_sale_purchase/models/__init__.py
new file mode 100644
index 000000000..086d660be
--- /dev/null
+++ b/barcode_capturing_sale_purchase/models/__init__.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+# 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 purchase_order
+from . import sale_order
diff --git a/barcode_capturing_sale_purchase/models/purchase_order.py b/barcode_capturing_sale_purchase/models/purchase_order.py
new file mode 100644
index 000000000..435766816
--- /dev/null
+++ b/barcode_capturing_sale_purchase/models/purchase_order.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+# 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 api, models
+
+
+class PurchaseOrder(models.Model):
+ """Purchase order is inherited and barcode scanning function is written
+ to add the scanned product to order line."""
+ _inherit = 'purchase.order'
+
+ @api.model
+ def barcode_search(self, args):
+ """Purchase Order line is created and product is added by checking the
+ barcode"""
+ product = self.env['product.product'].search([('barcode', '=', args[0])])
+ if not product:
+ return True
+ else:
+ purchase_order = self.browse(args[1])
+ if purchase_order.order_line:
+ for rec in purchase_order.order_line:
+ if rec.product_id == product:
+ rec.product_qty += 1
+ return
+ purchase_order.order_line.create({
+ 'order_id': purchase_order.id,
+ 'product_id': product.id,
+ 'product_uom_qty': 1
+ })
diff --git a/barcode_capturing_sale_purchase/models/sale_order.py b/barcode_capturing_sale_purchase/models/sale_order.py
new file mode 100644
index 000000000..a0b93e638
--- /dev/null
+++ b/barcode_capturing_sale_purchase/models/sale_order.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+# 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 api, models
+
+
+class SaleOrder(models.Model):
+ """Purchase order is inherited and barcode scanning function is written
+ to add the scanned product to order line."""
+ _inherit = 'sale.order'
+
+ @api.model
+ def barcode_search(self, args):
+ """Sale Order line is created and product is added by checking
+ the barcode"""
+ product = self.env['product.product'].search([('barcode', '=', args[0])])
+ if not product:
+ return True
+ else:
+ sale_order = self.browse(args[1])
+ if sale_order.order_line:
+ for rec in sale_order.order_line:
+ if rec.product_id == product:
+ rec.product_uom_qty += 1
+ return
+ sale_order.order_line.create({
+ 'order_id': sale_order.id,
+ 'product_id': product.id,
+ 'product_uom_qty': 1
+ })
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/check.png b/barcode_capturing_sale_purchase/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/check.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/chevron.png b/barcode_capturing_sale_purchase/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/chevron.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/cogs.png b/barcode_capturing_sale_purchase/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/cogs.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/consultation.png b/barcode_capturing_sale_purchase/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/consultation.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/ecom-black.png b/barcode_capturing_sale_purchase/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/ecom-black.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/education-black.png b/barcode_capturing_sale_purchase/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/education-black.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/hotel-black.png b/barcode_capturing_sale_purchase/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/hotel-black.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/license.png b/barcode_capturing_sale_purchase/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/license.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/lifebuoy.png b/barcode_capturing_sale_purchase/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/lifebuoy.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/manufacturing-black.png b/barcode_capturing_sale_purchase/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/manufacturing-black.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/pos-black.png b/barcode_capturing_sale_purchase/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/pos-black.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/puzzle.png b/barcode_capturing_sale_purchase/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/puzzle.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/restaurant-black.png b/barcode_capturing_sale_purchase/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/restaurant-black.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/service-black.png b/barcode_capturing_sale_purchase/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/service-black.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/trading-black.png b/barcode_capturing_sale_purchase/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/trading-black.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/training.png b/barcode_capturing_sale_purchase/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/training.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/update.png b/barcode_capturing_sale_purchase/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/update.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/user.png b/barcode_capturing_sale_purchase/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/user.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/icons/wrench.png b/barcode_capturing_sale_purchase/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/icons/wrench.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/misc/categories.png b/barcode_capturing_sale_purchase/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/misc/categories.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/misc/check-box.png b/barcode_capturing_sale_purchase/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/misc/check-box.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/misc/compass.png b/barcode_capturing_sale_purchase/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/misc/compass.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/misc/corporate.png b/barcode_capturing_sale_purchase/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/misc/corporate.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/misc/customer-support.png b/barcode_capturing_sale_purchase/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/misc/customer-support.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/misc/cybrosys-logo.png b/barcode_capturing_sale_purchase/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/misc/features.png b/barcode_capturing_sale_purchase/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/misc/features.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/misc/logo.png b/barcode_capturing_sale_purchase/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/misc/logo.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/misc/pictures.png b/barcode_capturing_sale_purchase/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/misc/pictures.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/misc/pie-chart.png b/barcode_capturing_sale_purchase/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/misc/pie-chart.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/misc/right-arrow.png b/barcode_capturing_sale_purchase/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/misc/right-arrow.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/misc/star.png b/barcode_capturing_sale_purchase/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/misc/star.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/misc/support.png b/barcode_capturing_sale_purchase/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/misc/support.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/misc/whatsapp.png b/barcode_capturing_sale_purchase/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/misc/whatsapp.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/modules/m1.png b/barcode_capturing_sale_purchase/static/description/assets/modules/m1.png
new file mode 100644
index 000000000..8960b7cb4
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/modules/m1.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/modules/m2.png b/barcode_capturing_sale_purchase/static/description/assets/modules/m2.png
new file mode 100644
index 000000000..be440eb23
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/modules/m2.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/modules/m3.jpg b/barcode_capturing_sale_purchase/static/description/assets/modules/m3.jpg
new file mode 100644
index 000000000..34a960d47
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/modules/m3.jpg differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/modules/m4.png b/barcode_capturing_sale_purchase/static/description/assets/modules/m4.png
new file mode 100644
index 000000000..395b22fff
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/modules/m4.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/modules/m5.png b/barcode_capturing_sale_purchase/static/description/assets/modules/m5.png
new file mode 100644
index 000000000..5f1708a43
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/modules/m5.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/modules/m6.png b/barcode_capturing_sale_purchase/static/description/assets/modules/m6.png
new file mode 100644
index 000000000..999ba4333
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/modules/m6.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/screenshots/hero.gif b/barcode_capturing_sale_purchase/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..aa1c4886a
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/screenshots/hero.gif differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_1.png b/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_1.png
new file mode 100644
index 000000000..8eafe8222
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_1.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_2.png b/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_2.png
new file mode 100644
index 000000000..06f01e873
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_2.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_3.png b/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_3.png
new file mode 100644
index 000000000..0d36c9ee9
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_3.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_4.png b/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_4.png
new file mode 100644
index 000000000..4aade540d
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_4.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_5.png b/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_5.png
new file mode 100644
index 000000000..6fdf8ce20
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/assets/screenshots/image_5.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/banner.jpg b/barcode_capturing_sale_purchase/static/description/banner.jpg
new file mode 100644
index 000000000..05c23782e
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/banner.jpg differ
diff --git a/barcode_capturing_sale_purchase/static/description/cybro_logo.png b/barcode_capturing_sale_purchase/static/description/cybro_logo.png
new file mode 100644
index 000000000..bb309114c
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/cybro_logo.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/icon.png b/barcode_capturing_sale_purchase/static/description/icon.png
new file mode 100644
index 000000000..dca901a6f
Binary files /dev/null and b/barcode_capturing_sale_purchase/static/description/icon.png differ
diff --git a/barcode_capturing_sale_purchase/static/description/index.html b/barcode_capturing_sale_purchase/static/description/index.html
new file mode 100644
index 000000000..53ff255e1
--- /dev/null
+++ b/barcode_capturing_sale_purchase/static/description/index.html
@@ -0,0 +1,633 @@
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+
+
+
+
+
+
+
+
+ Scan Product Barcode for Sale & Purchase
+
+
+ Scan Barcode of Products Through Camera in Sale and Purchase.
+ This module helps to add multiple products for bom components and create new bom by choosing multiple products.
+
+
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+ Select multiple components in BOM
+
+
+
+ Create new BOM from product variants list view by selecting multiple products as components.
+
+
+
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+
+
+ Add multiple components.
+
+
+ Click 'SELECT PRODUCTS' button in BOM to add multiple components.
+
+
+
+
+
+ Click Add a line button from the wizard to choose products.
+
+
+
+
+
+
+
+ Select multiple products as of our need.
+
+
+
+
+
+
+
+ In this wizard we can see the selected products. Click SELECT button.
+
+
+
+
+
+
+
+ Products are added to the BOM components.
+
+
+
+
+
+
+
+ Create new BOM by choosing multiple products.
+
+
+ Go to Product Variants list view => Select multiple products. Go to Action button and click 'Create BOM'
+
+
+
+
+
+ A wizard will appear for creating a BOM. Simply provide the final product, quantity, and units required, and then click on 'CREATE BOM' to proceed.
+
+
diff --git a/bom_multiple_product/views/mrp_bom_views.xml b/bom_multiple_product/views/mrp_bom_views.xml
new file mode 100755
index 000000000..34f3c8e2e
--- /dev/null
+++ b/bom_multiple_product/views/mrp_bom_views.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ mrp.bom.view.form.inherit.bom.multiple.product
+ mrp.bom
+
+
+
+
+
+
+
+
diff --git a/bom_multiple_product/views/product_product_views.xml b/bom_multiple_product/views/product_product_views.xml
new file mode 100755
index 000000000..59c2b4344
--- /dev/null
+++ b/bom_multiple_product/views/product_product_views.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ Create BOM
+
+
+ code
+
+ action = records.action_create_bom()
+
+
+
diff --git a/bom_multiple_product/wizard/__init__.py b/bom_multiple_product/wizard/__init__.py
new file mode 100755
index 000000000..1293493d1
--- /dev/null
+++ b/bom_multiple_product/wizard/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# This program is free software: you can modify
+# it under the terms of the GNU Affero General Public License (AGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+#############################################################################
+from . import bom_products
+from . import product_bom
diff --git a/bom_multiple_product/wizard/bom_products.py b/bom_multiple_product/wizard/bom_products.py
new file mode 100755
index 000000000..867439141
--- /dev/null
+++ b/bom_multiple_product/wizard/bom_products.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# This program is free software: you can modify
+# it under the terms of the GNU Affero General Public License (AGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+#############################################################################
+from odoo import fields, models
+
+
+class BomProducts(models.TransientModel):
+ """ Wizard for selecting multiple products for bom """
+ _name = 'bom.products'
+ _description = 'BOM Products'
+
+ bom_id = fields.Many2one('mrp.bom', string='Bill of Material',
+ help='Corresponding Bill of Material')
+ product_ids = fields.Many2many('product.product', string='Products',
+ help='Component products of BOM')
+
+ def action_add_components(self):
+ """Add components to the bom line"""
+ for rec in self.product_ids:
+ self.bom_id.sudo().write(
+ {'bom_line_ids': [(0, 0, {
+ 'product_id': rec.id,
+ 'product_qty': 1,
+ })]})
diff --git a/bom_multiple_product/wizard/bom_products_views.xml b/bom_multiple_product/wizard/bom_products_views.xml
new file mode 100755
index 000000000..304a83016
--- /dev/null
+++ b/bom_multiple_product/wizard/bom_products_views.xml
@@ -0,0 +1,60 @@
+
+
+
+
+ bom.products.view.form
+ bom.products
+
+
+
+
+
+
+ product.bom.view.form
+ product.bom
+
+
+
+
+
diff --git a/bom_multiple_product/wizard/product_bom.py b/bom_multiple_product/wizard/product_bom.py
new file mode 100644
index 000000000..6ad314765
--- /dev/null
+++ b/bom_multiple_product/wizard/product_bom.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# This program is free software: you can modify
+# it under the terms of the GNU Affero General Public License (AGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+#############################################################################
+from odoo import fields, models
+
+
+class ProductBom(models.TransientModel):
+ """ Model create bom directly from products variants """
+ _name = 'product.bom'
+ _description = 'BOM From Products'
+
+ product_id = fields.Many2one(
+ 'product.product', string='Finished Product',
+ required=True,
+ help='The Product we want to Manufacture',
+ domain="[('type', 'in', ['product', 'consu'])]")
+ quantity = fields.Float(
+ string='Quantity',
+ help='Choose The Quantity of Finished Product',
+ required=True, default=1)
+ uom_id = fields.Many2one(
+ 'uom.uom', string='Unit Of Measure',
+ help='Select the Unit of Measure of Finished Product',
+ required=True)
+ product_ids = fields.Many2many(
+ 'product.product', string='Components',
+ help='The selected products for bom')
+
+ def action_create_bom(self):
+ """Create bill of materials from products"""
+ self.env['mrp.bom'].sudo().create({
+ 'product_id': self.product_id.id,
+ 'product_tmpl_id': self.product_id.product_tmpl_id.id,
+ 'product_qty': self.quantity,
+ 'product_uom_id': self.uom_id.id,
+ 'bom_line_ids': [(0, 0, {'product_id': rec.id,
+ 'product_qty': 1
+ }) for rec in self.product_ids]
+ })
diff --git a/bom_total_cost/README.rst b/bom_total_cost/README.rst
new file mode 100644
index 000000000..fa1db99f0
--- /dev/null
+++ b/bom_total_cost/README.rst
@@ -0,0 +1,46 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Show Total Cost on BOM
+======================
+This Module Helps to Show the Total Cost of a BOM Based on the Components Cost price.
+
+Configuration
+=============
+* No additional configurations needed
+
+License
+-------
+General Public License, Version 3 (AGPL v3).
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+Credits
+-------
+* Developer: (V14) Ayana KP, 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 `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/bom_total_cost/__init__.py b/bom_total_cost/__init__.py
new file mode 100644
index 000000000..3c1444e9b
--- /dev/null
+++ b/bom_total_cost/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions()
+#
+# 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/bom_total_cost/__manifest__.py b/bom_total_cost/__manifest__.py
new file mode 100644
index 000000000..d5c7c1088
--- /dev/null
+++ b/bom_total_cost/__manifest__.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions()
+#
+# 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': 'Show Total Cost on BOM',
+ 'version': '14.0.1.0.0',
+ 'category': "Manufacturing",
+ 'summary': """This Module Helps to Show the Total Cost of a BOM """,
+ 'description': """This Module Helps to Show the 'Total cost per Unit and
+ Total Cost of a BOM' Based on the Components Cost price""",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'depends': ['base', 'mrp'],
+ 'data': [
+ 'views/mrp_bom_views.xml'
+ ],
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/bom_total_cost/doc/RELEASE_NOTES.md b/bom_total_cost/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..27c13a371
--- /dev/null
+++ b/bom_total_cost/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 21.08.2023
+#### Version 14.0.1.0.0
+#### ADD
+- Initial Commit for Show Total Cost on BOM
diff --git a/bom_total_cost/models/__init__.py b/bom_total_cost/models/__init__.py
new file mode 100644
index 000000000..8d614a698
--- /dev/null
+++ b/bom_total_cost/models/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions()
+#
+# 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 mrp_bom
diff --git a/bom_total_cost/models/mrp_bom.py b/bom_total_cost/models/mrp_bom.py
new file mode 100644
index 000000000..f3781e958
--- /dev/null
+++ b/bom_total_cost/models/mrp_bom.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Techno Solutions()
+#
+# 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 api, fields, models
+
+
+class MrpBom(models.Model):
+ """Inherit mrp.bom model to add total cost of BOM"""
+ _inherit = 'mrp.bom'
+ currency_id = fields.Many2one(related='company_id.currency_id',
+ string='Currency', help='Currency of company')
+ bom_cost = fields.Monetary(string='Cost Per Unit',
+ compute='_compute_bom_cost',
+ currency_field='currency_id',
+ help="Total cost of the BOM based on the raw "
+ "materials cost price per unit")
+ total_bom_cost = fields.Monetary(string='Total Cost',
+ compute='_compute_bom_cost',
+ currency_field='currency_id',
+ help="Total cost of the BOM based on the "
+ "raw materials cost price")
+
+ @api.depends('bom_line_ids.product_id', 'product_qty')
+ def _compute_bom_cost(self):
+ """Compute total cost per unit"""
+ for rec in self:
+ rec.bom_cost = sum(rec.bom_line_ids.mapped('cost'))
+ rec.total_bom_cost = rec.bom_cost * rec.product_qty
+
+
+class MrpBomLine(models.Model):
+ """Inherit mrp.bom.line model to add total cost of order line"""
+ _inherit = 'mrp.bom.line'
+ cost = fields.Float(string='Unit Cost',
+ help='The total price of the product is calculated '
+ 'based on the quantity.')
+
+ @api.onchange('product_qty', 'product_id')
+ def _onchange_product_id(self):
+ """ Computing total cost of each component"""
+ self.cost = self.product_id.standard_price * self.product_qty
diff --git a/bom_total_cost/static/description/assets/icons/check.png b/bom_total_cost/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/check.png differ
diff --git a/bom_total_cost/static/description/assets/icons/chevron.png b/bom_total_cost/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/chevron.png differ
diff --git a/bom_total_cost/static/description/assets/icons/cogs.png b/bom_total_cost/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/cogs.png differ
diff --git a/bom_total_cost/static/description/assets/icons/consultation.png b/bom_total_cost/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/consultation.png differ
diff --git a/bom_total_cost/static/description/assets/icons/ecom-black.png b/bom_total_cost/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/ecom-black.png differ
diff --git a/bom_total_cost/static/description/assets/icons/education-black.png b/bom_total_cost/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/education-black.png differ
diff --git a/bom_total_cost/static/description/assets/icons/hotel-black.png b/bom_total_cost/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/hotel-black.png differ
diff --git a/bom_total_cost/static/description/assets/icons/license.png b/bom_total_cost/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/license.png differ
diff --git a/bom_total_cost/static/description/assets/icons/lifebuoy.png b/bom_total_cost/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/lifebuoy.png differ
diff --git a/bom_total_cost/static/description/assets/icons/manufacturing-black.png b/bom_total_cost/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/manufacturing-black.png differ
diff --git a/bom_total_cost/static/description/assets/icons/pos-black.png b/bom_total_cost/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/pos-black.png differ
diff --git a/bom_total_cost/static/description/assets/icons/puzzle.png b/bom_total_cost/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/puzzle.png differ
diff --git a/bom_total_cost/static/description/assets/icons/restaurant-black.png b/bom_total_cost/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/restaurant-black.png differ
diff --git a/bom_total_cost/static/description/assets/icons/service-black.png b/bom_total_cost/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/service-black.png differ
diff --git a/bom_total_cost/static/description/assets/icons/trading-black.png b/bom_total_cost/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/trading-black.png differ
diff --git a/bom_total_cost/static/description/assets/icons/training.png b/bom_total_cost/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/training.png differ
diff --git a/bom_total_cost/static/description/assets/icons/update.png b/bom_total_cost/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/update.png differ
diff --git a/bom_total_cost/static/description/assets/icons/user.png b/bom_total_cost/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/user.png differ
diff --git a/bom_total_cost/static/description/assets/icons/wrench.png b/bom_total_cost/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/bom_total_cost/static/description/assets/icons/wrench.png differ
diff --git a/bom_total_cost/static/description/assets/misc/categories.png b/bom_total_cost/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/bom_total_cost/static/description/assets/misc/categories.png differ
diff --git a/bom_total_cost/static/description/assets/misc/check-box.png b/bom_total_cost/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/bom_total_cost/static/description/assets/misc/check-box.png differ
diff --git a/bom_total_cost/static/description/assets/misc/compass.png b/bom_total_cost/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/bom_total_cost/static/description/assets/misc/compass.png differ
diff --git a/bom_total_cost/static/description/assets/misc/corporate.png b/bom_total_cost/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/bom_total_cost/static/description/assets/misc/corporate.png differ
diff --git a/bom_total_cost/static/description/assets/misc/customer-support.png b/bom_total_cost/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/bom_total_cost/static/description/assets/misc/customer-support.png differ
diff --git a/bom_total_cost/static/description/assets/misc/cybrosys-logo.png b/bom_total_cost/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/bom_total_cost/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/bom_total_cost/static/description/assets/misc/features.png b/bom_total_cost/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/bom_total_cost/static/description/assets/misc/features.png differ
diff --git a/bom_total_cost/static/description/assets/misc/logo.png b/bom_total_cost/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/bom_total_cost/static/description/assets/misc/logo.png differ
diff --git a/bom_total_cost/static/description/assets/misc/pictures.png b/bom_total_cost/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/bom_total_cost/static/description/assets/misc/pictures.png differ
diff --git a/bom_total_cost/static/description/assets/misc/pie-chart.png b/bom_total_cost/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/bom_total_cost/static/description/assets/misc/pie-chart.png differ
diff --git a/bom_total_cost/static/description/assets/misc/right-arrow.png b/bom_total_cost/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/bom_total_cost/static/description/assets/misc/right-arrow.png differ
diff --git a/bom_total_cost/static/description/assets/misc/star.png b/bom_total_cost/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/bom_total_cost/static/description/assets/misc/star.png differ
diff --git a/bom_total_cost/static/description/assets/misc/support.png b/bom_total_cost/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/bom_total_cost/static/description/assets/misc/support.png differ
diff --git a/bom_total_cost/static/description/assets/misc/whatsapp.png b/bom_total_cost/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/bom_total_cost/static/description/assets/misc/whatsapp.png differ
diff --git a/bom_total_cost/static/description/assets/screenshots/bom1.png b/bom_total_cost/static/description/assets/screenshots/bom1.png
new file mode 100644
index 000000000..a3b67836a
Binary files /dev/null and b/bom_total_cost/static/description/assets/screenshots/bom1.png differ
diff --git a/bom_total_cost/static/description/assets/screenshots/bom2.png b/bom_total_cost/static/description/assets/screenshots/bom2.png
new file mode 100644
index 000000000..7b413b75f
Binary files /dev/null and b/bom_total_cost/static/description/assets/screenshots/bom2.png differ
diff --git a/bom_total_cost/static/description/assets/screenshots/bom3.png b/bom_total_cost/static/description/assets/screenshots/bom3.png
new file mode 100644
index 000000000..43d3ba6a1
Binary files /dev/null and b/bom_total_cost/static/description/assets/screenshots/bom3.png differ
diff --git a/bom_total_cost/static/description/assets/screenshots/product_bom.png b/bom_total_cost/static/description/assets/screenshots/product_bom.png
new file mode 100644
index 000000000..39d35f40b
Binary files /dev/null and b/bom_total_cost/static/description/assets/screenshots/product_bom.png differ
diff --git a/bom_total_cost/static/description/assets/screenshots/v16-hero-69.gif b/bom_total_cost/static/description/assets/screenshots/v16-hero-69.gif
new file mode 100644
index 000000000..a8f9c695b
Binary files /dev/null and b/bom_total_cost/static/description/assets/screenshots/v16-hero-69.gif differ
diff --git a/bom_total_cost/static/description/banner.png b/bom_total_cost/static/description/banner.png
new file mode 100644
index 000000000..08f6e4e9f
Binary files /dev/null and b/bom_total_cost/static/description/banner.png differ
diff --git a/bom_total_cost/static/description/icon.png b/bom_total_cost/static/description/icon.png
new file mode 100644
index 000000000..e50dd9c18
Binary files /dev/null and b/bom_total_cost/static/description/icon.png differ
diff --git a/bom_total_cost/static/description/index.html b/bom_total_cost/static/description/index.html
new file mode 100644
index 000000000..d9ff0528e
--- /dev/null
+++ b/bom_total_cost/static/description/index.html
@@ -0,0 +1,569 @@
+
+
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+ Odoo.sh
+
+
+
+
+
+
+
+
+
+ Show Total Cost on BOM
+ This Module Helps to Show the Total Cost of a BOM Based on the
+ Components Cost.
+
+ The BOM, or Bill of Materials, is a list
+ of all the components or parts that make up a finished product.
+ The Total Cost of a BOM refers to the total cost of all the
+ components and resources needed to manufacture the product. This
+ includes the cost of raw materials and purchased components
+ producing the product.
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+ Cost Per Unit
+
+ This module helps to show the total cost per unit based on the components cost.
+
+
+
+
+
+
+
+
+
+ Cost of Product
+
+ This module helps to show the total cost per unit based on the components cost.
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ Cost Per Unit
+
+ User can view the total Cost Per Unit of a BOM.
+
+
+
+
+ Cost of Product
+
+ The cost of product is multiplied to quantity is considered as the total cost of a BOM.
diff --git a/bom_total_cost/views/mrp_bom_views.xml b/bom_total_cost/views/mrp_bom_views.xml
new file mode 100644
index 000000000..a638e22cc
--- /dev/null
+++ b/bom_total_cost/views/mrp_bom_views.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ mrp.bom.view.form.inherit.bom.total.cost
+
+ mrp.bom
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/call_for_price_website/README.rst b/call_for_price_website/README.rst
new file mode 100644
index 000000000..e03a74be4
--- /dev/null
+++ b/call_for_price_website/README.rst
@@ -0,0 +1,47 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Website Call For Price
+=======================
+This module helps hide specific products prices from the shop and using 'Call for Price' button customer can sent their details, the user will follow up the details and get the product price.
+
+Configuration
+=============
+* No additional configuration required
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+License
+-------
+General Public License, Version 3 (LGPL v3).
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Credits
+-------
+Developer:(V14) Mruthul Raj, 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 `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/call_for_price_website/__init__.py b/call_for_price_website/__init__.py
new file mode 100644
index 000000000..1b1eab231
--- /dev/null
+++ b/call_for_price_website/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Mruthul Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from . import models
diff --git a/call_for_price_website/__manifest__.py b/call_for_price_website/__manifest__.py
new file mode 100644
index 000000000..6bee67838
--- /dev/null
+++ b/call_for_price_website/__manifest__.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Mruthul Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+{
+ 'name': 'Website Call For Price',
+ 'version': '14.0.1.0.0',
+ 'category': 'Website',
+ 'summary': """Helps to hide price of specified product from shop""",
+ 'description': "The module aims to help website owners conceal the prices "
+ "of certain products from their online store. Instead of "
+ "displaying the price and an Add to Cart button, the module "
+ "replaces it with a customizable call-for-price message or "
+ "button. Customers interested in these products can use the "
+ "form that appears upon clicking the button to request more "
+ "information about the price, and they will receive a call "
+ "back from the store to discuss the pricing details",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'depends': ['website_sale_wishlist', 'website_sale_comparison'],
+ 'data': ['security/ir.model.access.csv',
+ 'views/shop_hide_call_price_templates.xml',
+ 'views/shop_grid_templates.xml',
+ 'views/wishlist_hide_price_templates.xml',
+ 'views/hide_price_templates.xml',
+ 'views/compare_templates.xml',
+ 'views/call_for_price_views.xml',
+ 'views/product_template_views.xml',
+ 'views/assets.xml'],
+ 'images': ['static/description/banner.jpg'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/call_for_price_website/doc/RELEASE_NOTES.md b/call_for_price_website/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..ae7741dd3
--- /dev/null
+++ b/call_for_price_website/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 22.11.2023
+#### Version 14.0.1.0.0
+#### ADD
+- Initial Commit for Website Call For Price
diff --git a/call_for_price_website/models/__init__.py b/call_for_price_website/models/__init__.py
new file mode 100644
index 000000000..b012510be
--- /dev/null
+++ b/call_for_price_website/models/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Mruthul Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from . import call_price
+from . import product_template
diff --git a/call_for_price_website/models/call_price.py b/call_for_price_website/models/call_price.py
new file mode 100644
index 000000000..4b801fb8b
--- /dev/null
+++ b/call_for_price_website/models/call_price.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Mruthul Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from odoo import fields, models
+
+
+class CallPrice(models.Model):
+ """Creating a model to record all the request the get from website."""
+ _name = 'call.price'
+ _description = 'Call for Price'
+ _rec_name = 'product_id'
+
+ first_name = fields.Char(string="First Name", help="First Name of user")
+ last_name = fields.Char(string="Last Name", help="Last Name of user")
+ product_id = fields.Many2one('product.product', string="Product",
+ help="In which product they are requesting "
+ "price")
+ email = fields.Char(string="Email", help="Users email for contact")
+ phone = fields.Char(string="Contact No.", help="Users contact number for "
+ "contacting")
+ quantity = fields.Integer(string="Quantity",
+ help="How much quantity of product price "
+ "they want know")
+ message = fields.Char(string="Message",
+ help="If any messages for referring")
+ state = fields.Selection([('draft', 'Draft'), ('done', 'Done'),
+ ('cancel', 'Cancel')],
+ default="draft", help="Call for price requests "
+ "stage")
+
+ def action_done(self):
+ """The price of the requested product will be updated for them,
+ form state is done"""
+ self.write({'state': 'done'})
+
+ def action_cancel(self):
+ """Cancel the form or change the state to cancel"""
+ self.write({'state': 'cancel'})
diff --git a/call_for_price_website/models/product_template.py b/call_for_price_website/models/product_template.py
new file mode 100644
index 000000000..66561dadd
--- /dev/null
+++ b/call_for_price_website/models/product_template.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Mruthul Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from odoo import fields, models
+
+
+class ProductTemplate(models.Model):
+ """Inheriting product variants model for adding a field that will hide
+ price from website"""
+ _inherit = 'product.template'
+
+ price_call = fields.Boolean(string="Call for Price",
+ help="This will hide the price and cart button "
+ "from shop and customer can request by "
+ "calling for price")
diff --git a/call_for_price_website/security/ir.model.access.csv b/call_for_price_website/security/ir.model.access.csv
new file mode 100644
index 000000000..1896ea717
--- /dev/null
+++ b/call_for_price_website/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_call_price_user,access.call.price.user,model_call_price,base.group_user,1,1,1,1
diff --git a/call_for_price_website/static/description/assets/icons/check.png b/call_for_price_website/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/check.png differ
diff --git a/call_for_price_website/static/description/assets/icons/chevron.png b/call_for_price_website/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/chevron.png differ
diff --git a/call_for_price_website/static/description/assets/icons/cogs.png b/call_for_price_website/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/cogs.png differ
diff --git a/call_for_price_website/static/description/assets/icons/consultation.png b/call_for_price_website/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/consultation.png differ
diff --git a/call_for_price_website/static/description/assets/icons/ecom-black.png b/call_for_price_website/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/ecom-black.png differ
diff --git a/call_for_price_website/static/description/assets/icons/education-black.png b/call_for_price_website/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/education-black.png differ
diff --git a/call_for_price_website/static/description/assets/icons/hotel-black.png b/call_for_price_website/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/hotel-black.png differ
diff --git a/call_for_price_website/static/description/assets/icons/license.png b/call_for_price_website/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/license.png differ
diff --git a/call_for_price_website/static/description/assets/icons/lifebuoy.png b/call_for_price_website/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/lifebuoy.png differ
diff --git a/call_for_price_website/static/description/assets/icons/manufacturing-black.png b/call_for_price_website/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/manufacturing-black.png differ
diff --git a/call_for_price_website/static/description/assets/icons/pos-black.png b/call_for_price_website/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/pos-black.png differ
diff --git a/call_for_price_website/static/description/assets/icons/puzzle.png b/call_for_price_website/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/puzzle.png differ
diff --git a/call_for_price_website/static/description/assets/icons/restaurant-black.png b/call_for_price_website/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/restaurant-black.png differ
diff --git a/call_for_price_website/static/description/assets/icons/service-black.png b/call_for_price_website/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/service-black.png differ
diff --git a/call_for_price_website/static/description/assets/icons/trading-black.png b/call_for_price_website/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/trading-black.png differ
diff --git a/call_for_price_website/static/description/assets/icons/training.png b/call_for_price_website/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/training.png differ
diff --git a/call_for_price_website/static/description/assets/icons/update.png b/call_for_price_website/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/update.png differ
diff --git a/call_for_price_website/static/description/assets/icons/user.png b/call_for_price_website/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/user.png differ
diff --git a/call_for_price_website/static/description/assets/icons/wrench.png b/call_for_price_website/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/call_for_price_website/static/description/assets/icons/wrench.png differ
diff --git a/call_for_price_website/static/description/assets/misc/categories.png b/call_for_price_website/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/call_for_price_website/static/description/assets/misc/categories.png differ
diff --git a/call_for_price_website/static/description/assets/misc/check-box.png b/call_for_price_website/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/call_for_price_website/static/description/assets/misc/check-box.png differ
diff --git a/call_for_price_website/static/description/assets/misc/compass.png b/call_for_price_website/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/call_for_price_website/static/description/assets/misc/compass.png differ
diff --git a/call_for_price_website/static/description/assets/misc/corporate.png b/call_for_price_website/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/call_for_price_website/static/description/assets/misc/corporate.png differ
diff --git a/call_for_price_website/static/description/assets/misc/customer-support.png b/call_for_price_website/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/call_for_price_website/static/description/assets/misc/customer-support.png differ
diff --git a/call_for_price_website/static/description/assets/misc/cybrosys-logo.png b/call_for_price_website/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/call_for_price_website/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/call_for_price_website/static/description/assets/misc/features.png b/call_for_price_website/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/call_for_price_website/static/description/assets/misc/features.png differ
diff --git a/call_for_price_website/static/description/assets/misc/logo.png b/call_for_price_website/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/call_for_price_website/static/description/assets/misc/logo.png differ
diff --git a/call_for_price_website/static/description/assets/misc/pictures.png b/call_for_price_website/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/call_for_price_website/static/description/assets/misc/pictures.png differ
diff --git a/call_for_price_website/static/description/assets/misc/pie-chart.png b/call_for_price_website/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/call_for_price_website/static/description/assets/misc/pie-chart.png differ
diff --git a/call_for_price_website/static/description/assets/misc/right-arrow.png b/call_for_price_website/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/call_for_price_website/static/description/assets/misc/right-arrow.png differ
diff --git a/call_for_price_website/static/description/assets/misc/star.png b/call_for_price_website/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/call_for_price_website/static/description/assets/misc/star.png differ
diff --git a/call_for_price_website/static/description/assets/misc/support.png b/call_for_price_website/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/call_for_price_website/static/description/assets/misc/support.png differ
diff --git a/call_for_price_website/static/description/assets/misc/whatsapp.png b/call_for_price_website/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/call_for_price_website/static/description/assets/misc/whatsapp.png differ
diff --git a/call_for_price_website/static/description/assets/modules/1.png b/call_for_price_website/static/description/assets/modules/1.png
new file mode 100644
index 000000000..6f15f8214
Binary files /dev/null and b/call_for_price_website/static/description/assets/modules/1.png differ
diff --git a/call_for_price_website/static/description/assets/modules/2.png b/call_for_price_website/static/description/assets/modules/2.png
new file mode 100644
index 000000000..cbf8e2131
Binary files /dev/null and b/call_for_price_website/static/description/assets/modules/2.png differ
diff --git a/call_for_price_website/static/description/assets/modules/3.png b/call_for_price_website/static/description/assets/modules/3.png
new file mode 100644
index 000000000..1046f40f1
Binary files /dev/null and b/call_for_price_website/static/description/assets/modules/3.png differ
diff --git a/call_for_price_website/static/description/assets/modules/4.png b/call_for_price_website/static/description/assets/modules/4.png
new file mode 100644
index 000000000..27eaa610d
Binary files /dev/null and b/call_for_price_website/static/description/assets/modules/4.png differ
diff --git a/call_for_price_website/static/description/assets/modules/5.png b/call_for_price_website/static/description/assets/modules/5.png
new file mode 100644
index 000000000..0017a0f23
Binary files /dev/null and b/call_for_price_website/static/description/assets/modules/5.png differ
diff --git a/call_for_price_website/static/description/assets/modules/6.png b/call_for_price_website/static/description/assets/modules/6.png
new file mode 100644
index 000000000..ad7a8bdc0
Binary files /dev/null and b/call_for_price_website/static/description/assets/modules/6.png differ
diff --git a/call_for_price_website/static/description/assets/screenshots/Screenshot1.png b/call_for_price_website/static/description/assets/screenshots/Screenshot1.png
new file mode 100644
index 000000000..91fca70f4
Binary files /dev/null and b/call_for_price_website/static/description/assets/screenshots/Screenshot1.png differ
diff --git a/call_for_price_website/static/description/assets/screenshots/Screenshot2.png b/call_for_price_website/static/description/assets/screenshots/Screenshot2.png
new file mode 100644
index 000000000..704a97a74
Binary files /dev/null and b/call_for_price_website/static/description/assets/screenshots/Screenshot2.png differ
diff --git a/call_for_price_website/static/description/assets/screenshots/Screenshot3.png b/call_for_price_website/static/description/assets/screenshots/Screenshot3.png
new file mode 100644
index 000000000..59de09986
Binary files /dev/null and b/call_for_price_website/static/description/assets/screenshots/Screenshot3.png differ
diff --git a/call_for_price_website/static/description/assets/screenshots/Screenshot4.png b/call_for_price_website/static/description/assets/screenshots/Screenshot4.png
new file mode 100644
index 000000000..16e251ea2
Binary files /dev/null and b/call_for_price_website/static/description/assets/screenshots/Screenshot4.png differ
diff --git a/call_for_price_website/static/description/assets/screenshots/Screenshot5.png b/call_for_price_website/static/description/assets/screenshots/Screenshot5.png
new file mode 100644
index 000000000..a1522fe47
Binary files /dev/null and b/call_for_price_website/static/description/assets/screenshots/Screenshot5.png differ
diff --git a/call_for_price_website/static/description/assets/screenshots/Screenshot6.png b/call_for_price_website/static/description/assets/screenshots/Screenshot6.png
new file mode 100644
index 000000000..5917ce26c
Binary files /dev/null and b/call_for_price_website/static/description/assets/screenshots/Screenshot6.png differ
diff --git a/call_for_price_website/static/description/assets/screenshots/Screenshot7.png b/call_for_price_website/static/description/assets/screenshots/Screenshot7.png
new file mode 100644
index 000000000..23b21439f
Binary files /dev/null and b/call_for_price_website/static/description/assets/screenshots/Screenshot7.png differ
diff --git a/call_for_price_website/static/description/assets/screenshots/Screenshot8.png b/call_for_price_website/static/description/assets/screenshots/Screenshot8.png
new file mode 100644
index 000000000..b75a9978b
Binary files /dev/null and b/call_for_price_website/static/description/assets/screenshots/Screenshot8.png differ
diff --git a/call_for_price_website/static/description/assets/screenshots/hero.gif b/call_for_price_website/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..9f462599b
Binary files /dev/null and b/call_for_price_website/static/description/assets/screenshots/hero.gif differ
diff --git a/call_for_price_website/static/description/banner.jpg b/call_for_price_website/static/description/banner.jpg
new file mode 100644
index 000000000..0433f96cb
Binary files /dev/null and b/call_for_price_website/static/description/banner.jpg differ
diff --git a/call_for_price_website/static/description/icon.png b/call_for_price_website/static/description/icon.png
new file mode 100644
index 000000000..5761c1ea5
Binary files /dev/null and b/call_for_price_website/static/description/icon.png differ
diff --git a/call_for_price_website/static/description/index.html b/call_for_price_website/static/description/index.html
new file mode 100644
index 000000000..299cd19ad
--- /dev/null
+++ b/call_for_price_website/static/description/index.html
@@ -0,0 +1,647 @@
+
+ In some cases, we have to hide the price of a product. These items might
+ be free, out of stock, or available for
+ any other reason. This module allows you to hide the price and add to
+ cart button for specific products; the
+ call for price option will send a price request to the merchant.
+
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+ Hide specific product price.
+
+
+
+ Hide Add to Cart button.
+
+
+
+ Adds a button for price requests from merchants.
+
+
+
+ Track all requests from the backend.
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+
+ Enable Call for Price
+ from the Product Sales tab
+
+ Go to Products -> Sales ->
+ Enable Call for Price. After enabling this, the price and add to
+ cart button will hide from the website.
+
+
+
+
+
+ Hide product price from a list of products
+
+
+
+
+
+ Wishlist page
+
+ Hide the price and add to cart button from wishlist page.
+
+
+
+
+
+ Product Compare Page
+
+ If the user needs to compare the products, then they need to
+ request the price.
+
+
+
+
+
+ Call For Price Button
+
+ Hides the price and add to cart button from product item and
+ adds button for price request, on clicking a popup will
+ open.
+
+
+
+
+
+ Call For Price Request
+
+ Users need to enter these details in order to get the price of
+ the
+ product. The request will be sent to the merchant by clicking
+ Send
+ button.
+
+
+
+
+
+ Request Send
+
+ After sending the request, a success message will show there,
+ and
+ the merchant can access the request from backend.
+
+
+
+
+
+ The Backend View
+
+ Initially, a draft request is created; after merchant
+ verification, the sales team contacts the customer.
+
+
+
+
diff --git a/cancel_quotation_expiry/README.rst b/cancel_quotation_expiry/README.rst
new file mode 100644
index 000000000..4910c91e7
--- /dev/null
+++ b/cancel_quotation_expiry/README.rst
@@ -0,0 +1,50 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Cancel Expired Quotations
+=========================
+This module cancel the Quotations that are expired.
+
+Configuration
+=============
+* No additional configurations needed
+
+License
+-------
+Affero General Public License v3.0 (AGPL v3)
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+Credits
+-------
+Developer: (V16) Sruthi MK,
+ (V15) Afra K,
+ (V14) Afra K,
+
+Contact: odoo@cybrosys.com
+
+Contacts
+--------
+* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
+
+Bug Tracker
+-----------
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Maintainer
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit `Our Website `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/cancel_quotation_expiry/__init__.py b/cancel_quotation_expiry/__init__.py
new file mode 100644
index 000000000..49c758ecb
--- /dev/null
+++ b/cancel_quotation_expiry/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Afra K (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from . import models
diff --git a/cancel_quotation_expiry/__manifest__.py b/cancel_quotation_expiry/__manifest__.py
new file mode 100644
index 000000000..452a26ba3
--- /dev/null
+++ b/cancel_quotation_expiry/__manifest__.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Afra K (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+{
+ 'name': 'Cancel Expired Quotations',
+ 'version': '14.0.1.0.0',
+ 'category': 'Sales',
+ 'summary': 'Cancel the expired quotations automatically',
+ "description": "Get the expired quotations from the Sale Order and "
+ "cancel the quotations automatically which have expired",
+ 'author': "Cybrosys Techno Solutions",
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'depends': ['sale_management'],
+ 'data': [
+ 'data/ir_cron_data.xml',
+ ],
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'application': False,
+ 'auto_install': False,
+}
diff --git a/cancel_quotation_expiry/data/ir_cron_data.xml b/cancel_quotation_expiry/data/ir_cron_data.xml
new file mode 100644
index 000000000..49b809759
--- /dev/null
+++ b/cancel_quotation_expiry/data/ir_cron_data.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ Cancel Expired Quotation
+
+ code
+ model.cancel_expired_quotation()
+
+ 1
+ days
+ -1
+
+
+
+
+
diff --git a/cancel_quotation_expiry/doc/RELEASE_NOTES.md b/cancel_quotation_expiry/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..6bcb4b897
--- /dev/null
+++ b/cancel_quotation_expiry/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 13.09.2023
+#### Version 14.0.1.0.0
+##### ADD
+- Initial commit for Cancel Expired Quotations
diff --git a/cancel_quotation_expiry/models/__init__.py b/cancel_quotation_expiry/models/__init__.py
new file mode 100644
index 000000000..31d6e83f0
--- /dev/null
+++ b/cancel_quotation_expiry/models/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Afra K (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from . import sale_order
diff --git a/cancel_quotation_expiry/models/sale_order.py b/cancel_quotation_expiry/models/sale_order.py
new file mode 100644
index 000000000..eee001ee0
--- /dev/null
+++ b/cancel_quotation_expiry/models/sale_order.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Afra K (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from odoo import fields, models
+
+
+class SaleOrder(models.Model):
+ """ Inherit the Sale Order for getting the expired quotations."""
+ _inherit = 'sale.order'
+
+ def cancel_expired_quotation(self):
+ """Automatically cancel the expired
+ quotations."""
+ for quotation in self.search([(
+ 'state', 'in', ('draft', 'sent')), (
+ 'validity_date', '<', fields.Date.today())]):
+ quotation.action_cancel()
diff --git a/cancel_quotation_expiry/static/description/assets/icons/check.png b/cancel_quotation_expiry/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/check.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/chevron.png b/cancel_quotation_expiry/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/chevron.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/cogs.png b/cancel_quotation_expiry/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/cogs.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/consultation.png b/cancel_quotation_expiry/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/consultation.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/ecom-black.png b/cancel_quotation_expiry/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/ecom-black.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/education-black.png b/cancel_quotation_expiry/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/education-black.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/hotel-black.png b/cancel_quotation_expiry/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/hotel-black.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/license.png b/cancel_quotation_expiry/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/license.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/lifebuoy.png b/cancel_quotation_expiry/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/lifebuoy.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/manufacturing-black.png b/cancel_quotation_expiry/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/manufacturing-black.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/pos-black.png b/cancel_quotation_expiry/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/pos-black.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/puzzle.png b/cancel_quotation_expiry/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/puzzle.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/restaurant-black.png b/cancel_quotation_expiry/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/restaurant-black.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/service-black.png b/cancel_quotation_expiry/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/service-black.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/trading-black.png b/cancel_quotation_expiry/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/trading-black.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/training.png b/cancel_quotation_expiry/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/training.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/update.png b/cancel_quotation_expiry/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/update.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/user.png b/cancel_quotation_expiry/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/user.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/icons/wrench.png b/cancel_quotation_expiry/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/icons/wrench.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/misc/categories.png b/cancel_quotation_expiry/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/misc/categories.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/misc/check-box.png b/cancel_quotation_expiry/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/misc/check-box.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/misc/compass.png b/cancel_quotation_expiry/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/misc/compass.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/misc/corporate.png b/cancel_quotation_expiry/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/misc/corporate.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/misc/customer-support.png b/cancel_quotation_expiry/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/misc/customer-support.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/misc/cybrosys-logo.png b/cancel_quotation_expiry/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/misc/features.png b/cancel_quotation_expiry/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/misc/features.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/misc/logo.png b/cancel_quotation_expiry/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/misc/logo.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/misc/pictures.png b/cancel_quotation_expiry/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/misc/pictures.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/misc/pie-chart.png b/cancel_quotation_expiry/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/misc/pie-chart.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/misc/right-arrow.png b/cancel_quotation_expiry/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/misc/right-arrow.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/misc/star.png b/cancel_quotation_expiry/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/misc/star.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/misc/support.png b/cancel_quotation_expiry/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/misc/support.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/misc/whatsapp.png b/cancel_quotation_expiry/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/misc/whatsapp.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/modules/1.png b/cancel_quotation_expiry/static/description/assets/modules/1.png
new file mode 100644
index 000000000..59463454d
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/modules/1.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/modules/2.png b/cancel_quotation_expiry/static/description/assets/modules/2.png
new file mode 100644
index 000000000..9b48601fa
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/modules/2.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/modules/3.png b/cancel_quotation_expiry/static/description/assets/modules/3.png
new file mode 100644
index 000000000..8c34fff56
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/modules/3.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/modules/4.png b/cancel_quotation_expiry/static/description/assets/modules/4.png
new file mode 100644
index 000000000..dd40aa137
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/modules/4.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/modules/5.png b/cancel_quotation_expiry/static/description/assets/modules/5.png
new file mode 100644
index 000000000..418c3ac3b
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/modules/5.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/modules/6.png b/cancel_quotation_expiry/static/description/assets/modules/6.png
new file mode 100644
index 000000000..d246b271a
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/modules/6.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/screenshots/hero.gif b/cancel_quotation_expiry/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..b9ab04fbc
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/screenshots/hero.gif differ
diff --git a/cancel_quotation_expiry/static/description/assets/screenshots/s1.png b/cancel_quotation_expiry/static/description/assets/screenshots/s1.png
new file mode 100644
index 000000000..f6043adb7
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/screenshots/s1.png differ
diff --git a/cancel_quotation_expiry/static/description/assets/screenshots/s2.png b/cancel_quotation_expiry/static/description/assets/screenshots/s2.png
new file mode 100644
index 000000000..31c6f16df
Binary files /dev/null and b/cancel_quotation_expiry/static/description/assets/screenshots/s2.png differ
diff --git a/cancel_quotation_expiry/static/description/banner.png b/cancel_quotation_expiry/static/description/banner.png
new file mode 100644
index 000000000..df58ec0a9
Binary files /dev/null and b/cancel_quotation_expiry/static/description/banner.png differ
diff --git a/cancel_quotation_expiry/static/description/icon.png b/cancel_quotation_expiry/static/description/icon.png
new file mode 100644
index 000000000..d5d8718dd
Binary files /dev/null and b/cancel_quotation_expiry/static/description/icon.png differ
diff --git a/cancel_quotation_expiry/static/description/index.html b/cancel_quotation_expiry/static/description/index.html
new file mode 100644
index 000000000..d951d6fcb
--- /dev/null
+++ b/cancel_quotation_expiry/static/description/index.html
@@ -0,0 +1,603 @@
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+ Odoo.sh
+
+
+
+
+
+
+
+
+
+ Cancel Expired Quotations
+
+ This Module Helps To Cancel The Expired Quotations Automatically
+
diff --git a/chatter_camera/README.rst b/chatter_camera/README.rst
new file mode 100644
index 000000000..81b3a3976
--- /dev/null
+++ b/chatter_camera/README.rst
@@ -0,0 +1,45 @@
+.. image:: https://img.shields.io/badge/license-LGPL--3-blue.svg
+ :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
+ :alt: License: LGPL-3
+
+Chatter Camera
+==============
+This module helps you to capture the images from the chatter, and also we can attach the corresponding images.
+
+Configuration
+=============
+No configuration
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+License
+-------
+General Public License, Version 3 (LGPL v3).
+(http://www.gnu.org/licenses/lgpl-3.0-standalone.html)
+
+Credits
+-------
+Developers: (V14) Mruthul Raj
+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 `__
+
+Further information
+===================
+HTML Description: ``__
\ No newline at end of file
diff --git a/chatter_camera/__init__.py b/chatter_camera/__init__.py
new file mode 100644
index 000000000..374e815b3
--- /dev/null
+++ b/chatter_camera/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Technologies(odoo@cybrosys.com)
+#
+#
+# This program is free software: you can modify
+# it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE (LGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# along with this program. If not, see .
+#
+###############################################################################
+from . import models
diff --git a/chatter_camera/__manifest__.py b/chatter_camera/__manifest__.py
new file mode 100644
index 000000000..9c9bead55
--- /dev/null
+++ b/chatter_camera/__manifest__.py
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Technologies(odoo@cybrosys.com)
+#
+# This program is free software: you can modify
+# it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE (LGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# along with this program. If not, see .
+#
+###############################################################################
+{
+ 'name': 'Chatter Camera',
+ 'version': '14.0.1.0.0',
+ 'category': 'Extra Tools',
+ 'summary': 'Capture and Attach Images to Chatter Messages',
+ 'description': 'The "Chatter Camera" app allows users to capture images'
+ ' directly from the chatter and conveniently attach them to'
+ ' messages. Enhance your communication by visualizing ideas'
+ ' and sharing relevant images within Odoo.',
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'depends': ['mail'],
+ 'data': [
+ 'views/templates.xml',
+ ],
+ 'qweb': [
+ "static/src/xml/chatter_camera_templates.xml",
+ ],
+ 'images': ['static/description/banner.jpg'],
+ 'license': 'LGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/chatter_camera/doc/RELEASE_NOTES.md b/chatter_camera/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..e9e17ff3f
--- /dev/null
+++ b/chatter_camera/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 10.10.2023
+#### Version 14.0.1.0.0
+#### ADD
+- Initial commit for Chatter Camera
diff --git a/chatter_camera/models/__init__.py b/chatter_camera/models/__init__.py
new file mode 100644
index 000000000..e45ff0e56
--- /dev/null
+++ b/chatter_camera/models/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Technologies(odoo@cybrosys.com)
+#
+#
+# This program is free software: you can modify
+# it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE (LGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# along with this program. If not, see .
+#
+###############################################################################
+from . import ir_attachment
diff --git a/chatter_camera/models/ir_attachment.py b/chatter_camera/models/ir_attachment.py
new file mode 100644
index 000000000..d7bfd5679
--- /dev/null
+++ b/chatter_camera/models/ir_attachment.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Cybrosys Technologies(odoo@cybrosys.com)
+#
+#
+# This program is free software: you can modify
+# it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE (LGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# along with this program. If not, see .
+#
+###############################################################################
+from odoo import api, models
+
+
+class IrAttachment(models.Model):
+ """
+ Extended model for attachments to add custom function chatter image.
+ """
+ _inherit = 'ir.attachment'
+
+ @api.model
+ def chatter_image(self, model, model_id, image):
+ """
+ Create an attachment with the given image data and link it to the
+ specified model.
+ model: Model name
+ model_id: ID of the record in the model
+ image: Image data URL
+ return: True if successful
+ """
+ attachment = self.create([{
+ 'name': 'ChatterImage',
+ 'datas': image,
+ 'mimetype': 'image/png',
+ 'type': 'binary',
+ 'index_content': 'image',
+ 'res_model': 'mail.compose.message'
+ }])
+ self.env[model].browse(int(model_id)).message_post(
+ message_type='comment',
+ attachment_ids=[attachment.id]
+ )
+ return True
diff --git a/chatter_camera/static/description/assets/icons/check.png b/chatter_camera/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/check.png differ
diff --git a/chatter_camera/static/description/assets/icons/chevron.png b/chatter_camera/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/chevron.png differ
diff --git a/chatter_camera/static/description/assets/icons/cogs.png b/chatter_camera/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/cogs.png differ
diff --git a/chatter_camera/static/description/assets/icons/consultation.png b/chatter_camera/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/consultation.png differ
diff --git a/chatter_camera/static/description/assets/icons/ecom-black.png b/chatter_camera/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/ecom-black.png differ
diff --git a/chatter_camera/static/description/assets/icons/education-black.png b/chatter_camera/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/education-black.png differ
diff --git a/chatter_camera/static/description/assets/icons/hotel-black.png b/chatter_camera/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/hotel-black.png differ
diff --git a/chatter_camera/static/description/assets/icons/license.png b/chatter_camera/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/license.png differ
diff --git a/chatter_camera/static/description/assets/icons/lifebuoy.png b/chatter_camera/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/lifebuoy.png differ
diff --git a/chatter_camera/static/description/assets/icons/manufacturing-black.png b/chatter_camera/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/manufacturing-black.png differ
diff --git a/chatter_camera/static/description/assets/icons/pos-black.png b/chatter_camera/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/pos-black.png differ
diff --git a/chatter_camera/static/description/assets/icons/puzzle.png b/chatter_camera/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/puzzle.png differ
diff --git a/chatter_camera/static/description/assets/icons/restaurant-black.png b/chatter_camera/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/restaurant-black.png differ
diff --git a/chatter_camera/static/description/assets/icons/service-black.png b/chatter_camera/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/service-black.png differ
diff --git a/chatter_camera/static/description/assets/icons/trading-black.png b/chatter_camera/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/trading-black.png differ
diff --git a/chatter_camera/static/description/assets/icons/training.png b/chatter_camera/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/training.png differ
diff --git a/chatter_camera/static/description/assets/icons/update.png b/chatter_camera/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/update.png differ
diff --git a/chatter_camera/static/description/assets/icons/user.png b/chatter_camera/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/user.png differ
diff --git a/chatter_camera/static/description/assets/icons/wrench.png b/chatter_camera/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/chatter_camera/static/description/assets/icons/wrench.png differ
diff --git a/chatter_camera/static/description/assets/misc/categories.png b/chatter_camera/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/chatter_camera/static/description/assets/misc/categories.png differ
diff --git a/chatter_camera/static/description/assets/misc/check-box.png b/chatter_camera/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/chatter_camera/static/description/assets/misc/check-box.png differ
diff --git a/chatter_camera/static/description/assets/misc/compass.png b/chatter_camera/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/chatter_camera/static/description/assets/misc/compass.png differ
diff --git a/chatter_camera/static/description/assets/misc/corporate.png b/chatter_camera/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/chatter_camera/static/description/assets/misc/corporate.png differ
diff --git a/chatter_camera/static/description/assets/misc/customer-support.png b/chatter_camera/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/chatter_camera/static/description/assets/misc/customer-support.png differ
diff --git a/chatter_camera/static/description/assets/misc/cybrosys-logo.png b/chatter_camera/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/chatter_camera/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/chatter_camera/static/description/assets/misc/features.png b/chatter_camera/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/chatter_camera/static/description/assets/misc/features.png differ
diff --git a/chatter_camera/static/description/assets/misc/logo.png b/chatter_camera/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/chatter_camera/static/description/assets/misc/logo.png differ
diff --git a/chatter_camera/static/description/assets/misc/pictures.png b/chatter_camera/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/chatter_camera/static/description/assets/misc/pictures.png differ
diff --git a/chatter_camera/static/description/assets/misc/pie-chart.png b/chatter_camera/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/chatter_camera/static/description/assets/misc/pie-chart.png differ
diff --git a/chatter_camera/static/description/assets/misc/right-arrow.png b/chatter_camera/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/chatter_camera/static/description/assets/misc/right-arrow.png differ
diff --git a/chatter_camera/static/description/assets/misc/star.png b/chatter_camera/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/chatter_camera/static/description/assets/misc/star.png differ
diff --git a/chatter_camera/static/description/assets/misc/support.png b/chatter_camera/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/chatter_camera/static/description/assets/misc/support.png differ
diff --git a/chatter_camera/static/description/assets/misc/whatsapp.png b/chatter_camera/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/chatter_camera/static/description/assets/misc/whatsapp.png differ
diff --git a/chatter_camera/static/description/assets/modules/1.png b/chatter_camera/static/description/assets/modules/1.png
new file mode 100644
index 000000000..7f8cf1ee1
Binary files /dev/null and b/chatter_camera/static/description/assets/modules/1.png differ
diff --git a/chatter_camera/static/description/assets/modules/2.png b/chatter_camera/static/description/assets/modules/2.png
new file mode 100644
index 000000000..4be2248a4
Binary files /dev/null and b/chatter_camera/static/description/assets/modules/2.png differ
diff --git a/chatter_camera/static/description/assets/modules/3.gif b/chatter_camera/static/description/assets/modules/3.gif
new file mode 100644
index 000000000..69bf230e7
Binary files /dev/null and b/chatter_camera/static/description/assets/modules/3.gif differ
diff --git a/chatter_camera/static/description/assets/modules/4.png b/chatter_camera/static/description/assets/modules/4.png
new file mode 100644
index 000000000..3afc14722
Binary files /dev/null and b/chatter_camera/static/description/assets/modules/4.png differ
diff --git a/chatter_camera/static/description/assets/modules/5.gif b/chatter_camera/static/description/assets/modules/5.gif
new file mode 100644
index 000000000..2a5f8e659
Binary files /dev/null and b/chatter_camera/static/description/assets/modules/5.gif differ
diff --git a/chatter_camera/static/description/assets/modules/5.png b/chatter_camera/static/description/assets/modules/5.png
new file mode 100644
index 000000000..cea66b05f
Binary files /dev/null and b/chatter_camera/static/description/assets/modules/5.png differ
diff --git a/chatter_camera/static/description/assets/modules/6.png b/chatter_camera/static/description/assets/modules/6.png
new file mode 100644
index 000000000..0c9bb377e
Binary files /dev/null and b/chatter_camera/static/description/assets/modules/6.png differ
diff --git a/chatter_camera/static/description/assets/modules/barcode.png b/chatter_camera/static/description/assets/modules/barcode.png
new file mode 100644
index 000000000..618e3e6c4
Binary files /dev/null and b/chatter_camera/static/description/assets/modules/barcode.png differ
diff --git a/chatter_camera/static/description/assets/modules/fatoorah.png b/chatter_camera/static/description/assets/modules/fatoorah.png
new file mode 100644
index 000000000..991fc77ec
Binary files /dev/null and b/chatter_camera/static/description/assets/modules/fatoorah.png differ
diff --git a/chatter_camera/static/description/assets/modules/integration_biometric.png b/chatter_camera/static/description/assets/modules/integration_biometric.png
new file mode 100644
index 000000000..ed11bd818
Binary files /dev/null and b/chatter_camera/static/description/assets/modules/integration_biometric.png differ
diff --git a/chatter_camera/static/description/assets/modules/product_brand.png b/chatter_camera/static/description/assets/modules/product_brand.png
new file mode 100644
index 000000000..1d2238b80
Binary files /dev/null and b/chatter_camera/static/description/assets/modules/product_brand.png differ
diff --git a/chatter_camera/static/description/assets/modules/website_cart.png b/chatter_camera/static/description/assets/modules/website_cart.png
new file mode 100644
index 000000000..163485cfd
Binary files /dev/null and b/chatter_camera/static/description/assets/modules/website_cart.png differ
diff --git a/chatter_camera/static/description/assets/screenshots/caapture.jpg b/chatter_camera/static/description/assets/screenshots/caapture.jpg
new file mode 100644
index 000000000..7ceb1d53d
Binary files /dev/null and b/chatter_camera/static/description/assets/screenshots/caapture.jpg differ
diff --git a/chatter_camera/static/description/assets/screenshots/camera.png b/chatter_camera/static/description/assets/screenshots/camera.png
new file mode 100644
index 000000000..8f4516390
Binary files /dev/null and b/chatter_camera/static/description/assets/screenshots/camera.png differ
diff --git a/chatter_camera/static/description/assets/screenshots/hero.gif b/chatter_camera/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..91260a4a9
Binary files /dev/null and b/chatter_camera/static/description/assets/screenshots/hero.gif differ
diff --git a/chatter_camera/static/description/assets/screenshots/image_chatter.png b/chatter_camera/static/description/assets/screenshots/image_chatter.png
new file mode 100644
index 000000000..b543059c8
Binary files /dev/null and b/chatter_camera/static/description/assets/screenshots/image_chatter.png differ
diff --git a/chatter_camera/static/description/banner.jpg b/chatter_camera/static/description/banner.jpg
new file mode 100644
index 000000000..a59fe5b76
Binary files /dev/null and b/chatter_camera/static/description/banner.jpg differ
diff --git a/chatter_camera/static/description/icon.png b/chatter_camera/static/description/icon.png
new file mode 100644
index 000000000..df9abb92d
Binary files /dev/null and b/chatter_camera/static/description/icon.png differ
diff --git a/chatter_camera/static/description/index.html b/chatter_camera/static/description/index.html
new file mode 100644
index 000000000..117ac2616
--- /dev/null
+++ b/chatter_camera/static/description/index.html
@@ -0,0 +1,632 @@
+
+
\ No newline at end of file
diff --git a/chatter_camera/static/src/js/camera_chatter.js b/chatter_camera/static/src/js/camera_chatter.js
new file mode 100644
index 000000000..f053d97c2
--- /dev/null
+++ b/chatter_camera/static/src/js/camera_chatter.js
@@ -0,0 +1,60 @@
+odoo.define('chatter_camera.camera_chatter', function(require) {
+ "use strict";
+ const components = {
+ ChatterTopbar: require('mail/static/src/components/chatter_topbar/chatter_topbar.js'),
+ };
+ const rpc = require('web.rpc');
+ const {patch} = require('web.utils');
+ patch(components.ChatterTopbar, 'mail/static/src/models/chatter/chatter.js', {
+ /**
+ * Open the camera
+ **/
+ onClickCamera(ev) {
+ var myModal = $(ev.target.parentElement.nextSibling.childNodes[0]);
+ myModal[0].style.display = "block";
+ var All_mediaDevices = navigator.mediaDevices;
+ All_mediaDevices.getUserMedia({
+ audio: false,
+ video: true
+ })
+ .then(function(vidStream) {
+ var video = document.getElementById('videoCam');
+ if ("srcObject" in video) {
+ video.srcObject = vidStream;
+ } else {
+ video.src = window.URL.createObjectURL(vidStream);
+ }
+ video.onloadedmetadata = function(e) {
+ video.play();
+ };
+ })
+ },
+ /**
+ * Capture the image
+ **/
+ async onClickStop(ev){
+ var myModal = $(ev.target.parentElement.parentElement.parentElement);
+ myModal[0].style.display = "none";
+ window.location.reload();
+ },
+ async ImageCapture() {
+ var canvas = document.querySelector("#canvas");
+ var video = document.querySelector("#videoCam");
+ canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
+ var image_data_url = canvas.toDataURL();
+ const children = this.__owl__.children;
+ for (const [key, value] of Object.entries(children)) {
+ var threadLocalId = value.props.threadLocalId;
+ }
+ const Match = threadLocalId.split('_');
+ image_data_url=image_data_url.replace(/^data:image\/\w+;base64,/, "");
+ var query = await rpc.query({
+ model: 'ir.attachment',
+ method: 'chatter_image',
+ args: [Match[1], Match[2], image_data_url]
+ }).then(function() {
+ location.reload();
+ });
+ }
+ });
+});
\ No newline at end of file
diff --git a/chatter_camera/static/src/xml/chatter_camera_templates.xml b/chatter_camera/static/src/xml/chatter_camera_templates.xml
new file mode 100644
index 000000000..5df665db7
--- /dev/null
+++ b/chatter_camera/static/src/xml/chatter_camera_templates.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+ Chatter Camera
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/chatter_camera/views/templates.xml b/chatter_camera/views/templates.xml
new file mode 100644
index 000000000..33ba4b7cc
--- /dev/null
+++ b/chatter_camera/views/templates.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/code_backend_theme/__manifest__.py b/code_backend_theme/__manifest__.py
index 21b0c3866..dec2520bc 100644
--- a/code_backend_theme/__manifest__.py
+++ b/code_backend_theme/__manifest__.py
@@ -25,11 +25,11 @@
"description": """Minimalist and elegant backend theme for Odoo 14, Backend Theme, Theme""",
"summary": "Code Backend Theme V14 is an attractive theme for backend",
"category": "Themes/Backend",
- "version": "14.0.1.1.2",
- 'author': 'Frontware, Cybrosys Techno Solutions',
- 'company': 'Frontware, Cybrosys Techno Solutions',
- 'maintainer': 'Frontware, Cybrosys Techno Solutions',
- 'website': "https://github.com/Frontware/CybroAddons",
+ "version": "14.0.1.1.3",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
"depends": ['base', 'web', 'mail'],
"data": [
'assets/assets.xml',
diff --git a/code_backend_theme/doc/RELEASE_NOTES.md b/code_backend_theme/doc/RELEASE_NOTES.md
index 4d365b83d..f6277ae64 100644
--- a/code_backend_theme/doc/RELEASE_NOTES.md
+++ b/code_backend_theme/doc/RELEASE_NOTES.md
@@ -13,4 +13,9 @@ Made Responsive
#### 27.07.2021
#### Version 14.0.1.1.1
#### FIX
-Template not found issue fixed
\ No newline at end of file
+Template not found issue fixed
+
+#### 23.09.2022
+#### Version 14.0.1.1.3
+#### FIX
+List view style issue fixed
\ No newline at end of file
diff --git a/code_backend_theme/static/src/scss/navigation_bar.scss b/code_backend_theme/static/src/scss/navigation_bar.scss
index d318035a4..25fbe7c4c 100644
--- a/code_backend_theme/static/src/scss/navigation_bar.scss
+++ b/code_backend_theme/static/src/scss/navigation_bar.scss
@@ -285,7 +285,7 @@ font-weight: bold;
}
}
.o_data_row:has(.custom-control-input:checked){
-background: blue !important;
+background: #E5E3F3 !important;
}
.o_field_one2many{
.o_list_view{
diff --git a/code_backend_theme_enterprise/__manifest__.py b/code_backend_theme_enterprise/__manifest__.py
index 8f7840519..a2b99d629 100644
--- a/code_backend_theme_enterprise/__manifest__.py
+++ b/code_backend_theme_enterprise/__manifest__.py
@@ -25,11 +25,11 @@
"summary": "Minimalist and elegant backend theme for Odoo 14 Enterprise",
"description": """Minimalist and elegant backend theme for Odoo 14 Backend Theme Enterprise, Enterprise Theme, Backend Theme, Enterprise Backend Theme, V14 Theme""",
"category": "Themes/Backend",
- "version": "14.0.1.0.0",
- 'author': 'Frontware, Cybrosys Techno Solutions',
- 'company': 'Frontware, Cybrosys Techno Solutions',
- 'maintainer': 'Frontware, Cybrosys Techno Solutions',
- 'website': "https://github.com/Frontware/CybroAddons",
+ "version": "14.0.1.0.1",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
"depends": ['base', 'web_enterprise', 'web'],
"data": [
'views/assets.xml',
diff --git a/code_backend_theme_enterprise/doc/RELEASE_NOTES.md b/code_backend_theme_enterprise/doc/RELEASE_NOTES.md
index 3ddb79917..bc486c91e 100644
--- a/code_backend_theme_enterprise/doc/RELEASE_NOTES.md
+++ b/code_backend_theme_enterprise/doc/RELEASE_NOTES.md
@@ -3,4 +3,10 @@
#### 02.08.2021
#### Version 14.0.1.0.0
#### ADD
-Initial Commit for 'Code Backend Theme V14 Enterprise'
\ No newline at end of file
+Initial Commit for 'Code Backend Theme V14 Enterprise'
+
+
+#### 23.09.2022
+#### Version 14.0.1.0.1
+#### FIX
+List view style issue fixed
\ No newline at end of file
diff --git a/code_backend_theme_enterprise/static/src/scss/navigation_bar.scss b/code_backend_theme_enterprise/static/src/scss/navigation_bar.scss
index 053518561..881f7bfb3 100644
--- a/code_backend_theme_enterprise/static/src/scss/navigation_bar.scss
+++ b/code_backend_theme_enterprise/static/src/scss/navigation_bar.scss
@@ -285,7 +285,7 @@ font-weight: bold;
}
}
.o_data_row:has(.custom-control-input:checked){
-background: blue !important;
+background: #E5E3F3 !important;
}
.o_field_one2many{
.o_list_view{
diff --git a/contact_documents/README.rst b/contact_documents/README.rst
new file mode 100644
index 000000000..1bcdabfd7
--- /dev/null
+++ b/contact_documents/README.rst
@@ -0,0 +1,44 @@
+.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg
+ :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
+ :alt: License: LGPL-3
+
+Partner Related Documents
+=========================
+This module allow to store and access documents for the related contact.
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+
+License
+-------
+General Public License, Version 3 (LGPL v3).
+(https://www.odoo.com/documentation/user/14.0/legal/licenses/licenses.html)
+
+
+Credits
+-------
+Developer: (V16) Jumana Haseen, 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 `__
+
+Further information
+===================
+HTML Description: ``__
\ No newline at end of file
diff --git a/contact_documents/__init__.py b/contact_documents/__init__.py
new file mode 100644
index 000000000..8b7736778
--- /dev/null
+++ b/contact_documents/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# ############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies(
+# ). Author: Jumana Haseen(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 .
+#
+# ############################################################################
+from . import models
diff --git a/contact_documents/__manifest__.py b/contact_documents/__manifest__.py
new file mode 100644
index 000000000..00b1b1630
--- /dev/null
+++ b/contact_documents/__manifest__.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+# ############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies(
+# ). Author: Jumana Haseen (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 .
+#
+# ############################################################################
+{
+ 'name': 'Partner Related Documents',
+ 'version': '14.0.1.0.0',
+ 'category': 'Document Management',
+ 'summary': """ Store and access documents for the related contact""",
+ 'description': """ Store and access documents for the related contact,
+ you can see the documents in the contact section and the count of total
+ documents related to the contact""",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['contacts'],
+ 'data': [
+ 'views/res_partner_views.xml',
+ ],
+ 'images': ['static/description/banner.jpg'],
+ 'license': 'LGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/contact_documents/doc/RELEASE_NOTES.md b/contact_documents/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..1486acc3b
--- /dev/null
+++ b/contact_documents/doc/RELEASE_NOTES.md
@@ -0,0 +1,5 @@
+## Module
+#### 23.10.2023
+#### Version 14.0.1.0.0
+#### ADD
+- Initial commit Partner Related Documents
diff --git a/contact_documents/models/__init__.py b/contact_documents/models/__init__.py
new file mode 100644
index 000000000..024fc70f0
--- /dev/null
+++ b/contact_documents/models/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# ############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies(
+# ). Author: Jumana Haseen (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 .
+#
+# ############################################################################
+from . import res_partner
diff --git a/contact_documents/models/res_partner.py b/contact_documents/models/res_partner.py
new file mode 100644
index 000000000..c6ea78861
--- /dev/null
+++ b/contact_documents/models/res_partner.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+# ############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies(
+# ). Author: Jumana Haseen (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 .
+#
+# ############################################################################
+from odoo import api, fields, models
+
+
+class PartnerDocuments(models.Model):
+ """This class Inherits the res partner model to add document count field"""
+ _inherit = 'res.partner'
+
+ document_count = fields.Char(compute='_compute_total_document_count',
+ string='Document Count',
+ help='Get the documents count')
+
+ @api.depends('document_count')
+ def _compute_total_document_count(self):
+ """Get the document count on smart tab"""
+ for record in self:
+ record.document_count = self.env[
+ 'ir.attachment'].search_count(
+ [('res_id', '=', self.id), ('res_model', '=', 'res.partner')])
+
+ def action_partner_documents(self):
+ """Return the documents of corresponding partner in the smart tab"""
+ self.ensure_one()
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Documents',
+ 'view_mode': 'kanban,form',
+ 'res_model': 'ir.attachment',
+ 'domain': [('res_id', '=', self.id),
+ ('res_model', '=', 'res.partner')],
+ 'context': "{'create': False}"
+ }
diff --git a/contact_documents/static/description/assets/icons/check.png b/contact_documents/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/contact_documents/static/description/assets/icons/check.png differ
diff --git a/contact_documents/static/description/assets/icons/chevron.png b/contact_documents/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/contact_documents/static/description/assets/icons/chevron.png differ
diff --git a/contact_documents/static/description/assets/icons/cogs.png b/contact_documents/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/contact_documents/static/description/assets/icons/cogs.png differ
diff --git a/contact_documents/static/description/assets/icons/consultation.png b/contact_documents/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/contact_documents/static/description/assets/icons/consultation.png differ
diff --git a/contact_documents/static/description/assets/icons/ecom-black.png b/contact_documents/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/contact_documents/static/description/assets/icons/ecom-black.png differ
diff --git a/contact_documents/static/description/assets/icons/education-black.png b/contact_documents/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/contact_documents/static/description/assets/icons/education-black.png differ
diff --git a/contact_documents/static/description/assets/icons/hotel-black.png b/contact_documents/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/contact_documents/static/description/assets/icons/hotel-black.png differ
diff --git a/contact_documents/static/description/assets/icons/license.png b/contact_documents/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/contact_documents/static/description/assets/icons/license.png differ
diff --git a/contact_documents/static/description/assets/icons/lifebuoy.png b/contact_documents/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/contact_documents/static/description/assets/icons/lifebuoy.png differ
diff --git a/contact_documents/static/description/assets/icons/manufacturing-black.png b/contact_documents/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/contact_documents/static/description/assets/icons/manufacturing-black.png differ
diff --git a/contact_documents/static/description/assets/icons/pos-black.png b/contact_documents/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/contact_documents/static/description/assets/icons/pos-black.png differ
diff --git a/contact_documents/static/description/assets/icons/puzzle.png b/contact_documents/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/contact_documents/static/description/assets/icons/puzzle.png differ
diff --git a/contact_documents/static/description/assets/icons/restaurant-black.png b/contact_documents/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/contact_documents/static/description/assets/icons/restaurant-black.png differ
diff --git a/contact_documents/static/description/assets/icons/service-black.png b/contact_documents/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/contact_documents/static/description/assets/icons/service-black.png differ
diff --git a/contact_documents/static/description/assets/icons/trading-black.png b/contact_documents/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/contact_documents/static/description/assets/icons/trading-black.png differ
diff --git a/contact_documents/static/description/assets/icons/training.png b/contact_documents/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/contact_documents/static/description/assets/icons/training.png differ
diff --git a/contact_documents/static/description/assets/icons/update.png b/contact_documents/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/contact_documents/static/description/assets/icons/update.png differ
diff --git a/contact_documents/static/description/assets/icons/user.png b/contact_documents/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/contact_documents/static/description/assets/icons/user.png differ
diff --git a/contact_documents/static/description/assets/icons/wrench.png b/contact_documents/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/contact_documents/static/description/assets/icons/wrench.png differ
diff --git a/contact_documents/static/description/assets/misc/categories.png b/contact_documents/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/contact_documents/static/description/assets/misc/categories.png differ
diff --git a/contact_documents/static/description/assets/misc/check-box.png b/contact_documents/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/contact_documents/static/description/assets/misc/check-box.png differ
diff --git a/contact_documents/static/description/assets/misc/compass.png b/contact_documents/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/contact_documents/static/description/assets/misc/compass.png differ
diff --git a/contact_documents/static/description/assets/misc/corporate.png b/contact_documents/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/contact_documents/static/description/assets/misc/corporate.png differ
diff --git a/contact_documents/static/description/assets/misc/customer-support.png b/contact_documents/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/contact_documents/static/description/assets/misc/customer-support.png differ
diff --git a/contact_documents/static/description/assets/misc/cybrosys-logo.png b/contact_documents/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/contact_documents/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/contact_documents/static/description/assets/misc/features.png b/contact_documents/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/contact_documents/static/description/assets/misc/features.png differ
diff --git a/contact_documents/static/description/assets/misc/logo.png b/contact_documents/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/contact_documents/static/description/assets/misc/logo.png differ
diff --git a/contact_documents/static/description/assets/misc/pictures.png b/contact_documents/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/contact_documents/static/description/assets/misc/pictures.png differ
diff --git a/contact_documents/static/description/assets/misc/pie-chart.png b/contact_documents/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/contact_documents/static/description/assets/misc/pie-chart.png differ
diff --git a/contact_documents/static/description/assets/misc/right-arrow.png b/contact_documents/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/contact_documents/static/description/assets/misc/right-arrow.png differ
diff --git a/contact_documents/static/description/assets/misc/star.png b/contact_documents/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/contact_documents/static/description/assets/misc/star.png differ
diff --git a/contact_documents/static/description/assets/misc/support.png b/contact_documents/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/contact_documents/static/description/assets/misc/support.png differ
diff --git a/contact_documents/static/description/assets/misc/whatsapp.png b/contact_documents/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/contact_documents/static/description/assets/misc/whatsapp.png differ
diff --git a/contact_documents/static/description/assets/modules/1.png b/contact_documents/static/description/assets/modules/1.png
new file mode 100644
index 000000000..55080c4c8
Binary files /dev/null and b/contact_documents/static/description/assets/modules/1.png differ
diff --git a/contact_documents/static/description/assets/modules/2.png b/contact_documents/static/description/assets/modules/2.png
new file mode 100644
index 000000000..6745a5f19
Binary files /dev/null and b/contact_documents/static/description/assets/modules/2.png differ
diff --git a/contact_documents/static/description/assets/modules/3.png b/contact_documents/static/description/assets/modules/3.png
new file mode 100644
index 000000000..bb4af0b9a
Binary files /dev/null and b/contact_documents/static/description/assets/modules/3.png differ
diff --git a/contact_documents/static/description/assets/modules/4.png b/contact_documents/static/description/assets/modules/4.png
new file mode 100644
index 000000000..3cbfde746
Binary files /dev/null and b/contact_documents/static/description/assets/modules/4.png differ
diff --git a/contact_documents/static/description/assets/modules/5.png b/contact_documents/static/description/assets/modules/5.png
new file mode 100644
index 000000000..4b1c4864a
Binary files /dev/null and b/contact_documents/static/description/assets/modules/5.png differ
diff --git a/contact_documents/static/description/assets/modules/6.png b/contact_documents/static/description/assets/modules/6.png
new file mode 100644
index 000000000..d0f506e82
Binary files /dev/null and b/contact_documents/static/description/assets/modules/6.png differ
diff --git a/contact_documents/static/description/assets/screenshots/1.png b/contact_documents/static/description/assets/screenshots/1.png
new file mode 100644
index 000000000..542e4a1f3
Binary files /dev/null and b/contact_documents/static/description/assets/screenshots/1.png differ
diff --git a/contact_documents/static/description/assets/screenshots/2.png b/contact_documents/static/description/assets/screenshots/2.png
new file mode 100644
index 000000000..4703b680b
Binary files /dev/null and b/contact_documents/static/description/assets/screenshots/2.png differ
diff --git a/contact_documents/static/description/assets/screenshots/hero.gif b/contact_documents/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..eaaf8cbe5
Binary files /dev/null and b/contact_documents/static/description/assets/screenshots/hero.gif differ
diff --git a/contact_documents/static/description/banner.jpg b/contact_documents/static/description/banner.jpg
new file mode 100644
index 000000000..d2b8d2c8a
Binary files /dev/null and b/contact_documents/static/description/banner.jpg differ
diff --git a/contact_documents/static/description/icon.png b/contact_documents/static/description/icon.png
new file mode 100644
index 000000000..9f805e1c0
Binary files /dev/null and b/contact_documents/static/description/icon.png differ
diff --git a/contact_documents/static/description/index.html b/contact_documents/static/description/index.html
new file mode 100644
index 000000000..1b39d794b
--- /dev/null
+++ b/contact_documents/static/description/index.html
@@ -0,0 +1,545 @@
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+ Odoo.sh
+
+
+
+
+
+
+
+
+
+ Partner Related Documents
+
Store And Access
+ Documents For The Related Contact
+
+
+
\ No newline at end of file
diff --git a/contact_documents/views/res_partner_views.xml b/contact_documents/views/res_partner_views.xml
new file mode 100644
index 000000000..1567b7b1e
--- /dev/null
+++ b/contact_documents/views/res_partner_views.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ res.partner.view.form.inherit.contact.documents
+ res.partner
+
+
+
+
+
+
+
+
diff --git a/create_expense_from_task_odoo/README.rst b/create_expense_from_task_odoo/README.rst
new file mode 100755
index 000000000..6b8c026f8
--- /dev/null
+++ b/create_expense_from_task_odoo/README.rst
@@ -0,0 +1,48 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Create Expense From Task
+========================
+This module helps User to create multiple expense from project task and split
+the amount between assignees.
+
+Configuration
+=============
+No additional configuration required
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+License
+-------
+Affero General Public License v3.0 (AGPL v3)
+
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Credits
+-------
+Developer: (V14) Ruksana P, 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 `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/create_expense_from_task_odoo/__init__.py b/create_expense_from_task_odoo/__init__.py
new file mode 100644
index 000000000..c85692b8b
--- /dev/null
+++ b/create_expense_from_task_odoo/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ruksana P (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import models
+from . import wizard
diff --git a/create_expense_from_task_odoo/__manifest__.py b/create_expense_from_task_odoo/__manifest__.py
new file mode 100644
index 000000000..c46d14acf
--- /dev/null
+++ b/create_expense_from_task_odoo/__manifest__.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ruksana P (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+{
+ 'name': "Create Expense From Task",
+ 'version': "14.0.1.0.0",
+ 'category': 'Human Resources, Project',
+ 'summary': """ This module is used to create expenses from project task""",
+ 'description': """This module is used to to create multiple expense from
+ project task and also we can split the expense amount between the
+ assignees """,
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'depends': ['base', 'hr_expense', 'project'],
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'views/hr_expense_views.xml',
+ 'views/project_task_views.xml',
+ 'wizard/expense_request_views.xml',
+ ],
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/create_expense_from_task_odoo/doc/RELEASE_NOTES.md b/create_expense_from_task_odoo/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..1d553f588
--- /dev/null
+++ b/create_expense_from_task_odoo/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 07.08.2023
+#### Version 14.0.1.0.0
+#### ADD
+- Initial commit for Create Expense From Task
diff --git a/create_expense_from_task_odoo/models/__init__.py b/create_expense_from_task_odoo/models/__init__.py
new file mode 100644
index 000000000..1aa3b7007
--- /dev/null
+++ b/create_expense_from_task_odoo/models/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ruksana P(odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import hr_expense
+from . import project_task
diff --git a/create_expense_from_task_odoo/models/hr_expense.py b/create_expense_from_task_odoo/models/hr_expense.py
new file mode 100644
index 000000000..ba0fed3ec
--- /dev/null
+++ b/create_expense_from_task_odoo/models/hr_expense.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ruksana P (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import fields, models
+
+
+class HrExpense(models.Model):
+ """
+ HrExpense model extends the hr expense model in the Odoo framework.
+ It adds two fields - project_id and task_id - which are used to
+ associate a project and a task with an expense record.
+ """
+ _inherit = 'hr.expense'
+
+ project_id = fields.Many2one('project.project', string='Project',
+ help='The project associated with this record')
+ task_id = fields.Many2one('project.task', string='Task',
+ help='The task associated with this record.')
diff --git a/create_expense_from_task_odoo/models/project_task.py b/create_expense_from_task_odoo/models/project_task.py
new file mode 100644
index 000000000..2b4017ed4
--- /dev/null
+++ b/create_expense_from_task_odoo/models/project_task.py
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ruksana P (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import fields, models
+
+
+class ProjectTask(models.Model):
+ """
+ ProjectTask model extends the project task model in the Odoo
+ framework. It adds Create Expense button to create expense request and smart
+ button Expense , to view all expenses related to that task.
+ """
+ _inherit = 'project.task'
+
+ expense_count = fields.Integer(string='Expense Count',
+ help='count of total expenses',
+ compute='_compute_expense_count')
+
+ def _compute_expense_count(self):
+ """To calculate the count of expenses"""
+ for rec in self:
+ rec.expense_count = self.env['hr.expense'].search_count(
+ [('task_id', '=', rec.id,)])
+
+ def action_create_task_expense(self):
+ """By clicking Create Expense Button which will go to Expense Request
+ form where we can add the total amount of expense and also pass the
+ value through context
+ """
+ return {
+ 'name': 'Create Expense Record',
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'expense.request',
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'context': {
+ 'default_task_id': self.id,
+ 'default_project_id': self.project_id.id,
+ 'default_name': self.name,
+ 'default_employee_name_id': [
+ (6, 0, self.user_id.mapped('employee_ids').ids)]
+ },
+ }
+
+ def action_view_expense(self):
+ """ Smart Button Expense which will redirect to Current Expense
+ Records"""
+ expense_ids = self.env['hr.expense'].search(
+ [('task_id', '=', self.id)]).ids
+ return {
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'hr.expense',
+ 'domain': [('id', 'in', expense_ids)],
+ 'view_mode': 'tree,form',
+ 'target': 'current',
+ }
diff --git a/create_expense_from_task_odoo/security/ir.model.access.csv b/create_expense_from_task_odoo/security/ir.model.access.csv
new file mode 100644
index 000000000..696cd3973
--- /dev/null
+++ b/create_expense_from_task_odoo/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_expense_request,access.expense.request,model_expense_request,base.group_user,1,1,1,1
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/cogs.png b/create_expense_from_task_odoo/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/cogs.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/consultation.png b/create_expense_from_task_odoo/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/consultation.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/ecom-black.png b/create_expense_from_task_odoo/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/ecom-black.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/education-black.png b/create_expense_from_task_odoo/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/education-black.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/hotel-black.png b/create_expense_from_task_odoo/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/hotel-black.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/license.png b/create_expense_from_task_odoo/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/license.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/lifebuoy.png b/create_expense_from_task_odoo/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/lifebuoy.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/logo.png b/create_expense_from_task_odoo/static/description/assets/icons/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/logo.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/manufacturing-black.png b/create_expense_from_task_odoo/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/manufacturing-black.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/pos-black.png b/create_expense_from_task_odoo/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/pos-black.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/puzzle.png b/create_expense_from_task_odoo/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/puzzle.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/restaurant-black.png b/create_expense_from_task_odoo/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/restaurant-black.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/service-black.png b/create_expense_from_task_odoo/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/service-black.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/trading-black.png b/create_expense_from_task_odoo/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/trading-black.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/training.png b/create_expense_from_task_odoo/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/training.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/update.png b/create_expense_from_task_odoo/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/update.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/user.png b/create_expense_from_task_odoo/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/user.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/icons/wrench.png b/create_expense_from_task_odoo/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/icons/wrench.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/misc/categories.png b/create_expense_from_task_odoo/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/misc/categories.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/misc/check-box.png b/create_expense_from_task_odoo/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/misc/check-box.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/misc/compass.png b/create_expense_from_task_odoo/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/misc/compass.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/misc/corporate.png b/create_expense_from_task_odoo/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/misc/corporate.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/misc/customer-support.png b/create_expense_from_task_odoo/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/misc/customer-support.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/misc/cybrosys-logo.png b/create_expense_from_task_odoo/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/misc/features.png b/create_expense_from_task_odoo/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/misc/features.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/misc/logo.png b/create_expense_from_task_odoo/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/misc/logo.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/misc/pictures.png b/create_expense_from_task_odoo/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/misc/pictures.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/misc/pie-chart.png b/create_expense_from_task_odoo/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/misc/pie-chart.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/misc/right-arrow.png b/create_expense_from_task_odoo/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/misc/right-arrow.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/misc/star.png b/create_expense_from_task_odoo/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/misc/star.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/misc/support.png b/create_expense_from_task_odoo/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/misc/support.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/misc/whatsapp.png b/create_expense_from_task_odoo/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/misc/whatsapp.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/modules/employee_covid_info.png b/create_expense_from_task_odoo/static/description/assets/modules/employee_covid_info.png
new file mode 100644
index 000000000..a804cd110
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/modules/employee_covid_info.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/modules/employee_document.png b/create_expense_from_task_odoo/static/description/assets/modules/employee_document.png
new file mode 100644
index 000000000..34cee3e01
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/modules/employee_document.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/modules/employee_timesheet.png b/create_expense_from_task_odoo/static/description/assets/modules/employee_timesheet.png
new file mode 100644
index 000000000..43f1ab5c9
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/modules/employee_timesheet.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/modules/project_task_timer.png b/create_expense_from_task_odoo/static/description/assets/modules/project_task_timer.png
new file mode 100644
index 000000000..abea8d233
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/modules/project_task_timer.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/modules/task_deadline.png b/create_expense_from_task_odoo/static/description/assets/modules/task_deadline.png
new file mode 100644
index 000000000..6bd27b8b5
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/modules/task_deadline.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/modules/vacation.png b/create_expense_from_task_odoo/static/description/assets/modules/vacation.png
new file mode 100644
index 000000000..a43834a4a
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/modules/vacation.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/screenshots/1.png b/create_expense_from_task_odoo/static/description/assets/screenshots/1.png
new file mode 100644
index 000000000..89b620e83
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/screenshots/1.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/screenshots/2.png b/create_expense_from_task_odoo/static/description/assets/screenshots/2.png
new file mode 100644
index 000000000..8df1042c5
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/screenshots/2.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/screenshots/3.png b/create_expense_from_task_odoo/static/description/assets/screenshots/3.png
new file mode 100644
index 000000000..ad9d4ea2c
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/screenshots/3.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/screenshots/4.png b/create_expense_from_task_odoo/static/description/assets/screenshots/4.png
new file mode 100644
index 000000000..ff25f8351
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/screenshots/4.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/screenshots/5.png b/create_expense_from_task_odoo/static/description/assets/screenshots/5.png
new file mode 100644
index 000000000..8e2d1505a
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/screenshots/5.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/screenshots/6.png b/create_expense_from_task_odoo/static/description/assets/screenshots/6.png
new file mode 100644
index 000000000..3e3d6e80a
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/screenshots/6.png differ
diff --git a/create_expense_from_task_odoo/static/description/assets/screenshots/hero.gif b/create_expense_from_task_odoo/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..b047e0fa2
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/assets/screenshots/hero.gif differ
diff --git a/create_expense_from_task_odoo/static/description/banner.png b/create_expense_from_task_odoo/static/description/banner.png
new file mode 100644
index 000000000..3e05ce927
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/banner.png differ
diff --git a/create_expense_from_task_odoo/static/description/icon.png b/create_expense_from_task_odoo/static/description/icon.png
new file mode 100644
index 000000000..d91c15dd4
Binary files /dev/null and b/create_expense_from_task_odoo/static/description/icon.png differ
diff --git a/create_expense_from_task_odoo/static/description/index.html b/create_expense_from_task_odoo/static/description/index.html
new file mode 100644
index 000000000..8fc9abf9a
--- /dev/null
+++ b/create_expense_from_task_odoo/static/description/index.html
@@ -0,0 +1,655 @@
+
+ This module helps User to create multiple expense from project task
+ and
+ split the amount between assignees.
+
+
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+ Easy to Generate Expense From Tasks
+
+
+
+ Multiple Expenses: The Create Expense button allow users to create multiple expenses for a single project task, which is useful for tasks that require multiple purchases or expenditures.
+
+
+
+ If multiple users are assigned to a task, the expense can be split between them, allowing for fair allocation of costs.
+
+
+
+ Assigned users can request expenses related to their task by clicking a "Create Expense" button in the task form and filling out a form with the item or service they need to purchase and the requested amount.
+
+
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+
+ Create Expenses from Task
+
+
+
+
+
+
+
+ A wizard will pop up and allow the user to enter the total
+ amount required for the expense.
+
+
+
+
+
+
+
+ Users can view expenses created from a task through a smart
+ button.
+
+
+
+
+
+
+
+ By clicking smart button user can see all expense requests
+ for the current task.
+
+
+
+
+
+
+
+ We can add multiple employees
+
+
+
+
+
+
+
+ The expense can be split between them, allowing for fair
+ allocation of costs
+
+
+
+
diff --git a/create_expense_from_task_odoo/wizard/__init__.py b/create_expense_from_task_odoo/wizard/__init__.py
new file mode 100644
index 000000000..d3dcb8c80
--- /dev/null
+++ b/create_expense_from_task_odoo/wizard/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ruksana P (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import expense_request
diff --git a/create_expense_from_task_odoo/wizard/expense_request.py b/create_expense_from_task_odoo/wizard/expense_request.py
new file mode 100644
index 000000000..942eee4b8
--- /dev/null
+++ b/create_expense_from_task_odoo/wizard/expense_request.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ruksana P (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import fields, models
+
+
+class ExpenseRequest(models.TransientModel):
+ """This wizard is used for creating expense records.It allows users to
+ specify the service , the employee associated with the record, and the
+ total amount for the record.
+ """
+ _name = 'expense.request'
+ _description = "Project Task Expense Request"
+
+ product_id = fields.Many2one('product.product', string="Service",
+ domain=[('type', '=', 'service')],
+ required=True,
+ help="The product associated with the record")
+ employee_ids = fields.Many2many('hr.employee', string="Employee",
+ help="The employees associated with "
+ "this record.", required=True)
+ currency_id = fields.Many2one('res.currency', string='Currency',
+ help='Currency of the current company',
+ default=lambda self:
+ self.env.company.currency_id)
+ total_amount = fields.Float(string="Total Amount",
+ help="The total amount for this record.")
+
+ def action_create_expense(self):
+ """Expense Creation if they are many assigned users, the amount is split
+ between them"""
+ expenses = [self.env['hr.expense'].create({
+ 'employee_id': employee.id,
+ 'date': fields.Date.today(),
+ 'name': self._context.get('default_name'),
+ 'project_id': self._context.get('default_project_id'),
+ 'product_id': self.product_id.id,
+ 'product_uom_id': self.product_id.uom_id.id,
+ 'unit_amount': (self.total_amount / len(self.employee_ids))
+ }).id for employee in self.employee_ids]
+ return expenses
diff --git a/create_expense_from_task_odoo/wizard/expense_request_views.xml b/create_expense_from_task_odoo/wizard/expense_request_views.xml
new file mode 100644
index 000000000..7c7eec8ee
--- /dev/null
+++ b/create_expense_from_task_odoo/wizard/expense_request_views.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ expense.request.view.form
+ expense.request
+
+
+
+
+
diff --git a/crm_dashboard/__manifest__.py b/crm_dashboard/__manifest__.py
index 04e8bbbc6..2419bd051 100644
--- a/crm_dashboard/__manifest__.py
+++ b/crm_dashboard/__manifest__.py
@@ -24,11 +24,11 @@
'description': """CRM Dashboard, Detailed Dashboard View for CRM, CRM, Dashboard, odoo14""",
'summary': """Detailed Dashboard View for CRM""",
'category': 'Sales',
- 'version': '14.0.1.0.1',
- 'author': 'Frontware, Cybrosys Techno Solutions',
- 'company': 'Frontware, Cybrosys Techno Solutions',
- 'maintainer': 'Frontware, Cybrosys Techno Solutions',
- 'website': "https://github.com/Frontware/CybroAddons",
+ 'version': '14.0.1.0.2',
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
'depends': ['base', 'sale_management', 'crm'],
'data': [
'views/dashboard_view.xml',
diff --git a/crm_dashboard/doc/RELEASE_NOTES.md b/crm_dashboard/doc/RELEASE_NOTES.md
index 813f9ec73..74a11c2f3 100644
--- a/crm_dashboard/doc/RELEASE_NOTES.md
+++ b/crm_dashboard/doc/RELEASE_NOTES.md
@@ -3,4 +3,9 @@
#### 17.09.2021
#### Version 14.0.1.0.0
#### ADD
-- Initial commit for CRM Dashboard Module
\ No newline at end of file
+- Initial commit for CRM Dashboard Module
+
+#### 15.07.2022
+#### Version 14.0.1.0.2
+#### FIX
+- Bug fixes for CRM Dashboard Module
\ No newline at end of file
diff --git a/crm_dashboard/models/crm_dashboard.py b/crm_dashboard/models/crm_dashboard.py
index 55eb66fa5..2214aba04 100644
--- a/crm_dashboard/models/crm_dashboard.py
+++ b/crm_dashboard/models/crm_dashboard.py
@@ -120,7 +120,7 @@ class CRMLead(models.Model):
"""Sales Activity Pie"""
self._cr.execute('''select mail_activity_type.name,COUNT(*) from mail_activity
inner join mail_activity_type on mail_activity.activity_type_id = mail_activity_type.id
- where res_model = 'crm.lead' GROUP BY mail_activity_type.name''')
+ where mail_activity.res_model = 'crm.lead' GROUP BY mail_activity_type.name''')
data = self._cr.dictfetchall()
name = []
@@ -151,6 +151,8 @@ class CRMLead(models.Model):
for rec in data2:
sales.append(rec['sales'])
inv_target.append(rec['invoiced_target'])
+ if inv_target == [None]:
+ inv_target = [0]
team_id = rec['sale_team_id']
target_annual = (sum(sales) + sum(inv_target))
@@ -166,6 +168,8 @@ class CRMLead(models.Model):
for rec in data3:
sales.append(rec['sales'])
inv_target.append(rec['invoiced_target'])
+ if inv_target == [None]:
+ inv_target = [0]
ytd_target = (sum(sales) + sum(inv_target))
self._cr.execute('''select sum(expected_revenue) from crm_lead where stage_id=4
@@ -537,7 +541,6 @@ class CRMLead(models.Model):
if len(data) != 3:
del data
else:
- data[1] = 0
if data[2] == 0:
ratio = 0
else:
@@ -583,7 +586,10 @@ class CRMLead(models.Model):
if len(data) != 3:
del data
else:
- ratio = round(data[1] / data[2], 2)
+ if data[2] == 0:
+ ratio = 0
+ else:
+ ratio = round(data[1] / data[2], 2)
data.append(str(ratio))
salesperson_wise_ratio.append(data)
@@ -621,7 +627,10 @@ class CRMLead(models.Model):
if len(data) != 3:
del data
else:
- ratio = round(data[1] / data[2], 2)
+ if data[2] == 0:
+ ratio = 0
+ else:
+ ratio = round(data[1] / data[2], 2)
data.append(str(ratio))
sales_team_wise_ratio.append(data)
@@ -753,6 +762,8 @@ class CRMLead(models.Model):
for rec in data2:
sales.append(rec['sales'])
inv_target.append(rec['invoiced_target'])
+ if inv_target == [None]:
+ inv_target = [0]
team_id = rec['sale_team_id']
target_annual = (sum(sales) + sum(inv_target))
@@ -768,6 +779,8 @@ class CRMLead(models.Model):
for rec in data3:
sales.append(rec['sales'])
inv_target.append(rec['invoiced_target'])
+ if inv_target == [None]:
+ inv_target = [0]
ytd_target = (sum(sales) + sum(inv_target))
self._cr.execute('''select sum(expected_revenue) from crm_lead where stage_id=4
diff --git a/cron_failure_notification/README.rst b/cron_failure_notification/README.rst
new file mode 100644
index 000000000..567ae2add
--- /dev/null
+++ b/cron_failure_notification/README.rst
@@ -0,0 +1,47 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Cron Failure Notification
+=========================
+* Cron Failure Notification module helps to notify the admin by sending an email, if any failure occurred in scheduled actions in odoo 14.
+
+Installation
+============
+ - www.odoo.com/documentation/14.0/setup/install.html
+ - Install our custom addon
+
+License
+==========
+General Public License, Version 3 (AGPL v3).
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Company
+==========
+`Cybrosys Techno Solutions `__
+
+Credits
+============
+* Developer: (V14) Mohammed Dilshad Tk , Contact: odoo@cybrosys.com
+
+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
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit https://www.cybrosys.com
+
+Further information
+===================
+HTML Description: ``__
diff --git a/cron_failure_notification/__init__.py b/cron_failure_notification/__init__.py
new file mode 100644
index 000000000..807db7797
--- /dev/null
+++ b/cron_failure_notification/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: MOHAMMED DILSHAD TK (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import models
diff --git a/cron_failure_notification/__manifest__.py b/cron_failure_notification/__manifest__.py
new file mode 100644
index 000000000..5243768dd
--- /dev/null
+++ b/cron_failure_notification/__manifest__.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: MOHAMMED DILSHAD TK (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+{
+ 'name': "Cron Failure Notification",
+ 'version': '14.0.1.0.0',
+ 'category': 'Extra Tools',
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'summary': """This module helps to send notification on scheduled
+ actions failures in odoo 14""",
+ 'description': """Cron Failure Notification helps to notify the admin
+ about the cron failure as a mail with a list of failed
+ cron details""",
+ 'depends': ['mail'],
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'report/cron_failure_notification_templates.xml',
+ 'report/cron_failure_notification_reports.xml',
+ 'data/mail_template_data.xml',
+ 'data/ir_cron_data.xml',
+ 'views/failure_history_views.xml',
+ ],
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/cron_failure_notification/data/ir_cron_data.xml b/cron_failure_notification/data/ir_cron_data.xml
new file mode 100644
index 000000000..f0aae2f5e
--- /dev/null
+++ b/cron_failure_notification/data/ir_cron_data.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Mail: Cron Error Notification
+
+ code
+ model.mail_send_cron()
+
+ 1
+ days
+ -1
+
+
+
diff --git a/cron_failure_notification/data/mail_template_data.xml b/cron_failure_notification/data/mail_template_data.xml
new file mode 100644
index 000000000..7f8c1e7f1
--- /dev/null
+++ b/cron_failure_notification/data/mail_template_data.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ Cron Action Error
+
+ Cron Actions Failed
+ ${ ctx[ 'admin_mail' ] }
+
+
+
Dear Admin,
+
Here is attaching failures from scheduled cron jobs on our server,
+ so please quickly take an action for this.
+
Thank You.
+
+
+
+
diff --git a/cron_failure_notification/doc/RELEASE_NOTES.md b/cron_failure_notification/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..836fe8c8a
--- /dev/null
+++ b/cron_failure_notification/doc/RELEASE_NOTES.md
@@ -0,0 +1,7 @@
+## Module
+
+#### 17.10.2023
+#### Version 14.0.1.0.0
+#### ADD
+
+- Initial commit for Cron Failure Notification
diff --git a/cron_failure_notification/models/__init__.py b/cron_failure_notification/models/__init__.py
new file mode 100644
index 000000000..3f719e9f2
--- /dev/null
+++ b/cron_failure_notification/models/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: MOHAMMED DILSHAD TK (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import failure_history
+from . import ir_cron
diff --git a/cron_failure_notification/models/failure_history.py b/cron_failure_notification/models/failure_history.py
new file mode 100644
index 000000000..94b401fe1
--- /dev/null
+++ b/cron_failure_notification/models/failure_history.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: MOHAMMED DILSHAD TK (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import fields, models
+
+
+class FailureHistory(models.Model):
+ """Creates failure history"""
+ _name = 'failure.history'
+ _inherit = ['mail.thread', 'mail.activity.mixin']
+ _description = 'Failure History'
+
+ name = fields.Char(string='Name', required=True, help="Name of failed cron")
+ error = fields.Char(string='Error Details', help="Brief details of error")
diff --git a/cron_failure_notification/models/ir_cron.py b/cron_failure_notification/models/ir_cron.py
new file mode 100644
index 000000000..d26ed1086
--- /dev/null
+++ b/cron_failure_notification/models/ir_cron.py
@@ -0,0 +1,89 @@
+# -*- coding: utf-8 -*-
+# ################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: MOHAMMED DILSHAD TK (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+import datetime
+import logging
+import time
+import odoo
+from odoo import api, models, _
+from odoo.fields import Datetime, _logger
+from odoo.exceptions import ValidationError
+
+
+class IrCron(models.Model):
+ """ Inherits ir cron to send mail to admin if any cron actions failed. """
+ _name = 'ir.cron'
+ _description = "Ir Cron"
+ _inherit = ['ir.cron', 'mail.thread']
+
+ @api.model
+ def _callback(self, cron_name, server_action_id, job_id):
+ """ Run the method associated to a given job. It takes care of logging
+ and exception handling. Note that the user running the server action
+ is the user calling this method. """
+ try:
+ if self.pool != self.pool.check_signaling():
+ # the registry has changed, reload self in the new registry
+ self.env.reset()
+ log_depth = (None if _logger.isEnabledFor(logging.DEBUG) else 1)
+ odoo.netsvc.log(_logger, logging.DEBUG, 'cron.object.execute',
+ (self._cr.dbname, self._uid, '*', cron_name,
+ server_action_id), depth=log_depth)
+ start_time = False
+ _logger.info('Starting job `%s`.', cron_name)
+ if _logger.isEnabledFor(logging.DEBUG):
+ start_time = time.time()
+ self.env['ir.actions.server'].browse(server_action_id).run()
+ _logger.info('Job `%s` done.', cron_name)
+ if start_time and _logger.isEnabledFor(logging.DEBUG):
+ end_time = time.time()
+ _logger.debug('%.3fs (cron %s, server action %d with uid %d)',
+ end_time - start_time, cron_name,
+ server_action_id, self.env.uid)
+ self.pool.signal_changes()
+ except Exception as exception:
+ self.pool.reset_changes()
+ _logger.exception(
+ "Call from cron %s for server action #%s failed in Job #%s",
+ cron_name, server_action_id, job_id)
+ if exception:
+ self.env['failure.history'].create({
+ 'name': cron_name,
+ 'error': str(exception),
+ })
+
+ def mail_send_cron(self):
+ """ If any cron's failed a notification email will send to admin """
+ start_of_day = Datetime.today()
+ end_of_day = datetime.datetime.combine(start_of_day, datetime.time.max)
+ if self.env['failure.history'].search(
+ [('create_date', '>', start_of_day),
+ ('create_date', '<', end_of_day)]):
+ admin_mail = self.env['res.groups'].search(
+ [('category_id', '=', 'Administration'),
+ ('name', '=', 'Access Rights')]).users.login
+ email_values = {'admin_mail': admin_mail}
+ mail_template = self.env.ref(
+ 'cron_failure_notification.mail_template_cron_error')
+ mail_template.with_context(email_values).send_mail(self.id,
+ force_send=True)
+ else:
+ raise ValidationError(_('No failures in cron actions'))
diff --git a/cron_failure_notification/report/cron_failure_notification_reports.xml b/cron_failure_notification/report/cron_failure_notification_reports.xml
new file mode 100644
index 000000000..4d68b9404
--- /dev/null
+++ b/cron_failure_notification/report/cron_failure_notification_reports.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ Cron failure report
+ ir.cron
+ qweb-pdf
+ cron_failure_notification.report_logs_details
+ cron_failure_notification.report_logs_details
+
+ report
+
+
diff --git a/cron_failure_notification/report/cron_failure_notification_templates.xml b/cron_failure_notification/report/cron_failure_notification_templates.xml
new file mode 100644
index 000000000..744b8d645
--- /dev/null
+++ b/cron_failure_notification/report/cron_failure_notification_templates.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
Cron Failure Report
+
+
+
+
+
+
+
+
Cron Name
+
Date and Time of
+ Run
+
+
Error Details
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cron_failure_notification/security/ir.model.access.csv b/cron_failure_notification/security/ir.model.access.csv
new file mode 100644
index 000000000..fad45476c
--- /dev/null
+++ b/cron_failure_notification/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_failure_history,failure.history,model_failure_history,base.group_user,1,1,1,1
diff --git a/cron_failure_notification/static/description/assets/icons/check.png b/cron_failure_notification/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/check.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/chevron.png b/cron_failure_notification/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/chevron.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/cogs.png b/cron_failure_notification/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/cogs.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/consultation.png b/cron_failure_notification/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/consultation.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/ecom-black.png b/cron_failure_notification/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/ecom-black.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/education-black.png b/cron_failure_notification/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/education-black.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/hotel-black.png b/cron_failure_notification/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/hotel-black.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/license.png b/cron_failure_notification/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/license.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/lifebuoy.png b/cron_failure_notification/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/lifebuoy.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/logo.png b/cron_failure_notification/static/description/assets/icons/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/logo.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/manufacturing-black.png b/cron_failure_notification/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/manufacturing-black.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/pos-black.png b/cron_failure_notification/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/pos-black.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/puzzle.png b/cron_failure_notification/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/puzzle.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/restaurant-black.png b/cron_failure_notification/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/restaurant-black.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/service-black.png b/cron_failure_notification/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/service-black.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/trading-black.png b/cron_failure_notification/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/trading-black.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/training.png b/cron_failure_notification/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/training.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/update.png b/cron_failure_notification/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/update.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/user.png b/cron_failure_notification/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/user.png differ
diff --git a/cron_failure_notification/static/description/assets/icons/wrench.png b/cron_failure_notification/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/cron_failure_notification/static/description/assets/icons/wrench.png differ
diff --git a/cron_failure_notification/static/description/assets/misc/categories.png b/cron_failure_notification/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/cron_failure_notification/static/description/assets/misc/categories.png differ
diff --git a/cron_failure_notification/static/description/assets/misc/check-box.png b/cron_failure_notification/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/cron_failure_notification/static/description/assets/misc/check-box.png differ
diff --git a/cron_failure_notification/static/description/assets/misc/compass.png b/cron_failure_notification/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/cron_failure_notification/static/description/assets/misc/compass.png differ
diff --git a/cron_failure_notification/static/description/assets/misc/corporate.png b/cron_failure_notification/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/cron_failure_notification/static/description/assets/misc/corporate.png differ
diff --git a/cron_failure_notification/static/description/assets/misc/customer-support.png b/cron_failure_notification/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/cron_failure_notification/static/description/assets/misc/customer-support.png differ
diff --git a/cron_failure_notification/static/description/assets/misc/cybrosys-logo.png b/cron_failure_notification/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/cron_failure_notification/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/cron_failure_notification/static/description/assets/misc/features.png b/cron_failure_notification/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/cron_failure_notification/static/description/assets/misc/features.png differ
diff --git a/cron_failure_notification/static/description/assets/misc/logo.png b/cron_failure_notification/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/cron_failure_notification/static/description/assets/misc/logo.png differ
diff --git a/cron_failure_notification/static/description/assets/misc/pictures.png b/cron_failure_notification/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/cron_failure_notification/static/description/assets/misc/pictures.png differ
diff --git a/cron_failure_notification/static/description/assets/misc/pie-chart.png b/cron_failure_notification/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/cron_failure_notification/static/description/assets/misc/pie-chart.png differ
diff --git a/cron_failure_notification/static/description/assets/misc/right-arrow.png b/cron_failure_notification/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/cron_failure_notification/static/description/assets/misc/right-arrow.png differ
diff --git a/cron_failure_notification/static/description/assets/misc/star.png b/cron_failure_notification/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/cron_failure_notification/static/description/assets/misc/star.png differ
diff --git a/cron_failure_notification/static/description/assets/misc/support.png b/cron_failure_notification/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/cron_failure_notification/static/description/assets/misc/support.png differ
diff --git a/cron_failure_notification/static/description/assets/misc/whatsapp.png b/cron_failure_notification/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/cron_failure_notification/static/description/assets/misc/whatsapp.png differ
diff --git a/cron_failure_notification/static/description/assets/modules/approval_image.png b/cron_failure_notification/static/description/assets/modules/approval_image.png
new file mode 100644
index 000000000..84fe94e80
Binary files /dev/null and b/cron_failure_notification/static/description/assets/modules/approval_image.png differ
diff --git a/cron_failure_notification/static/description/assets/modules/budget_image.png b/cron_failure_notification/static/description/assets/modules/budget_image.png
new file mode 100644
index 000000000..fe6aa6fe4
Binary files /dev/null and b/cron_failure_notification/static/description/assets/modules/budget_image.png differ
diff --git a/cron_failure_notification/static/description/assets/modules/export_image.png b/cron_failure_notification/static/description/assets/modules/export_image.png
new file mode 100644
index 000000000..4e4ea0e51
Binary files /dev/null and b/cron_failure_notification/static/description/assets/modules/export_image.png differ
diff --git a/cron_failure_notification/static/description/assets/modules/magento_image.png b/cron_failure_notification/static/description/assets/modules/magento_image.png
new file mode 100644
index 000000000..39de0820f
Binary files /dev/null and b/cron_failure_notification/static/description/assets/modules/magento_image.png differ
diff --git a/cron_failure_notification/static/description/assets/modules/pos_image.png b/cron_failure_notification/static/description/assets/modules/pos_image.png
new file mode 100644
index 000000000..c5932894b
Binary files /dev/null and b/cron_failure_notification/static/description/assets/modules/pos_image.png differ
diff --git a/cron_failure_notification/static/description/assets/modules/shopify_image.png b/cron_failure_notification/static/description/assets/modules/shopify_image.png
new file mode 100644
index 000000000..c6d92c16d
Binary files /dev/null and b/cron_failure_notification/static/description/assets/modules/shopify_image.png differ
diff --git a/cron_failure_notification/static/description/assets/screenshots/4.png b/cron_failure_notification/static/description/assets/screenshots/4.png
new file mode 100644
index 000000000..a93e984db
Binary files /dev/null and b/cron_failure_notification/static/description/assets/screenshots/4.png differ
diff --git a/cron_failure_notification/static/description/assets/screenshots/c1.png b/cron_failure_notification/static/description/assets/screenshots/c1.png
new file mode 100644
index 000000000..32bd2d3a0
Binary files /dev/null and b/cron_failure_notification/static/description/assets/screenshots/c1.png differ
diff --git a/cron_failure_notification/static/description/assets/screenshots/c2.png b/cron_failure_notification/static/description/assets/screenshots/c2.png
new file mode 100644
index 000000000..9947c1cfe
Binary files /dev/null and b/cron_failure_notification/static/description/assets/screenshots/c2.png differ
diff --git a/cron_failure_notification/static/description/assets/screenshots/hero.gif b/cron_failure_notification/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..1ca330b75
Binary files /dev/null and b/cron_failure_notification/static/description/assets/screenshots/hero.gif differ
diff --git a/cron_failure_notification/static/description/banner.png b/cron_failure_notification/static/description/banner.png
new file mode 100644
index 000000000..31358cf16
Binary files /dev/null and b/cron_failure_notification/static/description/banner.png differ
diff --git a/cron_failure_notification/static/description/icon.png b/cron_failure_notification/static/description/icon.png
new file mode 100644
index 000000000..2ccf23bcc
Binary files /dev/null and b/cron_failure_notification/static/description/icon.png differ
diff --git a/cron_failure_notification/static/description/index.html b/cron_failure_notification/static/description/index.html
new file mode 100644
index 000000000..9da7c46b4
--- /dev/null
+++ b/cron_failure_notification/static/description/index.html
@@ -0,0 +1,593 @@
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+ Odoo.sh
+
+
+
+
+
+
+
+
+
+ Cron Failure Notification
+
+ Notify The Admin Through Mail With List Of Failures
+ Cron failure notification module helps to notify the failures of the
+ cron action failures through sending an
+ email with attached pdf containing
+ the list of failed cron actions.
+
+
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+ Creating Failure History.
+
+
+
+ Notify the Admin Through Mail.
+
+
+
+ The Mail Contains Details of Cron Failure History with a Pdf Report.
+
+
+
+ Mail will Send all Day Only if there is a Failure.
+
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+
+ Cron Action that Sends the Admin with Failed cron History.
+
+
+
+
+
+ failure.history.view.tree
+ failure.history
+
+
+
+
+
+
+
+
+ failure.history.view.form
+ failure.history
+
+
+
+
+
+
+
diff --git a/custom_receipts_for_pos/README.rst b/custom_receipts_for_pos/README.rst
new file mode 100644
index 000000000..f3a2d10ab
--- /dev/null
+++ b/custom_receipts_for_pos/README.rst
@@ -0,0 +1,42 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Custom Receipts For POS
+=======================
+Option to select the customised receipts for each POS
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+License
+-------
+Affero General Public License v3.0 (AGPL v3)
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Credits
+-------
+* Developer: (V14) Syamili K , Contact: odoo@cybrosys.com
+
+Contacts
+--------
+* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
+
+Bug Tracker
+-----------
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Maintainer
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit `Our Website `__
+
+Further information
+===================
+HTML Description: ``__
\ No newline at end of file
diff --git a/custom_receipts_for_pos/__init__.py b/custom_receipts_for_pos/__init__.py
new file mode 100644
index 000000000..c5d3dd3d8
--- /dev/null
+++ b/custom_receipts_for_pos/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Syamili K ()
+#
+# This program is free software: you can modify
+# it under the terms of the GNU Affero General Public License (AGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+################################################################################
+from . import models
diff --git a/custom_receipts_for_pos/__manifest__.py b/custom_receipts_for_pos/__manifest__.py
new file mode 100644
index 000000000..4b9d2ae54
--- /dev/null
+++ b/custom_receipts_for_pos/__manifest__.py
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Syamili K ()
+#
+# This program is free software: you can modify
+# it under the terms of the GNU Affero General Public License (AGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+################################################################################
+{
+ 'name': 'Custom Receipts For POS',
+ 'version': '14.0.1.0.0',
+ 'category': 'Point of Sale',
+ 'summary': """Customisable receipt for POS""",
+ 'description': "This module IS used for to select the customised receipts "
+ "for POS.",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['base', 'point_of_sale'],
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'data/pos_receipt_data.xml',
+ 'views/pos_receipt_views.xml',
+ 'views/pos_config_views.xml',
+ 'views/assets.xml',
+ ],
+ 'images': ['static/description/banner.jpg'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/custom_receipts_for_pos/data/pos_receipt_data.xml b/custom_receipts_for_pos/data/pos_receipt_data.xml
new file mode 100644
index 000000000..404d1e69b
--- /dev/null
+++ b/custom_receipts_for_pos/data/pos_receipt_data.xml
@@ -0,0 +1,150 @@
+
+
+
+
+ Design
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tel:
+
+
+
+
+
:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--------------------------------
+
+
+
+
+
+
+
+
+
+
+ Product
+
+
Qty
+
+ Unit Price
+
+
+ Amount
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total :
+
+
+
+
+
+
+
+
+
+
+
+
+ Change
+
+
+
+
+
+ Discounts
+
+
+
+
+ Total Taxes
+
+
+
+
+
Date :
+
+
+
+
+
--------------------------------
+
+
Served by
+
+
+
+
+
+ Thank you. Please visit
+ again!!
+
+
+
+
+
+
\ No newline at end of file
diff --git a/custom_receipts_for_pos/doc/RELEASE_NOTES.md b/custom_receipts_for_pos/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..0f2f24b42
--- /dev/null
+++ b/custom_receipts_for_pos/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 18.07.2023
+#### Version 14.0.1.0.0
+#### ADD
+- Initial Commit for Custom Receipts For POS
diff --git a/custom_receipts_for_pos/models/__init__.py b/custom_receipts_for_pos/models/__init__.py
new file mode 100644
index 000000000..b533a647c
--- /dev/null
+++ b/custom_receipts_for_pos/models/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Syamili K ()
+#
+# This program is free software: you can modify
+# it under the terms of the GNU Affero General Public License (AGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+################################################################################
+from . import pos_config
+from . import pos_receipt
diff --git a/custom_receipts_for_pos/models/pos_config.py b/custom_receipts_for_pos/models/pos_config.py
new file mode 100644
index 000000000..7d93ce279
--- /dev/null
+++ b/custom_receipts_for_pos/models/pos_config.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Syamili K ()
+#
+# This program is free software: you can modify
+# it under the terms of the GNU Affero General Public License (AGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+################################################################################
+from odoo import fields, models
+
+
+class PosConfig(models.Model):
+ """Add new fields in pos.config for enable the option and then select
+ any design."""
+ _inherit = "pos.config"
+
+ receipt_design_id = fields.Many2one('pos.receipt', string="Receipt Design",
+ help="Choose any receipt design",
+ required=True)
+ design_receipt = fields.Text(related='receipt_design_id.design_receipt',
+ string='Receipt XML',
+ help="Write xml code for generate new receipt "
+ "design")
+ is_custom_receipt = fields.Boolean(string='Custom Receipt',
+ help="Enable option for use customised "
+ "design.")
diff --git a/custom_receipts_for_pos/models/pos_receipt.py b/custom_receipts_for_pos/models/pos_receipt.py
new file mode 100644
index 000000000..433633ea0
--- /dev/null
+++ b/custom_receipts_for_pos/models/pos_receipt.py
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Syamili K ()
+#
+# This program is free software: you can modify
+# it under the terms of the GNU Affero General Public License (AGPL) as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# 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 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+################################################################################
+from odoo import fields, models
+
+
+class PosReceipt(models.Model):
+ """New model for create POS receipt designs."""
+ _name = 'pos.receipt'
+ _description = 'POS Receipt'
+
+ name = fields.Char(string='Name', help="Provide a name for record")
+ design_receipt = fields.Text(string='Receipt XML',
+ help='Add your customised receipt design '
+ 'for POS')
diff --git a/custom_receipts_for_pos/security/ir.model.access.csv b/custom_receipts_for_pos/security/ir.model.access.csv
new file mode 100644
index 000000000..868b07ca4
--- /dev/null
+++ b/custom_receipts_for_pos/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_pos_receipt,access.pos.receipt,model_pos_receipt,base.group_user,1,1,1,1
diff --git a/custom_receipts_for_pos/static/description/assets/icons/check.png b/custom_receipts_for_pos/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/check.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/chevron.png b/custom_receipts_for_pos/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/chevron.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/cogs.png b/custom_receipts_for_pos/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/cogs.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/consultation.png b/custom_receipts_for_pos/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/consultation.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/ecom-black.png b/custom_receipts_for_pos/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/ecom-black.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/education-black.png b/custom_receipts_for_pos/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/education-black.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/hotel-black.png b/custom_receipts_for_pos/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/hotel-black.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/license.png b/custom_receipts_for_pos/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/license.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/lifebuoy.png b/custom_receipts_for_pos/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/lifebuoy.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/logo.png b/custom_receipts_for_pos/static/description/assets/icons/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/logo.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/manufacturing-black.png b/custom_receipts_for_pos/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/manufacturing-black.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/pos-black.png b/custom_receipts_for_pos/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/pos-black.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/puzzle.png b/custom_receipts_for_pos/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/puzzle.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/restaurant-black.png b/custom_receipts_for_pos/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/restaurant-black.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/service-black.png b/custom_receipts_for_pos/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/service-black.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/trading-black.png b/custom_receipts_for_pos/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/trading-black.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/training.png b/custom_receipts_for_pos/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/training.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/update.png b/custom_receipts_for_pos/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/update.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/user.png b/custom_receipts_for_pos/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/user.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/icons/wrench.png b/custom_receipts_for_pos/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/icons/wrench.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/modules/1.png b/custom_receipts_for_pos/static/description/assets/modules/1.png
new file mode 100644
index 000000000..dd2b204a3
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/modules/1.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/modules/2.png b/custom_receipts_for_pos/static/description/assets/modules/2.png
new file mode 100644
index 000000000..77027975a
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/modules/2.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/modules/3.png b/custom_receipts_for_pos/static/description/assets/modules/3.png
new file mode 100644
index 000000000..c69345cd3
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/modules/3.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/modules/4.png b/custom_receipts_for_pos/static/description/assets/modules/4.png
new file mode 100644
index 000000000..3112016bc
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/modules/4.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/modules/5.png b/custom_receipts_for_pos/static/description/assets/modules/5.png
new file mode 100644
index 000000000..a24c1d8b3
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/modules/5.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/modules/6.png b/custom_receipts_for_pos/static/description/assets/modules/6.png
new file mode 100644
index 000000000..3dd28d536
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/modules/6.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/screenshots/pos.gif b/custom_receipts_for_pos/static/description/assets/screenshots/pos.gif
new file mode 100644
index 000000000..b115334c0
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/screenshots/pos.gif differ
diff --git a/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_1.png b/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_1.png
new file mode 100644
index 000000000..fee9026b2
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_1.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_2.png b/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_2.png
new file mode 100644
index 000000000..c3bf8aac4
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_2.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_3.png b/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_3.png
new file mode 100644
index 000000000..919ca931f
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_3.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_4.png b/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_4.png
new file mode 100644
index 000000000..6f8f41651
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_4.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_5.png b/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_5.png
new file mode 100644
index 000000000..2296dc2ed
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_5.png differ
diff --git a/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_6.png b/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_6.png
new file mode 100644
index 000000000..9e024a7bc
Binary files /dev/null and b/custom_receipts_for_pos/static/description/assets/screenshots/pos_receipt_design_6.png differ
diff --git a/custom_receipts_for_pos/static/description/banner.jpg b/custom_receipts_for_pos/static/description/banner.jpg
new file mode 100644
index 000000000..da9eea8e7
Binary files /dev/null and b/custom_receipts_for_pos/static/description/banner.jpg differ
diff --git a/custom_receipts_for_pos/static/description/cybro_logo.png b/custom_receipts_for_pos/static/description/cybro_logo.png
new file mode 100644
index 000000000..bb309114c
Binary files /dev/null and b/custom_receipts_for_pos/static/description/cybro_logo.png differ
diff --git a/custom_receipts_for_pos/static/description/icon.png b/custom_receipts_for_pos/static/description/icon.png
new file mode 100644
index 000000000..eb4a168f5
Binary files /dev/null and b/custom_receipts_for_pos/static/description/icon.png differ
diff --git a/custom_receipts_for_pos/static/description/index.html b/custom_receipts_for_pos/static/description/index.html
new file mode 100644
index 000000000..f2fcc0f92
--- /dev/null
+++ b/custom_receipts_for_pos/static/description/index.html
@@ -0,0 +1,604 @@
+
+
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+ Odoo.sh
+
+
+
+
+
+
+
+
+
+ Custom Receipts For POS
+
+ Option to select the customised Receipts for POS.
+ In this module POS Receipt Design user can add receipt designs from the backend, and we can choose the receipt designs for each POS,
+ And we can view the different receipts for each POS.
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+ User can add the receipt designs from the backend in the menu Receipt Designs.
+
+
+
+
+
+
+
+
+
+ User can choose whether the current pos needs custom receipt design
+
+
+
+
+
+
+
+
+
+ We can see that chosen receipt in frontend of the POS .
+
+
+
+
+
+
+
+
+
+ We can edit the receipt design from the backend of the POS.
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ Default Receipt of POS
+
+ This is the default receipt of POS.
+
+
+
+
+
+ Receipt Designs
+
+ We can add the Receipt designs from the backend in the menu 'Receipt Designs'.
+
+
+
+ We can create Receipt designs from here.
+
+
+
+ Here we can give name and XML code for our design.
+
+
+
+
+
+
+ Choose receipt design for POS.
+
+ We can choose the receipt design for each POS from the backend of the pos.
+
+
+
+
+
+
+ Chosen receipt in the frontend
+
+ We can see the chosen receipts for the POS in the frontend of the POS, It will vary as per we're choosing from the Backend for each POS.
+
diff --git a/custom_receipts_for_pos/static/src/js/order_receipt.js b/custom_receipts_for_pos/static/src/js/order_receipt.js
new file mode 100644
index 000000000..8ceda0d0b
--- /dev/null
+++ b/custom_receipts_for_pos/static/src/js/order_receipt.js
@@ -0,0 +1,44 @@
+odoo.define('custom_receipts_for_pos.design_receipt',function(require){
+ "use strict"
+ const Registries = require('point_of_sale.Registries');
+ var PosDB = require("point_of_sale.DB");
+ const OrderReceipt = require('point_of_sale.OrderReceipt');
+ const { onMounted } = owl.hooks;
+ /*The function is used to add method init to an existing object PosDB.*/
+ PosDB.include({
+ init:function(options)
+ {
+ this._super(options);
+ this.receipt_design_id=null;
+ },
+ })
+ /* Extends OrderReceipt to add new designs for receipt, here call the
+ template of customised record and add to the registry.*/
+ const PosResOrderReceipt = OrderReceipt =>
+ class extends OrderReceipt {
+ constructor() {
+ super(...arguments);
+ onMounted(() =>{
+ if(this.env.pos.config.is_custom_receipt){
+ var receipt_design_id=this.env.pos.config.design_receipt
+ var order=this._receiptEnv.order;
+ var data={
+ widget:this.env,
+ pos:order.pos,
+ order:order,
+ receipt:order.export_for_printing(),
+ orderlines:order.get_orderlines(),
+ paymentlines:order.get_paymentlines(),
+ moment:moment,
+ };
+ var xmlDoc=new DOMParser().parseFromString(receipt_design_id,"text/xml");
+ var newXmlStr=new XMLSerializer().serializeToString(xmlDoc);
+ var qweb=new QWeb2.Engine();
+ qweb.add_template(''+newXmlStr+'');
+ var receipt=qweb.render('receipt_design_id',data);$('div.pos-receipt').replaceWith(receipt);
+ }
+ })
+ }
+ }
+ Registries.Component.extend(OrderReceipt, PosResOrderReceipt)
+});
\ No newline at end of file
diff --git a/custom_receipts_for_pos/views/assets.xml b/custom_receipts_for_pos/views/assets.xml
new file mode 100644
index 000000000..b3ae697fb
--- /dev/null
+++ b/custom_receipts_for_pos/views/assets.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/custom_receipts_for_pos/views/pos_config_views.xml b/custom_receipts_for_pos/views/pos_config_views.xml
new file mode 100644
index 000000000..f65b9af67
--- /dev/null
+++ b/custom_receipts_for_pos/views/pos_config_views.xml
@@ -0,0 +1,35 @@
+
+
+
+
+ pos.config.view.form.inherit.custom.receipts.for.pos
+ pos.config
+
+
+
+
+
+
+
+
+
+
+
+
+ Use Custom Receipt Design
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/custom_receipts_for_pos/views/pos_receipt_views.xml b/custom_receipts_for_pos/views/pos_receipt_views.xml
new file mode 100644
index 000000000..5e10887d3
--- /dev/null
+++ b/custom_receipts_for_pos/views/pos_receipt_views.xml
@@ -0,0 +1,40 @@
+
+
+
+
+ pos.receipt.view.form
+ pos.receipt
+
+
+
+
+
+ pos.receipt.view.tree
+ pos.receipt
+
+
+
+
+
+
+
+ Receipt Designs
+ pos.receipt
+ tree,form
+ current
+
+
+
+
\ No newline at end of file
diff --git a/customer_supplier_approval/README.rst b/customer_supplier_approval/README.rst
new file mode 100644
index 000000000..691bb507a
--- /dev/null
+++ b/customer_supplier_approval/README.rst
@@ -0,0 +1,47 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Customer/Supplier Approval
+==========================
+* Customer/Supplier Approval Module is Used to Add Validation for Customer/Vendors.
+
+Configuration
+=============
+* Add users to the three user groups
+ - Allow Validate Partner: can create and validate contacts
+ - Allow Approval Partner: can approve the validated contacts
+ - Administrator: can do both validation and approval of contacts
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+License
+=======
+GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 (AGPLv3)
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Credits
+-------
+* Developer: (V14) Ruksana 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
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
+This module is maintained by Cybrosys Technologies.
+For support and more information, please visit https://www.cybrosys.com
+
+Further information
+===================
+HTML Description: ``__
\ No newline at end of file
diff --git a/customer_supplier_approval/__init__.py b/customer_supplier_approval/__init__.py
new file mode 100644
index 000000000..48ed07dfb
--- /dev/null
+++ b/customer_supplier_approval/__init__.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: odoo@cybrosys.com
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from . import models
diff --git a/customer_supplier_approval/__manifest__.py b/customer_supplier_approval/__manifest__.py
new file mode 100644
index 000000000..ec99bad7a
--- /dev/null
+++ b/customer_supplier_approval/__manifest__.py
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: odoo@cybrosys.com
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+{
+ 'name': 'Customer/Supplier Approval',
+ 'version': '14.0.1.0.0',
+ 'category': 'Extra Tools',
+ 'summary': """This module allows users to validate or approve contacts """,
+ 'description': """By this module, you can grant access to users to validate
+ or approve partners. Then you will be able to select only
+ approved partners on sales orders, purchase orders,
+ invoices, bills or delivery orders.""",
+ 'author': ' Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['base', 'contacts', 'stock', 'sale_management', 'account',
+ 'purchase', ],
+ 'data': [
+ 'security/customer_supplier_approval_groups.xml',
+ 'security/ir.model.access.csv',
+ 'views/res_partner_views.xml',
+ 'views/account_move_views.xml',
+ ],
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/customer_supplier_approval/doc/RELEASE_NOTES.md b/customer_supplier_approval/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..85cf76680
--- /dev/null
+++ b/customer_supplier_approval/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 04.07.2023
+#### Version 14.0.1.0.0
+##### ADD
+- Initial Commit for Customer/Supplier Approval
\ No newline at end of file
diff --git a/customer_supplier_approval/models/__init__.py b/customer_supplier_approval/models/__init__.py
new file mode 100644
index 000000000..ae70b865d
--- /dev/null
+++ b/customer_supplier_approval/models/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: odoo@cybrosys.com
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import purchase_order
+from . import res_partner
+from . import sale_order
+from . import stock_picking
diff --git a/customer_supplier_approval/models/purchase_order.py b/customer_supplier_approval/models/purchase_order.py
new file mode 100644
index 000000000..d4f5d5378
--- /dev/null
+++ b/customer_supplier_approval/models/purchase_order.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: odoo@cybrosys.com
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import fields, models
+
+
+class PurchaseOrder(models.Model):
+ """Add new domain value for partner_id in purchase order model"""
+ _inherit = 'purchase.order'
+
+ partner_id = fields.Many2one("res.partner", string='Vendor',
+ domain="[('state', '=', 'approved')]",
+ help="We can see the only approved partner "
+ "here")
diff --git a/customer_supplier_approval/models/res_partner.py b/customer_supplier_approval/models/res_partner.py
new file mode 100644
index 000000000..7b4de31a5
--- /dev/null
+++ b/customer_supplier_approval/models/res_partner.py
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: odoo@cybrosys.com
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import fields, models, _
+from odoo.exceptions import ValidationError
+
+
+class ResPartner(models.Model):
+ """This class inherited to add some extra fields and functions in the
+ Partner model"""
+ _inherit = 'res.partner'
+
+ customer_supplier = fields.Char(string="Customer Supplier",
+ domain="[('state', '=', 'validated')]",
+ help="Unique id for partners")
+ hide_button = fields.Boolean(default=False, string='Hide Approve Button',
+ help="This boolean field is used to hide the "
+ "approve button")
+ hide_button_validate = fields.Boolean(default=False,
+ string='Hide Approve Button',
+ help="This boolean field is used to "
+ "hide the Validate button")
+ state = fields.Selection([('draft', 'Draft'),
+ ('validated', 'Validated'),
+ ('approved', 'Approved')], string='Status',
+ help="The states are in Draft,Validated and "
+ "Approved", default='draft')
+ _sql_constraints = [
+ ('id_uniq', 'unique (customer_supplier)', 'The partner id unique !')
+ ]
+
+ def action_validate(self):
+ """ Button function of validate, customer or supplier can validate """
+ for rec in self:
+ rec.hide_button_validate = True
+ rec.write({'state': 'validated'})
+
+ def action_approve(self):
+ """ Button function of approve,customer or supplier can Approve """
+ for rec in self:
+ rec.state = 'validated'
+ rec.hide_button = True
+ rec.write({'state': 'approved'})
+
+ def write(self, values):
+ """ To raise validation error when validator changes the state"""
+ if 'state' in values:
+ new_state = values.get('state')
+ if new_state == 'approved' or self.state == 'approved':
+ if not self.env.user.has_group(
+ 'customer_supplier_approval.'
+ 'customer_supplier_approval_group_approval'):
+ raise ValidationError(
+ _("Only Manager can perform that move!"))
+ if new_state == 'validated' or self.state == 'draft':
+ if not self.env.user.has_group(
+ 'customer_supplier_approval.'
+ 'customer_supplier_approval_group_validation'):
+ raise ValidationError(
+ _("Only Managers can perform that move!"))
+ return super().write(values)
diff --git a/customer_supplier_approval/models/sale_order.py b/customer_supplier_approval/models/sale_order.py
new file mode 100644
index 000000000..9f90ec522
--- /dev/null
+++ b/customer_supplier_approval/models/sale_order.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: odoo@cybrosys.com
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import fields, models
+
+
+class SaleOrder(models.Model):
+ """ add domain value for inherited fields """
+ _inherit = 'sale.order'
+
+ partner_id = fields.Many2one("res.partner", string='Customer',
+ domain="[('state', '=', 'approved')]",
+ help="We can see the approved partner here")
diff --git a/customer_supplier_approval/models/stock_picking.py b/customer_supplier_approval/models/stock_picking.py
new file mode 100644
index 000000000..66a2717a4
--- /dev/null
+++ b/customer_supplier_approval/models/stock_picking.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: odoo@cybrosys.com
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import fields, models
+
+
+class StockPicking(models.Model):
+ """ Add domain value for inherited fields """
+ _inherit = 'stock.picking'
+
+ partner_id = fields.Many2one("res.partner", string='Receive From',
+ domain="[('state', '=', 'approved')]",
+ help="We can see the approved partner here")
diff --git a/customer_supplier_approval/security/customer_supplier_approval_groups.xml b/customer_supplier_approval/security/customer_supplier_approval_groups.xml
new file mode 100644
index 000000000..ee27fc0ed
--- /dev/null
+++ b/customer_supplier_approval/security/customer_supplier_approval_groups.xml
@@ -0,0 +1,28 @@
+
+
+
+
+ Partner Approval and Validation
+ User access level for validating and
+ approving
+
+ 10
+
+
+ Allow Validate Partner
+
+
+
+ Allow Approve Partner
+
+
+
+ Administrator
+
+
+
+
+
\ No newline at end of file
diff --git a/customer_supplier_approval/security/ir.model.access.csv b/customer_supplier_approval/security/ir.model.access.csv
new file mode 100644
index 000000000..255c69879
--- /dev/null
+++ b/customer_supplier_approval/security/ir.model.access.csv
@@ -0,0 +1,4 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_res_partner_validation,access.res.partner.validation,model_res_partner,customer_supplier_approval.customer_supplier_approval_group_validation,1,1,1,1
+access_res_partner_approval,access.res.partner.approval,model_res_partner,customer_supplier_approval.customer_supplier_approval_group_approval,1,1,1,1
+access_res_partner_admin,access.res.partner.admin,model_res_partner,customer_supplier_approval.customer_supplier_approval_group_admin,1,1,1,1
diff --git a/customer_supplier_approval/static/description/assets/icons/check.png b/customer_supplier_approval/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/check.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/chevron.png b/customer_supplier_approval/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/chevron.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/cogs.png b/customer_supplier_approval/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/cogs.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/consultation.png b/customer_supplier_approval/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/consultation.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/ecom-black.png b/customer_supplier_approval/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/ecom-black.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/education-black.png b/customer_supplier_approval/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/education-black.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/hotel-black.png b/customer_supplier_approval/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/hotel-black.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/license.png b/customer_supplier_approval/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/license.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/lifebuoy.png b/customer_supplier_approval/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/lifebuoy.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/logo.png b/customer_supplier_approval/static/description/assets/icons/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/logo.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/manufacturing-black.png b/customer_supplier_approval/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/manufacturing-black.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/pos-black.png b/customer_supplier_approval/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/pos-black.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/puzzle.png b/customer_supplier_approval/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/puzzle.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/restaurant-black.png b/customer_supplier_approval/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/restaurant-black.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/service-black.png b/customer_supplier_approval/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/service-black.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/trading-black.png b/customer_supplier_approval/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/trading-black.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/training.png b/customer_supplier_approval/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/training.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/update.png b/customer_supplier_approval/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/update.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/user.png b/customer_supplier_approval/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/user.png differ
diff --git a/customer_supplier_approval/static/description/assets/icons/wrench.png b/customer_supplier_approval/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/icons/wrench.png differ
diff --git a/customer_supplier_approval/static/description/assets/modules/approval_image.png b/customer_supplier_approval/static/description/assets/modules/approval_image.png
new file mode 100644
index 000000000..84fe94e80
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/modules/approval_image.png differ
diff --git a/customer_supplier_approval/static/description/assets/modules/dynamic_image.png b/customer_supplier_approval/static/description/assets/modules/dynamic_image.png
new file mode 100644
index 000000000..f55c47e0f
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/modules/dynamic_image.png differ
diff --git a/customer_supplier_approval/static/description/assets/modules/list_view_image.png b/customer_supplier_approval/static/description/assets/modules/list_view_image.png
new file mode 100644
index 000000000..510d36ae9
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/modules/list_view_image.png differ
diff --git a/customer_supplier_approval/static/description/assets/modules/multiple_ref_image.png b/customer_supplier_approval/static/description/assets/modules/multiple_ref_image.png
new file mode 100644
index 000000000..3fe90e552
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/modules/multiple_ref_image.png differ
diff --git a/customer_supplier_approval/static/description/assets/modules/print_image.png b/customer_supplier_approval/static/description/assets/modules/print_image.png
new file mode 100644
index 000000000..b470725a1
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/modules/print_image.png differ
diff --git a/customer_supplier_approval/static/description/assets/modules/product_return_image.png b/customer_supplier_approval/static/description/assets/modules/product_return_image.png
new file mode 100644
index 000000000..3afc14722
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/modules/product_return_image.png differ
diff --git a/customer_supplier_approval/static/description/assets/screenshots/1.png b/customer_supplier_approval/static/description/assets/screenshots/1.png
new file mode 100644
index 000000000..f6e427342
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/screenshots/1.png differ
diff --git a/customer_supplier_approval/static/description/assets/screenshots/10.png b/customer_supplier_approval/static/description/assets/screenshots/10.png
new file mode 100644
index 000000000..4e6438326
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/screenshots/10.png differ
diff --git a/customer_supplier_approval/static/description/assets/screenshots/12.png b/customer_supplier_approval/static/description/assets/screenshots/12.png
new file mode 100644
index 000000000..33805afa0
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/screenshots/12.png differ
diff --git a/customer_supplier_approval/static/description/assets/screenshots/2.png b/customer_supplier_approval/static/description/assets/screenshots/2.png
new file mode 100644
index 000000000..2222ffaf9
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/screenshots/2.png differ
diff --git a/customer_supplier_approval/static/description/assets/screenshots/3.png b/customer_supplier_approval/static/description/assets/screenshots/3.png
new file mode 100644
index 000000000..ed1f84b29
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/screenshots/3.png differ
diff --git a/customer_supplier_approval/static/description/assets/screenshots/4.png b/customer_supplier_approval/static/description/assets/screenshots/4.png
new file mode 100644
index 000000000..f8adae2e9
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/screenshots/4.png differ
diff --git a/customer_supplier_approval/static/description/assets/screenshots/5.png b/customer_supplier_approval/static/description/assets/screenshots/5.png
new file mode 100644
index 000000000..da2b0bc67
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/screenshots/5.png differ
diff --git a/customer_supplier_approval/static/description/assets/screenshots/6.png b/customer_supplier_approval/static/description/assets/screenshots/6.png
new file mode 100644
index 000000000..04cb6bc2f
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/screenshots/6.png differ
diff --git a/customer_supplier_approval/static/description/assets/screenshots/7.png b/customer_supplier_approval/static/description/assets/screenshots/7.png
new file mode 100644
index 000000000..9b771273a
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/screenshots/7.png differ
diff --git a/customer_supplier_approval/static/description/assets/screenshots/8.png b/customer_supplier_approval/static/description/assets/screenshots/8.png
new file mode 100644
index 000000000..ded45d55e
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/screenshots/8.png differ
diff --git a/customer_supplier_approval/static/description/assets/screenshots/9.png b/customer_supplier_approval/static/description/assets/screenshots/9.png
new file mode 100644
index 000000000..07ec98318
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/screenshots/9.png differ
diff --git a/customer_supplier_approval/static/description/assets/screenshots/hero.gif b/customer_supplier_approval/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..c86963bae
Binary files /dev/null and b/customer_supplier_approval/static/description/assets/screenshots/hero.gif differ
diff --git a/customer_supplier_approval/static/description/banner.png b/customer_supplier_approval/static/description/banner.png
new file mode 100644
index 000000000..efa5401d1
Binary files /dev/null and b/customer_supplier_approval/static/description/banner.png differ
diff --git a/customer_supplier_approval/static/description/icon.png b/customer_supplier_approval/static/description/icon.png
new file mode 100644
index 000000000..abc111bf1
Binary files /dev/null and b/customer_supplier_approval/static/description/icon.png differ
diff --git a/customer_supplier_approval/static/description/index.html b/customer_supplier_approval/static/description/index.html
new file mode 100644
index 000000000..dc3584aa7
--- /dev/null
+++ b/customer_supplier_approval/static/description/index.html
@@ -0,0 +1,720 @@
+
+
+
+
+
+
+ In this module, you can give access for users to validate and
+ approve
+ when creating a new customer Only approved customers will be
+ listed on
+ sale orders, purchase orders, delivery orders, customer
+ invoices, etc.
+ When choosing the partner dropdown menu.
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+ Easily can set approval or validation of Customer/Supplier
+ accesses user-wise.
+
+
+
+
+
+
+
+
+ User can select only approved Customer/Supplier
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ Validate button access for user
+
+ Go to Settings > Users there you can see under Access Right tab
+ you can enable 'Allow Validate Partner' under
+ Approval and Validation category
+
+
+
+
+ Add Validate button and statusbar in the customer form view
+
+ Click on 'Validate' button user can validate the customer ,then
+ the
+ state will change from draft to validate.
+
+
+
+
+
+ Approve button access for user
+
+ Go to Settings > Users there you can see under Access Right tab
+ you
+ can enable 'Allow Approve Partner' under
+ Approval and Validation category
+
+
+
+
+ Add Approve button in customer form view
+
+ Click on 'Approve' button user can approve the customer ,then
+ the
+ state will change from validate to approve.User
+ can also generate an id for customer
+
+
+
+
+
+ Administrator access
+
+ Go to Settings > Users there you can see under Access Right tab
+ you
+ can enable 'Administrator' under
+ Approval and Validation category . Administrator has both
+ validation
+ and approve access.
+
+
+
+
+ Filter Kanban Customer
+
+ You can filter the state quickly from kanban customer.
+
+
+
+
+
+ Group by Kanban Customer
+
+ You can group by the state quickly from kanban customer.
+
+
+
+
+
+ Sale order form view
+
+ when creating a sale order only approved customers will be
+ listed in
+ the customer dropdown
+
+
+
+
+
+ Purchase order form view
+
+ when creating a purchase order only approved vendors will be
+ listed
+ in the vendor dropdown
+
+
+
+
+
+ Customer invoice form view
+
+ when creating a customer invoice only approved customers will be
+ listed in the customer dropdown
+
+
+
+
+
+ Inventory form view
+
+ when creating a delivery order only approved partners will be
+ listed
+ in the partner dropdown
+
+
+
\ No newline at end of file
diff --git a/customer_supplier_approval/views/account_move_views.xml b/customer_supplier_approval/views/account_move_views.xml
new file mode 100644
index 000000000..70ff4b59d
--- /dev/null
+++ b/customer_supplier_approval/views/account_move_views.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ account.move.view.form.inherit.customer.supplier.approval
+
+ account.move
+
+
+
+ [('type', '!=', 'private'),
+ ('company_id', 'in', (False, company_id)),('state', '=',
+ 'approved')]
+
+
+
+
+
\ No newline at end of file
diff --git a/customer_supplier_approval/views/res_partner_views.xml b/customer_supplier_approval/views/res_partner_views.xml
new file mode 100644
index 000000000..a15182149
--- /dev/null
+++ b/customer_supplier_approval/views/res_partner_views.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+ res.partner.view.form.inherit.customer.supplier.approval
+
+ res.partner
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ res.partner.view.kanban.inherit.customer.supplier.approval
+
+ res.partner
+
+
+
+
+
+
+
+
+
+
+
+
+ res.partner.inherit.search.customer.supplier.approval
+
+ res.partner
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cw_mrp/README.rst b/cw_mrp/README.rst
new file mode 100644
index 000000000..417614e53
--- /dev/null
+++ b/cw_mrp/README.rst
@@ -0,0 +1,46 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Catch Weight - Manufacturing
+============================
+* Enables management of Catch weight of products in Manufacturing module
+
+Configuration
+=============
+* No additional configurations needed
+
+License
+-------
+General Public License, Version 3 (AGPL v3).
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+Credits
+-------
+* Developer:(V14) Ammu Raj, 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 `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/cw_mrp/__init__.py b/cw_mrp/__init__.py
new file mode 100644
index 000000000..d9e93b8e8
--- /dev/null
+++ b/cw_mrp/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import models
diff --git a/cw_mrp/__manifest__.py b/cw_mrp/__manifest__.py
new file mode 100644
index 000000000..e47949f83
--- /dev/null
+++ b/cw_mrp/__manifest__.py
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+{
+ 'name': "Catch Weight - Manufacturing",
+ 'version': '14.0.1.0.0',
+ 'category': 'Manufacturing',
+ 'summary': "Enables management of Catch weight of products in"
+ "Manufacturing module",
+ 'description': "Catch weight is simply a parallel unit of measure used to"
+ "manage variable-weight products. This module brings the"
+ "catch weight system in the manufacturing module.We can"
+ "manufacture, scrap and unbuild products based on the catch"
+ "weight of the product.",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'depends': ['mrp_subcontracting', 'cw_stock'],
+ 'data': [
+ 'views/mrp_bom_views.xml',
+ 'views/mrp_production_views.xml',
+ 'views/mrp_unbuild_views.xml',
+ ],
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/cw_mrp/doc/RELEASE_NOTES.md b/cw_mrp/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..c6e96134a
--- /dev/null
+++ b/cw_mrp/doc/RELEASE_NOTES.md
@@ -0,0 +1,7 @@
+## Module
+
+#### 07.11.2023
+#### Version 14.0.1.0.0
+#### ADD
+
+- Initial commit for Catch Weight- Manufacturing
diff --git a/cw_mrp/models/__init__.py b/cw_mrp/models/__init__.py
new file mode 100644
index 000000000..f4ec2b9cb
--- /dev/null
+++ b/cw_mrp/models/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import mrp_bom
+from . import mrp_production
+from . import mrp_unbuild
diff --git a/cw_mrp/models/mrp_bom.py b/cw_mrp/models/mrp_bom.py
new file mode 100644
index 000000000..e409247b5
--- /dev/null
+++ b/cw_mrp/models/mrp_bom.py
@@ -0,0 +1,107 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import api, fields, models
+
+
+class MrpBom(models.Model):
+ """Inherits mrp.bom for adding catch weight fields and functions"""
+ _inherit = 'mrp.bom'
+
+ cw_qty = fields.Float(related='product_tmpl_id.average_cw_qty',
+ string='CW-Qty', digits=(16, 4),
+ help="Catch weight quantity", readonly=False)
+ category_id = fields.Many2one('uom.category', string="Category",
+ help="Category of the Product",
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom', related='product_tmpl_id.cw_uom_id',
+ string='CW-Uom',
+ help="Catch weight unit of measure",
+ domain="[('category_id', '=', category_id)]",
+ store=True)
+ toggle_cw = fields.Boolean(related='product_tmpl_id.catch_weight_ok',
+ string='Is CW Product',
+ help="True for catch weight products")
+
+ @api.onchange('cw_qty')
+ def _onchange_cw_qty(self):
+ """Calculates value of product_qty"""
+ if self.toggle_cw and self.product_tmpl_id.average_cw_qty != 0:
+ self.product_qty = self.cw_qty / self.product_tmpl_id.average_cw_qty
+
+ @api.onchange('product_qty')
+ def _onchange_product_qty(self):
+ """Method for calculating the value of cw_qty"""
+ if self.toggle_cw:
+ self.cw_qty = self.product_tmpl_id.average_cw_qty * self.product_qty
+
+
+class MrpBomLine(models.Model):
+ """Inherits mrp.bom.line for adding catch weight fields and functions"""
+ _inherit = 'mrp.bom.line'
+
+ cw_qty = fields.Float(string='CW-Qty', digits=(16, 4),
+ help="Catch weight quantity")
+ category_id = fields.Many2one('uom.category', string='Category',
+ help="Category of the"
+ " Product",
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom',
+ related='product_id.cw_uom_id',
+ string='CW-Uom', help='Catch weight uom of the'
+ ' product',
+ domain="[('category_id', '=', category_id)]",
+ store=True)
+ cw_hide = fields.Boolean(related='product_id.catch_weight_ok',
+ string='CW-Hide',
+ help="True for catch weight products")
+
+ @api.onchange('product_id', 'product_qty')
+ def _onchange_product_id(self):
+ """Method for calculating the value of cw_qty if product_id or
+ product_qty changed"""
+ for rec in self:
+ if rec.cw_uom_id == rec.product_uom_id:
+ rec.cw_qty = rec.product_qty
+ else:
+ rec.cw_qty = rec.product_qty * rec.product_id.average_cw_qty
+
+ @api.onchange('cw_qty')
+ def _onchange_cw_qty(self):
+ """Method for calculating product qty if the value of cw_qty changed"""
+ for rec in self:
+ if rec.product_id.catch_weight_ok and rec.product_qty and \
+ rec.cw_qty != 0 and rec.product_id.average_cw_qty != 0:
+ if rec.cw_uom_id == rec.product_uom_id:
+ rec.product_qty = rec.cw_qty
+ else:
+ rec.product_qty = rec.cw_qty / rec.product_id.average_cw_qty
+
+ @api.onchange('product_uom_id', 'cw_uom_id')
+ def _onchange_product_uom_id(self):
+ """Method for calculating the value of cw_qty if value of
+ product_uom_id or cw_uom_id changed"""
+ for rec in self:
+ if rec.product_id.catch_weight_ok and rec.cw_uom_id and \
+ rec.product_uom_id.category_id == rec.cw_uom_id.category_id:
+ rec.cw_qty = rec.cw_uom_id.factor / rec.product_uom_id.factor
diff --git a/cw_mrp/models/mrp_production.py b/cw_mrp/models/mrp_production.py
new file mode 100644
index 000000000..4fec373dc
--- /dev/null
+++ b/cw_mrp/models/mrp_production.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import api, fields, models
+
+
+class MrpProduction(models.Model):
+ """Inherits mrp.bom for adding extra fields and functions"""
+ _inherit = 'mrp.production'
+
+ cw_qty = fields.Float(related='product_tmpl_id.average_cw_qty',
+ string='CW-Qty', digits=(16, 4), readonly=False,
+ help="Catch weight quantity")
+ category_id = fields.Many2one('uom.category', string='Category',
+ help="Category of the"
+ " Product",
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom', related='product_tmpl_id.cw_uom_id',
+ string='CW-Uom',
+ help="Catch weight unit of measure",
+ domain="[('category_id', '=', category_id)]",
+ store=True)
+ toggle_cw = fields.Boolean(related='product_tmpl_id.catch_weight_ok',
+ string='Is CW Product',
+ help="True for catch weight products")
+
+ @api.onchange('cw_qty')
+ def _onchange_cw_qty(self):
+ """Method for calculating product qty based on the value of cw_qty"""
+ if self.toggle_cw and self.product_tmpl_id.average_cw_qty != 0:
+ self.product_qty = self.cw_qty / self.product_tmpl_id.average_cw_qty
+
+ @api.onchange('product_qty')
+ def _onchange_product_qty(self):
+ """Method for calculating cw_qty based on the value of product_qty"""
+ if self.toggle_cw:
+ self.cw_qty = self.product_tmpl_id.average_cw_qty * self.product_qty
diff --git a/cw_mrp/models/mrp_unbuild.py b/cw_mrp/models/mrp_unbuild.py
new file mode 100644
index 000000000..eccec4ca0
--- /dev/null
+++ b/cw_mrp/models/mrp_unbuild.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import api, fields, models
+
+
+class MrpUnbuild(models.Model):
+ """Inherits mrp.unbuild for adding catch weight fields and functions"""
+ _inherit = 'mrp.unbuild'
+
+ cw_qty = fields.Float(string='CW-Qty', digits=(16, 4),
+ help="Catch weight quantity")
+ category_id = fields.Many2one('uom.category', string='Category',
+ help='Uom category of the product',
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'), )
+ cw_uom_id = fields.Many2one('uom.uom', related='product_id.cw_uom_id',
+ string='CW-Uom',
+ help="Catch weight unit of measure",
+ domain="[('category_id', '=', category_id)]",
+ store=True)
+ toggle_cw = fields.Boolean(related='product_id.catch_weight_ok',
+ string='Is CW Product',
+ help="True for catch weight products")
+
+ @api.onchange('product_id')
+ def _onchange_product_id(self):
+ """method for calculating the value of cw_qty based on the value of
+ product_id"""
+ self.cw_qty = self.product_id.average_cw_qty * self.product_qty
+ return super()._onchange_product_id()
+
+ @api.onchange('cw_qty')
+ def _onchange_cw_qty(self):
+ """method for calculating value of product_qty based on cw_qty"""
+ if self.toggle_cw and self.product_id.average_cw_qty != 0:
+ if self.cw_uom_id == self.product_uom_id:
+ self.product_qty = self.cw_qty
+ else:
+ self.product_qty = self.cw_qty / self.product_id.average_cw_qty
+
+ @api.onchange('product_qty')
+ def _onchange_product_qty(self):
+ """Method for calculating the value of cw_qty based on product_qty"""
+ if self.toggle_cw:
+ if self.cw_uom_id == self.product_uom_id:
+ self.cw_qty = self.product_qty
+ else:
+ self.cw_qty = self.product_id.average_cw_qty * self.product_qty
+
+ @api.onchange('product_uom_id', 'cw_uom_id')
+ def _onchange_product_uom_id(self):
+ """Method for calculating the value of cw_qty if value of
+ product_uom_id or cw_uom_id changed"""
+ if self.product_id.catch_weight_ok and self.cw_uom_id and \
+ self.product_uom_id.category_id == self.cw_uom_id.category_id:
+ self.cw_qty = self.cw_uom_id.factor / self.product_uom_id.factor
diff --git a/cw_mrp/static/description/assets/icons/check.png b/cw_mrp/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/check.png differ
diff --git a/cw_mrp/static/description/assets/icons/chevron.png b/cw_mrp/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/chevron.png differ
diff --git a/cw_mrp/static/description/assets/icons/cogs.png b/cw_mrp/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/cogs.png differ
diff --git a/cw_mrp/static/description/assets/icons/consultation.png b/cw_mrp/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/consultation.png differ
diff --git a/cw_mrp/static/description/assets/icons/ecom-black.png b/cw_mrp/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/ecom-black.png differ
diff --git a/cw_mrp/static/description/assets/icons/education-black.png b/cw_mrp/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/education-black.png differ
diff --git a/cw_mrp/static/description/assets/icons/hotel-black.png b/cw_mrp/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/hotel-black.png differ
diff --git a/cw_mrp/static/description/assets/icons/license.png b/cw_mrp/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/license.png differ
diff --git a/cw_mrp/static/description/assets/icons/lifebuoy.png b/cw_mrp/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/lifebuoy.png differ
diff --git a/cw_mrp/static/description/assets/icons/logo.png b/cw_mrp/static/description/assets/icons/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/logo.png differ
diff --git a/cw_mrp/static/description/assets/icons/manufacturing-black.png b/cw_mrp/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/manufacturing-black.png differ
diff --git a/cw_mrp/static/description/assets/icons/pos-black.png b/cw_mrp/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/pos-black.png differ
diff --git a/cw_mrp/static/description/assets/icons/puzzle.png b/cw_mrp/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/puzzle.png differ
diff --git a/cw_mrp/static/description/assets/icons/restaurant-black.png b/cw_mrp/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/restaurant-black.png differ
diff --git a/cw_mrp/static/description/assets/icons/service-black.png b/cw_mrp/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/service-black.png differ
diff --git a/cw_mrp/static/description/assets/icons/trading-black.png b/cw_mrp/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/trading-black.png differ
diff --git a/cw_mrp/static/description/assets/icons/training.png b/cw_mrp/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/training.png differ
diff --git a/cw_mrp/static/description/assets/icons/update.png b/cw_mrp/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/update.png differ
diff --git a/cw_mrp/static/description/assets/icons/user.png b/cw_mrp/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/user.png differ
diff --git a/cw_mrp/static/description/assets/icons/wrench.png b/cw_mrp/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/cw_mrp/static/description/assets/icons/wrench.png differ
diff --git a/cw_mrp/static/description/assets/modules/1.png b/cw_mrp/static/description/assets/modules/1.png
new file mode 100644
index 000000000..b470725a1
Binary files /dev/null and b/cw_mrp/static/description/assets/modules/1.png differ
diff --git a/cw_mrp/static/description/assets/modules/2.png b/cw_mrp/static/description/assets/modules/2.png
new file mode 100644
index 000000000..08f6e4e9f
Binary files /dev/null and b/cw_mrp/static/description/assets/modules/2.png differ
diff --git a/cw_mrp/static/description/assets/modules/3.png b/cw_mrp/static/description/assets/modules/3.png
new file mode 100644
index 000000000..48aec7199
Binary files /dev/null and b/cw_mrp/static/description/assets/modules/3.png differ
diff --git a/cw_mrp/static/description/assets/modules/4.png b/cw_mrp/static/description/assets/modules/4.png
new file mode 100644
index 000000000..eb4e651aa
Binary files /dev/null and b/cw_mrp/static/description/assets/modules/4.png differ
diff --git a/cw_mrp/static/description/assets/modules/5.png b/cw_mrp/static/description/assets/modules/5.png
new file mode 100644
index 000000000..052be5bf5
Binary files /dev/null and b/cw_mrp/static/description/assets/modules/5.png differ
diff --git a/cw_mrp/static/description/assets/modules/6.png b/cw_mrp/static/description/assets/modules/6.png
new file mode 100644
index 000000000..48303274f
Binary files /dev/null and b/cw_mrp/static/description/assets/modules/6.png differ
diff --git a/cw_mrp/static/description/assets/screenshots/Screenshot1.png b/cw_mrp/static/description/assets/screenshots/Screenshot1.png
new file mode 100644
index 000000000..8866f9dc6
Binary files /dev/null and b/cw_mrp/static/description/assets/screenshots/Screenshot1.png differ
diff --git a/cw_mrp/static/description/assets/screenshots/Screenshot2.png b/cw_mrp/static/description/assets/screenshots/Screenshot2.png
new file mode 100644
index 000000000..17fcb13e2
Binary files /dev/null and b/cw_mrp/static/description/assets/screenshots/Screenshot2.png differ
diff --git a/cw_mrp/static/description/assets/screenshots/Screenshot3.png b/cw_mrp/static/description/assets/screenshots/Screenshot3.png
new file mode 100644
index 000000000..e6db2de83
Binary files /dev/null and b/cw_mrp/static/description/assets/screenshots/Screenshot3.png differ
diff --git a/cw_mrp/static/description/assets/screenshots/Screenshot4.png b/cw_mrp/static/description/assets/screenshots/Screenshot4.png
new file mode 100644
index 000000000..5b01f27f6
Binary files /dev/null and b/cw_mrp/static/description/assets/screenshots/Screenshot4.png differ
diff --git a/cw_mrp/static/description/assets/screenshots/Screenshot5.png b/cw_mrp/static/description/assets/screenshots/Screenshot5.png
new file mode 100644
index 000000000..c38eafa9b
Binary files /dev/null and b/cw_mrp/static/description/assets/screenshots/Screenshot5.png differ
diff --git a/cw_mrp/static/description/assets/screenshots/hero.gif b/cw_mrp/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..f84c96db0
Binary files /dev/null and b/cw_mrp/static/description/assets/screenshots/hero.gif differ
diff --git a/cw_mrp/static/description/banner.png b/cw_mrp/static/description/banner.png
new file mode 100644
index 000000000..e6d80b241
Binary files /dev/null and b/cw_mrp/static/description/banner.png differ
diff --git a/cw_mrp/static/description/icon.png b/cw_mrp/static/description/icon.png
new file mode 100644
index 000000000..88899e019
Binary files /dev/null and b/cw_mrp/static/description/icon.png differ
diff --git a/cw_mrp/static/description/index.html b/cw_mrp/static/description/index.html
new file mode 100644
index 000000000..f4129be84
--- /dev/null
+++ b/cw_mrp/static/description/index.html
@@ -0,0 +1,625 @@
+
+
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+ Odoo.sh
+
+
+
+
+
+
+
+
+
+ Catch Weight - Manufacturing
+
+ This Module Facilitates the Catch Weight Management in
+ Manufacturing Module.
+
+ Catch weight is simply a parallel unit of measure used to manage
+ variable-weight products. This module brings the catch weight
+ system in the manufacturing module. We can manufacture, scrap and
+ unbuild products based on the catch weight of the product.
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+ Bill of Material based on Catch Weight.
+
+
+
+
+
+
+
+
+ Manufacturing Orders based on Catch Weight.
+
+
+
+
+
+
+
+
+ Unbild Orders based on Catch Weight.
+
+
+
+
+
+
+
+
+ Stock Move based on Catch Weight
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ Enable Catch Weight Product
+
+ We can click on the checkbox "Catch Weight Product" to Enable The
+ Catch weight on the selected product. Also
+ add Catch weight UoM and
+ Catch Weight.
+
+
+
+
+ Bill of Material Based On Catch Weight
+
+ While we select the product and components, if the product has Catch
+ Weight, then Catch weight UoM and
+ Catch Weight will be displayed there.
+
+
+
+
+ Manufacturing Order based on Catch Weight
+
+ While we're selecting a product in Manufacturing order, then Catch
+ weight UoM and
+ Catch Weight will be displayed there if it is applicable.
+
+
+
+
+
diff --git a/cw_stock/README.rst b/cw_stock/README.rst
new file mode 100644
index 000000000..359415fe9
--- /dev/null
+++ b/cw_stock/README.rst
@@ -0,0 +1,46 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Catch Weight - Stock
+====================
+* Helps to manage Catch Weight of products in Inventory module
+
+Configuration
+=============
+* No additional configurations needed
+
+License
+-------
+General Public License, Version 3 (AGPL v3).
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+Credits
+-------
+* Developer:(V14) Ammu Raj, 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 `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/cw_stock/__init__.py b/cw_stock/__init__.py
new file mode 100644
index 000000000..d9e93b8e8
--- /dev/null
+++ b/cw_stock/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import models
diff --git a/cw_stock/__manifest__.py b/cw_stock/__manifest__.py
new file mode 100644
index 000000000..168798553
--- /dev/null
+++ b/cw_stock/__manifest__.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+{
+ 'name': "Catch Weight - Stock",
+ 'version': '14.0.1.0.0',
+ 'category': 'Warehouse',
+ 'summary': "Helps to manage Catch Weight of products in Inventory "
+ "module",
+ 'description': " Catch weight is simply a parallel unit of measure used to "
+ "manage variable-weight products. This module helps to deal "
+ "with Catch Weight in Inventory module. It is possible to "
+ "enable the Catch Weight for each Product. Catch Weight is "
+ "available in stock moves and scrap orders.",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'depends': ['stock', 'stock_account'],
+ '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,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/cw_stock/doc/RELEASE_NOTES.md b/cw_stock/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..e32cdd643
--- /dev/null
+++ b/cw_stock/doc/RELEASE_NOTES.md
@@ -0,0 +1,7 @@
+## Module
+
+#### 22.11.2023
+#### Version 14.0.1.0.0
+#### ADD
+
+- Initial commit for Catch Weight - Stock
diff --git a/cw_stock/models/__init__.py b/cw_stock/models/__init__.py
new file mode 100644
index 000000000..e68f377ef
--- /dev/null
+++ b/cw_stock/models/__init__.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import product_template
+from . import stock_move
+from . import stock_picking_return_line
+from . import stock_scrap
+from . import stock_valuation_layer
diff --git a/cw_stock/models/product_template.py b/cw_stock/models/product_template.py
new file mode 100644
index 000000000..dcd7f9b7e
--- /dev/null
+++ b/cw_stock/models/product_template.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import fields, models
+
+
+class ProductTemplate(models.Model):
+ """Inherit product template to include Catch Weight fields"""
+ _inherit = 'product.template'
+
+ apply_cw = fields.Boolean(string='CW Product',
+ help="True for Catch Weight Products")
+ category_id = fields.Many2one('uom.category', string="Category",
+ help="Category of the Product",
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom', string='CW-Uom',
+ store=True,
+ help="Catch weight unit of measure",
+ domain="[('category_id', '=', category_id)]")
+ catch_weight_ok = fields.Boolean(default=False,
+ string="Catch Weight Product",
+ help="True for catch weight products")
+ average_cw_qty = fields.Float(string='Catch Weight', digits=(16, 4),
+ default=1.0, help="Catch weight quantity")
diff --git a/cw_stock/models/stock_move.py b/cw_stock/models/stock_move.py
new file mode 100644
index 000000000..8933604ba
--- /dev/null
+++ b/cw_stock/models/stock_move.py
@@ -0,0 +1,118 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import api, fields, models
+
+
+class StockMove(models.Model):
+ """Inherit Stock Move for adding Catch Weight fields and functions"""
+ _inherit = 'stock.move'
+
+ category_id = fields.Many2one('uom.category',
+ string="UoM Category",
+ help="True if it is a Catch Weight Product",
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom', string='CW-UoM',
+ related='product_id.product_tmpl_id.cw_uom_id',
+ help="Catch weight unit of measure",
+ domain="[('category_id', '=', category_id)]")
+ cw_demand = fields.Float(string='CW-Demand', required=True,
+ digits=(16, 4), compute='_compute_cw_demand',
+ help="The catch weight of product demanded")
+ cw_reserved = fields.Float(string='CW-Reserved',
+ compute='_compute_cw_demand',
+ help="Catch weight to be reserved",
+ digits=(16, 4))
+ cw_done = fields.Float(string='CW-Done', digits=(16, 4),
+ help="Catch weight of done",
+ compute='_compute_cw_demand', )
+ cw_hide = fields.Boolean(related='product_id.catch_weight_ok',
+ string='CW Product',
+ help="True for catch weight products.")
+
+ def _compute_cw_demand(self):
+ """Method for computing 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_done': rec.quantity_done * rec.product_id.
+ average_cw_qty,
+ 'cw_reserved': rec.product_uom_qty * rec.product_id.
+ average_cw_qty,
+ })
+
+ @api.onchange('product_id', 'product_uom_qty')
+ def onchange_product_id(self):
+ """Method for calculating cw demand, uom_id and cw_reserved"""
+ if self.product_id.catch_weight_ok:
+ self.update(
+ {
+ 'cw_demand': (self.product_uom_qty *
+ self.product_id.average_cw_qty),
+ 'cw_uom_id': self.product_id.cw_uom_id,
+ 'cw_reserved': (self.product_uom_qty *
+ self.product_id.average_cw_qty)
+ })
+ return super().onchange_product_id()
+
+ @api.onchange('cw_demand')
+ def _onchange_cw_demand(self):
+ """Calculates the value of product_uom_qty if cw_demand changed"""
+ for rec in self:
+ if rec.product_id.catch_weight_ok and \
+ rec.product_id.average_cw_qty != 0:
+ rec.product_uom_qty = rec.cw_demand / \
+ rec.product_id.average_cw_qty
+
+
+class StockMoveLine(models.Model):
+ """Inherits stock move line to include Catch Weight fields"""
+ _inherit = 'stock.move.line'
+
+ cw_qty_done = fields.Float(string='CW-Qty Done',
+ help="Catch Weight Done quantity",
+ compute='_compute_cw_qty_done',
+ digits=(16, 4))
+ category_id = fields.Many2one('uom.category',
+ string="UoM Category",
+ help="Category of the Product",
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom',
+ related='product_id.product_tmpl_id.cw_uom_id',
+ string='CW-UoM',
+ help="Unit of Measure of Catch Weight",
+ domain="[('category_id', '=', category_id)]",
+ )
+ cw_hide = fields.Boolean(related='product_id.catch_weight_ok',
+ string='CW Product',
+ help="True for Catch Weight products")
+
+ @api.depends('product_id', 'qty_done')
+ def _compute_cw_qty_done(self):
+ """Method for calculating the value of cw_qty_done for catch weight
+ products"""
+ for rec in self:
+ rec.cw_qty_done = rec.qty_done * rec.product_id.average_cw_qty \
+ if rec.product_id.catch_weight_ok else 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..46718d052
--- /dev/null
+++ b/cw_stock/models/stock_picking_return_line.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import api, fields, models
+
+
+class StockReturnPickingLine(models.TransientModel):
+ """Inherits Stock Return Picking Line for including the Catch Weight fields
+ and functions"""
+ _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', string="Category",
+ help="Category of the Product",
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom',
+ related='product_id.cw_uom_id',
+ string='CW-UoM',
+ help="Unit of Measure of Catch Weight",
+ domain="[('category_id', '=', category_id)]")
+ cw_hide = fields.Boolean(related='product_id.catch_weight_ok',
+ string='CW Product',
+ help="True if it is a Catch weight product")
+
+ @api.depends('product_id', 'quantity')
+ def _compute_cw_qty(self):
+ """Calculating cw qty done"""
+ for rec in self:
+ if rec.product_id.catch_weight_ok:
+ 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"""
+ if self.product_id.catch_weight_ok and self.product_id.average_cw_qty \
+ != 0:
+ self.quantity = self.cw_qty / self.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..f939ed0a8
--- /dev/null
+++ b/cw_stock/models/stock_scrap.py
@@ -0,0 +1,67 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import api, fields, models
+
+
+class StockScrap(models.Model):
+ """Inherits Stock Scrap for including fields and functions for Catch
+ Weight"""
+ _inherit = 'stock.scrap'
+
+ cw_qty = fields.Float(string='CW-Qty', digits=(16, 4), readonly=False,
+ compute='_compute_cw_qty',
+ help="Catch weight quantity")
+ category_id = fields.Many2one('uom.category',
+ string="UoM Category",
+ help="Category of the Product",
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'))
+ cw_uom_id = fields.Many2one('uom.uom',
+ related='product_id.cw_uom_id',
+ string='CW-UoM',
+ help="Catch weight unit of measure",
+ domain="[('category_id', '=', category_id)]"
+ )
+ toggle_cw = fields.Boolean(related='product_id.catch_weight_ok',
+ string='CW Product',
+ help="True if it is a Catch Weight Product")
+
+ @api.depends('product_id')
+ def _compute_cw_qty(self):
+ """Method for computing product_uom_id and cw_quantity"""
+ for rec in self:
+ rec.product_uom_id = rec.product_id.uom_id
+ rec.cw_qty = rec.product_id.average_cw_qty * rec.scrap_qty
+
+ @api.onchange('scrap_qty')
+ def _onchange_scrap_qty(self):
+ """Calculating scrap qty from cw qty"""
+ if self.product_id.catch_weight_ok and \
+ self.product_id.average_cw_qty != 0:
+ self.cw_qty = self.scrap_qty * self.product_id.average_cw_qty
+
+ @api.onchange('cw_qty')
+ def _onchange_cw_qty(self):
+ """Method for calculating cw qty from scrap qty"""
+ if self.product_id.catch_weight_ok and self.product_id. \
+ average_cw_qty != 0:
+ self.scrap_qty = self.cw_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..b6e29d7d0
--- /dev/null
+++ b/cw_stock/models/stock_valuation_layer.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu Raj (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import api, fields, models
+
+
+class StockValuationLayer(models.Model):
+ """Inherit Stock Valuation Layer for Adding Catch Weight fields and
+ functions"""
+ _inherit = 'stock.valuation.layer'
+
+ cw_qty_done = fields.Float(string='CW-Qty Done', help="Catch weight of done"
+ " quantity",
+ compute='_compute_cw_qty_done', digits=(16, 4))
+ category_id = fields.Many2one('uom.category', string="Category",
+ default=lambda self: self.env.ref(
+ 'uom.product_uom_categ_kgm'),
+ help="Category of catch weight UoM")
+ cw_uom_id = fields.Many2one('uom.uom',
+ related='product_id.cw_uom_id',
+ string='CW-Uom',
+ help="Catch weight unit od measure",
+ domain="[('category_id', '=', category_id)]",
+ )
+ cw_hide = fields.Boolean(related='product_id.catch_weight_ok',
+ string='CW Product',
+ help="True for catch weight products")
+
+ @api.depends('product_id', 'quantity')
+ def _compute_cw_qty_done(self):
+ """Calculating cw qty done"""
+ for rec in self:
+ rec.cw_qty_done = rec.quantity * rec.product_id.average_cw_qty if \
+ rec.product_id.catch_weight_ok else 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/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/logo.png b/cw_stock/static/description/assets/icons/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/cw_stock/static/description/assets/icons/logo.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/modules/1.png b/cw_stock/static/description/assets/modules/1.png
new file mode 100644
index 000000000..5365b9593
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..87a76bd25
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..4e4ea0e51
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..5365b9593
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.png b/cw_stock/static/description/assets/modules/5.png
new file mode 100644
index 000000000..cb335eb14
Binary files /dev/null and b/cw_stock/static/description/assets/modules/5.png 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..48303274f
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..aefebdc79
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..23e4a5599
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..f1080c0fd
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..8990355e8
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..41664e153
Binary files /dev/null and b/cw_stock/static/description/assets/screenshots/screenshot-4.png differ
diff --git a/cw_stock/static/description/banner.png b/cw_stock/static/description/banner.png
new file mode 100644
index 000000000..3e73a7132
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..fe8e7315f
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..eac0360b5
--- /dev/null
+++ b/cw_stock/static/description/index.html
@@ -0,0 +1,594 @@
+
+
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+ Odoo.sh
+
+
+
+
+
+
+
+
+
+ Catch Weight - Stock
+
+ Helps to Manage Catch Weight of Products in Inventory Module
+
+
+
+
+
diff --git a/cw_stock/views/stock_valuation_layer_views.xml b/cw_stock/views/stock_valuation_layer_views.xml
new file mode 100644
index 000000000..8f69f6ba9
--- /dev/null
+++ b/cw_stock/views/stock_valuation_layer_views.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ stock.valuation.layer.view.tree.inherit.cw.stock
+
+ stock.valuation.layer
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dragable_and_resizable_wizard/README.rst b/dragable_and_resizable_wizard/README.rst
new file mode 100644
index 000000000..f378b166f
--- /dev/null
+++ b/dragable_and_resizable_wizard/README.rst
@@ -0,0 +1,47 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Draggable And Resizable Wizard
+==============================
+Make every wizard in the backend draggable and resizable as according to
+users need
+
+Configuration
+=============
+No additional configurations needed
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+License
+=======
+AFFERO GENERAL PUBLIC LICENSE, Version 3 (AGPLv3)
+(http://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Credits
+-------
+Developer: (V14) Mohammed Irfan T @cybrosys, 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 `__
+
+Further information
+===================
+HTML Description: ``__
\ No newline at end of file
diff --git a/dragable_and_resizable_wizard/__init__.py b/dragable_and_resizable_wizard/__init__.py
new file mode 100644
index 000000000..da721c3f7
--- /dev/null
+++ b/dragable_and_resizable_wizard/__init__.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Mohammed Irfan T(odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
diff --git a/dragable_and_resizable_wizard/__manifest__.py b/dragable_and_resizable_wizard/__manifest__.py
new file mode 100644
index 000000000..e17c48dd2
--- /dev/null
+++ b/dragable_and_resizable_wizard/__manifest__.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Mohammed Irfan T(odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+{
+ 'name': 'Draggable And Resizable Wizard',
+ 'version': '14.0.1.0.0',
+ 'summary': 'Make wizard draggable and resizable',
+ 'description': """Make every wizard in the backend draggable and resizable
+ as according to users need""",
+ 'category': 'Extra Tools',
+ 'author': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'depends': ['base', 'web'],
+ 'data': ['views/assets.xml'],
+ 'images': ['static/description/banner.png'],
+ 'installable': True,
+ 'application': False,
+ 'auto_install': False,
+ 'license': 'AGPL-3'
+}
diff --git a/dragable_and_resizable_wizard/doc/RELEASE_NOTES.md b/dragable_and_resizable_wizard/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..893b2088a
--- /dev/null
+++ b/dragable_and_resizable_wizard/doc/RELEASE_NOTES.md
@@ -0,0 +1,7 @@
+## Module
+
+#### 11.07.2023
+#### Version 14.0.1.0.0
+#### ADD
+
+- Initial commit for Draggable And Resizable Wizard
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/check.png b/dragable_and_resizable_wizard/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/check.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/chevron.png b/dragable_and_resizable_wizard/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/chevron.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/cogs.png b/dragable_and_resizable_wizard/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/cogs.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/consultation.png b/dragable_and_resizable_wizard/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/consultation.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/ecom-black.png b/dragable_and_resizable_wizard/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/ecom-black.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/education-black.png b/dragable_and_resizable_wizard/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/education-black.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/hotel-black.png b/dragable_and_resizable_wizard/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/hotel-black.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/license.png b/dragable_and_resizable_wizard/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/license.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/lifebuoy.png b/dragable_and_resizable_wizard/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/lifebuoy.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/logo.png b/dragable_and_resizable_wizard/static/description/assets/icons/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/logo.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/manufacturing-black.png b/dragable_and_resizable_wizard/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/manufacturing-black.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/pos-black.png b/dragable_and_resizable_wizard/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/pos-black.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/puzzle.png b/dragable_and_resizable_wizard/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/puzzle.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/restaurant-black.png b/dragable_and_resizable_wizard/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/restaurant-black.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/service-black.png b/dragable_and_resizable_wizard/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/service-black.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/trading-black.png b/dragable_and_resizable_wizard/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/trading-black.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/training.png b/dragable_and_resizable_wizard/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/training.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/update.png b/dragable_and_resizable_wizard/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/update.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/user.png b/dragable_and_resizable_wizard/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/user.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/icons/wrench.png b/dragable_and_resizable_wizard/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/icons/wrench.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/misc/categories.png b/dragable_and_resizable_wizard/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/misc/categories.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/misc/check-box.png b/dragable_and_resizable_wizard/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/misc/check-box.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/misc/compass.png b/dragable_and_resizable_wizard/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/misc/compass.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/misc/corporate.png b/dragable_and_resizable_wizard/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/misc/corporate.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/misc/customer-support.png b/dragable_and_resizable_wizard/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/misc/customer-support.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/misc/cybrosys-logo.png b/dragable_and_resizable_wizard/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/misc/features.png b/dragable_and_resizable_wizard/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/misc/features.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/misc/logo.png b/dragable_and_resizable_wizard/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/misc/logo.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/misc/pictures.png b/dragable_and_resizable_wizard/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/misc/pictures.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/misc/pie-chart.png b/dragable_and_resizable_wizard/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/misc/pie-chart.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/misc/right-arrow.png b/dragable_and_resizable_wizard/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/misc/right-arrow.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/misc/star.png b/dragable_and_resizable_wizard/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/misc/star.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/misc/support.png b/dragable_and_resizable_wizard/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/misc/support.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/misc/whatsapp.png b/dragable_and_resizable_wizard/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/misc/whatsapp.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/modules/approval_image.png b/dragable_and_resizable_wizard/static/description/assets/modules/approval_image.png
new file mode 100644
index 000000000..84fe94e80
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/modules/approval_image.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/modules/gantt_image.png b/dragable_and_resizable_wizard/static/description/assets/modules/gantt_image.png
new file mode 100644
index 000000000..4810fc34d
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/modules/gantt_image.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/modules/hide_menu_image.png b/dragable_and_resizable_wizard/static/description/assets/modules/hide_menu_image.png
new file mode 100644
index 000000000..be440eb23
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/modules/hide_menu_image.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/modules/laundry_image.png b/dragable_and_resizable_wizard/static/description/assets/modules/laundry_image.png
new file mode 100644
index 000000000..730fb36f4
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/modules/laundry_image.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/modules/list_view_image.png b/dragable_and_resizable_wizard/static/description/assets/modules/list_view_image.png
new file mode 100644
index 000000000..510d36ae9
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/modules/list_view_image.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/modules/print_image.png b/dragable_and_resizable_wizard/static/description/assets/modules/print_image.png
new file mode 100644
index 000000000..b470725a1
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/modules/print_image.png differ
diff --git a/dragable_and_resizable_wizard/static/description/assets/screenshots/hero.gif b/dragable_and_resizable_wizard/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..fe9280039
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/assets/screenshots/hero.gif differ
diff --git a/dragable_and_resizable_wizard/static/description/banner.png b/dragable_and_resizable_wizard/static/description/banner.png
new file mode 100644
index 000000000..74a00f965
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/banner.png differ
diff --git a/dragable_and_resizable_wizard/static/description/icon.png b/dragable_and_resizable_wizard/static/description/icon.png
new file mode 100644
index 000000000..f7cc993f2
Binary files /dev/null and b/dragable_and_resizable_wizard/static/description/icon.png differ
diff --git a/dragable_and_resizable_wizard/static/description/index.html b/dragable_and_resizable_wizard/static/description/index.html
new file mode 100644
index 000000000..d4355e27a
--- /dev/null
+++ b/dragable_and_resizable_wizard/static/description/index.html
@@ -0,0 +1,507 @@
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+ Odoo.sh
+
+
+
+
+
+
+
+
+
+ Draggable And Resizable Wizard
+
Make Every Backend
+ Wizard In Odoo Resizable And Draggable.
\ No newline at end of file
diff --git a/dragable_and_resizable_wizard/static/src/css/dragable.css b/dragable_and_resizable_wizard/static/src/css/dragable.css
new file mode 100644
index 000000000..fd2e3e5e6
--- /dev/null
+++ b/dragable_and_resizable_wizard/static/src/css/dragable.css
@@ -0,0 +1,7 @@
+.modal-content{
+ resize: both;
+ overflow: auto;
+}
+.modal-header{
+ cursor: pointer;
+}
\ No newline at end of file
diff --git a/dragable_and_resizable_wizard/static/src/js/draggable_wiz.js b/dragable_and_resizable_wizard/static/src/js/draggable_wiz.js
new file mode 100644
index 000000000..4bd2d9a1a
--- /dev/null
+++ b/dragable_and_resizable_wizard/static/src/js/draggable_wiz.js
@@ -0,0 +1,50 @@
+odoo.define('dragable_and_resizable_wizard.draggable_wiz.js', function (require) {
+'use strict';
+const Dialog = require('web.Dialog');
+//This code defines a function called "draggable" that enables a DOM element to be
+// dragged around the screen by clicking and dragging it.
+//Parameters:
+//- el (object): The event object that triggered the function. This is used to get the target element that should be draggable.
+ Dialog.include({
+ /**
+ * Modifies the `Dialog` `start` method to include the `drag` function.
+ */
+ async start() {
+ await this._super(...arguments);
+ this.drag()
+ },
+ /**
+ * Attaches a `click` event listener to the dialog element to enable dragging.
+ */
+ drag(){
+ this.$modal[0].firstElementChild.children[0].addEventListener('click', this.draggable)
+ },
+ /**
+ * Attaches event listeners to the dialog element for `mousedown`, `mousemove`, and `mouseup` events,
+ * enabling the user to drag the element around the screen.
+ * @param {MouseEvent} el - The `mousedown` event.
+ */
+ draggable(el) {
+ el.target.addEventListener('mousedown', function(e) {
+ var offsetX = e.clientX - parseInt(window.getComputedStyle(this).left);
+ var offsetY = e.clientY - parseInt(window.getComputedStyle(this).top);
+ function mouseMoveHandler(e) {
+ el.target.style.top = (e.clientY - offsetY) + 'px';
+ el.target.style.left = (e.clientX - offsetX) + 'px';
+ }
+ function reset() {
+ window.removeEventListener('mousemove', mouseMoveHandler);
+ window.removeEventListener('mouseup', reset);
+ return
+ }
+ if (e.target.className === "modal-header"){
+ window.addEventListener('mousemove', mouseMoveHandler);
+ window.addEventListener('mouseup', reset);
+ }
+ });
+ },
+ });
+});
+//Once you have created the dialog and added the draggable function, you can use
+//the dialog in your application and the user will be able to drag it around
+//the screen by clicking and dragging the dialog's title bar.
diff --git a/dragable_and_resizable_wizard/views/assets.xml b/dragable_and_resizable_wizard/views/assets.xml
new file mode 100644
index 000000000..aa26b59f6
--- /dev/null
+++ b/dragable_and_resizable_wizard/views/assets.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/duplicate_contact_details_alert/README.rst b/duplicate_contact_details_alert/README.rst
new file mode 100644
index 000000000..610465755
--- /dev/null
+++ b/duplicate_contact_details_alert/README.rst
@@ -0,0 +1,39 @@
+Duplicate Contact Details Alert
+===============================
+* Duplicate Contact Details Alert module for Odoo 14.
+
+Installation
+============
+ - www.odoo.com/documentation/14.0/setup/install.html
+ - Install our custom addon
+
+License
+-------
+General Public License, Version 3 (AGPL v3).
+(https://www.odoo.com/documentation/user/14.0/legal/licenses/licenses.html)
+
+Company
+-------
+* 'Cybrosys Techno Solutions '__
+
+Credits
+-------
+* 'Cybrosys Techno Solutions '__
+
+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/duplicate_contact_details_alert/__init__.py b/duplicate_contact_details_alert/__init__.py
new file mode 100644
index 000000000..3367fdfdb
--- /dev/null
+++ b/duplicate_contact_details_alert/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
+
+from . import models
diff --git a/duplicate_contact_details_alert/__manifest__.py b/duplicate_contact_details_alert/__manifest__.py
new file mode 100644
index 000000000..947aa120a
--- /dev/null
+++ b/duplicate_contact_details_alert/__manifest__.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
+{
+ 'name': "Duplicate Contact Details Alert",
+ 'version': '14.0.1.0.0',
+ 'summary': """Duplicate Contact Details Alert""",
+ "category": 'Extra Tools',
+ 'description': """Duplicate Contact Details Alert""",
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'depends': ['base', 'contacts'],
+ 'data': [
+ 'views/res_config_settings_views.xml',
+ ],
+ 'images': ['static/description/banner.png'],
+ 'license': "LGPL-3",
+ 'installable': True,
+ 'application': False,
+ 'auto_install': False,
+}
diff --git a/duplicate_contact_details_alert/doc/RELEASE_NOTES.md b/duplicate_contact_details_alert/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..e39681810
--- /dev/null
+++ b/duplicate_contact_details_alert/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 24.10.2022
+#### Version 14.0.1.0.0
+#### ADD
+- Initial commit for Duplicate Contact Details Alert Module
\ No newline at end of file
diff --git a/duplicate_contact_details_alert/models/__init__.py b/duplicate_contact_details_alert/models/__init__.py
new file mode 100644
index 000000000..facecdb3a
--- /dev/null
+++ b/duplicate_contact_details_alert/models/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
+
+from . import res_partner
+from . import res_config_settings
diff --git a/duplicate_contact_details_alert/models/res_config_settings.py b/duplicate_contact_details_alert/models/res_config_settings.py
new file mode 100644
index 000000000..01e98bbf5
--- /dev/null
+++ b/duplicate_contact_details_alert/models/res_config_settings.py
@@ -0,0 +1,66 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
+
+from odoo import api, fields, models
+from ast import literal_eval
+
+
+class ResConfig(models.TransientModel):
+ _inherit = 'res.config.settings'
+
+ def _get_contacts_fields_domain(self):
+ return [
+ ('model', '=', 'res.partner'), ('store', '=', True),
+ ('ttype', 'in', ['binary', 'char'])]
+
+ is_unique_contact = fields.Boolean(string="Unique Contacts Alert")
+ unique_contact_ids = fields.Many2many(
+ 'ir.model.fields', string='Contact Fields',
+ domain=_get_contacts_fields_domain,
+ help='Warning to avoid duplication of customer/vendor'
+ ' details in the system')
+
+ def set_values(self):
+ super(ResConfig, self).set_values()
+ self.env['ir.config_parameter'].set_param(
+ 'duplicate_contact_details_alert.is_unique_contact',
+ self.is_unique_contact)
+
+ self.env['ir.config_parameter'].set_param(
+ 'duplicate_contact_details_alert.unique_contact_ids',
+ self.unique_contact_ids.ids)
+
+ @api.model
+ def get_values(self):
+ res = super(ResConfig, self).get_values()
+ params = self.env['ir.config_parameter'].sudo()
+ contact_field_ids = params.get_param(
+ 'duplicate_contact_details_alert.unique_contact_ids')
+ if contact_field_ids:
+ res.update(
+ is_unique_contact=params.get_param(
+ 'duplicate_contact_details_alert.is_unique_contact'),
+ unique_contact_ids=[(6, 0, literal_eval(contact_field_ids))],
+ )
+ return res
+ else:
+ return res
diff --git a/duplicate_contact_details_alert/models/res_partner.py b/duplicate_contact_details_alert/models/res_partner.py
new file mode 100644
index 000000000..63ef73756
--- /dev/null
+++ b/duplicate_contact_details_alert/models/res_partner.py
@@ -0,0 +1,79 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2022-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
+
+from odoo import api, fields, models, _
+from odoo.exceptions import UserError, ValidationError
+import ast
+
+
+class ResPartner(models.Model):
+ _inherit = 'res.partner'
+
+ @api.model
+ def create(self, vals):
+ unique_contact_ids = self.env[
+ 'ir.config_parameter'].sudo().get_param(
+ 'duplicate_contact_details_alert.unique_contact_ids')
+ if unique_contact_ids:
+ fields_list = ast.literal_eval(unique_contact_ids)
+ for x in fields_list:
+ contact_fields = self.env['ir.model.fields'].browse(x)
+ field_vals = contact_fields.name
+ if vals.get(field_vals):
+ partner = self.env['res.partner'].search(
+ [(field_vals, '=', vals.get(field_vals))], limit=1)
+ if partner:
+ raise ValidationError(
+ _("The %s is already"
+ " used for contact %s.") %
+ (contact_fields.name, partner.name))
+ else:
+ res = super(ResPartner, self).create(vals)
+ return res
+ else:
+ res = super(ResPartner, self).create(vals)
+ return res
+
+ def write(self, vals):
+ unique_contact_ids = self.env[
+ 'ir.config_parameter'].sudo().get_param(
+ 'duplicate_contact_details_alert.unique_contact_ids')
+ if unique_contact_ids:
+ fields_list = ast.literal_eval(unique_contact_ids)
+ for x in fields_list:
+ contact_fields = self.env['ir.model.fields'].browse(x)
+ field_vals = contact_fields.name
+ if vals.get(field_vals):
+ partner = self.env['res.partner'].search(
+ [(field_vals, '=', vals.get(field_vals))], limit=1)
+ if partner:
+ raise ValidationError(
+ _("The %s is already"
+ " used for contact %s.") %
+ (contact_fields.name, partner.name))
+ else:
+ res = super(ResPartner, self).write(vals)
+ return res
+
+ else:
+ res = super(ResPartner, self).write(vals)
+ return res
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/check.png b/duplicate_contact_details_alert/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/check.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/chevron.png b/duplicate_contact_details_alert/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/chevron.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/cogs.png b/duplicate_contact_details_alert/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/cogs.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/consultation.png b/duplicate_contact_details_alert/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/consultation.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/ecom-black.png b/duplicate_contact_details_alert/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/ecom-black.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/education-black.png b/duplicate_contact_details_alert/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/education-black.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/hotel-black.png b/duplicate_contact_details_alert/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/hotel-black.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/license.png b/duplicate_contact_details_alert/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/license.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/lifebuoy.png b/duplicate_contact_details_alert/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/lifebuoy.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/logo.png b/duplicate_contact_details_alert/static/description/assets/icons/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/logo.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/manufacturing-black.png b/duplicate_contact_details_alert/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/manufacturing-black.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/pos-black.png b/duplicate_contact_details_alert/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/pos-black.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/puzzle.png b/duplicate_contact_details_alert/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/puzzle.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/restaurant-black.png b/duplicate_contact_details_alert/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/restaurant-black.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/service-black.png b/duplicate_contact_details_alert/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/service-black.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/trading-black.png b/duplicate_contact_details_alert/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/trading-black.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/training.png b/duplicate_contact_details_alert/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/training.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/update.png b/duplicate_contact_details_alert/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/update.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/user.png b/duplicate_contact_details_alert/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/user.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/icons/wrench.png b/duplicate_contact_details_alert/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/icons/wrench.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/modules/budget_image.png b/duplicate_contact_details_alert/static/description/assets/modules/budget_image.png
new file mode 100644
index 000000000..b50130c7d
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/modules/budget_image.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/modules/credit_image.png b/duplicate_contact_details_alert/static/description/assets/modules/credit_image.png
new file mode 100644
index 000000000..3ad04ecfd
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/modules/credit_image.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/modules/employee_image.png b/duplicate_contact_details_alert/static/description/assets/modules/employee_image.png
new file mode 100644
index 000000000..30ad58232
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/modules/employee_image.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/modules/export_image.png b/duplicate_contact_details_alert/static/description/assets/modules/export_image.png
new file mode 100644
index 000000000..492980ad0
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/modules/export_image.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/modules/gantt_image.png b/duplicate_contact_details_alert/static/description/assets/modules/gantt_image.png
new file mode 100644
index 000000000..1ae7cfe3b
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/modules/gantt_image.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/modules/quotation_image.png b/duplicate_contact_details_alert/static/description/assets/modules/quotation_image.png
new file mode 100644
index 000000000..499b1a72f
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/modules/quotation_image.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/screenshots/dup_con1.png b/duplicate_contact_details_alert/static/description/assets/screenshots/dup_con1.png
new file mode 100644
index 000000000..7bab659f1
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/screenshots/dup_con1.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/screenshots/dup_con2.png b/duplicate_contact_details_alert/static/description/assets/screenshots/dup_con2.png
new file mode 100644
index 000000000..a851fa3ce
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/screenshots/dup_con2.png differ
diff --git a/duplicate_contact_details_alert/static/description/assets/screenshots/hero.gif b/duplicate_contact_details_alert/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..5786116fd
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/assets/screenshots/hero.gif differ
diff --git a/duplicate_contact_details_alert/static/description/banner.png b/duplicate_contact_details_alert/static/description/banner.png
new file mode 100644
index 000000000..9d89058ea
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/banner.png differ
diff --git a/duplicate_contact_details_alert/static/description/icon.png b/duplicate_contact_details_alert/static/description/icon.png
new file mode 100644
index 000000000..c608ac41e
Binary files /dev/null and b/duplicate_contact_details_alert/static/description/icon.png differ
diff --git a/duplicate_contact_details_alert/static/description/index.html b/duplicate_contact_details_alert/static/description/index.html
new file mode 100644
index 000000000..c1fafd2d7
--- /dev/null
+++ b/duplicate_contact_details_alert/static/description/index.html
@@ -0,0 +1,559 @@
+
+ The Duplicate contact alert module helps to detect duplicate contact values. When a user enters the same value in the contact, it returns a validation error message, which helps customers prevent duplicate entries.
+
+
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+ Select Multiple Fields
+
+ User can select multiple fields to check for duplicate values.
+
+
+
+
+
+
+
+
+
+
+
+
+ Validation Alert
+
+ Validation warning is triggered when users enter duplicate values.
+
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+ Enable the "Unique Contacts" button.
+
+ Go to Settings --> Enable "Unique Contacts" button and select Fields.
+
+
+
+
+
+
+ Validation alert for duplicate contact values
+
+ When you enter the same value in the contact fields, it raises a validation error message.
+
\ No newline at end of file
diff --git a/duplicate_contact_details_alert/views/res_config_settings_views.xml b/duplicate_contact_details_alert/views/res_config_settings_views.xml
new file mode 100644
index 000000000..7a1deb2ac
--- /dev/null
+++ b/duplicate_contact_details_alert/views/res_config_settings_views.xml
@@ -0,0 +1,39 @@
+
+
+
+
+ res.config.settings.view.form.inherit.duplicate_contact_details_alert
+ res.config.settings
+
+
+
+
+
+
+
+
+
+
+
+ Unique Contacts
+
+
Validation alerts for duplicate contact details
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dynamic_accounts_report/__init__.py b/dynamic_accounts_report/__init__.py
index 1ffff4c67..644a56f70 100644
--- a/dynamic_accounts_report/__init__.py
+++ b/dynamic_accounts_report/__init__.py
@@ -1,4 +1,24 @@
# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
from . import controllers
from . import wizard
diff --git a/dynamic_accounts_report/__manifest__.py b/dynamic_accounts_report/__manifest__.py
index 7a97eb5c9..72da1935f 100644
--- a/dynamic_accounts_report/__manifest__.py
+++ b/dynamic_accounts_report/__manifest__.py
@@ -27,15 +27,18 @@
'live_test_url': 'https://www.youtube.com/watch?v=gVQi9q9Rs-E&t=5s',
'summary': """Dynamic Financial Reports with drill
down and filters– Community Edition""",
- 'description': "Dynamic Financial Reports, DynamicFinancialReports, FinancialReport, Accountingreports, odoo reports, odoo"
- "This module creates dynamic Accounting General Ledger, Trial Balance, Balance Sheet "
+ 'description': "Dynamic Financial Reports, DynamicFinancialReports, "
+ "FinancialReport, Accountingreports, odoo reports, odoo"
+ "This module creates dynamic Accounting General Ledger, "
+ "Trial Balance, Balance Sheet "
"Proft and Loss, Cash Flow Statements, Partner Ledger,"
"Partner Ageing, Day book"
- "Bank book and Cash book reports in Odoo 14 community edition.",
- 'author': 'Frontware, Cybrosys Techno Solutions',
- 'website': "https://github.com/Frontware/CybroAddons",
- 'company': 'Frontware, Cybrosys Techno Solutions',
- 'maintainer': 'Frontware, Cybrosys Techno Solutions',
+ "Bank book and Cash book reports in Odoo 14"
+ "community edition.",
+ 'author': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
'depends': ['base', 'base_accounting_kit'],
'data': [
'security/ir.model.access.csv',
diff --git a/dynamic_accounts_report/controllers/__init__.py b/dynamic_accounts_report/controllers/__init__.py
index 457bae27e..21db8c87e 100644
--- a/dynamic_accounts_report/controllers/__init__.py
+++ b/dynamic_accounts_report/controllers/__init__.py
@@ -1,3 +1,23 @@
# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
from . import controllers
\ No newline at end of file
diff --git a/dynamic_accounts_report/controllers/controllers.py b/dynamic_accounts_report/controllers/controllers.py
index d1d39a77a..b581a575b 100644
--- a/dynamic_accounts_report/controllers/controllers.py
+++ b/dynamic_accounts_report/controllers/controllers.py
@@ -1,4 +1,24 @@
# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
import json
from odoo import http
@@ -8,8 +28,10 @@ from odoo.tools import html_escape
class TBXLSXReportController(http.Controller):
- @http.route('/dynamic_xlsx_reports', type='http', auth='user', methods=['POST'], csrf=False)
- def get_report_xlsx(self, model, options, output_format, token, report_data, report_name, dfr_data, **kw):
+ @http.route('/dynamic_xlsx_reports', type='http', auth='user',
+ methods=['POST'], csrf=False)
+ def get_report_xlsx(self, model, options, output_format, token, report_data,
+ report_name, dfr_data, **kw):
uid = request.session.uid
report_obj = request.env[model].with_user(uid)
@@ -21,10 +43,12 @@ class TBXLSXReportController(http.Controller):
None,
headers=[
('Content-Type', 'application/vnd.ms-excel'),
- ('Content-Disposition', content_disposition(report_name + '.xlsx'))
+ ('Content-Disposition',
+ content_disposition(report_name + '.xlsx'))
]
)
- report_obj.get_dynamic_xlsx_report(options, response, report_data, dfr_data)
+ report_obj.get_dynamic_xlsx_report(options, response,
+ report_data, dfr_data)
response.set_cookie('fileToken', token)
return response
except Exception as e:
diff --git a/dynamic_accounts_report/doc/RELEASE_NOTES.md b/dynamic_accounts_report/doc/RELEASE_NOTES.md
index 5e0f7f6e2..3a74c91dc 100644
--- a/dynamic_accounts_report/doc/RELEASE_NOTES.md
+++ b/dynamic_accounts_report/doc/RELEASE_NOTES.md
@@ -45,4 +45,9 @@
#### 16.04.2022
#### Version 14.0.1.2.7
#### UPDT AND BUGFIX
-- Loading Issue and orderby date
\ No newline at end of file
+- Loading Issue and orderby date
+
+#### 27.04.2023
+#### Version 14.0.1.2.7
+#### UPDT AND BUGFIX
+- Update and Bugfix in General Ledger
\ No newline at end of file
diff --git a/dynamic_accounts_report/report/__init__.py b/dynamic_accounts_report/report/__init__.py
index 5838e7a2f..ff7c77afd 100644
--- a/dynamic_accounts_report/report/__init__.py
+++ b/dynamic_accounts_report/report/__init__.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
from . import trial_balance
from . import general_ledger
from . import cash_flow_report
diff --git a/dynamic_accounts_report/report/ageing.py b/dynamic_accounts_report/report/ageing.py
index 3764f7f73..f35e5e030 100644
--- a/dynamic_accounts_report/report/ageing.py
+++ b/dynamic_accounts_report/report/ageing.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
from odoo import api, models, _
diff --git a/dynamic_accounts_report/report/cash_flow_report.py b/dynamic_accounts_report/report/cash_flow_report.py
index b8077ecd8..a3a84435e 100644
--- a/dynamic_accounts_report/report/cash_flow_report.py
+++ b/dynamic_accounts_report/report/cash_flow_report.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
from odoo import api, models, _
@@ -9,8 +30,9 @@ class GeneralLedger(models.AbstractModel):
if self.env.context.get('trial_pdf_report'):
if data.get('report_data'):
- data.update({'account_data': data.get('report_data')['report_lines'],
- 'Filters': data.get('report_data')['filters'],
- 'company': self.env.company,
- })
+ data.update(
+ {'account_data': data.get('report_data')['report_lines'],
+ 'Filters': data.get('report_data')['filters'],
+ 'company': self.env.company,
+ })
return data
diff --git a/dynamic_accounts_report/report/daybook.py b/dynamic_accounts_report/report/daybook.py
index 4af37cec4..3f014e8fc 100644
--- a/dynamic_accounts_report/report/daybook.py
+++ b/dynamic_accounts_report/report/daybook.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
from odoo import api, models, _
@@ -10,8 +31,9 @@ class DayBook(models.AbstractModel):
if self.env.context.get('daybook_pdf_report'):
if data.get('report_data'):
- data.update({'account_data': data.get('report_data')['report_lines'],
- 'Filters': data.get('report_data')['filters'],
- 'company': self.env.company,
- })
- return data
\ No newline at end of file
+ data.update(
+ {'account_data': data.get('report_data')['report_lines'],
+ 'Filters': data.get('report_data')['filters'],
+ 'company': self.env.company,
+ })
+ return data
diff --git a/dynamic_accounts_report/report/financial_reports.py b/dynamic_accounts_report/report/financial_reports.py
index 76c6bdd37..ec10b90ea 100644
--- a/dynamic_accounts_report/report/financial_reports.py
+++ b/dynamic_accounts_report/report/financial_reports.py
@@ -1,4 +1,24 @@
# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
from odoo import api, models, _
diff --git a/dynamic_accounts_report/report/general_ledger.py b/dynamic_accounts_report/report/general_ledger.py
index 2572b6a5e..af25404a1 100644
--- a/dynamic_accounts_report/report/general_ledger.py
+++ b/dynamic_accounts_report/report/general_ledger.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
from odoo import api, models, _
@@ -10,11 +31,12 @@ class GeneralLedger(models.AbstractModel):
if self.env.context.get('trial_pdf_report'):
if data.get('report_data'):
- data.update({'account_data': data.get('report_data')['report_lines'],
- 'Filters': data.get('report_data')['filters'],
- 'debit_total': data.get('report_data')['debit_total'],
- 'credit_total': data.get('report_data')['credit_total'],
- 'title': data.get('report_data')['name'],
- 'company': self.env.company,
- })
+ data.update(
+ {'account_data': data.get('report_data')['report_lines'],
+ 'Filters': data.get('report_data')['filters'],
+ 'debit_total': data.get('report_data')['debit_total'],
+ 'credit_total': data.get('report_data')['credit_total'],
+ 'title': data.get('report_data')['name'],
+ 'company': self.env.company,
+ })
return data
diff --git a/dynamic_accounts_report/report/partner_ledger.py b/dynamic_accounts_report/report/partner_ledger.py
index fe97bcae5..809a5321c 100644
--- a/dynamic_accounts_report/report/partner_ledger.py
+++ b/dynamic_accounts_report/report/partner_ledger.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
from odoo import api, models, _
diff --git a/dynamic_accounts_report/report/trial_balance.py b/dynamic_accounts_report/report/trial_balance.py
index bc33bbc04..64ff5f658 100644
--- a/dynamic_accounts_report/report/trial_balance.py
+++ b/dynamic_accounts_report/report/trial_balance.py
@@ -1,3 +1,45 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
from odoo import api, models, _
diff --git a/dynamic_accounts_report/static/src/js/general_ledger.js b/dynamic_accounts_report/static/src/js/general_ledger.js
index 72dbb7cab..b0488fbb9 100644
--- a/dynamic_accounts_report/static/src/js/general_ledger.js
+++ b/dynamic_accounts_report/static/src/js/general_ledger.js
@@ -167,6 +167,7 @@ odoo.define('dynamic_cash_flow_statements.general_ledger', function (require) {
[self.wizard_id], action_title
],
}).then(function(data) {
+ console.log(data,"de")
var action = {
'type': 'ir.actions.report',
'report_type': 'qweb-pdf',
@@ -196,6 +197,7 @@ odoo.define('dynamic_cash_flow_statements.general_ledger', function (require) {
[self.wizard_id], action_title
],
}).then(function(data) {
+ console.log(data['report_lines'])
var action = {
'type': 'ir_actions_dynamic_xlsx_download',
'data': {
@@ -265,6 +267,7 @@ odoo.define('dynamic_cash_flow_statements.general_ledger', function (require) {
event.preventDefault();
var self = this;
var account_id = $(event.currentTarget).data('account-id');
+ console.log(account_id,"acc")
var offset = 0;
var td = $(event.currentTarget).next('tr').find('td');
if (td.length == 1) {
diff --git a/dynamic_accounts_report/static/src/js/partner_ledger.js b/dynamic_accounts_report/static/src/js/partner_ledger.js
index 6771919bb..e173476be 100644
--- a/dynamic_accounts_report/static/src/js/partner_ledger.js
+++ b/dynamic_accounts_report/static/src/js/partner_ledger.js
@@ -200,6 +200,7 @@ odoo.define('dynamic_accounts_report.partner_ledger', function (require) {
[self.wizard_id]
],
}).then(function(data) {
+ console.log(data['report_lines'])
var action = {
'type': 'ir_actions_dynamic_xlsx_download',
'data': {
diff --git a/dynamic_accounts_report/wizard/__init__.py b/dynamic_accounts_report/wizard/__init__.py
index 2f21060fe..d6a663be1 100644
--- a/dynamic_accounts_report/wizard/__init__.py
+++ b/dynamic_accounts_report/wizard/__init__.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
from . import general_ledger
from . import trial_balance
from . import cash_flow
diff --git a/dynamic_accounts_report/wizard/ageing.py b/dynamic_accounts_report/wizard/ageing.py
index f545db609..3a9669976 100644
--- a/dynamic_accounts_report/wizard/ageing.py
+++ b/dynamic_accounts_report/wizard/ageing.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
import time
from datetime import datetime
@@ -37,6 +58,7 @@ class AgeingView(models.TransientModel):
@api.model
def view_report(self, option):
+ print(self,option)
r = self.env['account.partner.ageing'].search([('id', '=', option[0])])
data = {
diff --git a/dynamic_accounts_report/wizard/balance_sheet.py b/dynamic_accounts_report/wizard/balance_sheet.py
index ede6c759d..f10f81386 100644
--- a/dynamic_accounts_report/wizard/balance_sheet.py
+++ b/dynamic_accounts_report/wizard/balance_sheet.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
import time
from odoo import fields, models, api, _
diff --git a/dynamic_accounts_report/wizard/balance_sheet_config.py b/dynamic_accounts_report/wizard/balance_sheet_config.py
index 60a8aded7..add6a7c31 100644
--- a/dynamic_accounts_report/wizard/balance_sheet_config.py
+++ b/dynamic_accounts_report/wizard/balance_sheet_config.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
import re
from odoo import models, fields, api
diff --git a/dynamic_accounts_report/wizard/cash_flow.py b/dynamic_accounts_report/wizard/cash_flow.py
index 155761575..8d55bb479 100644
--- a/dynamic_accounts_report/wizard/cash_flow.py
+++ b/dynamic_accounts_report/wizard/cash_flow.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
import time
from datetime import datetime
diff --git a/dynamic_accounts_report/wizard/daybook.py b/dynamic_accounts_report/wizard/daybook.py
index becef9d2e..7355eccb0 100644
--- a/dynamic_accounts_report/wizard/daybook.py
+++ b/dynamic_accounts_report/wizard/daybook.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
import time
from datetime import date
from datetime import timedelta, datetime
diff --git a/dynamic_accounts_report/wizard/general_ledger.py b/dynamic_accounts_report/wizard/general_ledger.py
index c700717aa..487cbc136 100644
--- a/dynamic_accounts_report/wizard/general_ledger.py
+++ b/dynamic_accounts_report/wizard/general_ledger.py
@@ -1,9 +1,31 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
import time
from odoo import fields, models, api, _
import io
import json
from odoo.exceptions import AccessError, UserError, AccessDenied
+
try:
from odoo.tools.misc import xlsxwriter
except ImportError:
@@ -22,12 +44,14 @@ class GeneralView(models.TransientModel):
"account.account",
string="Accounts",
)
- account_tag_ids = fields.Many2many("account.account.tag", string="Account Tags")
+ account_tag_ids = fields.Many2many("account.account.tag",
+ string="Account Tags")
analytic_ids = fields.Many2many(
"account.analytic.account", string="Analytic Accounts"
)
- analytic_tag_ids = fields.Many2many("account.analytic.tag", string="Analytic Tags")
+ analytic_tag_ids = fields.Many2many("account.analytic.tag",
+ string="Analytic Tags")
display_account = fields.Selection(
[('all', 'All'), ('movement', 'With movements'),
@@ -46,24 +70,30 @@ class GeneralView(models.TransientModel):
r = self.env['account.general.ledger'].search([('id', '=', option[0])])
self = r
new_title = ''
- trans_title = self.env['ir.translation'].search([('value', '=', title), ('module', '=', 'dynamic_accounts_report')], limit=1).src
+ trans_title = self.env['ir.translation'].search(
+ [('value', '=', title), ('module', '=', 'dynamic_accounts_report')],
+ limit=1).src
company_id = self.env.companies.ids
if r.journal_ids:
journals = r.journal_ids
else:
- journals = self.env['account.journal'].search([('company_id', 'in', company_id)])
+ journals = self.env['account.journal'].search(
+ [('company_id', 'in', company_id)])
if title == 'General Ledger' or trans_title == 'General Ledger':
if r.journal_ids:
journals = r.journal_ids
else:
- journals = self.env['account.journal'].search([('company_id', 'in', company_id)])
+ journals = self.env['account.journal'].search(
+ [('company_id', 'in', company_id)])
new_title = title
if title == 'Bank Book' or trans_title == 'Bank Book':
- journals = self.env['account.journal'].search([('type', '=', 'bank'), ('company_id', 'in', company_id)])
+ journals = self.env['account.journal'].search(
+ [('type', '=', 'bank'), ('company_id', 'in', company_id)])
new_title = title
if title == 'Cash Book' or trans_title == 'Cash Book':
- journals = self.env['account.journal'].search([('type', '=', 'cash'), ('company_id', 'in', company_id)])
+ journals = self.env['account.journal'].search(
+ [('type', '=', 'cash'), ('company_id', 'in', company_id)])
new_title = title
r.write({
'titles': new_title,
@@ -106,11 +136,13 @@ class GeneralView(models.TransientModel):
data = self.get_filter_data(option)
filters = {}
if data.get('journal_ids'):
- filters['journals'] = self.env['account.journal'].browse(data.get('journal_ids')).mapped('code')
+ filters['journals'] = self.env['account.journal'].browse(
+ data.get('journal_ids')).mapped('code')
else:
filters['journals'] = ['All']
if data.get('account_ids', []):
- filters['accounts'] = self.env['account.account'].browse(data.get('account_ids', [])).mapped('code')
+ filters['accounts'] = self.env['account.account'].browse(
+ data.get('account_ids', [])).mapped('code')
else:
filters['accounts'] = ['All']
if data.get('account_tag_ids', []):
@@ -153,14 +185,16 @@ class GeneralView(models.TransientModel):
account_tags = r.account_tag_ids if r.account_tag_ids else self.env[
'account.account.tag'].search([])
- analytics = r.analytic_ids if r.analytic_ids else self.env['account.analytic.account'].search(
+ analytics = r.analytic_ids if r.analytic_ids else self.env[
+ 'account.analytic.account'].search(
company_domain)
analytic_tags = r.analytic_tag_ids if r.analytic_tag_ids else self.env[
'account.analytic.tag'].search([])
-
- journal_ids = r.journal_ids if r.journal_ids else self.env['account.journal'].search(company_domain, order="company_id, name")
- accounts_ids = self.account_ids if self.account_ids else self.env['account.account'].search(company_domain, order="company_id, name")
+ journal_ids = r.journal_ids if r.journal_ids else self.env[
+ 'account.journal'].search(company_domain, order="company_id, name")
+ accounts_ids = self.account_ids if self.account_ids else self.env[
+ 'account.account'].search(company_domain, order="company_id, name")
journals = []
o_company = False
for j in journal_ids:
@@ -178,8 +212,6 @@ class GeneralView(models.TransientModel):
o_company = j.company_id
accounts.append((j.id, j.name))
-
-
filter_dict = {
'journal_ids': r.journal_ids.ids,
'analytic_ids': r.analytic_ids.ids,
@@ -196,14 +228,14 @@ class GeneralView(models.TransientModel):
'accounts_list': accounts,
'account_tag_list': [(a.id, a.name) for a in account_tags],
'analytic_list': [(anl.id, anl.name) for anl in analytics],
- 'analytic_tag_list': [(anltag.id, anltag.name) for anltag in analytic_tags],
+ 'analytic_tag_list': [(anltag.id, anltag.name) for anltag in
+ analytic_tags],
'company_name': ', '.join(self.env.companies.mapped('name')),
}
filter_dict.update(default_filters)
return filter_dict
def _get_report_values(self, data):
-
docs = data['model']
display_account = data['display_account']
init_balance = True
@@ -216,16 +248,33 @@ class GeneralView(models.TransientModel):
accounts = self.env['account.account'].search(company_domain)
if not accounts:
raise UserError(_("No Accounts Found! Please Add One"))
- account_res = self._get_accounts(accounts, init_balance, display_account, data)
+ account_res = self._get_accounts(accounts, init_balance,
+ display_account, data)
+ list_ac = []
+ for rec in account_res:
+ list_ac.append(rec['account_id'])
+ title = "General Ledger"
+ account_line = self.get_accounts_line(list_ac, title)['report_lines']
+ acc_line_list = []
+ acc_line_list.clear()
+ for line in account_line[0]['move_lines']:
+ acc_line_list.append(line)
+ for res in account_res:
+ line_list = []
+ line_list.clear()
+ for line in acc_line_list:
+ if line['account_id'] == res['account_id']:
+ line_list.append(line)
+ res['move_lines'] = line_list
debit_total = 0
debit_total = sum(x['debit'] for x in account_res)
credit_total = sum(x['credit'] for x in account_res)
- debit_balance = round(debit_total,2) - round(credit_total,2)
+ debit_balance = round(debit_total, 2) - round(credit_total, 2)
return {
'doc_ids': self.ids,
'debit_total': debit_total,
'credit_total': credit_total,
- 'debit_balance':debit_balance,
+ 'debit_balance': debit_balance,
'docs': docs,
'time': time,
'Accounts': account_res,
@@ -245,26 +294,29 @@ class GeneralView(models.TransientModel):
if vals.get('journal_ids') == []:
vals.update({'journal_ids': [(5,)]})
if vals.get('account_ids'):
- vals.update({'account_ids': [(4, j) for j in vals.get('account_ids')]})
+ vals.update(
+ {'account_ids': [(4, j) for j in vals.get('account_ids')]})
if vals.get('account_ids') == []:
vals.update({'account_ids': [(5,)]})
if vals.get('account_tag_ids'):
- vals.update({'account_tag_ids': [(4, j) for j in vals.get('account_tag_ids')]})
+ vals.update({'account_tag_ids': [(4, j) for j in
+ vals.get('account_tag_ids')]})
if vals.get('account_tag_ids') == []:
vals.update({'account_tag_ids': [(5,)]})
if vals.get('analytic_ids'):
- vals.update({'analytic_ids': [(4, j) for j in vals.get('analytic_ids')]})
+ vals.update(
+ {'analytic_ids': [(4, j) for j in vals.get('analytic_ids')]})
if vals.get('analytic_ids') == []:
vals.update({'analytic_ids': [(5,)]})
if vals.get('analytic_tag_ids') == []:
- vals.update({'analytic_tag_ids': [(4, j) for j in vals.get('analytic_tag_ids')]})
+ vals.update({'analytic_tag_ids': [(4, j) for j in
+ vals.get('analytic_tag_ids')]})
if vals.get('analytic_tag_ids') == []:
vals.update({'analytic_tag_ids': [(5,)]})
res = super(GeneralView, self).write(vals)
return res
def _get_accounts(self, accounts, init_balance, display_account, data):
-
cr = self.env.cr
MoveLine = self.env['account.move.line']
move_lines = {x: [] for x in accounts.ids}
@@ -289,18 +341,20 @@ class GeneralView(models.TransientModel):
if data.get('date_from'):
new_filter += " AND l.date < '%s'" % data.get('date_from')
if data['journals']:
- new_filter += ' AND j.id IN %s' % str(tuple(data['journals'].ids) + tuple([0]))
+ new_filter += ' AND j.id IN %s' % str(
+ tuple(data['journals'].ids) + tuple([0]))
if data.get('accounts'):
- WHERE = "WHERE l.account_id IN %s" % str(tuple(data.get('accounts').ids) + tuple([0]))
+ WHERE = "WHERE l.account_id IN %s" % str(
+ tuple(data.get('accounts').ids) + tuple([0]))
else:
WHERE = "WHERE l.account_id IN %s"
if data.get('analytics'):
- WHERE += ' AND anl.id IN %s' % str(tuple(data.get('analytics').ids) + tuple([0]))
+ WHERE += ' AND anl.id IN %s' % str(
+ tuple(data.get('analytics').ids) + tuple([0]))
if data.get('analytic_tags'):
WHERE += ' AND anltag.account_analytic_tag_id IN %s' % str(
tuple(data.get('analytic_tags').ids) + tuple([0]))
-
sql = ("""SELECT 0 AS lid, l.account_id AS account_id, '' AS ldate, '' AS lcode, 0.0 AS amount_currency, '' AS lref, 'Initial Balance' AS lname, COALESCE(SUM(l.debit),0.0) AS debit, COALESCE(SUM(l.credit),0.0) AS credit, COALESCE(SUM(l.debit),0) - COALESCE(SUM(l.credit), 0) as balance, '' AS lpartner_id,\
'' AS move_name, '' AS mmove_id, '' AS currency_code,\
NULL AS currency_id,\
@@ -315,7 +369,7 @@ class GeneralView(models.TransientModel):
LEFT JOIN account_analytic_account anl ON (l.analytic_account_id=anl.id)
LEFT JOIN account_analytic_tag_account_move_line_rel anltag ON (anltag.account_move_line_id=l.id)
JOIN account_journal j ON (l.journal_id=j.id)"""
- + WHERE + new_filter + ' GROUP BY l.account_id')
+ + WHERE + new_filter + ' GROUP BY l.account_id')
if data.get('accounts'):
params = tuple(init_where_params)
else:
@@ -330,7 +384,8 @@ class GeneralView(models.TransientModel):
if where_clause.strip():
wheres.append(where_clause.strip())
final_filters = " AND ".join(wheres)
- final_filters = final_filters.replace('account_move_line__move_id', 'm').replace(
+ final_filters = final_filters.replace('account_move_line__move_id',
+ 'm').replace(
'account_move_line', 'l')
new_final_filter = final_filters
if data['target_move'] == 'posted':
@@ -343,21 +398,23 @@ class GeneralView(models.TransientModel):
new_final_filter += " AND l.date <= '%s'" % data.get('date_to')
if data['journals']:
- new_final_filter += ' AND j.id IN %s' % str(tuple(data['journals'].ids) + tuple([0]))
+ new_final_filter += ' AND j.id IN %s' % str(
+ tuple(data['journals'].ids) + tuple([0]))
if data.get('accounts'):
- WHERE = "WHERE l.account_id IN %s" % str(tuple(data.get('accounts').ids) + tuple([0]))
+ WHERE = "WHERE l.account_id IN %s" % str(
+ tuple(data.get('accounts').ids) + tuple([0]))
else:
WHERE = "WHERE l.account_id IN %s"
if data.get('analytics'):
- WHERE += ' AND anl.id IN %s' % str(tuple(data.get('analytics').ids) + tuple([0]))
+ WHERE += ' AND anl.id IN %s' % str(
+ tuple(data.get('analytics').ids) + tuple([0]))
if data.get('analytic_tags'):
WHERE += ' AND anltag.account_analytic_tag_id IN %s' % str(
tuple(data.get('analytic_tags').ids) + tuple([0]))
# Get move lines base on sql query and Calculate the total balance of move lines
- sql = ('''SELECT l.account_id AS account_id, a.code AS code,a.id AS id, a.name AS name, ROUND(COALESCE(SUM(l.debit),0),2) AS debit, ROUND(COALESCE(SUM(l.credit),0),2) AS credit, ROUND(COALESCE(SUM(l.balance),0),2) AS balance
-
+ sql = ('''SELECT l.account_id AS account_id, a.code AS code,a.id AS id, a.name AS name, ROUND(COALESCE(SUM(l.debit),0),2) AS debit, ROUND(COALESCE(SUM(l.credit),0),2) AS credit, ROUND(COALESCE(SUM(l.balance),0),2) AS balance
FROM account_move_line l\
JOIN account_move m ON (l.move_id=m.id)\
LEFT JOIN res_currency c ON (l.currency_id=c.id)\
@@ -374,40 +431,8 @@ class GeneralView(models.TransientModel):
params = (tuple(accounts.ids),) + tuple(where_params)
cr.execute(sql, params)
account_res = cr.dictfetchall()
-
return account_res
- # for row in cr.dictfetchall():
- # balance = 0
- # for line in move_lines.get(row['account_id']):
- # balance += round(line['debit'],2) - round(line['credit'],2)
- # row['balance'] += round(balance,2)
- # row['m_id'] = row['account_id']
- # move_lines[row.pop('account_id')].append(row)
- #
- # # Calculate the debit, credit and balance for Accounts
- # account_res = []
- # for account in accounts:
- # currency = account.currency_id and account.currency_id or account.company_id.currency_id
- # res = dict((fn, 0.0) for fn in ['credit', 'debit', 'balance'])
- # res['code'] = account.code
- # res['name'] = account.name
- # res['id'] = account.id
- # res['move_lines'] = move_lines[account.id]
- # for line in res.get('move_lines'):
- # res['debit'] += round(line['debit'],2)
- # res['credit'] += round(line['credit'],2)
- # res['balance'] = round(line['balance'],2)
- # if display_account == 'all':
- # account_res.append(res)
- # if display_account == 'movement' and res.get('move_lines'):
- # account_res.append(res)
- # if display_account == 'not_zero' and not currency.is_zero(
- # res['balance']):
- # account_res.append(res)
- #
- # return account_res
-
@api.model
def _get_currency(self):
journal = self.env['account.journal'].browse(
@@ -419,29 +444,36 @@ class GeneralView(models.TransientModel):
lang = 'en_US'
lang = lang.replace("_", '-')
currency_array = [self.env.company.currency_id.symbol,
- self.env.company.currency_id.position,lang]
+ self.env.company.currency_id.position, lang]
return currency_array
def get_accounts_line(self, account_id, title):
- trans_title = self.env['ir.translation'].search([('value', '=', title), ('module', '=', 'dynamic_accounts_report')], limit=1).src
+ trans_title = self.env['ir.translation'].search(
+ [('value', '=', title), ('module', '=', 'dynamic_accounts_report')],
+ limit=1).src
company_id = self.env.companies.ids
if self.journal_ids:
journals = self.journal_ids
else:
- journals = self.env['account.journal'].search([('company_id', 'in', company_id)])
+ journals = self.env['account.journal'].search(
+ [('company_id', 'in', company_id)])
if title == 'General Ledger' or trans_title == 'General Ledger':
if self.journal_ids:
journals = self.journal_ids
else:
- journals = self.env['account.journal'].search([('company_id', 'in', company_id)])
+ journals = self.env['account.journal'].search(
+ [('company_id', 'in', company_id)])
if title == 'Bank Book' or trans_title == 'Bank Book':
- journals = self.env['account.journal'].search([('type', '=', 'bank'), ('company_id', 'in', company_id)])
+ journals = self.env['account.journal'].search(
+ [('type', '=', 'bank'), ('company_id', 'in', company_id)])
if title == 'Cash Book' or trans_title == 'Cash Book':
- journals = self.env['account.journal'].search([('type', '=', 'cash'), ('company_id', 'in', company_id)])
+ journals = self.env['account.journal'].search(
+ [('type', '=', 'cash'), ('company_id', 'in', company_id)])
if account_id:
- accounts = self.env['account.account'].search([('id', '=', account_id)])
+ accounts = self.env['account.account'].search(
+ [('id', '=', account_id)])
else:
company_id = self.env.companies
company_domain = [('company_id', 'in', company_id.ids)]
@@ -473,13 +505,16 @@ class GeneralView(models.TransientModel):
if self.date_from:
new_filter += " AND l.date < '%s'" % self.date_from
if journals:
- new_filter += ' AND j.id IN %s' % str(tuple(journals.ids) + tuple([0]))
+ new_filter += ' AND j.id IN %s' % str(
+ tuple(journals.ids) + tuple([0]))
if accounts:
- WHERE = "WHERE l.account_id IN %s" % str(tuple(accounts.ids) + tuple([0]))
+ WHERE = "WHERE l.account_id IN %s" % str(
+ tuple(accounts.ids) + tuple([0]))
else:
WHERE = "WHERE l.account_id IN %s"
if self.analytic_ids:
- WHERE += ' AND anl.id IN %s' % str(tuple(self.analytic_ids.ids) + tuple([0]))
+ WHERE += ' AND anl.id IN %s' % str(
+ tuple(self.analytic_ids.ids) + tuple([0]))
if self.analytic_tag_ids:
WHERE += ' AND anltag.account_analytic_tag_id IN %s' % str(
tuple(self.analytic_tags.ids) + tuple([0]))
@@ -513,7 +548,8 @@ class GeneralView(models.TransientModel):
if where_clause.strip():
wheres.append(where_clause.strip())
final_filters = " AND ".join(wheres)
- final_filters = final_filters.replace('account_move_line__move_id', 'm').replace(
+ final_filters = final_filters.replace('account_move_line__move_id',
+ 'm').replace(
'account_move_line', 'l')
new_final_filter = final_filters
if self.target_move == 'posted':
@@ -526,13 +562,16 @@ class GeneralView(models.TransientModel):
new_final_filter += " AND l.date <= '%s'" % self.date_to
if journals:
- new_final_filter += ' AND j.id IN %s' % str(tuple(journals.ids) + tuple([0]))
+ new_final_filter += ' AND j.id IN %s' % str(
+ tuple(journals.ids) + tuple([0]))
if accounts:
- WHERE = "WHERE l.account_id IN %s" % str(tuple(accounts.ids) + tuple([0]))
+ WHERE = "WHERE l.account_id IN %s" % str(
+ tuple(accounts.ids) + tuple([0]))
else:
WHERE = "WHERE l.account_id IN %s"
if self.analytic_ids:
- WHERE += ' AND anl.id IN %s' % str(tuple(self.analytics.ids) + tuple([0]))
+ WHERE += ' AND anl.id IN %s' % str(
+ tuple(self.analytics.ids) + tuple([0]))
if self.analytic_tag_ids:
WHERE += ' AND anltag.account_analytic_tag_id IN %s' % str(
@@ -550,29 +589,11 @@ class GeneralView(models.TransientModel):
LEFT JOIN account_analytic_tag_account_move_line_rel anltag ON (anltag.account_move_line_id=l.id)
JOIN account_journal j ON (l.journal_id=j.id)\
JOIN account_account a ON (l.account_id = a.id) '''
- + WHERE + new_final_filter + ''' GROUP BY l.id, m.id, l.account_id, l.date, j.code, l.currency_id, l.amount_currency, l.ref, l.name, m.name, c.symbol, c.position, p.name ORDER BY l.date''' )
-
- # sql = ('''SELECT l.account_id AS account_id, a.code AS code, a.name AS name, COALESCE(SUM(l.debit),0) AS debit, COALESCE(SUM(l.credit),0) AS credit, COALESCE(SUM(l.balance),0) AS balance
- #
- # FROM account_move_line l\
- # JOIN account_move m ON (l.move_id=m.id)\
- # LEFT JOIN res_currency c ON (l.currency_id=c.id)\
- # LEFT JOIN res_partner p ON (l.partner_id=p.id)\
- # LEFT JOIN account_analytic_account anl ON (l.analytic_account_id=anl.id)
- # LEFT JOIN account_account_tag_account_move_line_rel acc ON (acc.account_move_line_id=l.id)
- # LEFT JOIN account_analytic_tag_account_move_line_rel anltag ON (anltag.account_move_line_id=l.id)
- # JOIN account_journal j ON (l.journal_id=j.id)\
- # JOIN account_account a ON (l.account_id = a.id) '''
- # + WHERE + new_final_filter + ''' GROUP BY l.account_id, a.code, a.name''')
-
- # if self.account_ids:
- # params = tuple(where_params)
- # else:
- # params = (tuple(accounts.ids),) + tuple(where_params)
+ + WHERE + new_final_filter + ''' GROUP BY l.id, m.id, l.account_id, l.date, j.code, l.currency_id, l.amount_currency, l.ref, l.name, m.name, c.symbol, c.position, p.name ORDER BY l.date''')
params = tuple(where_params)
cr.execute(sql, params)
account_ress = cr.dictfetchall()
- i=0
+ i = 0
# Calculate the debit, credit and balance for Accounts
account_res = []
for account in accounts:
@@ -591,7 +612,7 @@ class GeneralView(models.TransientModel):
'currency': currency,
}
- def get_dynamic_xlsx_report(self, data, response ,report_data, dfr_data):
+ def get_dynamic_xlsx_report(self, data, response, report_data, dfr_data):
report_data_main = json.loads(report_data)
output = io.BytesIO()
name_data = json.loads(dfr_data)
@@ -605,16 +626,21 @@ class GeneralView(models.TransientModel):
'border': 1,
'border_color': 'black'})
txt = workbook.add_format({'font_size': '10px', 'border': 1})
- txt_l = workbook.add_format({'font_size': '10px', 'border': 1, 'bold': True})
- sheet.merge_range('A2:J3', filters.get('company_name') + ':' + name_data.get('name'), head)
+ txt_l = workbook.add_format(
+ {'font_size': '10px', 'border': 1, 'bold': True})
+ sheet.merge_range('A2:J3',
+ filters.get('company_name') + ':' + name_data.get(
+ 'name'), head)
date_head = workbook.add_format({'align': 'center', 'bold': True,
'font_size': '10px'})
date_style = workbook.add_format({'align': 'center',
'font_size': '10px'})
if filters.get('date_from'):
- sheet.merge_range('B4:C4', 'From: ' + filters.get('date_from'), date_head)
+ sheet.merge_range('B4:C4', 'From: ' + filters.get('date_from'),
+ date_head)
if filters.get('date_to'):
- sheet.merge_range('H4:I4', 'To: ' + filters.get('date_to'), date_head)
+ sheet.merge_range('H4:I4', 'To: ' + filters.get('date_to'),
+ date_head)
# sheet.merge_range('A5:J6', 'Journals: ' + ', '.join(
# [lt or '' for lt in filters['journals']]) + ' Target Moves: ' + filters.get('target_move'), date_head)
@@ -626,10 +652,10 @@ class GeneralView(models.TransientModel):
[lt or '' for lt in
filters['analytic_tags']]) + ' Analytic: ' + ', '.join(
[at or '' for at in
- filters['analytics']]) + ' Target Moves : ' + filters.get('target_move'),
+ filters['analytics']]) + ' Target Moves : ' + filters.get(
+ 'target_move'),
date_head)
-
sheet.write('A8', 'Code', sub_heading)
sheet.write('B8', 'Amount', sub_heading)
sheet.write('C8', 'Date', sub_heading)
@@ -653,7 +679,6 @@ class GeneralView(models.TransientModel):
sheet.set_column(8, 7, 26)
sheet.set_column(8, 8, 15)
sheet.set_column(8, 9, 15)
-
for rec_data in report_data_main:
row += 1
@@ -668,22 +693,22 @@ class GeneralView(models.TransientModel):
sheet.write(row + 1, col + 7, rec_data['debit'], txt)
sheet.write(row + 1, col + 8, rec_data['credit'], txt)
sheet.write(row + 1, col + 9, rec_data['balance'], txt)
- for line_data in rec_data['move_lines']:
- row += 1
- sheet.write(row + 1, col, '', txt)
- sheet.write(row + 1, col + 1, '', txt)
- sheet.write(row + 1, col + 2, line_data.get('ldate'), txt)
- sheet.write(row + 1, col + 3, line_data.get('lcode'), txt)
- sheet.write(row + 1, col + 4, line_data.get('partner_name'), txt)
- sheet.write(row + 1, col + 5, line_data.get('move_name'), txt)
- sheet.write(row + 1, col + 6, line_data.get('lname'), txt)
- sheet.write(row + 1, col + 7, line_data.get('debit'), txt)
- sheet.write(row + 1, col + 8, line_data.get('credit'), txt)
- sheet.write(row + 1, col + 9, line_data.get('balance'), txt)
-
-
+ if rec_data.get('move_lines'):
+ for line_data in rec_data['move_lines']:
+ row += 1
+ sheet.write(row + 1, col, '', txt)
+ sheet.write(row + 1, col + 1, '', txt)
+ sheet.write(row + 1, col + 2, line_data.get('ldate'), txt)
+ sheet.write(row + 1, col + 3, line_data.get('lcode'), txt)
+ sheet.write(row + 1, col + 4, line_data.get('partner_name'),
+ txt)
+ sheet.write(row + 1, col + 5, line_data.get('move_name'), txt)
+ sheet.write(row + 1, col + 6, line_data.get('lname'), txt)
+ sheet.write(row + 1, col + 7, line_data.get('debit'), txt)
+ sheet.write(row + 1, col + 8, line_data.get('credit'), txt)
+ sheet.write(row + 1, col + 9, line_data.get('balance'), txt)
workbook.close()
output.seek(0)
response.stream.write(output.read())
- output.close()
\ No newline at end of file
+ output.close()
diff --git a/dynamic_accounts_report/wizard/partner_leadger.py b/dynamic_accounts_report/wizard/partner_leadger.py
index ae497867f..8dce5ffc5 100644
--- a/dynamic_accounts_report/wizard/partner_leadger.py
+++ b/dynamic_accounts_report/wizard/partner_leadger.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
import time
from odoo import fields, models, api, _
@@ -35,8 +56,10 @@ class PartnerView(models.TransientModel):
('unreconciled', 'Unreconciled Only')],
string='Reconcile Type', default='unreconciled')
- account_type_ids = fields.Many2many('account.account.type',string='Account Type',
- domain=[('type', 'in', ('receivable', 'payable'))])
+ account_type_ids = fields.Many2many('account.account.type',
+ string='Account Type',
+ domain=[('type', 'in',
+ ('receivable', 'payable'))])
@api.model
def view_report(self, option):
@@ -55,11 +78,11 @@ class PartnerView(models.TransientModel):
if r.date_from:
data.update({
- 'date_from':r.date_from,
+ 'date_from': r.date_from,
})
if r.date_to:
data.update({
- 'date_to':r.date_to,
+ 'date_to': r.date_to,
})
filters = self.get_filter(option)
@@ -83,11 +106,13 @@ class PartnerView(models.TransientModel):
filters = {}
if data.get('journal_ids'):
- filters['journals'] = self.env['account.journal'].browse(data.get('journal_ids')).mapped('code')
+ filters['journals'] = self.env['account.journal'].browse(
+ data.get('journal_ids')).mapped('code')
else:
filters['journals'] = ['All']
if data.get('account_ids', []):
- filters['accounts'] = self.env['account.account'].browse(data.get('account_ids', [])).mapped('code')
+ filters['accounts'] = self.env['account.account'].browse(
+ data.get('account_ids', [])).mapped('code')
else:
filters['accounts'] = ['All Payable and Receivable']
if data.get('target_move'):
@@ -113,7 +138,8 @@ class PartnerView(models.TransientModel):
filters['reconciled'] = 'Unreconciled'
if data.get('account_type', []):
- filters['account_type'] = self.env['account.account.type'].browse(data.get('account_type', [])).mapped('name')
+ filters['account_type'] = self.env['account.account.type'].browse(
+ data.get('account_type', [])).mapped('name')
else:
filters['account_type'] = ['Receivable and Payable']
@@ -134,16 +160,18 @@ class PartnerView(models.TransientModel):
default_filters = {}
company_id = self.env.companies.ids
company_domain = [('company_id', 'in', company_id)]
- journal_ids = r.journal_ids if r.journal_ids else self.env['account.journal'].search(company_domain, order="company_id, name")
- accounts_ids = self.account_ids if self.account_ids else self.env['account.account'].search(company_domain, order="company_id, name")
-
+ journal_ids = r.journal_ids if r.journal_ids else self.env[
+ 'account.journal'].search(company_domain, order="company_id, name")
+ accounts_ids = self.account_ids if self.account_ids else self.env[
+ 'account.account'].search(company_domain, order="company_id, name")
partner = r.partner_ids if r.partner_ids else self.env[
'res.partner'].search([])
categories = self.partner_category_ids if self.partner_category_ids \
else self.env['res.partner.category'].search([])
account_types = r.account_type_ids if r.account_type_ids \
- else self.env['account.account.type'].search([('type', 'in', ('receivable', 'payable'))])
+ else self.env['account.account.type'].search(
+ [('type', 'in', ('receivable', 'payable'))])
journals = []
o_company = False
@@ -162,8 +190,6 @@ class PartnerView(models.TransientModel):
o_company = j.company_id
accounts.append((j.id, j.name))
-
-
filter_dict = {
'journal_ids': r.journal_ids.ids,
'account_ids': r.account_ids.ids,
@@ -192,11 +218,13 @@ class PartnerView(models.TransientModel):
display_account = data['display_account']
init_balance = True
company_id = self.env.companies.ids
- accounts = self.env['account.account'].search([('user_type_id.type', 'in', ('receivable', 'payable')),
- ('company_id', 'in', company_id)])
+ accounts = self.env['account.account'].search(
+ [('user_type_id.type', 'in', ('receivable', 'payable')),
+ ('company_id', 'in', company_id)])
if data['account_type']:
accounts = self.env['account.account'].search(
- [('user_type_id.id', 'in', data['account_type'].ids),('company_id', 'in', company_id)])
+ [('user_type_id.id', 'in', data['account_type'].ids),
+ ('company_id', 'in', company_id)])
partners = self.env['res.partner'].search([])
@@ -205,17 +233,18 @@ class PartnerView(models.TransientModel):
[('category_id', 'in', data['partner_tags'].ids)])
if not accounts:
raise UserError(_("No Accounts Found! Please Add One"))
- partner_res = self._get_partners(partners,accounts, init_balance, display_account, data)
+ partner_res = self._get_partners(partners, accounts, init_balance,
+ display_account, data)
debit_total = 0
debit_total = sum(x['debit'] for x in partner_res)
credit_total = sum(x['credit'] for x in partner_res)
- debit_balance = round(debit_total,2) - round(credit_total,2)
+ debit_balance = round(debit_total, 2) - round(credit_total, 2)
return {
'doc_ids': self.ids,
'debit_total': debit_total,
'credit_total': credit_total,
- 'debit_balance':debit_balance,
+ 'debit_balance': debit_balance,
'docs': docs,
'time': time,
'Partners': partner_res,
@@ -235,7 +264,8 @@ class PartnerView(models.TransientModel):
if not vals.get('journal_ids'):
vals.update({'journal_ids': [(5,)]})
if vals.get('account_ids'):
- vals.update({'account_ids': [(4, j) for j in vals.get('account_ids')]})
+ vals.update(
+ {'account_ids': [(4, j) for j in vals.get('account_ids')]})
if not vals.get('account_ids'):
vals.update({'account_ids': [(5,)]})
if vals.get('partner_ids'):
@@ -251,14 +281,16 @@ class PartnerView(models.TransientModel):
if vals.get('account_type-ids'):
vals.update(
- {'account_type_ids': [(4, j) for j in vals.get('account_type_ids')]})
+ {'account_type_ids': [(4, j) for j in
+ vals.get('account_type_ids')]})
if not vals.get('account_type_ids'):
vals.update({'account_type_ids': [(5,)]})
res = super(PartnerView, self).write(vals)
return res
- def _get_partners(self, partners, accounts, init_balance, display_account, data):
+ def _get_partners(self, partners, accounts, init_balance, display_account,
+ data):
cr = self.env.cr
move_line = self.env['account.move.line']
@@ -270,7 +302,8 @@ class PartnerView(models.TransientModel):
if where_clause.strip():
wheres.append(where_clause.strip())
final_filters = " AND ".join(wheres)
- final_filters = final_filters.replace('account_move_line__move_id', 'm').replace(
+ final_filters = final_filters.replace('account_move_line__move_id',
+ 'm').replace(
'account_move_line', 'l')
new_final_filter = final_filters
if data['target_move'] == 'posted':
@@ -283,10 +316,12 @@ class PartnerView(models.TransientModel):
new_final_filter += " AND l.date <= '%s'" % data.get('date_to')
if data['journals']:
- new_final_filter += ' AND j.id IN %s' % str(tuple(data['journals'].ids) + tuple([0]))
+ new_final_filter += ' AND j.id IN %s' % str(
+ tuple(data['journals'].ids) + tuple([0]))
if data.get('accounts'):
- WHERE = "WHERE l.account_id IN %s" % str(tuple(data.get('accounts').ids) + tuple([0]))
+ WHERE = "WHERE l.account_id IN %s" % str(
+ tuple(data.get('accounts').ids) + tuple([0]))
else:
WHERE = "WHERE l.account_id IN %s"
@@ -311,23 +346,28 @@ class PartnerView(models.TransientModel):
LEFT JOIN res_partner p ON (l.partner_id=p.id)\
JOIN account_journal j ON (l.journal_id=j.id)\
JOIN account_account acc ON (l.account_id = acc.id) '''
- + WHERE + new_final_filter + ''' GROUP BY l.id, m.id, l.account_id, l.date, j.code, l.currency_id, l.amount_currency, l.ref, l.name, m.name, c.symbol, c.position, p.name ORDER BY l.date''' )
+ + WHERE + new_final_filter + ''' GROUP BY l.id, m.id, l.account_id, l.date, j.code, l.currency_id, l.amount_currency, l.ref, l.name, m.name, c.symbol, c.position, p.name ORDER BY l.date''')
if data.get('accounts'):
params = tuple(where_params)
else:
params = (tuple(accounts.ids),) + tuple(where_params)
cr.execute(sql, params)
- account_list = {x.id: {'name': x.name, 'code': x.code} for x in accounts}
+ account_list = {x.id: {'name': x.name, 'code': x.code} for x in
+ accounts}
for row in cr.dictfetchall():
balance = 0
if row['partner_id'] in move_lines:
for line in move_lines.get(row['partner_id']):
- balance += round(line['debit'],2) - round(line['credit'],2)
+ balance += round(line['debit'], 2) - round(line['credit'],
+ 2)
row['balance'] += (round(balance, 2))
row['m_id'] = row['account_id']
- row['account_name'] = account_list[row['account_id']]['name'] + "(" +account_list[row['account_id']]['code'] + ")"
+ row['account_name'] = account_list[row['account_id']][
+ 'name'] + "(" + \
+ account_list[row['account_id']][
+ 'code'] + ")"
move_lines[row.pop('partner_id')].append(row)
partner_res = []
@@ -394,7 +434,7 @@ class PartnerView(models.TransientModel):
'Target Moves: ' + filters.get('target_move'),
date_head)
- sheet.merge_range('C4:D4', 'Account Type: ' + ', ' .join(
+ sheet.merge_range('C4:D4', 'Account Type: ' + ', '.join(
[lt or '' for lt in
filters['account_type']]),
date_head)
diff --git a/dynamic_accounts_report/wizard/trial_balance.py b/dynamic_accounts_report/wizard/trial_balance.py
index 4155d3854..13c6420cc 100644
--- a/dynamic_accounts_report/wizard/trial_balance.py
+++ b/dynamic_accounts_report/wizard/trial_balance.py
@@ -1,3 +1,24 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2021-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# 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 .
+#
+#############################################################################
import time
from odoo import fields, models, api, _
diff --git a/email_id_validation/README.rst b/email_id_validation/README.rst
new file mode 100644
index 000000000..62a4b105a
--- /dev/null
+++ b/email_id_validation/README.rst
@@ -0,0 +1,62 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Email Verification for Partner and Employee
+===========================================
+Check whether a given E-mail ID is valid or not in Partner and Employee form.
+
+Installation
+============
+
+- www.odoo.com/documentation/14.0/setup/install.html
+- Install our custom addon
+
+Configuration
+=============
+You must install following packages to work the App properly:
+* pip install validate_email
+* pip install py3DNS
+
+NOTE: Since the Plugin performs verification through online you must be connected to the internet while
+checking the ID
+
+Features
+========
+* Email address of partners in odoo will remain valid and maintain reliability in address details.
+* Invalid email address will not be able to store in email field.
+
+Company
+========
+* `Cybrosys Techno Solutions `__
+
+License
+=======
+GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3)
+(http://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Credits
+=======
+* Developer: (V14) RAHUL C K , Contact : odoo@cybrosys.com
+
+Contacts
+========
+* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
+
+Bug Tracker
+===========
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Maintainer
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit https://www.cybrosys.com.
+
+Further information
+===================
+HTML Description: ``__
diff --git a/email_id_validation/__init__.py b/email_id_validation/__init__.py
new file mode 100644
index 000000000..d835cf9c5
--- /dev/null
+++ b/email_id_validation/__init__.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+# 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/email_id_validation/__manifest__.py b/email_id_validation/__manifest__.py
new file mode 100644
index 000000000..c52216dfe
--- /dev/null
+++ b/email_id_validation/__manifest__.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+# 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': "Email Verification for Partner and Employee",
+ 'version': '14.0.1.0.0',
+ 'category': 'Discuss',
+ 'summary': """Check Whether A Given E-mail ID Is Valid Or Not""",
+ 'description': """Check Whether A Given E-mail ID Is Valid Or Not In
+ Partner And Employee Form""",
+ 'author': "Cybrosys Techno Solutions",
+ 'company': "Cybrosys Techno Solutions",
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['hr', 'contacts'],
+ 'external_dependencies': {'python': ['validate_email', 'py3DNS']},
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/email_id_validation/doc/RELEASE_NOTES.md b/email_id_validation/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..33dc4541b
--- /dev/null
+++ b/email_id_validation/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 20.10.2023
+#### Version 14.0.1.0.0
+#### ADD
+- Initial commit for Email Verification for Partner and Employee
diff --git a/email_id_validation/models/__init__.py b/email_id_validation/models/__init__.py
new file mode 100644
index 000000000..177ad1a7e
--- /dev/null
+++ b/email_id_validation/models/__init__.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+# 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 hr_employee
+from . import res_partner
diff --git a/email_id_validation/models/hr_employee.py b/email_id_validation/models/hr_employee.py
new file mode 100644
index 000000000..2000a3558
--- /dev/null
+++ b/email_id_validation/models/hr_employee.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+# 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 validate_email import validate_email
+from odoo import api, models, _
+from odoo.exceptions import ValidationError
+
+
+class HrEmployee(models.Model):
+ """Inherited module to execute a function when work_email
+ record is saved"""
+ _inherit = 'hr.employee'
+
+ @api.constrains('work_email')
+ def _check_work_email(self):
+ """
+ Check the work email is valid or not
+ """
+ if self.work_email:
+ is_valid = validate_email(self.work_email, check_mx=False,
+ verify=True, debug=False,
+ smtp_timeout=10)
+ if is_valid is not True:
+ raise ValidationError(_('You can use only valid email address.'
+ 'Email address "%s" is invalid '
+ 'or does not exist.') % self.work_email)
diff --git a/email_id_validation/models/res_partner.py b/email_id_validation/models/res_partner.py
new file mode 100644
index 000000000..dbf175317
--- /dev/null
+++ b/email_id_validation/models/res_partner.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Rahul CK()
+# 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 validate_email import validate_email
+from odoo import api, models, _
+from odoo.exceptions import ValidationError
+
+
+class ResPartner(models.Model):
+ """Inherited module to execute a function when partner email
+ record is saved"""
+ _inherit = 'res.partner'
+
+ @api.constrains('email')
+ def _check_email(self):
+ """
+ Check the email is valid or not
+ """
+ if self.email:
+ is_valid = validate_email(self.email, check_mx=False, verify=True,
+ debug=False, smtp_timeout=10)
+ if is_valid is not True:
+ raise ValidationError(_('You can use only valid email address.'
+ 'Email address "%s" is invalid '
+ 'or does not exist.') % self.email)
diff --git a/email_id_validation/static/description/banner.png b/email_id_validation/static/description/banner.png
new file mode 100644
index 000000000..6a9f1bd98
Binary files /dev/null and b/email_id_validation/static/description/banner.png differ
diff --git a/email_id_validation/static/description/cybro_logo.png b/email_id_validation/static/description/cybro_logo.png
new file mode 100644
index 000000000..bb309114c
Binary files /dev/null and b/email_id_validation/static/description/cybro_logo.png differ
diff --git a/email_id_validation/static/description/icon.png b/email_id_validation/static/description/icon.png
new file mode 100644
index 000000000..b5a68c5cd
Binary files /dev/null and b/email_id_validation/static/description/icon.png differ
diff --git a/email_id_validation/static/description/images/1.png b/email_id_validation/static/description/images/1.png
new file mode 100644
index 000000000..1217263a6
Binary files /dev/null and b/email_id_validation/static/description/images/1.png differ
diff --git a/email_id_validation/static/description/images/2.png b/email_id_validation/static/description/images/2.png
new file mode 100644
index 000000000..6f604a403
Binary files /dev/null and b/email_id_validation/static/description/images/2.png differ
diff --git a/email_id_validation/static/description/images/3.png b/email_id_validation/static/description/images/3.png
new file mode 100644
index 000000000..6f28da108
Binary files /dev/null and b/email_id_validation/static/description/images/3.png differ
diff --git a/email_id_validation/static/description/images/4.png b/email_id_validation/static/description/images/4.png
new file mode 100644
index 000000000..3afc14722
Binary files /dev/null and b/email_id_validation/static/description/images/4.png differ
diff --git a/email_id_validation/static/description/images/5.png b/email_id_validation/static/description/images/5.png
new file mode 100644
index 000000000..cea66b05f
Binary files /dev/null and b/email_id_validation/static/description/images/5.png differ
diff --git a/email_id_validation/static/description/images/6.png b/email_id_validation/static/description/images/6.png
new file mode 100644
index 000000000..0c9bb377e
Binary files /dev/null and b/email_id_validation/static/description/images/6.png differ
diff --git a/email_id_validation/static/description/images/checked.png b/email_id_validation/static/description/images/checked.png
new file mode 100644
index 000000000..578cedb80
Binary files /dev/null and b/email_id_validation/static/description/images/checked.png differ
diff --git a/email_id_validation/static/description/images/cybrosys.png b/email_id_validation/static/description/images/cybrosys.png
new file mode 100644
index 000000000..d76b5bafb
Binary files /dev/null and b/email_id_validation/static/description/images/cybrosys.png differ
diff --git a/email_id_validation/static/description/images/hero.gif b/email_id_validation/static/description/images/hero.gif
new file mode 100644
index 000000000..0b5904bfc
Binary files /dev/null and b/email_id_validation/static/description/images/hero.gif differ
diff --git a/email_id_validation/static/description/images/image_1.png b/email_id_validation/static/description/images/image_1.png
new file mode 100644
index 000000000..b394bfd63
Binary files /dev/null and b/email_id_validation/static/description/images/image_1.png differ
diff --git a/email_id_validation/static/description/images/image_2.png b/email_id_validation/static/description/images/image_2.png
new file mode 100644
index 000000000..2ba4b8f05
Binary files /dev/null and b/email_id_validation/static/description/images/image_2.png differ
diff --git a/email_id_validation/static/description/index.html b/email_id_validation/static/description/index.html
new file mode 100644
index 000000000..fc24d77ef
--- /dev/null
+++ b/email_id_validation/static/description/index.html
@@ -0,0 +1,634 @@
+
+
+
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+ Odoo.sh
+
+
+
+
+
+
+
+
+
+
+ Email Verification for Partner and Employee
+
+ Check whether a given E-mail ID is valid or not in Partner and
+ Employee form.
+
\ No newline at end of file
diff --git a/employee_bonus_manager/README.rst b/employee_bonus_manager/README.rst
new file mode 100644
index 000000000..dacce1d81
--- /dev/null
+++ b/employee_bonus_manager/README.rst
@@ -0,0 +1,50 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Employee Bonus
+==============
+This module will help you in managing employee bonus.
+
+Configuration
+=============
+* Add users to the three user groups
+ - User: can create and submit the bonus request
+ - Department Head: can approve the bonus request of users
+ - Manager(HR Manager): can do the final approval
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+License
+-------
+Affero General Public License v3.0 (AGPL v3)
+
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Credits
+-------
+Developer : (V14) Ruksana P, 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 `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/employee_bonus_manager/__init__.py b/employee_bonus_manager/__init__.py
new file mode 100644
index 000000000..aef502ea6
--- /dev/null
+++ b/employee_bonus_manager/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Ruksana P (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from . import models
diff --git a/employee_bonus_manager/__manifest__.py b/employee_bonus_manager/__manifest__.py
new file mode 100644
index 000000000..700f2e997
--- /dev/null
+++ b/employee_bonus_manager/__manifest__.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Ruksana P (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+{
+ 'name': 'Employee Bonus',
+ 'version': '14.0.1.0.0',
+ 'category': 'Human Resources',
+ 'summary': """This module will help you in managing the employee bonus""",
+ 'description': """This module helps to manage the bonus for employees , the
+ user can submit the bonus request , department head can validate request
+ manager can approve the request of employees and billing administrator can
+ post the journal entry. The approved bonus amount will be added to payslip
+ """,
+ 'author': 'Cybrosys Techno Solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['account', 'hr_payroll_community'],
+ 'data': [
+ 'security/employee_bonus_manager_groups.xml',
+ 'security/bonus_request_security.xml',
+ 'security/ir.model.access.csv',
+ 'data/ir_sequence_data.xml',
+ 'data/hr_salary_rule_data.xml',
+ 'data/hr_payroll_structure_data.xml',
+ 'views/bonus_request_views.xml',
+ 'views/bonus_reason_views.xml',
+ 'views/employee_bonus_manager_menus.xml'
+ ],
+ 'images': ['static/description/banner.png'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': True
+}
diff --git a/employee_bonus_manager/data/hr_payroll_structure_data.xml b/employee_bonus_manager/data/hr_payroll_structure_data.xml
new file mode 100644
index 000000000..aca85057a
--- /dev/null
+++ b/employee_bonus_manager/data/hr_payroll_structure_data.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/employee_bonus_manager/data/hr_salary_rule_data.xml b/employee_bonus_manager/data/hr_salary_rule_data.xml
new file mode 100644
index 000000000..3a567b2f5
--- /dev/null
+++ b/employee_bonus_manager/data/hr_salary_rule_data.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ code
+ BONUS
+
+ Employee Bonus
+
+ result = inputs.BONUS.amount
+
+
diff --git a/employee_bonus_manager/data/ir_sequence_data.xml b/employee_bonus_manager/data/ir_sequence_data.xml
new file mode 100644
index 000000000..c9be361c3
--- /dev/null
+++ b/employee_bonus_manager/data/ir_sequence_data.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ Bonus Request Sequence
+ bonus.request
+ BR/
+ 4
+
+
+
diff --git a/employee_bonus_manager/doc/RELEASE_NOTES.md b/employee_bonus_manager/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..1d0fc1ecf
--- /dev/null
+++ b/employee_bonus_manager/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 30.10.2023
+#### Version 14.0.1.0.0
+#### ADD
+- Initial Commit for Employee Bonus
diff --git a/employee_bonus_manager/models/__init__.py b/employee_bonus_manager/models/__init__.py
new file mode 100644
index 000000000..d0f75edc3
--- /dev/null
+++ b/employee_bonus_manager/models/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Ruksana P (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from . import bonus_reason
+from . import bonus_request
+from . import hr_payslip
diff --git a/employee_bonus_manager/models/bonus_reason.py b/employee_bonus_manager/models/bonus_reason.py
new file mode 100644
index 000000000..b733fda3f
--- /dev/null
+++ b/employee_bonus_manager/models/bonus_reason.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Ruksana P (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from odoo import fields, models
+
+
+class BonusReason(models.Model):
+ """ This class is used to create the bonus reasons. """
+ _name = "bonus.reason"
+ _description = 'Bonus Reason Records'
+
+ name = fields.Char(string='Reason', required=True,
+ help='Reason to be added for the bonus requests.')
diff --git a/employee_bonus_manager/models/bonus_request.py b/employee_bonus_manager/models/bonus_request.py
new file mode 100644
index 000000000..8d0ab7f70
--- /dev/null
+++ b/employee_bonus_manager/models/bonus_request.py
@@ -0,0 +1,239 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Ruksana P (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from odoo import api, fields, models
+
+
+class BonusRequest(models.Model):
+ """ This class is created for model bonus.request. It contains fields and
+ functions for the model.
+ Methods:
+ create(self, vals):
+ override create function for generating sequence number for the new
+ records of the model.
+ action_confirm(self):
+ actions to perform when clicking on the 'Confirm' button.
+ action_department_approve(self):
+ actions to perform when clicking on the 'Approve by Department'
+ button.
+ action_manager_approve(self):
+ actions to perform when clicking on the 'Approve by Manager'
+ button.
+ action_reject(self):
+ actions to perform when clicking on the 'Reject' button.
+ action_reset_to_draft(self):
+ actions to perform when clicking on the 'Reset to Draft' button."""
+ _name = 'bonus.request'
+ _description = 'Create Bonus Request'
+ _inherit = 'mail.thread'
+ _rec_name = 'reference'
+
+ reference = fields.Char(string='Reference Number', copy=False,
+ help='Sequence number for the bonus request.')
+ state = fields.Selection([('draft', 'Draft'), ('submitted', 'Submitted'),
+ ('department_approved', 'Department Approved'),
+ ('manager_approved', 'Manager Approved'),
+ ('rejected', 'Rejected'),
+ ('accounting', 'Accounting Head Approved')],
+ string='State', default='draft', tracking=True,
+ help='State of the bonus request', copy=False,
+ group_expand='_group_expand_states')
+ employee_id = fields.Many2one('hr.employee', string='Employee', store=True,
+ required=True, tracking=True,
+ help='The bonus will be given to this '
+ 'employee')
+ user_id = fields.Many2one('res.users', string='User',
+ related='employee_id.user_id',
+ help='The user of the employee(If any)')
+ department_id = fields.Many2one('hr.department', string='Department',
+ help='The department of the employee',
+ store=True)
+ job_id = fields.Many2one('hr.job', string='Job', store=True,
+ help='Job of the employee')
+ bonus_reason_id = fields.Many2one('bonus.reason', string='Bonus Reason',
+ help='Reason for providing the Bonus',
+ required=True)
+ confirmed_user_id = fields.Many2one('res.users', string='Confirmed by',
+ readonly=True, copy=False,
+ help='This field will record the name '
+ 'of the person who confirmed '
+ 'the bonus request.')
+ confirmed_date = fields.Date(string='Confirmed Date', readonly=True,
+ copy=False, tracking=True,
+ help='Confirmed date of bonus request')
+ bonus_amount = fields.Float(string='Bonus Amount', tracking=True,
+ help='This amount will be given as the bonus.')
+ currency_id = fields.Many2one('res.currency', string='Company Currency',
+ readonly=True,
+ default=lambda self:
+ self.env.user.company_id.currency_id,
+ help='Company Currency')
+ company_id = fields.Many2one('res.company', string='Company', readonly=True,
+ default=lambda self: self.env.company,
+ help='Company of the user.')
+ department_approved_date = fields.Date(string='Department Approved Date',
+ readonly=True, copy=False,
+ help='Date on which the bonus '
+ 'request is approved by the '
+ 'Department.')
+ manager_approved_date = fields.Date(string='Manager Approved Date',
+ readonly=True, copy=False,
+ help='Date on which the bonus request '
+ 'is approved by the Manager.')
+ department_manager_id = fields.Many2one('res.users', readonly=True,
+ help='Name of the Department Head,'
+ ' who approved the bonus '
+ 'request', copy=False,
+ string='Department Head')
+ hr_manager_id = fields.Many2one('res.users', string='Manager', copy=False,
+ help='Name of the Manager, who approved the'
+ ' bonus request', readonly=True)
+ journal_id = fields.Many2one('account.journal', string='Bonus Journal',
+ help='The Jornal for bonus request',
+ company_dependent=True, required=False,
+ domain="[('type', '=', 'general')]",
+ states={'accounting': [('required', True)]})
+ move_id = fields.Many2one('account.move', string='Accounting Entry',
+ help='Accounting entry of bonus request',
+ readonly=True)
+ credit_account_id = fields.Many2one('account.account',
+ string='Credit Account', readonly=True,
+ help='The credit account for creating '
+ 'journal entry',
+ states={'manager_approved': [
+ ('required', True),
+ ('readonly', False)]})
+ debit_account_id = fields.Many2one('account.account',
+ string='Debit Account', readonly=True,
+ help='The debit account for creating '
+ 'journal entry',
+ states={'manager_approved': [
+ ('required', True),
+ ('readonly', False)]})
+
+ @api.model
+ def create(self, vals):
+ """ Override the create function for creating new sequence number.
+ Args: vals (dict): values for creating new records.
+ Returns: models.Model: the created records of 'bonus.request'."""
+ if vals.get('reference', 'New') == 'New':
+ vals['reference'] = self.env['ir.sequence'].next_by_code(
+ 'bonus.request') or 'New'
+ res = super(BonusRequest, self).create(vals)
+ return res
+
+ @api.onchange('employee_id')
+ def _onchange_employee_id(self):
+ """ When changing employee_id , the department_id and job_id of
+ employee is changed """
+ if self.employee_id:
+ self.department_id = self.employee_id.department_id
+ self.job_id = self.employee_id.job_id
+
+ def _group_expand_states(self):
+ """To add the states in the kanban view"""
+ return [key for
+ key, val in type(self).state.selection]
+
+ def action_confirm(self):
+ """ Function for the 'Confirm' button to change the state to
+ 'submitted', and update the confirmed user and date."""
+ self.write({
+ 'state': 'submitted',
+ 'confirmed_user_id': self._uid,
+ 'confirmed_date': fields.Date.today()
+ })
+
+ def action_department_approve(self):
+ """ Function for the 'Approve by Department' button to change the state
+ to 'department_approved', and update the department manager and
+ approved time. """
+ self.write({
+ 'state': 'department_approved',
+ 'department_manager_id': self._uid,
+ 'department_approved_date': fields.Date.today()
+ })
+
+ def action_manager_approve(self):
+ """ Function for the 'Approve by Manager' button to change the state to
+ 'manager_approved', and update the HR manager and approved date & time.
+ """
+ self.write({
+ 'state': 'manager_approved',
+ 'hr_manager_id': self._uid,
+ 'manager_approved_date': fields.Date.today()
+ })
+
+ def action_reject(self):
+ """ Function for the 'Reject' button to change the state to 'rejected'
+ state. """
+ self.state = 'rejected'
+
+ def action_reset_to_draft(self):
+ """ Function for the 'Reset to Draft' button to change the state to
+ 'draft' and reset the fields which are to be updated on changing the
+ states."""
+ self.write({
+ 'state': 'draft',
+ 'confirmed_user_id': False,
+ 'confirmed_date': False,
+ 'department_manager_id': False,
+ 'department_approved_date': False,
+ 'hr_manager_id': False,
+ 'manager_approved_date': False
+ })
+
+ def action_post_journal_entry(self):
+ """ Function for the 'Post Journal Entry' button to create a draft
+ entry for approved bonus request """
+ account_move = self.env['account.move'].create({
+ 'ref': self.reference,
+ 'state': 'draft',
+ 'date': self.manager_approved_date,
+ 'journal_id': self.journal_id.id,
+ 'line_ids': [
+ (0, 0, {
+ 'account_id': self.credit_account_id.id,
+ 'credit': self.bonus_amount,
+ 'name': self.employee_id.name + '-' + self.reference,
+ 'debit': 0.0,
+ }),
+ (0, 0, {
+ 'account_id': self.debit_account_id.id,
+ 'debit': self.bonus_amount,
+ 'name': self.employee_id.name + '-' + self.reference,
+ 'credit': 0.0,
+ })
+ ]
+ })
+ account_move.state = 'posted'
+ self.move_id = account_move.id
+ self.state = 'accounting'
+
+ def action_view_journal_items(self):
+ """To view the journal items for the bonus request"""
+ return {
+ 'name': 'Journal Items',
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'account.move',
+ 'view_mode': 'form',
+ 'res_id': self.move_id.id
+ }
diff --git a/employee_bonus_manager/models/hr_payslip.py b/employee_bonus_manager/models/hr_payslip.py
new file mode 100644
index 000000000..e9e73b972
--- /dev/null
+++ b/employee_bonus_manager/models/hr_payslip.py
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+###############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Ruksana P (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+###############################################################################
+from odoo import api, models
+
+
+class HrPayslip(models.Model):
+ """ This class is used to create the bonus reasons. """
+ _inherit = "hr.payslip"
+
+ @api.onchange('employee_id', 'date_from', 'date_to', 'struct_id')
+ def _onchange_employee_id(self):
+ """ When changing employee the bonus amount for the employee will be
+ loaded as other input """
+ bonus_rule = self.env.ref(
+ 'employee_bonus_manager.hr_salary_rule_bonus')
+ rules = self.struct_id.rule_ids.mapped('name')
+ if bonus_rule.name in rules:
+ bonus = self.env['bonus.request'].search([
+ ('employee_id', '=', self.employee_id.id),
+ ('state', '=', 'accounting'), ('move_id.state', '=', 'posted'),
+ ('move_id.date', '>=', self.date_from),
+ ('move_id.date', '<=', self.date_to)])
+ amount = sum(bonus.mapped('bonus_amount'))
+ self.input_line_ids = [(0, 0, {
+ 'name': 'Bonus',
+ 'code': 'BONUS',
+ 'contract_id': self.contract_id.id,
+ 'amount': amount,
+ })]
diff --git a/employee_bonus_manager/security/bonus_request_security.xml b/employee_bonus_manager/security/bonus_request_security.xml
new file mode 100644
index 000000000..d6b546fea
--- /dev/null
+++ b/employee_bonus_manager/security/bonus_request_security.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+ Bonus Request multi company rule
+
+ ['|', ('company_id', '=', False),
+ ('company_id', 'in', company_ids)]
+
+
+
diff --git a/employee_bonus_manager/security/employee_bonus_manager_groups.xml b/employee_bonus_manager/security/employee_bonus_manager_groups.xml
new file mode 100644
index 000000000..1800af27a
--- /dev/null
+++ b/employee_bonus_manager/security/employee_bonus_manager_groups.xml
@@ -0,0 +1,37 @@
+
+
+
+
+ Employee Bonus
+ Access for Employee Bonus module
+ 50
+
+
+
+
+ User
+
+
+
+
+
+ Department Head
+
+
+
+
+
+ Manager
+
+
+
+
+
+
+
+
+
diff --git a/employee_bonus_manager/security/ir.model.access.csv b/employee_bonus_manager/security/ir.model.access.csv
new file mode 100644
index 000000000..3fbc863c0
--- /dev/null
+++ b/employee_bonus_manager/security/ir.model.access.csv
@@ -0,0 +1,7 @@
+id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
+access_bonus_request_user,access.bonus.request.user,model_bonus_request,employee_bonus_manager_group_user,1,1,1,0
+access_bonus_request_department,access.bonus.request.department,model_bonus_request,employee_bonus_manager_group_department,1,1,1,0
+access_bonus_request_manager,access.bonus.request.manager,model_bonus_request,employee_bonus_manager_group_manager,1,1,1,1
+access_bonus_reason_user,access.bonus.reason.user,model_bonus_reason,employee_bonus_manager_group_user,1,1,1,0
+access_bonus_reason_department,access.bonus.reason.department,model_bonus_reason,employee_bonus_manager_group_department,1,1,1,0
+access_bonus_reason_manager,access.bonus.reason.manager,model_bonus_reason,employee_bonus_manager_group_manager,1,1,1,1
diff --git a/employee_bonus_manager/static/description/assets/icons/check.png b/employee_bonus_manager/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/check.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/chevron.png b/employee_bonus_manager/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/chevron.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/cogs.png b/employee_bonus_manager/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/cogs.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/consultation.png b/employee_bonus_manager/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/consultation.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/ecom-black.png b/employee_bonus_manager/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/ecom-black.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/education-black.png b/employee_bonus_manager/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/education-black.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/hotel-black.png b/employee_bonus_manager/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/hotel-black.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/license.png b/employee_bonus_manager/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/license.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/lifebuoy.png b/employee_bonus_manager/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/lifebuoy.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/manufacturing-black.png b/employee_bonus_manager/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/manufacturing-black.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/pos-black.png b/employee_bonus_manager/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/pos-black.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/puzzle.png b/employee_bonus_manager/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/puzzle.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/restaurant-black.png b/employee_bonus_manager/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/restaurant-black.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/service-black.png b/employee_bonus_manager/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/service-black.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/trading-black.png b/employee_bonus_manager/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/trading-black.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/training.png b/employee_bonus_manager/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/training.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/update.png b/employee_bonus_manager/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/update.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/user.png b/employee_bonus_manager/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/user.png differ
diff --git a/employee_bonus_manager/static/description/assets/icons/wrench.png b/employee_bonus_manager/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/icons/wrench.png differ
diff --git a/employee_bonus_manager/static/description/assets/misc/categories.png b/employee_bonus_manager/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/misc/categories.png differ
diff --git a/employee_bonus_manager/static/description/assets/misc/check-box.png b/employee_bonus_manager/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/misc/check-box.png differ
diff --git a/employee_bonus_manager/static/description/assets/misc/compass.png b/employee_bonus_manager/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/misc/compass.png differ
diff --git a/employee_bonus_manager/static/description/assets/misc/corporate.png b/employee_bonus_manager/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/misc/corporate.png differ
diff --git a/employee_bonus_manager/static/description/assets/misc/customer-support.png b/employee_bonus_manager/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/misc/customer-support.png differ
diff --git a/employee_bonus_manager/static/description/assets/misc/cybrosys-logo.png b/employee_bonus_manager/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/employee_bonus_manager/static/description/assets/misc/features.png b/employee_bonus_manager/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/misc/features.png differ
diff --git a/employee_bonus_manager/static/description/assets/misc/logo.png b/employee_bonus_manager/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/misc/logo.png differ
diff --git a/employee_bonus_manager/static/description/assets/misc/pictures.png b/employee_bonus_manager/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/misc/pictures.png differ
diff --git a/employee_bonus_manager/static/description/assets/misc/pie-chart.png b/employee_bonus_manager/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/misc/pie-chart.png differ
diff --git a/employee_bonus_manager/static/description/assets/misc/right-arrow.png b/employee_bonus_manager/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/misc/right-arrow.png differ
diff --git a/employee_bonus_manager/static/description/assets/misc/star.png b/employee_bonus_manager/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/misc/star.png differ
diff --git a/employee_bonus_manager/static/description/assets/misc/support.png b/employee_bonus_manager/static/description/assets/misc/support.png
new file mode 100644
index 000000000..4f18b8b82
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/misc/support.png differ
diff --git a/employee_bonus_manager/static/description/assets/misc/whatsapp.png b/employee_bonus_manager/static/description/assets/misc/whatsapp.png
new file mode 100644
index 000000000..d513a5356
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/misc/whatsapp.png differ
diff --git a/employee_bonus_manager/static/description/assets/modules/attendance.png b/employee_bonus_manager/static/description/assets/modules/attendance.png
new file mode 100644
index 000000000..a0969fcb5
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/modules/attendance.png differ
diff --git a/employee_bonus_manager/static/description/assets/modules/employee_covid_info.png b/employee_bonus_manager/static/description/assets/modules/employee_covid_info.png
new file mode 100644
index 000000000..a804cd110
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/modules/employee_covid_info.png differ
diff --git a/employee_bonus_manager/static/description/assets/modules/employee_document.png b/employee_bonus_manager/static/description/assets/modules/employee_document.png
new file mode 100644
index 000000000..34cee3e01
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/modules/employee_document.png differ
diff --git a/employee_bonus_manager/static/description/assets/modules/employee_timesheet.png b/employee_bonus_manager/static/description/assets/modules/employee_timesheet.png
new file mode 100644
index 000000000..43f1ab5c9
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/modules/employee_timesheet.png differ
diff --git a/employee_bonus_manager/static/description/assets/modules/holiday_approval.png b/employee_bonus_manager/static/description/assets/modules/holiday_approval.png
new file mode 100644
index 000000000..19dca332c
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/modules/holiday_approval.png differ
diff --git a/employee_bonus_manager/static/description/assets/modules/insurance.png b/employee_bonus_manager/static/description/assets/modules/insurance.png
new file mode 100644
index 000000000..33427287a
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/modules/insurance.png differ
diff --git a/employee_bonus_manager/static/description/assets/modules/leave_approval.png b/employee_bonus_manager/static/description/assets/modules/leave_approval.png
new file mode 100644
index 000000000..bf034085a
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/modules/leave_approval.png differ
diff --git a/employee_bonus_manager/static/description/assets/modules/over_time.png b/employee_bonus_manager/static/description/assets/modules/over_time.png
new file mode 100644
index 000000000..acd13f78b
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/modules/over_time.png differ
diff --git a/employee_bonus_manager/static/description/assets/modules/overtime.png b/employee_bonus_manager/static/description/assets/modules/overtime.png
new file mode 100644
index 000000000..9a7adb172
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/modules/overtime.png differ
diff --git a/employee_bonus_manager/static/description/assets/modules/payroll.png b/employee_bonus_manager/static/description/assets/modules/payroll.png
new file mode 100644
index 000000000..7f2815273
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/modules/payroll.png differ
diff --git a/employee_bonus_manager/static/description/assets/modules/vacation.png b/employee_bonus_manager/static/description/assets/modules/vacation.png
new file mode 100644
index 000000000..a43834a4a
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/modules/vacation.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/1.png b/employee_bonus_manager/static/description/assets/screenshots/1.png
new file mode 100644
index 000000000..cadfa6de9
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/1.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/10.png b/employee_bonus_manager/static/description/assets/screenshots/10.png
new file mode 100644
index 000000000..e22d18c79
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/10.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/11.png b/employee_bonus_manager/static/description/assets/screenshots/11.png
new file mode 100644
index 000000000..eef7be2d7
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/11.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/12.png b/employee_bonus_manager/static/description/assets/screenshots/12.png
new file mode 100644
index 000000000..20aab994f
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/12.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/13.png b/employee_bonus_manager/static/description/assets/screenshots/13.png
new file mode 100644
index 000000000..b2029663a
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/13.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/14.png b/employee_bonus_manager/static/description/assets/screenshots/14.png
new file mode 100644
index 000000000..50b4bf4fb
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/14.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/15.png b/employee_bonus_manager/static/description/assets/screenshots/15.png
new file mode 100644
index 000000000..ddf9f8dbc
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/15.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/16.png b/employee_bonus_manager/static/description/assets/screenshots/16.png
new file mode 100644
index 000000000..a11a6acce
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/16.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/17.png b/employee_bonus_manager/static/description/assets/screenshots/17.png
new file mode 100644
index 000000000..31b9264b3
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/17.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/18.png b/employee_bonus_manager/static/description/assets/screenshots/18.png
new file mode 100644
index 000000000..bcb1b1dd0
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/18.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/19.png b/employee_bonus_manager/static/description/assets/screenshots/19.png
new file mode 100644
index 000000000..c99534b30
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/19.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/2.png b/employee_bonus_manager/static/description/assets/screenshots/2.png
new file mode 100644
index 000000000..1499fbbaa
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/2.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/20.png b/employee_bonus_manager/static/description/assets/screenshots/20.png
new file mode 100644
index 000000000..9dc20a0a0
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/20.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/21.png b/employee_bonus_manager/static/description/assets/screenshots/21.png
new file mode 100644
index 000000000..0007b918f
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/21.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/22.png b/employee_bonus_manager/static/description/assets/screenshots/22.png
new file mode 100644
index 000000000..fc8e8c866
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/22.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/3.png b/employee_bonus_manager/static/description/assets/screenshots/3.png
new file mode 100644
index 000000000..4cb7000bd
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/3.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/4.png b/employee_bonus_manager/static/description/assets/screenshots/4.png
new file mode 100644
index 000000000..8350c007a
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/4.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/5.png b/employee_bonus_manager/static/description/assets/screenshots/5.png
new file mode 100644
index 000000000..390b28549
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/5.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/6.png b/employee_bonus_manager/static/description/assets/screenshots/6.png
new file mode 100644
index 000000000..bd53f1d66
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/6.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/7.png b/employee_bonus_manager/static/description/assets/screenshots/7.png
new file mode 100644
index 000000000..e06f2e74c
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/7.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/8.png b/employee_bonus_manager/static/description/assets/screenshots/8.png
new file mode 100644
index 000000000..eebe4b3c2
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/8.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/9.png b/employee_bonus_manager/static/description/assets/screenshots/9.png
new file mode 100644
index 000000000..5946b8dae
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/9.png differ
diff --git a/employee_bonus_manager/static/description/assets/screenshots/hero.gif b/employee_bonus_manager/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..77554c235
Binary files /dev/null and b/employee_bonus_manager/static/description/assets/screenshots/hero.gif differ
diff --git a/employee_bonus_manager/static/description/banner.png b/employee_bonus_manager/static/description/banner.png
new file mode 100644
index 000000000..968abfdfe
Binary files /dev/null and b/employee_bonus_manager/static/description/banner.png differ
diff --git a/employee_bonus_manager/static/description/icon.png b/employee_bonus_manager/static/description/icon.png
new file mode 100644
index 000000000..5c9c0a55d
Binary files /dev/null and b/employee_bonus_manager/static/description/icon.png differ
diff --git a/employee_bonus_manager/static/description/index.html b/employee_bonus_manager/static/description/index.html
new file mode 100644
index 000000000..313b0c641
--- /dev/null
+++ b/employee_bonus_manager/static/description/index.html
@@ -0,0 +1,701 @@
+
+
+
+
+
+
+ Community
+
+
+
+
+
+
+
+
+
+ Employee Bonus
+
+ It Helps To Manage The Bonuses Of The Employees.
This module provides an option to manage the
+ bonuses of the employees. The user, department head, or managers can
+ create the bonus request for the employees. The bonus will be approved
+ after the three level approvals. The final approved bonus amount is
+ reimbursed
+ in next payslip of the employee.
+
+
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+ Easy to manage Employee Bonus.
+
+
+
+ Three user groups - User, Department Head and Manager.
+
+
+
+ User can create the bonus request for the employees.
+
+
+
+ Department head, Manager and Accounting head can approve or reject the requests.
+
+
+
+ The Accounting head approved bonus amount will reimburse in next payslip of employee.
+
+
+
+ Easy to use.
+
+
+
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+ There will be three user groups.
+
+
+ User with billing access.
+
+
+ Department Head with billing access.
+
+
+ Manager with billing access.
+
+
+ User/Department head/Manager with billing administrator
+ access.
+
+
+
+
+ Separate menu for bonus reasons. Here, you can create bonus
+ reasons which has to be provided when creating the bonus
+ request.
+
+
+
+
+
+ The user can create and confirm bonus requests for the
+ employees.
+
+
+
+
+
+ Once it is submitted, the state will be changed to "submitted"
+ and the name of the submitted person and submitted date will
+ be recorded. Next, it has to be approved by the department
+ head/ manager.
+
+
+
+
+
+ The department head/ manager can approve or reject the request.
+
+
+
+
+
+ If rejected, it will go to the "Rejected" state. And if needed, it
+ can be reset to the Draft state.
+
+
+
+
+
+ Once the request is approved by the department head, it will
+ move on to the "Department Approved" state.
+ The name of the department head and approved date will
+ be recorded. Next, it has to be approved by the manager.
+
+
+
+
+
+ The manager can approve or reject the request.
+
+
+
+
+
+ Once the request is approved by the manager, it will move to the
+ "Manager Approved" state.
+ The name of the manager and approved date will be recorded. The
+ changes will also be visible in the chatter.
+
+
+
+
+
+ The accounting head can edit the Accounting Information and
+ click the Accounting Head Approval (final approval)button to
+ post the journal entries.
+
+
+
+
+
+ Once the request is approved by the accounting
+ head, it will move to the ACCOUNTING HEAD APPROVED state.
+
+
+
+
+
+ Now, we can see the corresponding journal entries for bonus
+ request by clicking Journal Items smart button
+
+
+
+
+
+ The salary rule for bonus is loaded.
+
+
+
+
+
+ When calculating payslip for employee, the bonus amount is
+ loaded as Other Input for those who have the final approved
+ bonus
+ request for the dates of payslip.
+
+
+
+
+
+ When computing sheet, the bonus rule is taken account.
+
+
+
+
+
+ Separate menus will be available for viewing all bonus requests
+ and, the requests to be approved by the department and the
+ manager and accounting head.
+ The users can see only the All Requests menu and view their own
+ requests.
+
+
+
+
+
+ Department Approval menu will display all the confirmed bonus
+ requests which are ready for the Department approval.
+
+
+
+
+
+ Manager Approval menu will display all the confirmed bonus
+ requests which are ready for the Manager approval.
+
+
+
+
+
+ Accounting Head Approval menu will display all the manager
+ approved bonus
+ requests which are ready for the Accounting Head approval.
+
+
+
+
diff --git a/employee_bonus_manager/views/employee_bonus_manager_menus.xml b/employee_bonus_manager/views/employee_bonus_manager_menus.xml
new file mode 100644
index 000000000..d68435022
--- /dev/null
+++ b/employee_bonus_manager/views/employee_bonus_manager_menus.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/featured_brand_snippet/README.rst b/featured_brand_snippet/README.rst
new file mode 100644
index 000000000..769bfb0b4
--- /dev/null
+++ b/featured_brand_snippet/README.rst
@@ -0,0 +1,37 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Featured Brand Snippet
+=======================
+Dynamic snippet for selecting brands
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+Credits
+-------
+Developer: Ammu @cybrosys, 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 `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/featured_brand_snippet/__init__.py b/featured_brand_snippet/__init__.py
new file mode 100644
index 000000000..03f00a400
--- /dev/null
+++ b/featured_brand_snippet/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import controller
+from . import models
diff --git a/featured_brand_snippet/__manifest__.py b/featured_brand_snippet/__manifest__.py
new file mode 100644
index 000000000..5f1e32ce6
--- /dev/null
+++ b/featured_brand_snippet/__manifest__.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+{
+ 'name': 'Featured Brand Snippet',
+ 'version': '14.0.1.0.0',
+ 'category': 'Website/Website',
+ 'summary': 'Featured brands are arranged in a carousel and allows to view the products of selected brand',
+ 'description': 'Featured brands are arranged in a carousel and allows to view the products of selected brand',
+ 'author': 'Cybrosys Techno solutions',
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': 'https://www.cybrosys.com',
+ 'license': 'AGPL-3',
+ 'depends': ['product_brand_sale', 'website_sale'],
+ 'data': [
+ 'views/product_brand_views.xml',
+ 'views/assets.xml',
+ 'views/brand_snippet.xml',
+ ],
+ 'images': ['static/description/banner.png'],
+ 'installable': True,
+ 'application': False,
+ 'auto_install': False,
+}
diff --git a/featured_brand_snippet/controller/__init__.py b/featured_brand_snippet/controller/__init__.py
new file mode 100644
index 000000000..382c0aa93
--- /dev/null
+++ b/featured_brand_snippet/controller/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import main
diff --git a/featured_brand_snippet/controller/main.py b/featured_brand_snippet/controller/main.py
new file mode 100644
index 000000000..83f51ea3b
--- /dev/null
+++ b/featured_brand_snippet/controller/main.py
@@ -0,0 +1,101 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import http
+from odoo.http import request
+from odoo.addons.website_sale.controllers.main import WebsiteSale
+from odoo.addons.website_sale.controllers.main import TableCompute
+
+
+class WebsiteSales(WebsiteSale):
+ """View of Product Brands in Website"""
+
+ @http.route([
+ '''/shop''',
+ '''/shop/page/''',
+ '''/shop/category/''',
+ '''/shop/category//page/''',
+ '''/shop/brand/''',
+ ], type='http', auth="public", website=True)
+ def shop(self, page=0, category=None, search='', min_price=0.0,
+ max_price=0.0, ppg=False, brand=None,
+ **post):
+ """
+ Defined a url for product brands inside the existing function and controller of WebsiteSale
+ """
+ # super the shop function
+ res = super(WebsiteSales, self).shop(page=page, category=category,
+ search=search, min_price=min_price,
+ max_price=max_price, ppg=ppg,
+ brand=brand,
+ **post)
+ website = request.env['website'].get_current_website()
+ # need to give the ppg and ppr
+ if ppg:
+ try:
+ ppg = int(ppg)
+ post['ppg'] = ppg
+ except ValueError:
+ ppg = False
+ if not ppg:
+ ppg = website.shop_ppg or 20
+
+ ppr = website.shop_ppr or 4
+ # product brands
+ url = "/shop"
+ if not brand:
+ brand = request.env['product.brand']
+ Brand = request.env['product.brand'].search([])
+ # checking nd searching for brand
+ if brand:
+ products_brand = request.env['product.template'].search(
+ ['&', ('brand_id', '=', brand.id), ('sale_ok', '=', True),
+ ('is_published', '=', True)])
+ product_brand_count = len(products_brand)
+ pager_brand = request.website.pager(url=url,
+ total=product_brand_count,
+ page=page, step=ppg, scope=7,
+ url_args=post)
+ # updating the values by qcontext
+ res.qcontext.update({
+ 'brand': brand,
+ 'pager': pager_brand,
+ 'products': products_brand,
+ 'search_count': product_brand_count, # common for all searchbox
+ 'bins': TableCompute().process(products_brand, ppg, ppr),
+ 'brands': Brand})
+ else:
+ res.qcontext.update({
+ 'brand': brand,
+ 'brands': Brand})
+ return res
+
+
+class ProductBrandWebsite(http.Controller):
+ """Returns the featured brands"""
+
+ @http.route(['/product_brand'], type="json", auth="public",
+ methods=['POST'])
+ def featured_brands(self):
+ """Returns the brand name, image &id of the featured brands"""
+ brands = http.request.env['product.brand'].search_read(
+ [('is_featured_brand', '=', True)], ['name', 'brand_image', 'id'])
+ return brands
diff --git a/featured_brand_snippet/doc/RELEASE_NOTES.md b/featured_brand_snippet/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..b85d34b23
--- /dev/null
+++ b/featured_brand_snippet/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 21.03.2023
+#### Version 14.0.1.0.0
+#### ADD
+- Initial commit for Featured Brand Snippet
diff --git a/featured_brand_snippet/models/__init__.py b/featured_brand_snippet/models/__init__.py
new file mode 100644
index 000000000..2307eeeec
--- /dev/null
+++ b/featured_brand_snippet/models/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import product_brand
diff --git a/featured_brand_snippet/models/product_brand.py b/featured_brand_snippet/models/product_brand.py
new file mode 100644
index 000000000..4ce67b6f8
--- /dev/null
+++ b/featured_brand_snippet/models/product_brand.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Ammu (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import models, fields
+
+
+class ProductBrand(models.Model):
+ """Inherits Product Brand"""
+ _inherit = 'product.brand'
+
+ is_featured_brand = fields.Boolean(string='Featured brand',
+ help='enable to view the brand '
+ 'in website snippet')
diff --git a/featured_brand_snippet/static/description/assets/icons/check.png b/featured_brand_snippet/static/description/assets/icons/check.png
new file mode 100644
index 000000000..c8e85f51d
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/check.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/chevron.png b/featured_brand_snippet/static/description/assets/icons/chevron.png
new file mode 100644
index 000000000..2089293d6
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/chevron.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/cogs.png b/featured_brand_snippet/static/description/assets/icons/cogs.png
new file mode 100644
index 000000000..95d0bad62
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/cogs.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/consultation.png b/featured_brand_snippet/static/description/assets/icons/consultation.png
new file mode 100644
index 000000000..8319d4baa
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/consultation.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/ecom-black.png b/featured_brand_snippet/static/description/assets/icons/ecom-black.png
new file mode 100644
index 000000000..a9385ff13
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/ecom-black.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/education-black.png b/featured_brand_snippet/static/description/assets/icons/education-black.png
new file mode 100644
index 000000000..3eb09b27b
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/education-black.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/hotel-black.png b/featured_brand_snippet/static/description/assets/icons/hotel-black.png
new file mode 100644
index 000000000..130f613be
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/hotel-black.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/license.png b/featured_brand_snippet/static/description/assets/icons/license.png
new file mode 100644
index 000000000..a5869797e
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/license.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/lifebuoy.png b/featured_brand_snippet/static/description/assets/icons/lifebuoy.png
new file mode 100644
index 000000000..658d56ccc
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/lifebuoy.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/manufacturing-black.png b/featured_brand_snippet/static/description/assets/icons/manufacturing-black.png
new file mode 100644
index 000000000..697eb0e9f
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/manufacturing-black.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/pos-black.png b/featured_brand_snippet/static/description/assets/icons/pos-black.png
new file mode 100644
index 000000000..97c0f90c1
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/pos-black.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/puzzle.png b/featured_brand_snippet/static/description/assets/icons/puzzle.png
new file mode 100644
index 000000000..65cf854e7
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/puzzle.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/restaurant-black.png b/featured_brand_snippet/static/description/assets/icons/restaurant-black.png
new file mode 100644
index 000000000..4a35eb939
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/restaurant-black.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/service-black.png b/featured_brand_snippet/static/description/assets/icons/service-black.png
new file mode 100644
index 000000000..301ab51cb
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/service-black.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/trading-black.png b/featured_brand_snippet/static/description/assets/icons/trading-black.png
new file mode 100644
index 000000000..9398ba2f1
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/trading-black.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/training.png b/featured_brand_snippet/static/description/assets/icons/training.png
new file mode 100644
index 000000000..884ca024d
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/training.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/update.png b/featured_brand_snippet/static/description/assets/icons/update.png
new file mode 100644
index 000000000..ecbc5a01a
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/update.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/user.png b/featured_brand_snippet/static/description/assets/icons/user.png
new file mode 100644
index 000000000..6ffb23d9f
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/user.png differ
diff --git a/featured_brand_snippet/static/description/assets/icons/wrench.png b/featured_brand_snippet/static/description/assets/icons/wrench.png
new file mode 100644
index 000000000..6c04dea0f
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/icons/wrench.png differ
diff --git a/featured_brand_snippet/static/description/assets/modules/approval_image.png b/featured_brand_snippet/static/description/assets/modules/approval_image.png
new file mode 100644
index 000000000..84fe94e80
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/modules/approval_image.png differ
diff --git a/featured_brand_snippet/static/description/assets/modules/budget_image.png b/featured_brand_snippet/static/description/assets/modules/budget_image.png
new file mode 100644
index 000000000..fe6aa6fe4
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/modules/budget_image.png differ
diff --git a/featured_brand_snippet/static/description/assets/modules/gantt_image.png b/featured_brand_snippet/static/description/assets/modules/gantt_image.png
new file mode 100644
index 000000000..4810fc34d
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/modules/gantt_image.png differ
diff --git a/featured_brand_snippet/static/description/assets/modules/library_image.png b/featured_brand_snippet/static/description/assets/modules/library_image.png
new file mode 100644
index 000000000..77be44d63
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/modules/library_image.png differ
diff --git a/featured_brand_snippet/static/description/assets/modules/pos_order_image.png b/featured_brand_snippet/static/description/assets/modules/pos_order_image.png
new file mode 100644
index 000000000..1217263a6
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/modules/pos_order_image.png differ
diff --git a/featured_brand_snippet/static/description/assets/modules/whatsapp_image.gif b/featured_brand_snippet/static/description/assets/modules/whatsapp_image.gif
new file mode 100644
index 000000000..4c0c52982
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/modules/whatsapp_image.gif differ
diff --git a/featured_brand_snippet/static/description/assets/screenshots/brand1.png b/featured_brand_snippet/static/description/assets/screenshots/brand1.png
new file mode 100644
index 000000000..e8ffc164b
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/screenshots/brand1.png differ
diff --git a/featured_brand_snippet/static/description/assets/screenshots/brand2.png b/featured_brand_snippet/static/description/assets/screenshots/brand2.png
new file mode 100644
index 000000000..ff5f4ae6f
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/screenshots/brand2.png differ
diff --git a/featured_brand_snippet/static/description/assets/screenshots/brand3.png b/featured_brand_snippet/static/description/assets/screenshots/brand3.png
new file mode 100644
index 000000000..6c6f9c119
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/screenshots/brand3.png differ
diff --git a/featured_brand_snippet/static/description/assets/screenshots/brand4.png b/featured_brand_snippet/static/description/assets/screenshots/brand4.png
new file mode 100644
index 000000000..0abefd400
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/screenshots/brand4.png differ
diff --git a/featured_brand_snippet/static/description/assets/screenshots/hero.gif b/featured_brand_snippet/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..a1ff5774c
Binary files /dev/null and b/featured_brand_snippet/static/description/assets/screenshots/hero.gif differ
diff --git a/featured_brand_snippet/static/description/banner.png b/featured_brand_snippet/static/description/banner.png
new file mode 100644
index 000000000..7fb19272a
Binary files /dev/null and b/featured_brand_snippet/static/description/banner.png differ
diff --git a/featured_brand_snippet/static/description/icon.png b/featured_brand_snippet/static/description/icon.png
new file mode 100644
index 000000000..8663f4679
Binary files /dev/null and b/featured_brand_snippet/static/description/icon.png differ
diff --git a/featured_brand_snippet/static/description/index.html b/featured_brand_snippet/static/description/index.html
new file mode 100644
index 000000000..e49f90018
--- /dev/null
+++ b/featured_brand_snippet/static/description/index.html
@@ -0,0 +1,598 @@
+
+
+
+
+
+ Community
+
+
+ Enterprise
+
+
+
+
+
+
+
+
+
+
+
+ Featured Brand Snippet
+
+ Featured Brands are Arranged in a Carousel and Allows to View the Products of selected Brand
+
+ A feature that allows users to view a carousel of selected featured brands. This feature provides a way to promote specific brands and products while also providing users with an easy way to browse and purchase products from their favorite brands.
+
+
+
+
+
+
+
+
+ Features
+
+
+
+
+
+
+
+
+
+ Drag and drop the dynamic snippet from the website
+
+
+
+
+
+
+
+
+
+ You can view all featured brands in a carousel. Click on a brand for viewing its products.
+
+
+
+
+
+
+
+
+
+ Supports in both Community and Enterprise
+
+
+
+
+
+
+
+
+ Screenshots
+
+
+
+
+
+ Featured brand
+
+ Enable the featured brand from brands if you wish to view the brand in website.
+
+
+
+
+
+ Dynamic snippet
+
+ You can view a dynamic snippet 'Product Brand' in website.
+
+
+
+
+
+
+ Carousel of Product Brands
+
+ Drag and drop the snippet then click save.You can view the brands arranged in a carousel.
+
+
+
+
+
+ Products of the Brand
+
+ Click on the Products button for viewing its products.