diff --git a/product_to_rfq_pro/README.rst b/product_to_rfq_pro/README.rst new file mode 100644 index 000000000..38b8db3a3 --- /dev/null +++ b/product_to_rfq_pro/README.rst @@ -0,0 +1,48 @@ +.. image:: https://img.shields.io/badge/license-OPL--1-red.svg + :target: https://www.odoo.com/documentation/user/12.0/legal/licenses/licenses.html + :alt: License: OPL-1 + +Add Multiple Products To RFQ Pro +================================ +Now you can add products to a RFQ directly from the product list with new features. + +Configuration +============= +* No additional configurations needed + +Company +------- +* `Cybrosys Techno Solutions `__ + +License +------- +Odoo Proprietary License v1.0 (OPL-1) +(https://www.odoo.com/documentation/user/12.0/legal/licenses/licenses.html) + +Credits +------- +Developer: (V13) Nimisha Murali, + (V14) Albin P J, + (V15) Albin P J, + (V16) Albin P J, +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/product_to_rfq_pro/__init__.py b/product_to_rfq_pro/__init__.py new file mode 100644 index 000000000..ded0219f6 --- /dev/null +++ b/product_to_rfq_pro/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Albin PJ (odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from . import models +from . import wizard diff --git a/product_to_rfq_pro/__manifest__.py b/product_to_rfq_pro/__manifest__.py new file mode 100644 index 000000000..376a9cd66 --- /dev/null +++ b/product_to_rfq_pro/__manifest__.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Albin PJ (odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +{ + 'name': 'Add Multiple Products To RFQ Pro', + 'version': '16.0.1.0.0', + 'category': 'Purchases', + 'summary': """Now you can add multiple products to purchase RFQ (Request + for Quotation) form much easier than ever with new feature.""", + 'description': """We provide an easiest way to add multiple products to the + corresponding purchase RFQ.You can see all products in kanban, list and + form view.It also shows previous purchase history of the selected + product,RFQ,multiple RFQ,multiple products to RFQ pro,sales man add RFQ, + button in purchase request for quotation,adding of product directly to the + RFQ, purchase history of the selected product,change purchase history + date, Selection of multiple products at a time""", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'depends': ['purchase'], + 'website': 'https://www.cybrosys.com', + 'data': [ + 'security/ir.model.access.csv', + 'views/product_product_views.xml', + 'views/purchase_order_views.xml', + 'wizard/product_to_rfq_views.xml', + ], + 'images': ['static/description/banner.jpg'], + 'license': 'OPL-1', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/product_to_rfq_pro/doc/RELEASE_NOTES.md b/product_to_rfq_pro/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..96106ba49 --- /dev/null +++ b/product_to_rfq_pro/doc/RELEASE_NOTES.md @@ -0,0 +1,7 @@ +## Module + +#### 06.01.2024 +#### Version 16.0.1.0.0 +#### ADD + +- Initial commit for Add Multiple Products to RFQ Pro diff --git a/product_to_rfq_pro/models/__init__.py b/product_to_rfq_pro/models/__init__.py new file mode 100644 index 000000000..d7cee1eb8 --- /dev/null +++ b/product_to_rfq_pro/models/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Albin PJ (odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from . import product_product +from . import purchase_order diff --git a/product_to_rfq_pro/models/product_product.py b/product_to_rfq_pro/models/product_product.py new file mode 100644 index 000000000..a5969bd70 --- /dev/null +++ b/product_to_rfq_pro/models/product_product.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Albin PJ (odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from odoo import fields, models, _ + + +class Product(models.Model): + """We can add products directly to RFQ""" + _inherit = 'product.product' + + def action_add_to_rfq_direct(self): + """We can add products directly to RFQ using this button click""" + quot_id = (self.env['purchase.order']. + browse(self._context.get('active_id'))) + name = self.product_tmpl_id.name_get()[0][1] + if self.product_tmpl_id.description_sale: + name += '\n' + self.product_tmpl_id.description_sale + if not quot_id.order_line: + quot_id.order_line.create({ + 'product_id': self.id, + 'name': name, + 'product_qty': 1.00, + 'date_planned': fields.Datetime.today(), + 'price_unit': self.product_tmpl_id.standard_price, + 'product_uom': self.product_tmpl_id.uom_id.id, + 'order_id': quot_id.id + }) + else: + products = [rec.product_id.id for rec in quot_id.order_line] + if self.id not in products: + quot_id.order_line.create({ + 'product_id': self.id, + 'name': name, + 'product_qty': 1.00, + 'date_planned': fields.Datetime.today(), + 'price_unit': self.product_tmpl_id.standard_price, + 'product_uom': self.product_tmpl_id.uom_id.id, + 'order_id': quot_id.id + }) + else: + for rec in quot_id.order_line.search( + [('product_id', '=', self.id), + ('price_unit', '=', self.standard_price)]): + rec.product_qty += 1 + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'type': 'success', + 'message': _(f'Product Successfully Added to {quot_id.name}'), + 'next': {'type': 'ir.actions.act_window_close'}, + } + } + + def action_get_purchase_wizard(self): + """We can get the wizard view""" + res = { + 'name': _('Product Details'), + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'product.to.rfq', + 'type': 'ir.actions.act_window', + 'target': 'new', + 'context': { + 'default_order_id': self.env['purchase.order']. + browse(self._context.get('active_id')).id, + 'default_product_id': self.id, + 'default_price_unit': self.product_tmpl_id.standard_price + } + } + return res diff --git a/product_to_rfq_pro/models/purchase_order.py b/product_to_rfq_pro/models/purchase_order.py new file mode 100644 index 000000000..b254badc8 --- /dev/null +++ b/product_to_rfq_pro/models/purchase_order.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Albin PJ (odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from odoo import models, _ + + +class PurchaseOrder(models.Model): + """We can get the all products""" + _inherit = 'purchase.order' + + def action_view_products(self): + """Return the all products""" + return { + 'name': _('Product Variants'), + 'view_type': 'form', + 'view_mode': 'kanban,tree,form', + 'res_model': 'product.product', + 'type': 'ir.actions.act_window', + 'target': '_blank', + 'context': {'purchase_button': True, 'sale_button': False} + } diff --git a/product_to_rfq_pro/security/ir.model.access.csv b/product_to_rfq_pro/security/ir.model.access.csv new file mode 100755 index 000000000..f3fbee1e5 --- /dev/null +++ b/product_to_rfq_pro/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_product_to_rfq_user,product.to.rfq.user,model_product_to_rfq,base.group_user,1,1,1,1 +access_recent_products_tree_purchase_user,recent.products.tree.purchase.user,model_recent_products_tree_purchase,base.group_user,1,1,1,0 diff --git a/product_to_rfq_pro/static/description/assets/icons/check.png b/product_to_rfq_pro/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/check.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/chevron.png b/product_to_rfq_pro/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/chevron.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/cogs.png b/product_to_rfq_pro/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/cogs.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/consultation.png b/product_to_rfq_pro/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/consultation.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/ecom-black.png b/product_to_rfq_pro/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/ecom-black.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/education-black.png b/product_to_rfq_pro/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/education-black.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/hotel-black.png b/product_to_rfq_pro/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/hotel-black.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/license.png b/product_to_rfq_pro/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/license.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/lifebuoy.png b/product_to_rfq_pro/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/lifebuoy.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/manufacturing-black.png b/product_to_rfq_pro/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/manufacturing-black.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/pos-black.png b/product_to_rfq_pro/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/pos-black.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/puzzle.png b/product_to_rfq_pro/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/puzzle.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/restaurant-black.png b/product_to_rfq_pro/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/restaurant-black.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/service-black.png b/product_to_rfq_pro/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/service-black.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/trading-black.png b/product_to_rfq_pro/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/trading-black.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/training.png b/product_to_rfq_pro/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/training.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/update.png b/product_to_rfq_pro/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/update.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/user.png b/product_to_rfq_pro/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/user.png differ diff --git a/product_to_rfq_pro/static/description/assets/icons/wrench.png b/product_to_rfq_pro/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/icons/wrench.png differ diff --git a/product_to_rfq_pro/static/description/assets/misc/categories.png b/product_to_rfq_pro/static/description/assets/misc/categories.png new file mode 100644 index 000000000..bedf1e0b1 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/misc/categories.png differ diff --git a/product_to_rfq_pro/static/description/assets/misc/check-box.png b/product_to_rfq_pro/static/description/assets/misc/check-box.png new file mode 100644 index 000000000..42caf24b9 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/misc/check-box.png differ diff --git a/product_to_rfq_pro/static/description/assets/misc/compass.png b/product_to_rfq_pro/static/description/assets/misc/compass.png new file mode 100644 index 000000000..d5fed8faa Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/misc/compass.png differ diff --git a/product_to_rfq_pro/static/description/assets/misc/corporate.png b/product_to_rfq_pro/static/description/assets/misc/corporate.png new file mode 100644 index 000000000..2eb13edbf Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/misc/corporate.png differ diff --git a/product_to_rfq_pro/static/description/assets/misc/customer-support.png b/product_to_rfq_pro/static/description/assets/misc/customer-support.png new file mode 100644 index 000000000..79efc72ed Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/misc/customer-support.png differ diff --git a/product_to_rfq_pro/static/description/assets/misc/cybrosys-logo.png b/product_to_rfq_pro/static/description/assets/misc/cybrosys-logo.png new file mode 100644 index 000000000..cc3cc0ccf Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/misc/cybrosys-logo.png differ diff --git a/product_to_rfq_pro/static/description/assets/misc/features.png b/product_to_rfq_pro/static/description/assets/misc/features.png new file mode 100644 index 000000000..b41769f77 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/misc/features.png differ diff --git a/product_to_rfq_pro/static/description/assets/misc/logo.png b/product_to_rfq_pro/static/description/assets/misc/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/misc/logo.png differ diff --git a/product_to_rfq_pro/static/description/assets/misc/pictures.png b/product_to_rfq_pro/static/description/assets/misc/pictures.png new file mode 100644 index 000000000..56d255fe9 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/misc/pictures.png differ diff --git a/product_to_rfq_pro/static/description/assets/misc/pie-chart.png b/product_to_rfq_pro/static/description/assets/misc/pie-chart.png new file mode 100644 index 000000000..426e05244 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/misc/pie-chart.png differ diff --git a/product_to_rfq_pro/static/description/assets/misc/right-arrow.png b/product_to_rfq_pro/static/description/assets/misc/right-arrow.png new file mode 100644 index 000000000..730984a06 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/misc/right-arrow.png differ diff --git a/product_to_rfq_pro/static/description/assets/misc/star.png b/product_to_rfq_pro/static/description/assets/misc/star.png new file mode 100644 index 000000000..2eb9ab29f Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/misc/star.png differ diff --git a/product_to_rfq_pro/static/description/assets/misc/support.png b/product_to_rfq_pro/static/description/assets/misc/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/misc/support.png differ diff --git a/product_to_rfq_pro/static/description/assets/misc/whatsapp.png b/product_to_rfq_pro/static/description/assets/misc/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/misc/whatsapp.png differ diff --git a/product_to_rfq_pro/static/description/assets/modules/1.png b/product_to_rfq_pro/static/description/assets/modules/1.png new file mode 100644 index 000000000..4f9e87f6e Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/modules/1.png differ diff --git a/product_to_rfq_pro/static/description/assets/modules/2.png b/product_to_rfq_pro/static/description/assets/modules/2.png new file mode 100644 index 000000000..ac15216fb Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/modules/2.png differ diff --git a/product_to_rfq_pro/static/description/assets/modules/3.png b/product_to_rfq_pro/static/description/assets/modules/3.png new file mode 100644 index 000000000..3de38979f Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/modules/3.png differ diff --git a/product_to_rfq_pro/static/description/assets/modules/4.png b/product_to_rfq_pro/static/description/assets/modules/4.png new file mode 100644 index 000000000..0cc9efd4a Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/modules/4.png differ diff --git a/product_to_rfq_pro/static/description/assets/modules/5.jpeg b/product_to_rfq_pro/static/description/assets/modules/5.jpeg new file mode 100644 index 000000000..b64e82a7a Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/modules/5.jpeg differ diff --git a/product_to_rfq_pro/static/description/assets/modules/6.jpeg b/product_to_rfq_pro/static/description/assets/modules/6.jpeg new file mode 100644 index 000000000..81fc26ad8 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/modules/6.jpeg differ diff --git a/product_to_rfq_pro/static/description/assets/screenshots/gif.gif b/product_to_rfq_pro/static/description/assets/screenshots/gif.gif new file mode 100644 index 000000000..c44f1e379 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/screenshots/gif.gif differ diff --git a/product_to_rfq_pro/static/description/assets/screenshots/pro1.png b/product_to_rfq_pro/static/description/assets/screenshots/pro1.png new file mode 100644 index 000000000..18efbb193 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/screenshots/pro1.png differ diff --git a/product_to_rfq_pro/static/description/assets/screenshots/pro2.png b/product_to_rfq_pro/static/description/assets/screenshots/pro2.png new file mode 100644 index 000000000..df532da03 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/screenshots/pro2.png differ diff --git a/product_to_rfq_pro/static/description/assets/screenshots/pro3.png b/product_to_rfq_pro/static/description/assets/screenshots/pro3.png new file mode 100644 index 000000000..c9a47a4d9 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/screenshots/pro3.png differ diff --git a/product_to_rfq_pro/static/description/assets/screenshots/pro4.png b/product_to_rfq_pro/static/description/assets/screenshots/pro4.png new file mode 100644 index 000000000..e62e83781 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/screenshots/pro4.png differ diff --git a/product_to_rfq_pro/static/description/assets/screenshots/pro5.png b/product_to_rfq_pro/static/description/assets/screenshots/pro5.png new file mode 100644 index 000000000..296b1876f Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/screenshots/pro5.png differ diff --git a/product_to_rfq_pro/static/description/assets/screenshots/pro6.png b/product_to_rfq_pro/static/description/assets/screenshots/pro6.png new file mode 100644 index 000000000..3e1996d17 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/screenshots/pro6.png differ diff --git a/product_to_rfq_pro/static/description/assets/screenshots/pro7.png b/product_to_rfq_pro/static/description/assets/screenshots/pro7.png new file mode 100644 index 000000000..5f39d6242 Binary files /dev/null and b/product_to_rfq_pro/static/description/assets/screenshots/pro7.png differ diff --git a/product_to_rfq_pro/static/description/banner.jpg b/product_to_rfq_pro/static/description/banner.jpg new file mode 100644 index 000000000..076e275c9 Binary files /dev/null and b/product_to_rfq_pro/static/description/banner.jpg differ diff --git a/product_to_rfq_pro/static/description/icon.png b/product_to_rfq_pro/static/description/icon.png new file mode 100644 index 000000000..c1111fa3d Binary files /dev/null and b/product_to_rfq_pro/static/description/icon.png differ diff --git a/product_to_rfq_pro/static/description/index.html b/product_to_rfq_pro/static/description/index.html new file mode 100644 index 000000000..8e5e70f0a --- /dev/null +++ b/product_to_rfq_pro/static/description/index.html @@ -0,0 +1,707 @@ +
+ +
+ +
+
+ Community +
+
+ Enterprise +
+
+ Odoo.sh +
+
+
+ +
+
+
+ +

+ Add Multiple Products To RFQ Pro

+

+ It is the Extended + Version of the module 'Add Multiple Products to RFQ Pro'. Now + Salesman can Add Multiple Products to + Purchase RFQ(Request for Quotation) much easier than ever + with new features.

+ + +
+
+
+ + +
+ + +
+
+ +
+

+ Explore This + Module

+
+ + + + +
+
+ +
+

+ Overview +

+
+
+
+ The module will assist the user in seamless searching of the product and + adding that particular product to the + RFQ/Purchase order without navigating back to the RFQ form. The user can + simply add multiple products to the + opened quotation with or without changing their price or the quantity. + It also shows the previous purchase + history of the selected product via choosing the from date of the + purchase history and sequence limit on the + fly. The module thus helps in saving the time of your team and the + customer. +
+
+ + + +
+
+ +
+

+ Features +

+
+
+
+
+ + A smart button in purchase request for quotation form view to select multiple products directly to the RFQ. +
+
+ + Shows every product in Kanban, List and Form view. +
+
+ + Two buttons enabling the adding of product directly to the RFQ or via changing price and quantity. +
+
+ + Provisions to add product details like price, quantity etc. from the product menu itself. + +
+
+
+ +
+ + Shows purchase history of the selected product in the wizard window. +
+ +
+ + Option to change purchase history date. +
+ +
+ + Selection of multiple products at a time. +
+ +
+ + Reducing the time and improving efficiency. +
+ +
+
+ + + +
+
+ +
+

+ Screenshots +

+
+
+
+ +
+

+ Multiple Products to + RFQ Order Line +

+

+ You can see a smart button, click on this and add multiple + product to the order line.

+ +
+ +
+

+ Add Products through Kanban view to Purchase OrderLine +

+

+ You can add products in + kanban using this buttons

+ +
+
+

+ Add Products through Tree view to Purchase OrderLine +

+

+ You can add products + also in list using this buttons

+ +
+
+

+ Add Products through Form view to Purchase OrderLine +

+

+ You can add products + also in form using this buttons

+ +
+
+

+ Click on this button + and customize quantity and unit price of the product

+ +
+
+

+ Customize Quantity and Unit Price of the product

+ +
+
+

+ Option to see recent products based on date

+ +
+
+
+ + + +
+
+ +
+

+ Related + Products +

+
+
+
+ +
+
+ + + + + +
+
+ +
+

+ Our Services +

+
+ +
+
+
+
+ +
+
+ Odoo + Customization
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Support
+
+ + +
+
+ +
+
+ Hire + Odoo + Developer
+
+ +
+
+ +
+
+ Odoo + Integration
+
+ +
+
+ +
+
+ Odoo + Migration
+
+ + +
+
+ +
+
+ Odoo + Consultancy
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+ +
+ + + + + +
+
+ +
+

+ Our + Industries +

+
+ +
+
+
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

+
+
+ +
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+ +
+
+ +
+ Service Management +
+

+ Keep track of + services and invoice

+
+
+ +
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

+
+
+ +
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+
+
+ + + + +
+
+ +
+

+ Support +

+
+
+
+
+
+
+ +
+
+

Need Help?

+

Got questions or need help? + Get in touch.

+ +

+ odoo@cybrosys.com

+
+
+
+
+
+
+
+ +
+
+

WhatsApp

+

Say hi to us on WhatsApp!

+ +

+ +91 86068 + 27707

+
+
+
+
+
+
+
+ +
+
+
+ \ No newline at end of file diff --git a/product_to_rfq_pro/views/product_product_views.xml b/product_to_rfq_pro/views/product_product_views.xml new file mode 100644 index 000000000..00b7894bd --- /dev/null +++ b/product_to_rfq_pro/views/product_product_views.xml @@ -0,0 +1,75 @@ + + + + + + product.product.view.kanban.inherit.product.to.rfq.pro + + product.product + + + +
+ + +
+
+
+
+ + + + product.product.tree.view.inherit.product.to.rfq.pro + + product.product + + + + + + + + + + + + product.product.form.view.inherit.product.to.rfq.pro + + product.product + + + + + + + +
diff --git a/product_to_rfq_pro/views/purchase_order_views.xml b/product_to_rfq_pro/views/purchase_order_views.xml new file mode 100644 index 000000000..528fa3d94 --- /dev/null +++ b/product_to_rfq_pro/views/purchase_order_views.xml @@ -0,0 +1,20 @@ + + + + + purchase.order.view.form.inherit.product.to.rfq.pro + + purchase.order + + + + + + + + diff --git a/product_to_rfq_pro/wizard/__init__.py b/product_to_rfq_pro/wizard/__init__.py new file mode 100644 index 000000000..6f8a4a176 --- /dev/null +++ b/product_to_rfq_pro/wizard/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Albin PJ (odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from . import product_to_rfq +from . import recent_products_tree_purchase diff --git a/product_to_rfq_pro/wizard/product_to_rfq.py b/product_to_rfq_pro/wizard/product_to_rfq.py new file mode 100644 index 000000000..a96ab0836 --- /dev/null +++ b/product_to_rfq_pro/wizard/product_to_rfq.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Albin PJ (odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from datetime import date, timedelta +from odoo import api, fields, models, _ + + +class ProductToRfq(models.TransientModel): + """This is for wizard view""" + _name = 'product.to.rfq' + _description = "Product To RFQ" + _rec_name = "product_id" + + product_id = fields.Many2one('product.product', string="Product", + readonly=True, help="Product Name") + qty = fields.Float(string="Quantity", default=1.00, help="Product Quantity") + order_id = fields.Many2one('purchase.order', string="RFQ No.", + readonly=True, help="Purchase Order") + price_unit = fields.Float(string="Unit Price", + help="Price unit of the product") + recent_products_ids = fields.One2many('recent.products.tree.purchase', + 'purchase_id', + string="Recent Products", + help="Recent products purchased") + recent_date = fields.Datetime(string="Recent Purchase From", + default=date.today() + timedelta(days=30), + help="Recent date") + + @api.onchange('recent_date') + def _onchange_recent_date(self): + """We can get the recent products""" + purchase_order_ids = self.env['purchase.order.line'].search( + [('product_id', '=', self.product_id.id), + ('order_id.date_order', '<=', self.recent_date), + ('state', '=', + ['purchase']), + ]) + vals = purchase_order_ids.mapped(lambda record: (0, 0, { + 'order_line_id': record.id, + })) + self.recent_products_ids = vals + + def action_add_to_rfq(self): + """We can add products to RFQ from wizard""" + quot_id = self.order_id + product_id = self.product_id + display_name = product_id.name_get()[0][1] + if product_id.description_sale: + display_name += '\n' + product_id.description_sale + if not quot_id.order_line: + quot_id.order_line.create({ + 'product_id': product_id.id, + 'name': display_name, + 'product_qty': self.qty, + 'price_unit': self.price_unit, + 'date_planned': fields.Datetime.today(), + 'product_uom': product_id.product_tmpl_id.uom_id.id, + }) + else: + products = [rec.product_id.id for rec in quot_id.order_line] + price_unit = [rec.price_unit for rec in quot_id.order_line] + if product_id.id not in products: + quot_id.order_line.create({ + 'product_id': product_id.id, + 'name': display_name, + 'product_qty': self.qty, + 'price_unit': self.price_unit, + 'date_planned': fields.Datetime.today(), + 'product_uom': product_id.product_tmpl_id.uom_id.id, + }) + elif product_id.id in products and self.price_unit in price_unit: + for rec in quot_id.order_line.search( + [('product_id', '=', product_id.id), + ('price_unit', '=', self.price_unit)]): + rec.product_qty += self.qty + else: + quot_id.order_line.create({ + 'product_id': product_id.id, + 'name': display_name, + 'product_qty': self.qty, + 'price_unit': self.price_unit, + 'date_planned': fields.Datetime.today(), + 'product_uom': product_id.product_tmpl_id.uom_id.id, + }) + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'type': 'success', + 'message': _(f'Product Successfully Added to {quot_id.name}'), + 'next': {'type': 'ir.actions.act_window_close'}, + } + } diff --git a/product_to_rfq_pro/wizard/product_to_rfq_views.xml b/product_to_rfq_pro/wizard/product_to_rfq_views.xml new file mode 100644 index 000000000..e275ef155 --- /dev/null +++ b/product_to_rfq_pro/wizard/product_to_rfq_views.xml @@ -0,0 +1,52 @@ + + + + + product.to.rfq.view.form + product.to.rfq + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
diff --git a/product_to_rfq_pro/wizard/recent_products_tree_purchase.py b/product_to_rfq_pro/wizard/recent_products_tree_purchase.py new file mode 100644 index 000000000..9e239d9b1 --- /dev/null +++ b/product_to_rfq_pro/wizard/recent_products_tree_purchase.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +############################################################################### +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2023-TODAY Cybrosys Technologies() +# Author: Albin PJ (odoo@cybrosys.com) +# +# This program is under the terms of the Odoo Proprietary License v1.0 (OPL-1) +# It is forbidden to publish, distribute, sublicense, or sell copies of the +# Software or modified copies of the Software. +# +# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### +from odoo import fields, models + + +class RecentProductsTreePurchase(models.TransientModel): + """This is for recent products""" + _name = 'recent.products.tree.purchase' + _description = "Recent Products Tree Purchase" + + partner_id = fields.Many2one('res.partner', string='Vendor', + related='order_line_id.partner_id', + help="Name of the vendor") + quotation_id = fields.Many2one('purchase.order', + string='Order Number', + related='order_line_id.order_id', + help='Quotation number') + price = fields.Float(string='Unit Price', + related='order_line_id.price_unit', + help="Unit Price of the product") + date = fields.Datetime(string='Date', related='order_line_id.date_planned', + help="Date of the purchase") + qty = fields.Float(string='Quantity', related='order_line_id.product_qty', + help="Quantity of product purchased") + purchase_total = fields.Monetary(string='Total', + related='order_line_id.price_total', + help="Purchase total") + purchase_id = fields.Many2one('product.to.rfq', + string='Product to rfq ID', + help="Purchase Order") + order_line_id = fields.Many2one('purchase.order.line', + string='Order Line', readonly=True, + help="Purchase Order Line") + company_id = fields.Many2one('res.company', + related='order_line_id.company_id', + string='Company', store=True, + help="Company Name") + currency_id = fields.Many2one(related='order_line_id.currency_id', + store=True, string='Currency', + help="Currency")