Browse Source

Oct 03: [ADD] Initial commit 'odoo_merge_mrp_orders'

14.0
RisvanaCybro 7 months ago
parent
commit
3f062d1e59
  1. 47
      odoo_merge_mrp_orders/README.rst
  2. 23
      odoo_merge_mrp_orders/__init__.py
  3. 48
      odoo_merge_mrp_orders/__manifest__.py
  4. 16
      odoo_merge_mrp_orders/data/odoo_merge_mrp_orders_data.xml
  5. 6
      odoo_merge_mrp_orders/doc/RELEASE_NOTES.md
  6. 23
      odoo_merge_mrp_orders/models/__init__.py
  7. 74
      odoo_merge_mrp_orders/models/mrp_production.py
  8. 52
      odoo_merge_mrp_orders/models/res_config_settings.py
  9. 3
      odoo_merge_mrp_orders/security/ir.model.access.csv
  10. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/check.png
  11. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/chevron.png
  12. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/cogs.png
  13. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/consultation.png
  14. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/ecom-black.png
  15. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/education-black.png
  16. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/hotel-black.png
  17. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/license.png
  18. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/lifebuoy.png
  19. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/manufacturing-black.png
  20. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/pos-black.png
  21. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/puzzle.png
  22. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/restaurant-black.png
  23. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/service-black.png
  24. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/trading-black.png
  25. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/training.png
  26. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/update.png
  27. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/user.png
  28. BIN
      odoo_merge_mrp_orders/static/description/assets/icons/wrench.png
  29. BIN
      odoo_merge_mrp_orders/static/description/assets/misc/categories.png
  30. BIN
      odoo_merge_mrp_orders/static/description/assets/misc/check-box.png
  31. BIN
      odoo_merge_mrp_orders/static/description/assets/misc/compass.png
  32. BIN
      odoo_merge_mrp_orders/static/description/assets/misc/corporate.png
  33. BIN
      odoo_merge_mrp_orders/static/description/assets/misc/customer-support.png
  34. BIN
      odoo_merge_mrp_orders/static/description/assets/misc/cybrosys-logo.png
  35. BIN
      odoo_merge_mrp_orders/static/description/assets/misc/features.png
  36. BIN
      odoo_merge_mrp_orders/static/description/assets/misc/logo.png
  37. BIN
      odoo_merge_mrp_orders/static/description/assets/misc/pictures.png
  38. BIN
      odoo_merge_mrp_orders/static/description/assets/misc/pie-chart.png
  39. BIN
      odoo_merge_mrp_orders/static/description/assets/misc/right-arrow.png
  40. BIN
      odoo_merge_mrp_orders/static/description/assets/misc/star.png
  41. BIN
      odoo_merge_mrp_orders/static/description/assets/misc/support.png
  42. BIN
      odoo_merge_mrp_orders/static/description/assets/misc/whatsapp.png
  43. BIN
      odoo_merge_mrp_orders/static/description/assets/modules/1.png
  44. BIN
      odoo_merge_mrp_orders/static/description/assets/modules/2.png
  45. BIN
      odoo_merge_mrp_orders/static/description/assets/modules/3.png
  46. BIN
      odoo_merge_mrp_orders/static/description/assets/modules/4.png
  47. BIN
      odoo_merge_mrp_orders/static/description/assets/modules/5.gif
  48. BIN
      odoo_merge_mrp_orders/static/description/assets/modules/6.png
  49. BIN
      odoo_merge_mrp_orders/static/description/assets/screenshots/1.png
  50. BIN
      odoo_merge_mrp_orders/static/description/assets/screenshots/10.png
  51. BIN
      odoo_merge_mrp_orders/static/description/assets/screenshots/2.png
  52. BIN
      odoo_merge_mrp_orders/static/description/assets/screenshots/3.png
  53. BIN
      odoo_merge_mrp_orders/static/description/assets/screenshots/4.png
  54. BIN
      odoo_merge_mrp_orders/static/description/assets/screenshots/5.png
  55. BIN
      odoo_merge_mrp_orders/static/description/assets/screenshots/6.png
  56. BIN
      odoo_merge_mrp_orders/static/description/assets/screenshots/7.png
  57. BIN
      odoo_merge_mrp_orders/static/description/assets/screenshots/8.png
  58. BIN
      odoo_merge_mrp_orders/static/description/assets/screenshots/9.png
  59. BIN
      odoo_merge_mrp_orders/static/description/assets/screenshots/hero.gif
  60. BIN
      odoo_merge_mrp_orders/static/description/banner.png
  61. BIN
      odoo_merge_mrp_orders/static/description/icon.png
  62. 596
      odoo_merge_mrp_orders/static/description/index.html
  63. 66
      odoo_merge_mrp_orders/views/res_config_settings_views.xml
  64. 22
      odoo_merge_mrp_orders/wizard/__init__.py
  65. 298
      odoo_merge_mrp_orders/wizard/order_mrp_merge.py
  66. 69
      odoo_merge_mrp_orders/wizard/order_mrp_merge_views.xml

47
odoo_merge_mrp_orders/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
Merge Manufacturing Orders
==========================
* This module allow us to merge manufacturing order.
Installation
============
- www.odoo.com/documentation/15.0/setup/install.html
- Install our custom addon
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
-------
General Public License, Version 3 (LGPL v3).
(https://www.odoo.com/documentation/user/15.0/legal/licenses/licenses.html)
Credits
-------
Developer: (v14) Sahla Sherin , 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
==========
This module is maintained by Cybrosys Technologies.
.. image:: https://cybrosys.com/images/logo.png
:target: https://cybrosys.com
For support and more information, please visit https://www.cybrosys.com
Further information
===================
HTML Description: `<static/description/index.html>`__

23
odoo_merge_mrp_orders/__init__.py

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

48
odoo_merge_mrp_orders/__manifest__.py

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
{
'name': "Merge Manufacturing Orders",
'version': '14.0.1.0.0',
'category': 'Manufacturing',
'summary': """The Manufacturing Order Merge module in Odoo allows users to
combine multiple manufacturing orders into a single order.""",
'description': """Combine multiple manufacturing orders into a single order
with the Manufacturing Order Merge module in Odoo. Effortlessly manage
various types of merging, control merge quantities, and access merged
order information in the chatter.""",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
'depends': ['base', 'mrp', 'stock'],
'data': [
'security/ir.model.access.csv',
'views/res_config_settings_views.xml',
'wizard/order_mrp_merge_views.xml',
'data/odoo_merge_mrp_orders_data.xml'
],
'images': ['static/description/banner.png'],
'license': 'LGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

16
odoo_merge_mrp_orders/data/odoo_merge_mrp_orders_data.xml

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--Action to merge the selected mrp orders-->
<record id="merge_manufacturing_order_action" model="ir.actions.server">
<field name="name">Merge Order</field>
<field name="type">ir.actions.server</field>
<field name="model_id" ref="mrp.model_mrp_production"/>
<field name="binding_model_id" ref="mrp.model_mrp_production"/>
<field name="binding_view_types">list</field>
<field name="state">code</field>
<field name="code">
if len(records)>1:
action = records.action_merge_order()
</field>
</record>
</odoo>

6
odoo_merge_mrp_orders/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <odoo_merge_mrp_orders>
#### 28.03.2024
#### Version 14.0.1.0.0
#### ADD
- Initial commit for Merge Manufacturing Orders.

23
odoo_merge_mrp_orders/models/__init__.py

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

74
odoo_merge_mrp_orders/models/mrp_production.py

@ -0,0 +1,74 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Roopchand P M(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import models, _
from odoo.exceptions import UserError
class MrpProduction(models.Model):
"""
This class extends the 'mrp.production' model to add a method for merging
multiple manufacturing orders into a single order.
"""
_inherit = 'mrp.production'
def action_merge_order(self):
"""Merge multiple manufacturing orders into a single order.
Check orders' state, product, BOM, and company consistency.
return: An action opening the order.mrp.merge wizard.
Raise UserError for invalid orders.
"""
product = []
bom = []
company = []
for rec in self:
if rec.state not in ('draft', 'confirmed', 'progress'):
raise UserError(
_("You can only merge mrp order that "
"are in Draft/Confirmed/Progress state"))
product.append(rec.product_id)
bom.append(rec.bom_id)
company.append(rec.company_id.id)
if len(set(product)) != 1 and len(set(bom)) != 1:
raise UserError(
_("You can only merge mrp order that have same product and "
"bill of material"))
if len(set(company)) != 1:
raise UserError(
_("You can only merge mrp order in the same company"))
return {
'name': "Merge Manufacturing order",
'type': 'ir.actions.act_window',
'view_mode': 'form',
'res_model': 'order.mrp.merge',
'context': {'records': [rec.id for rec in self],
'default_product_id': product[0].id,
'default_bom_id': bom[0].id,
'default_component_location_id': self[
0].location_src_id.id,
'default_component_destination_location_id': self[
0].location_dest_id.id,
'default_manage_qty': self.env[
'ir.config_parameter'].sudo().get_param(
'odoo_merge_mrp_orders.merge_qty')},
'target': 'new'
}

52
odoo_merge_mrp_orders/models/res_config_settings.py

@ -0,0 +1,52 @@
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Roopchand P M(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class ResConfigSettings(models.TransientModel):
""" Inherit the settings to add options to enable additional features
for merging manufacturing order."""
_inherit = 'res.config.settings'
merge_mrp_type = fields.Selection(
string="Merge Type",
selection=[
('order_none', "New order and Do nothing with selected mrp orders"),
('order_cancel', "New order and Cancel selected mrp orders"),
('order_remove', "New order and Remove selected mrp orders"),
('merge_none',
"Existing order and Do nothing with selected mrp orders"),
('merge_cancel', "Existing order and Cancel selected mrp orders"),
('merge_remove', "Existing order and Remove selected mrp orders")
],
default='order_none',
config_parameter='odoo_merge_mrp_orders.merge_mrp_type',
help="Select the type of merge operation for manufacturing orders."
)
merge_order_notify = fields.Boolean(
string='Notify in chatter',
config_parameter='odoo_merge_mrp_orders.merge_order_notify',
help="Enable notification in the chatter for merged manufacturing "
"orders.")
merge_qty = fields.Boolean(
string="Manage merge quantity",
config_parameter='odoo_merge_mrp_orders.merge_qty',
help="Enable managing merge quantity for merged manufacturing orders.")

3
odoo_merge_mrp_orders/security/ir.model.access.csv

@ -0,0 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_order_mrp_merge,access.order.mrp.merge,model_order_mrp_merge,base.group_user,1,1,1,1
access_mrp_merge_line,access.mrp.merge.line,model_mrp_merge_line,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_order_mrp_merge access.order.mrp.merge model_order_mrp_merge base.group_user 1 1 1 1
3 access_mrp_merge_line access.mrp.merge.line model_mrp_merge_line base.group_user 1 1 1 1

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
odoo_merge_mrp_orders/static/description/assets/modules/5.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
odoo_merge_mrp_orders/static/description/assets/modules/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
odoo_merge_mrp_orders/static/description/assets/screenshots/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

BIN
odoo_merge_mrp_orders/static/description/assets/screenshots/10.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
odoo_merge_mrp_orders/static/description/assets/screenshots/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
odoo_merge_mrp_orders/static/description/assets/screenshots/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
odoo_merge_mrp_orders/static/description/assets/screenshots/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
odoo_merge_mrp_orders/static/description/assets/screenshots/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
odoo_merge_mrp_orders/static/description/assets/screenshots/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
odoo_merge_mrp_orders/static/description/assets/screenshots/7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

BIN
odoo_merge_mrp_orders/static/description/assets/screenshots/8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
odoo_merge_mrp_orders/static/description/assets/screenshots/9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

BIN
odoo_merge_mrp_orders/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
odoo_merge_mrp_orders/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

596
odoo_merge_mrp_orders/static/description/index.html

@ -0,0 +1,596 @@
<div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/>
<div>
<div
style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div
style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Merge Manufacturing Orders</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">We can merge
manufacturing order</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif" class="img-responsive"
style="width: 100%; margin-left: auto; margin-right: auto;"/>
</div>
</div>
</div>
</div>
<!-- NAVIGATION SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="./assets/misc/compass.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Explore This
Module</h2>
</div>
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;">
<div class="col-sm-12 col-md-6 my-3">
<a href="#overview">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">Learn More About this module
</span>
</div>
<img src="./assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#features">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
features of this
module</span>
</div>
<img src="./assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
<div class="col-sm-12 col-md-6 my-3">
<a href="#screenshots">
<div class="d-flex justify-content-between align-items-center"
style="background-color: #f5f5f5; padding: 30px; width: 100%;">
<div>
<span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span>
<span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33; display: block;">View
screenshots for this
module</span>
</div>
<img src="./assets/misc/right-arrow.png" width="36" height="36"/>
</div>
</a>
</div>
</div>
<!-- END OF NAVIGATION SECTION -->
<!-- OVERVIEW SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="./assets/misc/pie-chart.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Overview
</h2>
</div>
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 py-4">
This module allows you to combine two or more manufacturing orders into a single manufacturing order.
The merge process involves selecting the manufacturing orders you want to merge and then selecting the merge
option.
Overall, merge manufacturing order in Odoo can help streamline your production process and improve your
manufacturing efficiency.
<br/>
</div>
</div>
<!-- END OF OVERVIEW SECTION -->
<!-- FEATURES SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="./assets/misc/features.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Features
</h2>
</div>
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;">
<div class="col-sm-12 col-md-6">
<div class="d-flex flex-column justify-content-center align-items-start"
style="margin-top: 40px; margin-bottom: 40px">
<img src="./assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Help us combine several manufacturing orders into a single order.</span>
</div>
<div class="d-flex flex-column justify-content-center align-items-start"
style="margin-top: 30px; margin-bottom: 30px">
<img src="./assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">There exist various types of merging.</span>
</div>
<div class="d-flex flex-column justify-content-center align-items-start"
style="margin-top: 30px; margin-bottom: 30px">
<img src="./assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">You can manage merge quantity.</span>
</div>
<div class="d-flex flex-column justify-content-center align-items-start"
style="margin-top: 30px; margin-bottom: 30px">
<img src="./assets/misc/check-box.png" class="mr-2"/>
<span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Notify in chatter.</span>
</div>
</div>
</div>
<!-- END OF FEATURES SECTION -->
<!-- SCREENSHOTS SECTION -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="screenshots">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="./assets/misc/pictures.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Screenshots
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Merge Order
option </h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Select the orders you want to merge, then navigate to the Action menu where you'll find the 'Merge Order' option.</p>
<img src="./assets/screenshots/1.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Products and Bill of
materials
</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">We can only merge manufacturing orders that have the same product and bill of materials.</p>
<img src="./assets/screenshots/2.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Order's State </h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">The state of the manufacturing order must be draft, confirmed, or in progress.</p>
<img src="./assets/screenshots/3.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Merge Types</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">These are different
types of merge.</p>
<img src="./assets/screenshots/4.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Merge window</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">After selecting orders,
a new wizard will pop up and where we can select our merge type, component location, and finished
location.</p>
<img src="./assets/screenshots/5.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Merge type new
order</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">After selecting orders and merging them with the merge type 'New order and Do nothing with selected mrp orders' we obtain the following result.</p>
<img src="./assets/screenshots/6.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Merge type existing
orders </h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">In the case of existing
orders merge type, we can select the manufacturing order we want to merge.</p>
<img src="./assets/screenshots/7.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Additional options</h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Default merge type, Manage merge quantity and notify in the chatter is an additional options available.</p>
<img src="./assets/screenshots/8.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Manage merge quantity </h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Quantity can be changed from a given field, It should be less than that total product quantity in orders.</p>
<img src="./assets/screenshots/9.png" class="img-thumbnail">
</div>
<div style="display: block; margin: 30px auto;">
<h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Notify in chatter </h3>
<p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Here we can see the details of manufacturing orders that related to current order.</p>
<img src="./assets/screenshots/10.png" class="img-thumbnail">
</div>
</div>
</div>
<!-- END OF SCREENSHOTS SECTION -->
<!-- RELATED PRODUCTS -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="./assets/misc/categories.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Related
Products
</h2>
</div>
<div class="row">
<div class="col-sm-12">
<div id="demo1" class="row carousel slide" data-ride="carousel">
<!-- The slideshow -->
<div class="carousel-inner" style="padding: 30px;">
<div class="carousel-item" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/dynamic_accounts_report/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="./assets/modules/1.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/custom_gantt_view/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="./assets/modules/2.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/project_custom_gantt/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="./assets/modules/3.png">
</div>
</a>
</div>
</div>
<div class="carousel-item active" style="min-height: 198.656px;">
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/account_reports_xlsx/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="./assets/modules/4.png">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/base_accounting_kit/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="./assets/modules/5.gif">
</div>
</a>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left">
<a href="https://apps.odoo.com/apps/modules/15.0/hr_payroll_community/" target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block" style="border-radius: 0px;"
src="./assets/modules/6.png">
</div>
</a>
</div>
</div>
</div>
<!-- Left and right controls -->
<a class="carousel-control-prev" href="#demo1" data-slide="prev" style="width:35px; color:#000"> <span
class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span>
</a> <a class="carousel-control-next" href="#demo1" data-slide="next" style="width:35px; color:#000">
<span class="carousel-control-next-icon"><i class="fa fa-chevron-right" style="font-size:24px"></i></span>
</a>
</div>
</div>
</div>
<!-- END OF RELATED PRODUCTS -->
<!-- OUR SERVICES -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="./assets/misc/star.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our Services
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="./assets/icons/cogs.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Customization</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="./assets/icons/wrench.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="./assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Support</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="./assets/icons/user.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Hire
Odoo
Developer</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="./assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Integration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="./assets/icons/update.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Migration</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="./assets/icons/consultation.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Consultancy</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="./assets/icons/training.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Implementation</h6>
</div>
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4">
<div class="d-flex justify-content-center align-items-center mx-3 my-3"
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;">
<img src="./assets/icons/license.png" class="img-responsive" height="48px" width="48px">
</div>
<h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">
Odoo
Licensing Consultancy</h6>
</div>
</div>
</div>
<!-- END OF OUR SERVICES -->
<!-- OUR INDUSTRIES -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="./assets/misc/corporate.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our
Industries
</h2>
</div>
<div class="container my-5">
<div class="row">
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Trading
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easily procure
and
sell your products</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
POS
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Easy
configuration
and convivial experience</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/education-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Education
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
A platform for
educational management</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px"
width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Manufacturing
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Plan, track and
schedule your operations</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
E-commerce &amp; Website
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Mobile
friendly,
awe-inspiring product pages</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/service-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Service Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Keep track of
services and invoice</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Restaurant
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
Run your bar or
restaurant methodically</p>
</div>
</div>
<div class="col-lg-3">
<div class="my-4 d-flex flex-column justify-content-center"
style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;">
<img src="./assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" width="48px">
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;">
Hotel Management
</h5>
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;">
An
all-inclusive
hotel management application</p>
</div>
</div>
</div>
</div>
<!-- END OF OUR INDUSTRIES -->
<!-- SUPPORT -->
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="./assets/misc/customer-support.png"/>
</div>
<h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="./assets/misc/support.png" height="48" width="48" style="width: 42px; height: 42px;"/>
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need help? Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="./assets/misc/whatsapp.png" height="52" width="52" style="width: 52px; height: 52px;"/>
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">+91 86068
27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="./assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>
<!-- END OF SUPPORT -->

66
odoo_merge_mrp_orders/views/res_config_settings_views.xml

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">
res.config.settings.view.form.inherit.odoo.merge.mrp.orders
</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="mrp.res_config_settings_view_form"/>
<field name="arch" type="xml">
<!-- This XML defines an inherited view for the "res.config.settings" model -->
<!-- The view is named "res.config.settings.view.form.inherit.odoo.merge.mrp.orders" -->
<!-- XPath -->
<xpath expr="//div[@data-key='mrp']" position="inside">
<!-- Heading -->
<h2>Manufacturing Order Merge Configuration</h2>
<!-- Configuration settings container -->
<div class="row o_settings_container mt16"
name="default_merge_type_setting_container">
<!-- Default Merge Type setting -->
<div class="col-12 col-lg-6 o_setting_box"
id="default_merge_type">
<div class="o_setting_right_pane">
<span class="o_form_label">Default Merge Type</span>
<div class="text-muted">
Choose default merge type
</div>
<div class="content-group">
<div class="mt16">
<label for="merge_mrp_type"
string="Merge Type"/>
<field name="merge_mrp_type"/>
</div>
</div>
</div>
</div>
<!-- Merge Order Notify setting -->
<div class="col-lg-6 col-12 o_setting_box"
id="merge_order_notify_settings">
<div class="o_setting_left_pane">
<field name="merge_order_notify"/>
</div>
<div class="o_setting_right_pane">
<label for="merge_order_notify"/>
<div class="text-muted">
Notify in the chatter about merged MRP orders.
</div>
</div>
</div>
<!-- Merge Quantity setting -->
<div class="col-lg-6 col-12 o_setting_box"
id="merge_qty_settings">
<div class="o_setting_left_pane">
<field name="merge_qty"/>
</div>
<div class="o_setting_right_pane">
<label for="merge_qty"/>
<div class="text-muted">
Manage the total merged quantity.
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>

22
odoo_merge_mrp_orders/wizard/__init__.py

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

298
odoo_merge_mrp_orders/wizard/order_mrp_merge.py

@ -0,0 +1,298 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Roopchand P M(<https://www.cybrosys.com>)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import api, fields, models, _
class OrderMrpMerge(models.TransientModel):
"""
Wizard that allow us to merge mrp orders.
"""
_name = 'order.mrp.merge'
_description = 'Merge mrp orders'
_check_company_auto = True
def _default_merge_line_ids(self):
"""
Default record in merge line based on selected mrp orders that help
us to manage merge quantity.
"""
order_id = self.env['mrp.production'].browse(
self.env.context.get('records'))
order = order_id.mapped('id')
quantity = sum(order_id.mapped('product_qty'))
return [(0, 0,
{'mrp_merge_order_ids': order,
'mrp_product_id': order_id[0].product_id.id,
'quantity': quantity
})]
def _get_default_merge_type(self):
"""Default merge type in the wizard that selected in settings"""
merge_type = self.env['ir.config_parameter'].sudo().get_param(
'odoo_merge_mrp_orders.merge_mrp_type')
return merge_type
def _default_manage_qty(self):
"""Function to get default value of merge quantity from settings."""
merge_qty = self.env['ir.config_parameter'].sudo().get_param(
'odoo_merge_mrp_orders.merge_qty')
return merge_qty
product_id = fields.Many2one(
string="Product",
comodel_name='product.product',
help='Merge order product'
)
bom_id = fields.Many2one(
string="Bill of material",
comodel_name='mrp.bom',
help='Information of merge order bill of material'
)
production_ids = fields.Many2many(
string="Production Orders",
comodel_name='mrp.production',
relation='mrp_productions_rel',
compute='_compute_production_ids',
help='Field used to return domain for mrp_order_id'
)
company_id = fields.Many2one(
string='Company',
comodel_name='res.company',
index=True,
default=lambda self: self.env.company,
help='Company associated with the order.'
)
merge_mrp_type = fields.Selection(
string="Merge Type",
selection=[
('order_none', "New order and Do nothing with selected mrp orders"),
('order_cancel', "New order and Cancel selected mrp orders"),
('order_remove', "New order and Remove selected mrp orders"),
('merge_none',
"Existing order and Do nothing with selected mrp orders"),
('merge_cancel', "Existing order and Cancel selected mrp orders"),
('merge_remove', "Existing order and Remove selected mrp orders")
],
default=_get_default_merge_type,
required=True,
help='Type of merge operation to be performed.'
)
component_location_id = fields.Many2one(
comodel_name='stock.location',
string="Component Location",
required=True,
check_company=True,
help='Component location for the merge operation'
)
component_destination_location_id = fields.Many2one(
comodel_name='stock.location',
string="Finished Product Location",
required=True,
check_company=True,
help='Location for the finished product resulting from the merge '
'operation.'
)
mrp_order_id = fields.Many2one(
comodel_name='mrp.production',
check_company=True,
help='Manufacturing order to which the merge operation will be applied.'
)
merge_line_ids = fields.One2many(
string='Merge lines',
comodel_name='mrp.merge.line',
inverse_name='merge_order_id',
default=_default_merge_line_ids,
help='Merge lines representing merge quantities for specific products.'
)
manage_qty = fields.Boolean(
string='Manage Quantity',
default=_default_manage_qty,
help='Determines if merge quantity should be managed.'
)
@api.depends('merge_mrp_type')
def _compute_production_ids(self):
"""
Compute method for the 'production_ids' field.
This method is called when the 'merge_mrp_type' field is changed.
It computes the 'production_ids' based on the selected merge
type."""
if self.merge_mrp_type in ['merge_none', 'merge_cancel',
'merge_remove']:
production_ids = self.env['mrp.production'].search(
[('product_id', '=', self.product_id.id),
('bom_id', '=', self.bom_id.id),
('state', 'in', ['draft', 'confirmed']),
('id', 'not in', self.env.context.get('records'))
])
self.production_ids = production_ids
else:
self.production_ids = False
def action_merge(self):
"""Button to merge selected mrp orders."""
order_ids = self.env['mrp.production'].browse(
self.env.context.get('records'))
if self.manage_qty:
total_quantity = sum(self.merge_line_ids.mapped('quantity'))
if total_quantity > sum(order_ids.mapped('product_qty')):
return {
'type': 'ir.actions.client',
'tag': 'display_notification',
'params': {
'title': _("User Error"),
'type': 'warning',
'message': "Merge quantity should be less than equal to"
"order's total quantity",
'next': {'type': 'ir.actions.act_window_close'},
}
}
else:
total_quantity = sum(order_ids.mapped('product_qty'))
merge_type = self.merge_mrp_type
if merge_type in ['order_none', 'order_cancel', 'order_remove']:
total_quantity = sum(order_ids.mapped('product_qty'))
location_src_id = self.component_location_id.id
location_dest_id = self.component_destination_location_id.id
self.merge_manufacturing_order(order_ids, total_quantity,
location_src_id, location_dest_id)
if merge_type == 'order_cancel':
order_ids.action_cancel()
elif merge_type == 'order_remove':
order_ids.unlink()
elif merge_type in ['merge_none', 'merge_cancel', 'merge_remove']:
total_qty = total_quantity
self.merge_to_manufacturing_order(total_qty)
if merge_type == 'merge_cancel':
order_ids.action_cancel()
elif merge_type == 'merge_remove':
order_ids.unlink()
def merge_manufacturing_order(self, order_ids, total_quantity,
location_src_id, location_dest_id):
"""Creating a new manufacturing order based on selected mrp orders."""
if self.manage_qty:
total_quantity = self.merge_line_ids.quantity
mrp_order = self.env['mrp.production'].create([{
'product_id': order_ids[0].product_id.id,
'product_qty': total_quantity,
'product_uom_qty': total_quantity,
'qty_produced': total_quantity,
'product_uom_id': order_ids[0].product_uom_id.id,
'bom_id': order_ids[0].bom_id.id,
'origin': order_ids[0].origin,
'location_src_id': location_src_id,
'location_dest_id': location_dest_id,
}])
mrp_order._compute_product_uom_qty()
mrp_order._compute_state()
mrp_order._onchange_product_qty()
mrp_order._onchange_move_raw()
mrp_order._onchange_move_finished()
name = ''
for value in range(len(order_ids)):
if value == 0:
name += order_ids[value].name
else:
name += ',' + order_ids[value].name
if self.notification_in_chatter_check():
message = _(
"This mrp order is created from %s") % name
mrp_order.message_post(body=message)
def merge_to_manufacturing_order(self, total_qty):
"""Merge the mrp orders to a selected order."""
self.mrp_order_id.write({
'product_qty': total_qty + int(self.mrp_order_id.product_qty)
})
self.mrp_order_id._compute_product_uom_qty()
self.mrp_order_id._compute_state()
self.mrp_order_id._onchange_product_qty()
self.mrp_order_id._onchange_move_raw()
self.mrp_order_id._onchange_move_finished()
order_ids = self.env['mrp.production'].browse(
self.env.context.get('records'))
name = ''
for value in range(len(order_ids)):
if value == 0:
name += order_ids[value].name
else:
name += ',' + order_ids[value].name
if self.notification_in_chatter_check():
message = _(
"This mrp order is created from %s") % name
self.mrp_order_id.message_post(body=message)
def notification_in_chatter_check(self):
"""Check notify in the chatter options is enabled in settings."""
result = self.env['ir.config_parameter'].sudo().get_param(
'odoo_merge_mrp_orders.merge_order_notify')
return result
@api.onchange('mrp_order_id')
def _onchange_mrp_order_id(self):
"""
Update the quantity in merge_line_ids based on the selected
mrp_order_id.
"""
order_ids = self.env['mrp.production'].browse(
self.env.context.get('records'))
total = sum(order_ids.mapped('product_qty'))
order = order_ids.mapped('id')
if self.mrp_order_id and self.merge_mrp_type in ['merge_none',
'merge_cancel',
'merge_remove']:
order += [self.mrp_order_id.id]
total += self.mrp_order_id.product_qty
self.merge_line_ids.write({
'mrp_merge_order_ids': [(6, 0, order)],
'quantity': total
})
class MrpMergeLine(models.TransientModel):
"""
Merge line to manage merge quantity
"""
_name = 'mrp.merge.line'
_description = 'MRP merge line'
merge_order_id = fields.Many2one(
string='Merge order',
comodel_name='order.mrp.merge',
help='Inverse field linking back to the order.mrp.merge model, '
'representing the merge order.'
)
mrp_merge_order_ids = fields.Many2many(
string='Orders',
comodel_name='mrp.production',
help='This field represents the list of MRP orders that are being'
' merged together.')
mrp_product_id = fields.Many2one(
string='Product',
comodel_name='product.product',
help='Product associated with the mrp order.')
quantity = fields.Integer(string='Quantity', help='Quantity of the merge '
'order')

69
odoo_merge_mrp_orders/wizard/order_mrp_merge_views.xml

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="order_mrp_merge_view_form" model="ir.ui.view">
<field name="name">order.mrp.merge.view.form</field>
<field name="model">order.mrp.merge</field>
<field name="type">form</field>
<field name="arch" type="xml">
<!-- This XML defines a form view for the model "order.mrp.merge" -->
<!-- The view is named "order_mrp_merge_view_form" -->
<!-- Form -->
<form string="Merge Form">
<sheet>
<!-- Group 1 -->
<!-- Contains fields related to merge type, quantity management, and company -->
<group>
<field name="merge_mrp_type"/>
<field name="production_ids" widget="many2many_tags" invisible="1"/>
<field name="product_id" invisible="1"/>
<field name="bom_id" invisible="1"/>
<field name="manage_qty" invisible="1"/>
<field name="company_id" invisible="1"/>
</group>
<!-- Group 2 -->
<!-- Contains fields related to component locations and the selected MRP order -->
<group>
<field name="component_location_id"
attrs="{'invisible': [('merge_mrp_type', 'not in',['order_none','order_cancel', 'order_remove'])]}"/>
<field name="component_destination_location_id"
attrs="{'invisible': [('merge_mrp_type', 'not in',['order_none','order_cancel', 'order_remove'])]}"/>
<field name="mrp_order_id"
domain="[('id', 'in', production_ids)]"
options="{'no_create': True}"
attrs="{'invisible': [('merge_mrp_type', 'not in',['merge_none','merge_cancel','merge_remove'])], 'required':[('merge_mrp_type', 'in',['merge_none','merge_cancel','merge_remove'])]}"/>
</group>
<!-- Notebook -->
<!-- Contains a single page named "Merge Line" -->
<notebook>
<page string="Merge Line" name="merge_line"
attrs="{'invisible': [('manage_qty','=',False)]}">
<!-- Merge Line Tree View -->
<!-- Displays the merge_line_ids field as a tree view -->
<field name="merge_line_ids">
<tree string="Merge line" editable="bottom"
create="false" delete="false">
<field name="mrp_merge_order_ids"
string="Orders"
widget='many2many_tags'
readonly="1"/>
<field name="mrp_product_id"
string="Product" readonly="1"/>
<field name="quantity"/>
</tree>
</field>
</page>
</notebook>
</sheet>
<!-- Footer Buttons -->
<footer>
<!-- Merge Button -->
<button name="action_merge" string="Merge" type="object"
class="oe_highlight"/>
<!-- Discard Button -->
<button string="Discard" class="btn-secondary"
special="cancel"/>
</footer>
</form>
</field>
</record>
</odoo>
Loading…
Cancel
Save