diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 283c37a4abd..e3e4a105f82 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -1046,16 +1046,21 @@ class WebsiteSale(http.Controller): return partner_id def values_preprocess(self, values): - """ Convert the values for many2one fields to integer since they are used as IDs. - - :param dict values: partner fields to pre-process. - :return dict: partner fields pre-processed. - """ + new_values = dict() partner_fields = request.env['res.partner']._fields - return { - k: (bool(v) and int(v)) if k in partner_fields and partner_fields[k].type == 'many2one' else v - for k, v in values.items() - } + + for k, v in values.items(): + # Convert the values for many2one fields to integer since they are used as IDs + if k in partner_fields and partner_fields[k].type == 'many2one': + new_values[k] = bool(v) and int(v) + # Store empty fields as `False` instead of empty strings `''` for consistency with other applications like + # Contacts. + elif v == '': + new_values[k] = False + else: + new_values[k] = v + + return new_values def values_postprocess(self, order, mode, values, errors, error_msg): new_values = {} @@ -1152,7 +1157,7 @@ class WebsiteSale(http.Controller): (not order.only_services and (mode[0] == 'edit' and '/shop/checkout' or '/shop/address')) # We need to update the pricelist(by the one selected by the customer), because onchange_partner reset it # We only need to update the pricelist when it is not redirected to /confirm_order - if kw.get('callback', '') != '/shop/confirm_order': + if kw.get('callback', False) != '/shop/confirm_order': request.website.sale_get_order(update_pricelist=True) elif mode[1] == 'shipping': order.partner_shipping_id = partner_id