@@ -21,5 +20,4 @@
-
-
+
diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js
index 6805beab280..52c58c09012 100644
--- a/addons/website_sale/static/src/js/website_sale.js
+++ b/addons/website_sale/static/src/js/website_sale.js
@@ -333,18 +333,18 @@ $('.oe_website_sale').each(function () {
});
$(oe_website_sale).on('change', "select[name='country_id']", function () {
- var $select = $("select[name='state_id']");
+ var $select = $("select[name='state_id']:enabled");
$select.find("option:not(:first)").hide();
var nb = $select.find("option[data-country_id="+($(this).val() || 0)+"]").show().size();
- $select.parent().toggle(nb>1);
+ $select.parent().toggle(nb>=1);
});
$(oe_website_sale).find("select[name='country_id']").change();
$(oe_website_sale).on('change', "select[name='shipping_country_id']", function () {
- var $select = $("select[name='shipping_state_id']");
+ var $select = $("select[name='shipping_state_id']:enabled");
$select.find("option:not(:first)").hide();
var nb = $select.find("option[data-country_id="+($(this).val() || 0)+"]").show().size();
- $select.parent().toggle(nb>1);
+ $select.parent().toggle(nb>=1);
});
$(oe_website_sale).find("select[name='shipping_country_id']").change();
});
diff --git a/addons/website_sale_delivery/__openerp__.py b/addons/website_sale_delivery/__openerp__.py
index f843d0deac5..c05689e506f 100644
--- a/addons/website_sale_delivery/__openerp__.py
+++ b/addons/website_sale_delivery/__openerp__.py
@@ -13,6 +13,7 @@ Delivery Costs
'views/website_sale_delivery.xml',
'views/website_sale_delivery_view.xml',
'security/ir.model.access.csv',
+ 'demo/website_sale_delivery_data.xml'
],
'demo': [
'data/website_sale_delivery_demo.xml'
diff --git a/addons/website_sale_delivery/controllers/main.py b/addons/website_sale_delivery/controllers/main.py
index 15bc881c364..42b6214d128 100644
--- a/addons/website_sale_delivery/controllers/main.py
+++ b/addons/website_sale_delivery/controllers/main.py
@@ -26,3 +26,7 @@ class website_sale(openerp.addons.website_sale.controllers.main.website_sale):
""" Transforms a list of order lines into a dict for google analytics """
order_lines_not_delivery = [line for line in order_lines if not line.is_delivery]
return super(website_sale, self).order_lines_2_google_api(order_lines_not_delivery)
+
+ def checkout_values(self, data=None):
+ values = super(website_sale, self).checkout_values(data)
+ return request.env['sale.order']._get_shipping_country(values)
diff --git a/addons/website_sale_delivery/demo/website_sale_delivery_data.xml b/addons/website_sale_delivery/demo/website_sale_delivery_data.xml
new file mode 100644
index 00000000000..d77522880d0
--- /dev/null
+++ b/addons/website_sale_delivery/demo/website_sale_delivery_data.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/addons/website_sale_delivery/models/sale_order.py b/addons/website_sale_delivery/models/sale_order.py
index 7416bfc8007..d8fbeb38f05 100644
--- a/addons/website_sale_delivery/models/sale_order.py
+++ b/addons/website_sale_delivery/models/sale_order.py
@@ -12,7 +12,7 @@ class delivery_carrier(orm.Model):
_inherit = ['delivery.carrier', 'website.published.mixin']
_columns = {
- 'website_description': fields.text('Description for Online Quotations'),
+ 'website_description': fields.related('product_id', 'description_sale', type="text", string='Description for Online Quotations'),
}
_defaults = {
'website_published': False
@@ -91,8 +91,8 @@ class SaleOrder(orm.Model):
carrier_ids.insert(0, carrier_id)
if force_carrier_id or not carrier_id or not carrier_id in carrier_ids:
for delivery_id in carrier_ids:
- grid_id = carrier_obj.grid_get(cr, SUPERUSER_ID, [delivery_id], order.partner_shipping_id.id)
- if grid_id:
+ carrier = carrier_obj.verify_carrier(cr, SUPERUSER_ID, [delivery_id], order.partner_shipping_id)
+ if carrier:
carrier_id = delivery_id
break
order.write({'carrier_id': carrier_id})
@@ -157,3 +157,25 @@ class SaleOrder(orm.Model):
self._check_carrier_quotation(cr, uid, sale_order, context=context)
return values
+
+ def _get_shipping_country(self, cr, uid, values, context=None):
+ country_ids = set()
+ state_ids = set()
+ values['shipping_countries'] = values['countries']
+ values['shipping_states'] = values['states']
+
+ DeliveryCarrier = self.pool['delivery.carrier']
+ delivery_carrier_ids = DeliveryCarrier.search(cr, SUPERUSER_ID, [('website_published', '=', True)], context=context)
+ for carrier in DeliveryCarrier.browse(cr, SUPERUSER_ID, delivery_carrier_ids, context):
+ if not carrier.country_ids and not carrier.state_ids:
+ return values
+ # Authorized shipping countries
+ country_ids = country_ids|set(carrier.country_ids.ids)
+ # Authorized shipping countries without any state restriction
+ state_country_ids = [country.id for country in carrier.country_ids if country.id not in carrier.state_ids.mapped('country_id.id')]
+ # Authorized shipping states + all states from shipping countries without any state restriction
+ state_ids = state_ids|set(carrier.state_ids.ids)|set(values['states'].filtered(lambda r: r.country_id.id in state_country_ids).ids)
+
+ values['shipping_countries'] = values['countries'].filtered(lambda r: r.id in list(country_ids))
+ values['shipping_states'] = values['states'].filtered(lambda r: r.id in list(state_ids))
+ return values
diff --git a/addons/website_sale_delivery/static/src/js/website_sale_delivery.js b/addons/website_sale_delivery/static/src/js/website_sale_delivery.js
index d18b6516383..46caab18e0e 100644
--- a/addons/website_sale_delivery/static/src/js/website_sale_delivery.js
+++ b/addons/website_sale_delivery/static/src/js/website_sale_delivery.js
@@ -7,4 +7,19 @@ $(document).ready(function () {
window.location.href = '/shop/payment?carrier_id=' + carrier_id;
});
+ $(".oe_website_sale select[name='shipping_id']").on('change', function () {
+ var value = $(this).val();
+ var $provider_free = $("select[name='country_id']:not(.o_provider_restricted), select[name='state_id']:not(.o_provider_restricted)");
+ var $provider_restricted = $("select[name='country_id'].o_provider_restricted, select[name='state_id'].o_provider_restricted");
+ if (value == 0) {
+ // Ship to the same address : only show shipping countries available for billing
+ $provider_free.hide().attr('disabled', true);
+ $provider_restricted.show().attr('disabled', false).change();
+ } else {
+ // Create a new address : show all countries available for billing
+ $provider_free.show().attr('disabled', false).change();
+ $provider_restricted.hide().attr('disabled', true);
+ }
+ });
+
});
diff --git a/addons/website_sale_delivery/views/website_sale_delivery.xml b/addons/website_sale_delivery/views/website_sale_delivery.xml
index 0c33577cea3..9708cd0d335 100644
--- a/addons/website_sale_delivery/views/website_sale_delivery.xml
+++ b/addons/website_sale_delivery/views/website_sale_delivery.xml
@@ -51,5 +51,39 @@
+
+
+
+ not shipping_id and 'disabled' or ''
+ not shipping_id and 'display: none' or ''
+
+
+
+ Country...
+
+
+
+
+
+
+ not shipping_id and 'disabled' or ''
+ not shipping_id and 'display: none' or ''
+
+
+
+ Select...
+
+
+
+
+
+
+ shipping_countries
+
+
+ shipping_states
+
+
+
diff --git a/addons/website_sale_delivery/views/website_sale_delivery_view.xml b/addons/website_sale_delivery/views/website_sale_delivery_view.xml
index 58f26f7d39e..12a48b96f85 100644
--- a/addons/website_sale_delivery/views/website_sale_delivery_view.xml
+++ b/addons/website_sale_delivery/views/website_sale_delivery_view.xml
@@ -13,11 +13,11 @@