Odoo18-Base/addons/website_sale_collect/controllers/delivery.py

37 lines
1.8 KiB
Python
Raw Permalink Normal View History

2025-01-06 10:57:38 +07:00
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.http import request, route
from odoo.addons.website_sale.controllers.delivery import Delivery
class InStoreDelivery(Delivery):
@route()
def website_sale_get_pickup_locations(self, zip_code=None, **kwargs):
""" Override of `website_sale` to set the pickup in store delivery method on the order in
order to retrieve pickup locations when called from the the product page.
"""
if kwargs.get('product_id'): # Called from the product page.
order_sudo = request.website.sale_get_order(force_create=True)
in_store_dm = request.website.sudo().in_store_dm_id
if order_sudo.carrier_id.delivery_type != 'in_store':
order_sudo.set_delivery_line(in_store_dm, in_store_dm.product_id.list_price)
return super().website_sale_get_pickup_locations(zip_code, **kwargs)
@route('/shop/set_click_and_collect_location', type='json', auth='public', website=True)
def shop_set_click_and_collect_location(self, pickup_location_data):
""" Set the pickup location and the in-store delivery method on the current order.
This route is distinct from /website_sale/get_pickup_locations as the latter is only called
from the checkout page after the delivery method is selected.
:param str pickup_location_data: The JSON-formatted pickup location data.
:return: None
"""
order_sudo = request.website.sale_get_order()
if order_sudo.carrier_id.delivery_type != 'in_store':
in_store_dm = request.website.sudo().in_store_dm_id
order_sudo.set_delivery_line(in_store_dm, in_store_dm.product_id.list_price)
order_sudo._set_pickup_location(pickup_location_data)