[FIX] website_sale : check mandatory fields

If a partner have two delivery address, one full filled, an other with missing
fields.

During the shopping (the first delivery address is auto selected), if the
partner go back in /shop/address to select the second address.

Then go to /shop/confirm_order, there no checks.

closes odoo/odoo#69901

X-original-commit: f8c8418bdd5b9d27b33fea3c63511297a231aa93
Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
This commit is contained in:
Florent de Labarre
2021-04-27 09:47:44 +00:00
committed by Jeremy Kersten
parent 5a499ecf11
commit a39db65c8c
+14 -9
View File
@@ -505,6 +505,15 @@ class WebsiteSale(http.Controller):
# Checkout
# ------------------------------------------------------
def checkout_check_address(self, order):
billing_fields_required = self._get_mandatory_fields_billing(order.partner_id.country_id.id)
if not all(order.partner_id.read(billing_fields_required)[0].values()):
return request.redirect('/shop/address?partner_id=%d' % order.partner_id.id)
shipping_fields_required = self._get_mandatory_fields_shipping(order.partner_shipping_id.country_id.id)
if not all(order.partner_shipping_id.read(shipping_fields_required)[0].values()):
return request.redirect('/shop/address?partner_id=%d' % order.partner_shipping_id.id)
def checkout_redirection(self, order):
# must have a draft sales order with lines at this point, otherwise reset
if not order or order.state != 'draft':
@@ -788,13 +797,9 @@ class WebsiteSale(http.Controller):
if order.partner_id.id == request.website.user_id.sudo().partner_id.id:
return request.redirect('/shop/address')
billing_fields_required = self._get_mandatory_fields_billing(order.partner_id.country_id.id)
if not all(order.partner_id.read(billing_fields_required)[0].values()):
return request.redirect('/shop/address?partner_id=%d' % order.partner_id.id)
shipping_fields_required = self._get_mandatory_fields_shipping(order.partner_shipping_id.country_id.id)
if not all(order.partner_shipping_id.read(shipping_fields_required)[0].values()):
return request.redirect('/shop/address?partner_id=%d' % order.partner_shipping_id.id)
redirection = self.checkout_check_address(order)
if redirection:
return redirection
values = self.checkout_values(**post)
@@ -812,7 +817,7 @@ class WebsiteSale(http.Controller):
def confirm_order(self, **post):
order = request.website.sale_get_order()
redirection = self.checkout_redirection(order)
redirection = self.checkout_redirection(order) or self.checkout_check_address(order)
if redirection:
return redirection
@@ -920,7 +925,7 @@ class WebsiteSale(http.Controller):
paying / canceling
"""
order = request.website.sale_get_order()
redirection = self.checkout_redirection(order)
redirection = self.checkout_redirection(order) or self.checkout_check_address(order)
if redirection:
return redirection