84 lines
3.3 KiB
Python
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
|