diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js
index 19400b2fe93..c5cf1c77e5c 100644
--- a/addons/point_of_sale/static/src/js/models.js
+++ b/addons/point_of_sale/static/src/js/models.js
@@ -508,7 +508,7 @@ exports.PosModel = Backbone.Model.extend({
.then(function(){ load_model(index + 1); },
function(err){ loaded.reject(err); });
}catch(err){
- console.error(err.stack);
+ console.error(err.message, err.stack);
loaded.reject(err);
}
},function(err){
diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py
index ab5f0021931..81053c2ac82 100644
--- a/addons/website_sale/controllers/main.py
+++ b/addons/website_sale/controllers/main.py
@@ -369,8 +369,8 @@ class WebsiteSale(http.Controller):
def cart_update(self, product_id, add_qty=1, set_qty=0, **kw):
request.website.sale_get_order(force_create=1)._cart_update(
product_id=int(product_id),
- add_qty=float(add_qty),
- set_qty=float(set_qty),
+ add_qty=add_qty,
+ set_qty=set_qty,
attributes=self._filter_attributes(**kw),
)
return request.redirect("/shop/cart")
@@ -384,7 +384,6 @@ class WebsiteSale(http.Controller):
if order.state != 'draft':
request.website.sale_reset()
return {}
-
value = order._cart_update(product_id=product_id, line_id=line_id, add_qty=add_qty, set_qty=set_qty)
if not order.cart_quantity:
request.website.sale_reset()
diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py
index ea8a1914e3d..83189c95c9b 100644
--- a/addons/website_sale/models/sale_order.py
+++ b/addons/website_sale/models/sale_order.py
@@ -113,6 +113,17 @@ class SaleOrder(models.Model):
""" Add or set product quantity, add_qty can be negative """
self.ensure_one()
SaleOrderLineSudo = self.env['sale.order.line'].sudo()
+
+ try:
+ if add_qty:
+ add_qty = float(add_qty)
+ except ValueError:
+ add_qty = 1
+ try:
+ if set_qty:
+ set_qty = float(set_qty)
+ except ValueError:
+ set_qty = 0
quantity = 0
order_line = False
if self.state != 'draft':
diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js
index 25e6cabb0a0..57a6beecca0 100644
--- a/addons/website_sale/static/src/js/website_sale.js
+++ b/addons/website_sale/static/src/js/website_sale.js
@@ -133,6 +133,9 @@ odoo.define('website_sale.website_sale', function (require) {
return;
}
var value = parseInt($input.val() || 0, 10);
+ if (isNaN(value)) {
+ value = 1;
+ }
var $dom = $(this).closest('tr');
//var default_price = parseFloat($dom.find('.text-danger > span.oe_currency_value').text());
var $dom_optional = $dom.nextUntil(':not(.optional_product.info)');
@@ -151,7 +154,11 @@ odoo.define('website_sale.website_sale', function (require) {
'set_qty': value
}).then(function (data) {
$input.data('update_change', false);
- if (value !== parseInt($input.val() || 0, 10)) {
+ var check_value = parseInt($input.val() || 0, 10);
+ if (isNaN(check_value)) {
+ check_value = 1;
+ }
+ if (value !== check_value) {
$input.trigger('change');
return;
}
diff --git a/addons/website_sale_options/controllers/main.py b/addons/website_sale_options/controllers/main.py
index 4c9ba8e6502..1c84f9e460f 100644
--- a/addons/website_sale_options/controllers/main.py
+++ b/addons/website_sale_options/controllers/main.py
@@ -33,8 +33,8 @@ class WebsiteSaleOptions(WebsiteSale):
if add_qty or set_qty:
value = order._cart_update(
product_id=int(product_id),
- add_qty=int(add_qty),
- set_qty=int(set_qty),
+ add_qty=add_qty,
+ set_qty=set_qty,
attributes=attributes,
optional_product_ids=optional_product_ids
)
diff --git a/doc/cla/corporate/it-projects-llc.md b/doc/cla/corporate/it-projects-llc.md
new file mode 100644
index 00000000000..038323173c3
--- /dev/null
+++ b/doc/cla/corporate/it-projects-llc.md
@@ -0,0 +1,20 @@
+Russia, 2017-11-25
+
+IT-Projects LLC agrees to the terms of the Odoo Corporate Contributor License
+Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Ivan Yelizariev https://github.com/yelizariev
+
+List of contributors:
+
+Ivan Yelizariev yelizariev@it-projects.info https://github.com/yelizariev
+Ildar Nasyrov nasyrov@it-projects.info https://github.com/iledarn
+Ilmir Karamov karamov@it-projects.info https://github.com/ilmir-k
+Dinar Gabbasov gabbasov@it-projects.info https://github.com/GabbasovDinar
+Artyom Losev losev@it-projects.info https://github.com/ArtyomLosev
+Alexandr Kolushov kolushov@it-projects.info https://github.com/KolushovAlexandr
diff --git a/doc/cla/individual/adekock11.md b/doc/cla/individual/adekock11.md
new file mode 100644
index 00000000000..999190ef207
--- /dev/null
+++ b/doc/cla/individual/adekock11.md
@@ -0,0 +1,11 @@
+South Africa, 2017-11-25
+
+I hereby agree to the terms of the Odoo Individual Contributor License
+Agreement v1.0.
+
+I declare that I am authorized and able to make this agreement and sign this
+declaration.
+
+Signed,
+
+Andre de Kock adekock11@gmail.com https://github.com/adekock11
diff --git a/odoo/addons/base/res/res_currency_data.xml b/odoo/addons/base/res/res_currency_data.xml
index a39d049ffe1..8b108fa978d 100644
--- a/odoo/addons/base/res/res_currency_data.xml
+++ b/odoo/addons/base/res/res_currency_data.xml
@@ -266,6 +266,7 @@
ZAR
R
0.01
+ before