Odoo18-Base/addons/website_sale/controllers/combo_configurator.py
2025-01-06 10:57:38 +07:00

84 lines
3.3 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.http import request, route
from odoo.addons.sale.controllers.combo_configurator import SaleComboConfiguratorController
from odoo.addons.website_sale.controllers.main import WebsiteSale
class WebsiteSaleComboConfiguratorController(SaleComboConfiguratorController, WebsiteSale):
@route(
route='/website_sale/combo_configurator/get_data',
type='json',
auth='public',
website=True,
)
def website_sale_combo_configurator_get_data(self, *args, **kwargs):
self._populate_currency_and_pricelist(kwargs)
return super().sale_combo_configurator_get_data(*args, **kwargs)
@route(
route='/website_sale/combo_configurator/get_price',
type='json',
auth='public',
website=True,
)
def website_sale_combo_configurator_get_price(self, *args, **kwargs):
self._populate_currency_and_pricelist(kwargs)
return super().sale_combo_configurator_get_price(*args, **kwargs)
@route(
route='/website_sale/combo_configurator/update_cart',
type='json',
auth='public',
methods=['POST'],
website=True,
)
def website_sale_combo_configurator_update_cart(
self, combo_product_id, quantity, selected_combo_items, **kwargs
):
""" Add the provided combo product and selected combo items to the cart.
:param int combo_product_id: The combo product to add, as a `product.template` id.
:param int quantity: The quantity to add.
:param list(dict) selected_combo_items: The selected combo items to add.
:param dict kwargs: Locally unused data passed to `_cart_update`.
:rtype: dict
:return: A dict containing information about the cart update.
"""
order_sudo = request.website.sale_get_order(force_create=True)
if order_sudo.state != 'draft':
request.session['sale_order_id'] = None
order_sudo = request.website.sale_get_order(force_create=True)
values = order_sudo._cart_update(
product_id=combo_product_id,
line_id=False, # Always create a new line for combo products.
set_qty=quantity,
**kwargs,
)
line_ids = [values['line_id']]
if selected_combo_items and values['line_id']:
for combo_item in selected_combo_items:
item_values = order_sudo._cart_update(
product_id=combo_item['product_id'],
line_id=False,
set_qty=quantity,
product_custom_attribute_values=combo_item['product_custom_attribute_values'],
no_variant_attribute_value_ids=[
int(value_id) for value_id in combo_item['no_variant_attribute_value_ids']
],
linked_line_id=values['line_id'],
combo_item_id=combo_item['combo_item_id'],
**kwargs,
)
line_ids.append(item_values['line_id'])
values['notification_info'] = self._get_cart_notification_information(order_sudo, line_ids)
values['cart_quantity'] = order_sudo.cart_quantity
request.session['website_sale_cart_quantity'] = order_sudo.cart_quantity
return values