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

56 lines
2.5 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import _
from odoo.http import request
from odoo.addons.website_sale.controllers.main import WebsiteSale
class WebsiteSaleCollect(WebsiteSale):
def _prepare_product_values(self, product, category, search, **kwargs):
""" Override of `website_sale` to include the selected pickup location and zip code. """
res = super()._prepare_product_values(product, category, search, **kwargs)
if request.website.sudo().in_store_dm_id:
order_sudo = request.website.sale_get_order()
if (
order_sudo.carrier_id.delivery_type == 'in_store'
and order_sudo.pickup_location_data
):
res['selected_wh_location'] = order_sudo.pickup_location_data
res['zip_code'] = ( # Define the zip code.
order_sudo.partner_shipping_id.zip
or res.get('selected_wh_location', {}).get('zip_code')
or request.geoip.postal.code
)
return res
def _prepare_checkout_page_values(self, order_sudo, **query_params):
""" Override of `website_sale` to include the unavailable products for the selected pickup
location. """
res = super()._prepare_checkout_page_values(order_sudo, **query_params)
if order_sudo.carrier_id.delivery_type == 'in_store' and order_sudo.pickup_location_data:
res['unavailable_order_lines'] = order_sudo._get_unavailable_order_lines(
order_sudo.pickup_location_data.get('id')
)
return res
def _get_shop_payment_errors(self, order):
""" Override of `website_sale` to includes errors if no pickup location is selected or some
products are unavailable. """
errors = super()._get_shop_payment_errors(order)
if order._has_deliverable_products() and order.carrier_id.delivery_type == 'in_store':
if not order.pickup_location_data:
errors.append((
_("Sorry, we are unable to ship your order."),
_("Please choose a store to collect your order."),
))
else:
selected_wh_id = order.pickup_location_data['id']
if not order._is_in_stock(selected_wh_id):
errors.append((
_("Sorry, we are unable to ship your order."),
_("Some products are not available in the selected store."),
))
return errors