diff --git a/website_product_reservation/README.rst b/website_product_reservation/README.rst new file mode 100644 index 000000000..2f1be6b48 --- /dev/null +++ b/website_product_reservation/README.rst @@ -0,0 +1,48 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg + :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +Website Product Reservation +=========================== +This module helps you to reserve products from the website. + +Configuration +============= +* No additional configurations needed + +Company +------- +* `Cybrosys Techno Solutions `__ + +License +------- +Gnu Affero General Public License, Version 3 (AGPL v3). +(https://www.gnu.org/licenses/agpl-3.0-standalone.html) + +Credits +------- +* Developers : (V16) Muhsina V, + (V17) Fathima Mazlin AM, +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/website_product_reservation/__init__.py b/website_product_reservation/__init__.py new file mode 100644 index 000000000..8d583ebc9 --- /dev/null +++ b/website_product_reservation/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Gayathri V (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import controllers +from . import models diff --git a/website_product_reservation/__manifest__.py b/website_product_reservation/__manifest__.py new file mode 100644 index 000000000..c7c111414 --- /dev/null +++ b/website_product_reservation/__manifest__.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Gayathri V (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +{ + 'name': 'Website Product Reservation', + 'version': '18.0.1.0.0', + 'category': 'Website', + 'summary': 'Enable product reservation functionality on your website', + 'description': "This module extends the website functionality by enabling " + "product reservation. Allow your customers to reserve " + "products directly from your website, and manage these " + "reservations seamlessly within the Odoo environment. " + "Enhance the shopping experience by providing a reservation" + " feature for in-demand products.", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'depends': ['website_sale', 'stock'], + 'data': [ + 'data/website_menu.xml', + 'views/product_template_views.xml', + 'views/res_cofig_settings_views.xml', + 'views/sale_order_views.xml', + 'views/website_templates.xml', + 'views/portal_templates.xml', + ], + 'images': ['static/description/banner.jpg'], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/website_product_reservation/controllers/__init__.py b/website_product_reservation/controllers/__init__.py new file mode 100644 index 000000000..37cdc74ac --- /dev/null +++ b/website_product_reservation/controllers/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Gayathri V (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import portal +from . import website_product_reservation diff --git a/website_product_reservation/controllers/portal.py b/website_product_reservation/controllers/portal.py new file mode 100644 index 000000000..dfc7815e8 --- /dev/null +++ b/website_product_reservation/controllers/portal.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Gayathri V (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import http +from odoo.http import request +from odoo.addons.portal.controllers import portal + + +class ReservationCustomerPortal(portal.CustomerPortal): + + def _get_reservation_domain(self): + """It returns the login person""" + return [('partner_id', '=', request.env.user.partner_id.id)] + + @http.route('/my/reservation/requests', + type='http', auth='user', website=True) + def portal_my_reservation_orders(self): + """List out the reservation Order""" + domain = self._get_reservation_domain() + domain.append(('is_reservation_order', '=', 'True')) + values = { + 'reservation_request': request.env['sale.order'].sudo().search( + domain), + } + return request.render( + "website_product_reservation.portal_my_reservation_requests_tree", + values) + + @http.route(['/my/reservation/requests/form/'], + type='http', + auth="user", website=True) + def get_my_reservation_request_form(self, reservation_id): + """Form view of reservation from website""" + return request.render( + "website_product_reservation.portal_my_reservation_requests_form", + {'record_reservation_requests': request.env[ + 'sale.order'].sudo().browse(reservation_id)}) + + @http.route(['/my/reservation/requests/form/id='], + type='http', + auth="user", website=True) + def get_my_reservation_request_form_cancel(self, reservation_id): + """ Cancel the reservation from website""" + cancel = request.env[ + 'sale.order'].sudo().browse(reservation_id) + cancel.action_cancel_reservation() + return request.render( + "website_product_reservation.portal_my_reservation_requests_form", + {'record_reservation_requests': request.env[ + 'sale.order'].sudo().browse(reservation_id)}) + + @http.route(['/my/reservation/requests/form/confirm='], + type='http', + auth="user", website=True) + def get_my_reservation_request_form_confirm(self, reservation_id): + """Confirm the reservation from website""" + confirm = request.env[ + 'sale.order'].sudo().browse(reservation_id) + confirm.action_make_draft() + confirm.action_confirm() + return request.render( + "website_product_reservation.portal_my_reservation_requests_form", + {'record_reservation_requests': request.env[ + 'sale.order'].sudo().browse(reservation_id)}) + + +class Return(portal.CustomerPortal): + """This will take the count of total courier requests""" + + def _prepare_home_portal_values(self, counters): + """This will return the certificates count""" + values = super(Return, self)._prepare_home_portal_values(counters) + values.update({ + 'reservation_count': request.env[ + 'sale.order'].sudo().search_count( + [('partner_id', '=', request.env.user.partner_id.id), + ('is_reservation_order', '=', 'True')]) + }) + return values diff --git a/website_product_reservation/controllers/website_product_reservation.py b/website_product_reservation/controllers/website_product_reservation.py new file mode 100644 index 000000000..331627797 --- /dev/null +++ b/website_product_reservation/controllers/website_product_reservation.py @@ -0,0 +1,114 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Gayathri V (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +import json +from odoo import http +from odoo.http import request +from odoo.addons.website_sale.controllers.main import WebsiteSale + + +class WebsiteSaleReservation(WebsiteSale): + """Custom controller for handling reservation-related functionality on + the website.""" + + @http.route( + ["/reservation", "/reservation/page/"], + type="http", + auth="public", + website=True, + ) + def reservation(self, page=1, **kw): + """Display a page with products available for reservation. + :param page: Page number for pagination. + :param kw: Additional keyword arguments. + :return: HTTP response rendering the reservation page.""" + domain = [("reserve_products", "=", True), ("website_published", "=", True)] + product_obj = request.env["product.template"] + product_count = product_obj.search_count(domain) + pager = request.website.pager( + url="/reservation", total=product_count, page=page, step=12 + ) + products = product_obj.search(domain, limit=12, offset=pager["offset"]) + values = { + "products": products, + "page_name": "Reserve Products", + "pager": pager, + "default_url": "/reservation", + } + self.clear_cart() + return request.render("website_product_reservation.reservation_page", values) + + @http.route( + ["/reservation/reserve"], + type="http", + auth="public", + methods=["POST"], + website=True, + csrf=False, + ) + def reservation_update(self, product_id, add_qty=1, set_qty=0, **kw): + """Update the reservation order based on user input. + :param product_id: ID of the product being reserved. + :param add_qty: Quantity to add to the reservation. + :param set_qty: Quantity to set for the reservation. + :param kw: Additional keyword arguments. + :return: HTTP response redirecting to the shopping cart.""" + product_custom_attribute_values = None + if kw.get("product_custom_attribute_values"): + product_custom_attribute_values = json.loads( + kw.get("product_custom_attribute_values") + ) + request.website.sale_get_order(force_create=1)._cart_update( + product_id=int(product_id), + add_qty=float(add_qty), + set_qty=float(set_qty), + product_custom_attribute_values=product_custom_attribute_values, + ) + if kw.get("type_name") == "Reservation": + request.website.sale_get_order().is_reservation_order = True + return request.redirect("/shop/cart") + + @http.route( + ["/reservation/confirm_reserve_order"], type="http", auth="public", website=True + ) + def confirm_reserve_order(self, **post): + """Confirm and finalize the reservation order. + :param post: POST data from the request. + :return: HTTP response rendering the confirmation or error page.""" + order = request.website.sale_get_order() + is_reservation = all( + order.website_order_line.mapped("product_id").mapped("reserve_products") + ) + if is_reservation: + order.state = "reserve" + request.website.sale_reset() + for line in order.order_line.filtered( + lambda line: line.product_id.type == "product" + ): + line.sudo().create_reservation_stock() + self.clear_cart() + return request.render( + "website_product_reservation.reservation_thankyou", {"order": order} + ) + else: + return request.render( + "website_product_reservation.not_allowed_to_reserve_page", {} + ) diff --git a/website_product_reservation/data/website_menu.xml b/website_product_reservation/data/website_menu.xml new file mode 100644 index 000000000..196fe8757 --- /dev/null +++ b/website_product_reservation/data/website_menu.xml @@ -0,0 +1,10 @@ + + + + + Reservation + /reservation + + 55 + + diff --git a/website_product_reservation/doc/RELEASE_NOTES.md b/website_product_reservation/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..4f3716387 --- /dev/null +++ b/website_product_reservation/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 13.11.2024 +#### Version 18.0.1.0.0 +##### ADD +- Initial Commit for Website Product Reservation diff --git a/website_product_reservation/models/__init__.py b/website_product_reservation/models/__init__.py new file mode 100644 index 000000000..f20e58de9 --- /dev/null +++ b/website_product_reservation/models/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Gayathri V (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import product_template +from . import sale_order +from . import sale_order_line diff --git a/website_product_reservation/models/product_template.py b/website_product_reservation/models/product_template.py new file mode 100644 index 000000000..7b7a79ce6 --- /dev/null +++ b/website_product_reservation/models/product_template.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Gayathri V (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class ProductTemplate(models.Model): + """ This class extends the 'product.template' model in Odoo. + It adds custom field to choose the reservation product.""" + _inherit = "product.template" + + reserve_products = fields.Boolean(string='Reserve Products', + help="enable to reserve this product") diff --git a/website_product_reservation/models/sale_order.py b/website_product_reservation/models/sale_order.py new file mode 100644 index 000000000..12633bb94 --- /dev/null +++ b/website_product_reservation/models/sale_order.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Gayathri V (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import fields, models + + +class SaleOrder(models.Model): + """ This class extends the 'sale.order' model in Odoo. + It adds a new state ('reserve') and introduces a boolean field + ('is_reservation_order') to identify reservation orders. + Methods: + - action_make_draft: Sets the order state to 'draft' and cancels + reservation stock for product lines. + - action_cancel_reservation: Cancels reservation stock for product + lines and sets the order state to 'cancel'.""" + _inherit = 'sale.order' + + state = fields.Selection(selection_add=[('reserve', 'Reserve')], + string='Order State', + help='The state of the sale order') + is_reservation_order = fields.Boolean(string='Reservation Order', + help='Check if the order is a ' + 'reservation order') + + def action_make_draft(self): + """ Action method to set the order state to 'draft' and cancel + reservation stock for product lines.""" + self.state = 'draft' + for line in self.order_line.filtered( + lambda line: line.product_id.type == 'product'): + line.cancel_reservation_stock(line.picking_id) + + def action_cancel_reservation(self): + """ Action method to cancel reservation stock for product lines and set + the order state to 'cancel'.""" + for line in self.order_line.filtered( + lambda line: line.product_id.type == 'product'): + line.cancel_reservation_stock(line.picking_id) + self.state = 'cancel' + + +class Company(models.Model): + """ This class extends the 'res.company' model in Odoo. + It adds a new field ('destination_location_id') to store the destination + location.""" + _inherit = 'res.company' + + destination_location_id = fields.Many2one( + 'stock.location', + string='Destination Location', + help='The destination location for products.') + + +class AccountConfig(models.TransientModel): + """ This class extends the 'res.config.settings' model in Odoo. + It adds a related field ('destination_location_id') to configure the + destination location.""" + _inherit = "res.config.settings" + + destination_location_id = fields.Many2one( + 'stock.location', + string='Destination Location', + related='company_id.destination_location_id', + readonly=False, + help='The destination location for products.') diff --git a/website_product_reservation/models/sale_order_line.py b/website_product_reservation/models/sale_order_line.py new file mode 100644 index 000000000..e9e052fe9 --- /dev/null +++ b/website_product_reservation/models/sale_order_line.py @@ -0,0 +1,155 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author: Gayathri V (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +############################################################################# +from datetime import datetime +from odoo import fields, models +from odoo.tools import float_round + + +class SaleOrderLine(models.Model): + """ This class extends the 'sale.order.line' model in Odoo. + It adds functionality related to reservation stock for sale order lines.""" + _inherit = 'sale.order.line' + + picking_id = fields.Many2one('stock.picking', string='Picking', + help='The associated picking for the order ' + 'line') + + def create_reservation_stock(self): + """ Create reservation stock for the product line.""" + picking_obj = self.env['stock.picking'] + destination_location_id = self.env.user.company_id.destination_location_id + if not destination_location_id: + destination_location_id = self.env['stock.location'].search( + [('usage', '=', 'internal'), + ('company_id', '=', self.env.user.company_id.id)], limit=1) + warehouse_id = self.order_id.warehouse_id + location_id = warehouse_id.lot_stock_id + if self._context.get('product_id'): + product_id = self._context.get('product_id') + product_uom = product_id.uom_id + else: + product_id = self.product_id + product_uom = self.product_uom + if self._context.get('new_qty'): + product_uom_qty = self._context.get('new_qty') + else: + product_uom_qty = self.product_uom_qty + move_lines = [] + move_lines.append((0, 0, { + 'name': product_id.name, + 'product_id': product_id.id, + 'product_uom_qty': product_uom_qty, + 'quantity': product_uom_qty, + 'product_uom': product_uom.id, + 'location_id': location_id and location_id.id, + 'location_dest_id': destination_location_id and destination_location_id.id, + })) + values = { + 'partner_id': self.order_id.partner_id.id, + 'location_id': location_id and location_id.id, + 'location_dest_id': destination_location_id and destination_location_id.id, + 'scheduled_date': datetime.now(), + 'date_done': datetime.now(), + 'origin': self.order_id.name, + 'owner_id': self.order_id.partner_id.id, + 'picking_type_id': self.env.ref('stock.picking_type_out').id, + 'move_ids_without_package': move_lines, + } + picking = picking_obj.sudo().create(values) + picking.sudo().action_confirm() + picking.sudo().action_assign() + picking.sudo().button_validate() + sms = self.env['confirm.stock.sms'].sudo().search([]) + for rec in sms: + for pick in rec.pick_ids: + if pick.id == picking.id: + rec.send_sms() + picking.sudo().button_validate() + + self.write({ + 'picking_id': picking.id + }) + + def cancel_reservation_stock(self, picking_ids): + """ Cancel reservation stock for the given picking IDs.""" + product_return_moves = [] + for picking in picking_ids: + if picking.products_availability_state == "late": + return picking.action_cancel() + else: + for move in picking.move_ids: + if move.move_dest_ids: + quantity = move.product_qty - sum( + move.sudo().filtered( + lambda m: m.state in [ + 'partially_available', 'assigned', + 'done']).mapped('move_line_ids').mapped( + 'qty_done')) + else: + quantity = move.product_qty + quantity = float_round(quantity, + precision_rounding=move.product_uom.rounding) + product_return_moves.append((0, 0, { + 'product_id': move.product_id.id, + 'quantity': quantity, + 'move_id': move.id, + 'uom_id': move.product_id.uom_id.id, + 'to_refund': True, + })) + location_id = picking.location_id.id + if picking.picking_type_id.return_picking_type_id\ + .default_location_dest_id.return_location: + location_id = picking.picking_type_id\ + .return_picking_type_id.default_location_dest_id.id + stock_return = self.env['stock.return.picking'].sudo().create({ + 'product_return_moves': product_return_moves, + 'picking_id': picking.id, + 'original_location_id': picking.location_id.id, + 'parent_location_id': picking.picking_type_id.warehouse_id and picking.picking_type_id.warehouse_id.view_location_id.id or picking.location_id.location_id.id, + 'location_id': location_id + }) + if stock_return: + new_picking_id, pick_type_id = stock_return.sudo()._create_returns() + new_picking = self.env['stock.picking'].sudo().browse( + new_picking_id) + if new_picking.mapped('move_line_ids').filtered( + lambda move: move.state in ['confirmed', + 'waiting']): + new_picking.sudo().action_confirm() + new_picking.sudo().action_assign() + # new_picking.sudo().action_set_quantities_to_reservation() + new_picking.sudo().button_validate() + else: + new_picking.sudo().action_confirm() + new_picking.sudo().action_assign() + # new_picking.sudo().action_set_quantities_to_reservation() + new_picking.sudo().button_validate() + + def unlink(self): + """ Override unlink method to cancel reservation stock when deleting + product lines in draft reservation orders.""" + for line in self: + order_id = line.order_id + if order_id.state == 'draft' and order_id.type_name == 'Reservation': + if line.picking_id: + line.sudo().cancel_reservation_stock(line.picking_id) + return super(SaleOrderLine, self).unlink() diff --git a/website_product_reservation/static/description/assets/cybro-icon.png b/website_product_reservation/static/description/assets/cybro-icon.png new file mode 100644 index 000000000..06e73e11d Binary files /dev/null and b/website_product_reservation/static/description/assets/cybro-icon.png differ diff --git a/website_product_reservation/static/description/assets/cybro-odoo.png b/website_product_reservation/static/description/assets/cybro-odoo.png new file mode 100644 index 000000000..ed02e07a4 Binary files /dev/null and b/website_product_reservation/static/description/assets/cybro-odoo.png differ diff --git a/website_product_reservation/static/description/assets/h2.png b/website_product_reservation/static/description/assets/h2.png new file mode 100644 index 000000000..0bfc4707d Binary files /dev/null and b/website_product_reservation/static/description/assets/h2.png differ diff --git a/website_product_reservation/static/description/assets/icons/arrows-repeat.svg b/website_product_reservation/static/description/assets/icons/arrows-repeat.svg new file mode 100644 index 000000000..1d7efabc5 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/arrows-repeat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/banner-1.png b/website_product_reservation/static/description/assets/icons/banner-1.png new file mode 100644 index 000000000..c180db172 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/banner-1.png differ diff --git a/website_product_reservation/static/description/assets/icons/banner-2.svg b/website_product_reservation/static/description/assets/icons/banner-2.svg new file mode 100644 index 000000000..e606d97d9 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/banner-2.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/banner-bg.png b/website_product_reservation/static/description/assets/icons/banner-bg.png new file mode 100644 index 000000000..a8238d3c0 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/banner-bg.png differ diff --git a/website_product_reservation/static/description/assets/icons/banner-bg.svg b/website_product_reservation/static/description/assets/icons/banner-bg.svg new file mode 100644 index 000000000..b1378103e --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/banner-bg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/banner-call.svg b/website_product_reservation/static/description/assets/icons/banner-call.svg new file mode 100644 index 000000000..96c687e81 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/banner-call.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/website_product_reservation/static/description/assets/icons/banner-mail.svg b/website_product_reservation/static/description/assets/icons/banner-mail.svg new file mode 100644 index 000000000..cbf0d158d --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/banner-mail.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/website_product_reservation/static/description/assets/icons/banner-pattern.svg b/website_product_reservation/static/description/assets/icons/banner-pattern.svg new file mode 100644 index 000000000..9c1c7e101 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/banner-pattern.svg @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/banner-promo.svg b/website_product_reservation/static/description/assets/icons/banner-promo.svg new file mode 100644 index 000000000..d52791b11 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/banner-promo.svg @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/brand-pair.svg b/website_product_reservation/static/description/assets/icons/brand-pair.svg new file mode 100644 index 000000000..d8db7fc1e --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/brand-pair.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/capture (1).png b/website_product_reservation/static/description/assets/icons/capture (1).png new file mode 100644 index 000000000..8824deafc Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/capture (1).png differ diff --git a/website_product_reservation/static/description/assets/icons/check.png b/website_product_reservation/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/check.png differ diff --git a/website_product_reservation/static/description/assets/icons/chevron.png b/website_product_reservation/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/chevron.png differ diff --git a/website_product_reservation/static/description/assets/icons/close-icon.svg b/website_product_reservation/static/description/assets/icons/close-icon.svg new file mode 100644 index 000000000..df8cce37a --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/close-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/website_product_reservation/static/description/assets/icons/cogs.png b/website_product_reservation/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/cogs.png differ diff --git a/website_product_reservation/static/description/assets/icons/collabarate-icon.svg b/website_product_reservation/static/description/assets/icons/collabarate-icon.svg new file mode 100644 index 000000000..dd4e10518 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/collabarate-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/website_product_reservation/static/description/assets/icons/consultation.png b/website_product_reservation/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/consultation.png differ diff --git a/website_product_reservation/static/description/assets/icons/cybro-logo.png b/website_product_reservation/static/description/assets/icons/cybro-logo.png new file mode 100644 index 000000000..ff4b78220 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/cybro-logo.png differ diff --git a/website_product_reservation/static/description/assets/icons/down.svg b/website_product_reservation/static/description/assets/icons/down.svg new file mode 100644 index 000000000..f21c36271 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website_product_reservation/static/description/assets/icons/ecom-black.png b/website_product_reservation/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/ecom-black.png differ diff --git a/website_product_reservation/static/description/assets/icons/education-black.png b/website_product_reservation/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/education-black.png differ diff --git a/website_product_reservation/static/description/assets/icons/faq.png b/website_product_reservation/static/description/assets/icons/faq.png new file mode 100644 index 000000000..4250b5b81 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/faq.png differ diff --git a/website_product_reservation/static/description/assets/icons/feature-icon.svg b/website_product_reservation/static/description/assets/icons/feature-icon.svg new file mode 100644 index 000000000..fa0ea6850 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/feature-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/feature.png b/website_product_reservation/static/description/assets/icons/feature.png new file mode 100644 index 000000000..ac7a785c0 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/feature.png differ diff --git a/website_product_reservation/static/description/assets/icons/gear.svg b/website_product_reservation/static/description/assets/icons/gear.svg new file mode 100644 index 000000000..0cc66b6ea --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/gear.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/hero.gif b/website_product_reservation/static/description/assets/icons/hero.gif new file mode 100644 index 000000000..35b6bcb99 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/hero.gif differ diff --git a/website_product_reservation/static/description/assets/icons/hire-odoo.svg b/website_product_reservation/static/description/assets/icons/hire-odoo.svg new file mode 100644 index 000000000..e1ac089b0 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/hire-odoo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/hotel-black.png b/website_product_reservation/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/hotel-black.png differ diff --git a/website_product_reservation/static/description/assets/icons/img.png b/website_product_reservation/static/description/assets/icons/img.png new file mode 100644 index 000000000..70197f477 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/img.png differ diff --git a/website_product_reservation/static/description/assets/icons/license.png b/website_product_reservation/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/license.png differ diff --git a/website_product_reservation/static/description/assets/icons/life-ring-icon.svg b/website_product_reservation/static/description/assets/icons/life-ring-icon.svg new file mode 100644 index 000000000..3ae6e1d89 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/life-ring-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/lifebuoy.png b/website_product_reservation/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/lifebuoy.png differ diff --git a/website_product_reservation/static/description/assets/icons/mail.svg b/website_product_reservation/static/description/assets/icons/mail.svg new file mode 100644 index 000000000..1eedde695 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/mail.svg @@ -0,0 +1,3 @@ + + + diff --git a/website_product_reservation/static/description/assets/icons/manufacturing-black.png b/website_product_reservation/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/manufacturing-black.png differ diff --git a/website_product_reservation/static/description/assets/icons/notes.png b/website_product_reservation/static/description/assets/icons/notes.png new file mode 100644 index 000000000..ee5e95404 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/notes.png differ diff --git a/website_product_reservation/static/description/assets/icons/notification icon.svg b/website_product_reservation/static/description/assets/icons/notification icon.svg new file mode 100644 index 000000000..053189973 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/notification icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/odoo-consultancy.svg b/website_product_reservation/static/description/assets/icons/odoo-consultancy.svg new file mode 100644 index 000000000..e05f65bde --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/odoo-consultancy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/website_product_reservation/static/description/assets/icons/odoo-licencing.svg b/website_product_reservation/static/description/assets/icons/odoo-licencing.svg new file mode 100644 index 000000000..2606c88b0 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/odoo-licencing.svg @@ -0,0 +1,3 @@ + + + diff --git a/website_product_reservation/static/description/assets/icons/odoo-logo.png b/website_product_reservation/static/description/assets/icons/odoo-logo.png new file mode 100644 index 000000000..0e4d0eb5a Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/odoo-logo.png differ diff --git a/website_product_reservation/static/description/assets/icons/patter.svg b/website_product_reservation/static/description/assets/icons/patter.svg new file mode 100644 index 000000000..25c9c0a8f --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/patter.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/pattern1.png b/website_product_reservation/static/description/assets/icons/pattern1.png new file mode 100644 index 000000000..09ab0fb2d Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/pattern1.png differ diff --git a/website_product_reservation/static/description/assets/icons/photo-capture.png b/website_product_reservation/static/description/assets/icons/photo-capture.png new file mode 100644 index 000000000..06c111758 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/photo-capture.png differ diff --git a/website_product_reservation/static/description/assets/icons/pos-black.png b/website_product_reservation/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/pos-black.png differ diff --git a/website_product_reservation/static/description/assets/icons/puzzle-piece-icon.svg b/website_product_reservation/static/description/assets/icons/puzzle-piece-icon.svg new file mode 100644 index 000000000..3e9ad9373 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/puzzle-piece-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/puzzle.png b/website_product_reservation/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/puzzle.png differ diff --git a/website_product_reservation/static/description/assets/icons/replace-icon.svg b/website_product_reservation/static/description/assets/icons/replace-icon.svg new file mode 100644 index 000000000..d0e3a7af1 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/replace-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/restaurant-black.png b/website_product_reservation/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/restaurant-black.png differ diff --git a/website_product_reservation/static/description/assets/icons/screenshot-main.png b/website_product_reservation/static/description/assets/icons/screenshot-main.png new file mode 100644 index 000000000..575f8e676 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/screenshot-main.png differ diff --git a/website_product_reservation/static/description/assets/icons/screenshot.png b/website_product_reservation/static/description/assets/icons/screenshot.png new file mode 100644 index 000000000..cef272529 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/screenshot.png differ diff --git a/website_product_reservation/static/description/assets/icons/service-black.png b/website_product_reservation/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/service-black.png differ diff --git a/website_product_reservation/static/description/assets/icons/skype-fill.svg b/website_product_reservation/static/description/assets/icons/skype-fill.svg new file mode 100644 index 000000000..c17423639 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/skype-fill.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/skype.png b/website_product_reservation/static/description/assets/icons/skype.png new file mode 100644 index 000000000..51b409fb3 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/skype.png differ diff --git a/website_product_reservation/static/description/assets/icons/skype.svg b/website_product_reservation/static/description/assets/icons/skype.svg new file mode 100644 index 000000000..df3dad39b --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/skype.svg @@ -0,0 +1,3 @@ + + + diff --git a/website_product_reservation/static/description/assets/icons/star-1.svg b/website_product_reservation/static/description/assets/icons/star-1.svg new file mode 100644 index 000000000..7e55ab162 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/star-1.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/star-2.svg b/website_product_reservation/static/description/assets/icons/star-2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/star-2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/support.png b/website_product_reservation/static/description/assets/icons/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/support.png differ diff --git a/website_product_reservation/static/description/assets/icons/test-1 - Copy.png b/website_product_reservation/static/description/assets/icons/test-1 - Copy.png new file mode 100644 index 000000000..f6a902663 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/test-1 - Copy.png differ diff --git a/website_product_reservation/static/description/assets/icons/test-1.png b/website_product_reservation/static/description/assets/icons/test-1.png new file mode 100644 index 000000000..0908add2b Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/test-1.png differ diff --git a/website_product_reservation/static/description/assets/icons/test-2.png b/website_product_reservation/static/description/assets/icons/test-2.png new file mode 100644 index 000000000..4671fe91e Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/test-2.png differ diff --git a/website_product_reservation/static/description/assets/icons/trading-black.png b/website_product_reservation/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/trading-black.png differ diff --git a/website_product_reservation/static/description/assets/icons/training.png b/website_product_reservation/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/training.png differ diff --git a/website_product_reservation/static/description/assets/icons/translate.svg b/website_product_reservation/static/description/assets/icons/translate.svg new file mode 100644 index 000000000..af9c8a1aa --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/translate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/update.png b/website_product_reservation/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/update.png differ diff --git a/website_product_reservation/static/description/assets/icons/user.png b/website_product_reservation/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/user.png differ diff --git a/website_product_reservation/static/description/assets/icons/video.png b/website_product_reservation/static/description/assets/icons/video.png new file mode 100644 index 000000000..576705b17 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/video.png differ diff --git a/website_product_reservation/static/description/assets/icons/whatsapp.png b/website_product_reservation/static/description/assets/icons/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/whatsapp.png differ diff --git a/website_product_reservation/static/description/assets/icons/wrench-icon.svg b/website_product_reservation/static/description/assets/icons/wrench-icon.svg new file mode 100644 index 000000000..174b5a465 --- /dev/null +++ b/website_product_reservation/static/description/assets/icons/wrench-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/icons/wrench.png b/website_product_reservation/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/website_product_reservation/static/description/assets/icons/wrench.png differ diff --git a/website_product_reservation/static/description/assets/misc/Cybrosys R.png b/website_product_reservation/static/description/assets/misc/Cybrosys R.png new file mode 100644 index 000000000..da4058087 Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/Cybrosys R.png differ diff --git a/website_product_reservation/static/description/assets/misc/categories.png b/website_product_reservation/static/description/assets/misc/categories.png new file mode 100644 index 000000000..bedf1e0b1 Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/categories.png differ diff --git a/website_product_reservation/static/description/assets/misc/check-box.png b/website_product_reservation/static/description/assets/misc/check-box.png new file mode 100644 index 000000000..42caf24b9 Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/check-box.png differ diff --git a/website_product_reservation/static/description/assets/misc/compass.png b/website_product_reservation/static/description/assets/misc/compass.png new file mode 100644 index 000000000..d5fed8faa Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/compass.png differ diff --git a/website_product_reservation/static/description/assets/misc/corporate.png b/website_product_reservation/static/description/assets/misc/corporate.png new file mode 100644 index 000000000..2eb13edbf Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/corporate.png differ diff --git a/website_product_reservation/static/description/assets/misc/customer-support.png b/website_product_reservation/static/description/assets/misc/customer-support.png new file mode 100644 index 000000000..79efc72ed Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/customer-support.png differ diff --git a/website_product_reservation/static/description/assets/misc/cybrosys-logo.png b/website_product_reservation/static/description/assets/misc/cybrosys-logo.png new file mode 100644 index 000000000..cc3cc0ccf Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/cybrosys-logo.png differ diff --git a/website_product_reservation/static/description/assets/misc/email.svg b/website_product_reservation/static/description/assets/misc/email.svg new file mode 100644 index 000000000..15291cdc3 --- /dev/null +++ b/website_product_reservation/static/description/assets/misc/email.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/misc/features.png b/website_product_reservation/static/description/assets/misc/features.png new file mode 100644 index 000000000..b41769f77 Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/features.png differ diff --git a/website_product_reservation/static/description/assets/misc/logo.png b/website_product_reservation/static/description/assets/misc/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/logo.png differ diff --git a/website_product_reservation/static/description/assets/misc/phone.svg b/website_product_reservation/static/description/assets/misc/phone.svg new file mode 100644 index 000000000..b7bd7f251 --- /dev/null +++ b/website_product_reservation/static/description/assets/misc/phone.svg @@ -0,0 +1,3 @@ + + + diff --git a/website_product_reservation/static/description/assets/misc/pictures.png b/website_product_reservation/static/description/assets/misc/pictures.png new file mode 100644 index 000000000..56d255fe9 Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/pictures.png differ diff --git a/website_product_reservation/static/description/assets/misc/pie-chart.png b/website_product_reservation/static/description/assets/misc/pie-chart.png new file mode 100644 index 000000000..426e05244 Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/pie-chart.png differ diff --git a/website_product_reservation/static/description/assets/misc/right-arrow.png b/website_product_reservation/static/description/assets/misc/right-arrow.png new file mode 100644 index 000000000..730984a06 Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/right-arrow.png differ diff --git a/website_product_reservation/static/description/assets/misc/star (1) 2.svg b/website_product_reservation/static/description/assets/misc/star (1) 2.svg new file mode 100644 index 000000000..5ae9f507a --- /dev/null +++ b/website_product_reservation/static/description/assets/misc/star (1) 2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/misc/star.png b/website_product_reservation/static/description/assets/misc/star.png new file mode 100644 index 000000000..2eb9ab29f Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/star.png differ diff --git a/website_product_reservation/static/description/assets/misc/support (1) 1.svg b/website_product_reservation/static/description/assets/misc/support (1) 1.svg new file mode 100644 index 000000000..7d37a8f30 --- /dev/null +++ b/website_product_reservation/static/description/assets/misc/support (1) 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/misc/support-email.svg b/website_product_reservation/static/description/assets/misc/support-email.svg new file mode 100644 index 000000000..eb70370d6 --- /dev/null +++ b/website_product_reservation/static/description/assets/misc/support-email.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/website_product_reservation/static/description/assets/misc/support.png b/website_product_reservation/static/description/assets/misc/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/support.png differ diff --git a/website_product_reservation/static/description/assets/misc/tick-mark.svg b/website_product_reservation/static/description/assets/misc/tick-mark.svg new file mode 100644 index 000000000..2dbb40187 --- /dev/null +++ b/website_product_reservation/static/description/assets/misc/tick-mark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/misc/whatsapp 1.svg b/website_product_reservation/static/description/assets/misc/whatsapp 1.svg new file mode 100644 index 000000000..0bfaf8fc6 --- /dev/null +++ b/website_product_reservation/static/description/assets/misc/whatsapp 1.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/misc/whatsapp.png b/website_product_reservation/static/description/assets/misc/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/website_product_reservation/static/description/assets/misc/whatsapp.png differ diff --git a/website_product_reservation/static/description/assets/misc/whatsapp.svg b/website_product_reservation/static/description/assets/misc/whatsapp.svg new file mode 100644 index 000000000..b618aea1d --- /dev/null +++ b/website_product_reservation/static/description/assets/misc/whatsapp.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website_product_reservation/static/description/assets/modules/1.gif b/website_product_reservation/static/description/assets/modules/1.gif new file mode 100644 index 000000000..ae3a880a2 Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/1.gif differ diff --git a/website_product_reservation/static/description/assets/modules/1.jpg b/website_product_reservation/static/description/assets/modules/1.jpg new file mode 100644 index 000000000..08bbafeb6 Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/1.jpg differ diff --git a/website_product_reservation/static/description/assets/modules/2.gif b/website_product_reservation/static/description/assets/modules/2.gif new file mode 100644 index 000000000..d19e2b352 Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/2.gif differ diff --git a/website_product_reservation/static/description/assets/modules/2.jpg b/website_product_reservation/static/description/assets/modules/2.jpg new file mode 100644 index 000000000..5d694c069 Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/2.jpg differ diff --git a/website_product_reservation/static/description/assets/modules/2.png b/website_product_reservation/static/description/assets/modules/2.png new file mode 100644 index 000000000..a1209a01f Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/2.png differ diff --git a/website_product_reservation/static/description/assets/modules/3.jpg b/website_product_reservation/static/description/assets/modules/3.jpg new file mode 100644 index 000000000..3d171226b Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/3.jpg differ diff --git a/website_product_reservation/static/description/assets/modules/3.png b/website_product_reservation/static/description/assets/modules/3.png new file mode 100644 index 000000000..8513873ea Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/3.png differ diff --git a/website_product_reservation/static/description/assets/modules/4.jpg b/website_product_reservation/static/description/assets/modules/4.jpg new file mode 100644 index 000000000..1f3f2e27f Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/4.jpg differ diff --git a/website_product_reservation/static/description/assets/modules/4.png b/website_product_reservation/static/description/assets/modules/4.png new file mode 100644 index 000000000..3bedf7981 Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/4.png differ diff --git a/website_product_reservation/static/description/assets/modules/5.jpg b/website_product_reservation/static/description/assets/modules/5.jpg new file mode 100644 index 000000000..0db717519 Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/5.jpg differ diff --git a/website_product_reservation/static/description/assets/modules/5.png b/website_product_reservation/static/description/assets/modules/5.png new file mode 100644 index 000000000..0e311ca87 Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/5.png differ diff --git a/website_product_reservation/static/description/assets/modules/6.jpg b/website_product_reservation/static/description/assets/modules/6.jpg new file mode 100644 index 000000000..67c7f7062 Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/6.jpg differ diff --git a/website_product_reservation/static/description/assets/modules/module_image (1).jpeg b/website_product_reservation/static/description/assets/modules/module_image (1).jpeg new file mode 100644 index 000000000..5ae24843e Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/module_image (1).jpeg differ diff --git a/website_product_reservation/static/description/assets/modules/module_image (1).png b/website_product_reservation/static/description/assets/modules/module_image (1).png new file mode 100644 index 000000000..0dea4f332 Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/module_image (1).png differ diff --git a/website_product_reservation/static/description/assets/modules/module_image (2).png b/website_product_reservation/static/description/assets/modules/module_image (2).png new file mode 100644 index 000000000..a5dc79613 Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/module_image (2).png differ diff --git a/website_product_reservation/static/description/assets/modules/module_image-1.jpeg b/website_product_reservation/static/description/assets/modules/module_image-1.jpeg new file mode 100644 index 000000000..31f066e9c Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/module_image-1.jpeg differ diff --git a/website_product_reservation/static/description/assets/modules/module_image.jpeg b/website_product_reservation/static/description/assets/modules/module_image.jpeg new file mode 100644 index 000000000..0cbac311c Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/module_image.jpeg differ diff --git a/website_product_reservation/static/description/assets/modules/module_image.png b/website_product_reservation/static/description/assets/modules/module_image.png new file mode 100644 index 000000000..612be4b77 Binary files /dev/null and b/website_product_reservation/static/description/assets/modules/module_image.png differ diff --git a/website_product_reservation/static/description/assets/screenshots.zip b/website_product_reservation/static/description/assets/screenshots.zip new file mode 100644 index 000000000..a5aa232e3 Binary files /dev/null and b/website_product_reservation/static/description/assets/screenshots.zip differ diff --git a/website_product_reservation/static/description/assets/screenshots/1.png b/website_product_reservation/static/description/assets/screenshots/1.png new file mode 100644 index 000000000..a02254af6 Binary files /dev/null and b/website_product_reservation/static/description/assets/screenshots/1.png differ diff --git a/website_product_reservation/static/description/assets/screenshots/2.png b/website_product_reservation/static/description/assets/screenshots/2.png new file mode 100644 index 000000000..e40ca5085 Binary files /dev/null and b/website_product_reservation/static/description/assets/screenshots/2.png differ diff --git a/website_product_reservation/static/description/assets/screenshots/3.png b/website_product_reservation/static/description/assets/screenshots/3.png new file mode 100644 index 000000000..21720b8fe Binary files /dev/null and b/website_product_reservation/static/description/assets/screenshots/3.png differ diff --git a/website_product_reservation/static/description/assets/screenshots/4.png b/website_product_reservation/static/description/assets/screenshots/4.png new file mode 100644 index 000000000..6442daf4c Binary files /dev/null and b/website_product_reservation/static/description/assets/screenshots/4.png differ diff --git a/website_product_reservation/static/description/assets/screenshots/5.png b/website_product_reservation/static/description/assets/screenshots/5.png new file mode 100644 index 000000000..6be828a56 Binary files /dev/null and b/website_product_reservation/static/description/assets/screenshots/5.png differ diff --git a/website_product_reservation/static/description/assets/screenshots/6.png b/website_product_reservation/static/description/assets/screenshots/6.png new file mode 100644 index 000000000..a03488c9a Binary files /dev/null and b/website_product_reservation/static/description/assets/screenshots/6.png differ diff --git a/website_product_reservation/static/description/assets/y18.jpg b/website_product_reservation/static/description/assets/y18.jpg new file mode 100644 index 000000000..eea1714f2 Binary files /dev/null and b/website_product_reservation/static/description/assets/y18.jpg differ diff --git a/website_product_reservation/static/description/banner.jpg b/website_product_reservation/static/description/banner.jpg new file mode 100644 index 000000000..71ed131e8 Binary files /dev/null and b/website_product_reservation/static/description/banner.jpg differ diff --git a/website_product_reservation/static/description/icon.png b/website_product_reservation/static/description/icon.png new file mode 100644 index 000000000..a1e2a4540 Binary files /dev/null and b/website_product_reservation/static/description/icon.png differ diff --git a/website_product_reservation/static/description/index.html b/website_product_reservation/static/description/index.html new file mode 100644 index 000000000..a5b579df5 --- /dev/null +++ b/website_product_reservation/static/description/index.html @@ -0,0 +1,1102 @@ + + + + + + Website Product Reservation + + + + + + + + + + +
+
+ + + +
+
+ Community +
+
+ Enterprise +
+
+ Odoo.sh +
+
+
+ +
+
+
+
+

+ Reserve The Products From the Website +

+

+ Website Product Reservation +

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

Key + Highlights

+
+
+
+
+ +
+
+ Users can reserve the product directly from + the website. +
+
+
+
+
+
+ +
+
+ A corresponding reservation order is + created. +
+
+
+
+
+
+ +
+
+ By enabling the 'Reserve Products' checkbox + inside the product, the item can be + reserved. +
+
+
+
+
+ +
+
+
+ Website Product Reservation +

+ Are you ready to make your business more + organized? +
Improve now! +

+ +
+
+ +
+
+
+ + + + +
+
+ +
+
+
+
+ acc_bg +
+ +
+
+
+
+

+ Enable Reserve + + Products. +

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

+ + Reserve + Products. +

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

+ + Create Reservation + Order. +

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

+ + Here, the order is + created. +

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

+ + Reservation + + Orders +

+
+
+
+
+

+ You can view these reservation + orders under the 'eCommerce' + menu on the website. + +

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

+ + Generate a + + quotation. +

+
+
+

+ The created order is in the + 'Reserve' state. You can either + cancel it or generate a + quotation from the reservation + order. + +

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

+ By enabling the 'Reserve + Products' checkbox inside the + product, the item can be + reserved.

+
+ +
+
+
+
+
+
+ +
+

+ Users can reserve the product + directly from the website.

+
+
+
+
+
+
+
+ +
+

+ A corresponding reservation + order is created.

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

+ The Website Product Reservation module allows customers to reserve products directly from your website, providing a seamless way to secure items before completing a purchase or pickup. This feature is particularly useful for items with limited stock or high demand. +

+
+
+ +
+ +
+

+ Customers can reserve products by selecting the Reserve option on the product page. They can then specify the quantity and duration of the reservation based on available settings configured by the store. +

+
+
+ +
+ +
+

+ Absolutely. The module allows you to enable the reservation feature for selected products or product categories, ensuring that only eligible items are reservable based on your inventory and sales strategy. +

+
+
+ +
+ +
+

+ When a product is reserved, the module adjusts the available stock accordingly, temporarily reducing the visible stock level on the website until the reservation expires or is converted into a sale. +

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

+ Latest Release 18.0.1.0.0 +

+ + 13th November, 2024 + +
+
+
+
+
+ Add +
+
+
+
    +
  • + Initial Commit +
  • + +
+
+
+
+
+
+
+
+
+
+ + + +
+

+ Related Products +

+ +
+ + +
+

+ Our Services

+ +
+ +
+
+ .... +
+
+ +
+ + +
+
+ + + + + + diff --git a/website_product_reservation/static/src/img/bag.svg b/website_product_reservation/static/src/img/bag.svg new file mode 100644 index 000000000..148d08a22 --- /dev/null +++ b/website_product_reservation/static/src/img/bag.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/website_product_reservation/views/portal_templates.xml b/website_product_reservation/views/portal_templates.xml new file mode 100644 index 000000000..e05f4df65 --- /dev/null +++ b/website_product_reservation/views/portal_templates.xml @@ -0,0 +1,230 @@ + + + + + + + + \ No newline at end of file diff --git a/website_product_reservation/views/product_template_views.xml b/website_product_reservation/views/product_template_views.xml new file mode 100644 index 000000000..469dbda0d --- /dev/null +++ b/website_product_reservation/views/product_template_views.xml @@ -0,0 +1,19 @@ + + + + + product.template.view.form.inherit.website.product.reservation + product.template + + + + + + + + + + diff --git a/website_product_reservation/views/res_cofig_settings_views.xml b/website_product_reservation/views/res_cofig_settings_views.xml new file mode 100644 index 000000000..64fc36708 --- /dev/null +++ b/website_product_reservation/views/res_cofig_settings_views.xml @@ -0,0 +1,31 @@ + + + + + res.config.settings.inherit.website.product.reservation + res.config.settings + + + +
+
+
+
+
+ + + + diff --git a/website_product_reservation/views/sale_order_views.xml b/website_product_reservation/views/sale_order_views.xml new file mode 100644 index 000000000..c197477c6 --- /dev/null +++ b/website_product_reservation/views/sale_order_views.xml @@ -0,0 +1,37 @@ + + + + + sale.order.view.form.inherit.website.product.reservation + + sale.order + + + + +