From: Denis Ledoux Date: Wed, 8 Oct 2014 13:37:21 +0000 (+0200) Subject: [FIX] website_sale*: handle no delivery methods in website X-Git-Tag: InsPy_8.0_01~4^2~53 X-Git-Url: http://git.inspyration.org/?a=commitdiff_plain;h=38668fd404a39ed135d5c9aede884f24849e1f09;p=odoo%2Fodoo.git [FIX] website_sale*: handle no delivery methods in website Display a user friendly message instead of crashing when there is not delivery method available for a specific order --- diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index a5ef981..7e0412e 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -595,6 +595,7 @@ class website_sale(http.Controller): """ cr, uid, context = request.cr, request.uid, request.context payment_obj = request.registry.get('payment.acquirer') + sale_order_obj = request.registry.get('sale.order') order = request.website.sale_get_order(context=context) @@ -612,26 +613,28 @@ class website_sale(http.Controller): values = { 'order': request.registry['sale.order'].browse(cr, SUPERUSER_ID, order.id, context=context) } - values.update(request.registry.get('sale.order')._get_website_data(cr, uid, order, context)) + values['errors'] = sale_order_obj._get_errors(cr, uid, order, context=context) + values.update(sale_order_obj._get_website_data(cr, uid, order, context)) # fetch all registered payment means # if tx: # acquirer_ids = [tx.acquirer_id.id] # else: - acquirer_ids = payment_obj.search(cr, SUPERUSER_ID, [('website_published', '=', True), ('company_id', '=', order.company_id.id)], context=context) - values['acquirers'] = list(payment_obj.browse(cr, uid, acquirer_ids, context=context)) - render_ctx = dict(context, submit_class='btn btn-primary', submit_txt=_('Pay Now')) - for acquirer in values['acquirers']: - acquirer.button = payment_obj.render( - cr, SUPERUSER_ID, acquirer.id, - order.name, - order.amount_total, - order.pricelist_id.currency_id.id, - partner_id=shipping_partner_id, - tx_values={ - 'return_url': '/shop/payment/validate', - }, - context=render_ctx) + if not values['errors']: + acquirer_ids = payment_obj.search(cr, SUPERUSER_ID, [('website_published', '=', True), ('company_id', '=', order.company_id.id)], context=context) + values['acquirers'] = list(payment_obj.browse(cr, uid, acquirer_ids, context=context)) + render_ctx = dict(context, submit_class='btn btn-primary', submit_txt=_('Pay Now')) + for acquirer in values['acquirers']: + acquirer.button = payment_obj.render( + cr, SUPERUSER_ID, acquirer.id, + order.name, + order.amount_total, + order.pricelist_id.currency_id.id, + partner_id=shipping_partner_id, + tx_values={ + 'return_url': '/shop/payment/validate', + }, + context=render_ctx) return request.website.render("website_sale.payment", values) diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index 243ec3f..dba5753 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -1017,6 +1017,14 @@

Validate Order

+
+ +
+

+ +
+
+
diff --git a/addons/website_sale_delivery/models/sale_order.py b/addons/website_sale_delivery/models/sale_order.py index ebea788..6e71d3f 100644 --- a/addons/website_sale_delivery/models/sale_order.py +++ b/addons/website_sale_delivery/models/sale_order.py @@ -95,10 +95,9 @@ class SaleOrder(orm.Model): # Following loop is done to avoid displaying delivery methods who are not available for this order # This can surely be done in a more efficient way, but at the moment, it mimics the way it's # done in delivery_set method of sale.py, from delivery module - for delivery_id in list(delivery_ids): - grid_id = carrier_obj.grid_get(cr, SUPERUSER_ID, [delivery_id], order.partner_shipping_id.id) - if not grid_id: - delivery_ids.remove(delivery_id) + for delivery_id in carrier_obj.browse(cr, SUPERUSER_ID, delivery_ids, context=dict(context, order_id=order.id)): + if not delivery_id.available: + delivery_ids.remove(delivery_id.id) return delivery_ids def _get_errors(self, cr, uid, order, context=None):