blob: 0c201a82a4434adc4a2bc90d3bfd83009648a17a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
odoo.define('website_sale_stock.VariantMixin', function (require) {
'use strict';
var VariantMixin = require('sale.VariantMixin');
var publicWidget = require('web.public.widget');
var ajax = require('web.ajax');
var core = require('web.core');
var QWeb = core.qweb;
var xml_load = ajax.loadXML(
'/website_sale_stock/static/src/xml/website_sale_stock_product_availability.xml',
QWeb
);
/**
* Addition to the variant_mixin._onChangeCombination
*
* This will prevent the user from selecting a quantity that is not available in the
* stock for that product.
*
* It will also display various info/warning messages regarding the select product's stock.
*
* This behavior is only applied for the web shop (and not on the SO form)
* and only for the main product.
*
* @param {MouseEvent} ev
* @param {$.Element} $parent
* @param {Array} combination
*/
VariantMixin._onChangeCombinationStock = function (ev, $parent, combination) {
var product_id = 0;
// needed for list view of variants
if ($parent.find('input.product_id:checked').length) {
product_id = $parent.find('input.product_id:checked').val();
} else {
product_id = $parent.find('.product_id').val();
}
var isMainProduct = combination.product_id &&
($parent.is('.js_main_product') || $parent.is('.main_product')) &&
combination.product_id === parseInt(product_id);
if (!this.isWebsite || !isMainProduct){
return;
}
var qty = $parent.find('input[name="add_qty"]').val();
$parent.find('#add_to_cart').removeClass('out_of_stock');
$parent.find('#buy_now').removeClass('out_of_stock');
if (combination.product_type === 'product' && _.contains(['always', 'threshold'], combination.inventory_availability)) {
combination.virtual_available -= parseInt(combination.cart_qty);
if (combination.virtual_available < 0) {
combination.virtual_available = 0;
}
// Handle case when manually write in input
if (qty > combination.virtual_available) {
var $input_add_qty = $parent.find('input[name="add_qty"]');
qty = combination.virtual_available || 1;
$input_add_qty.val(qty);
}
if (qty > combination.virtual_available
|| combination.virtual_available < 1 || qty < 1) {
$parent.find('#add_to_cart').addClass('disabled out_of_stock');
$parent.find('#buy_now').addClass('disabled out_of_stock');
}
}
xml_load.then(function () {
$('.oe_website_sale')
.find('.availability_message_' + combination.product_template)
.remove();
var $message = $(QWeb.render(
'website_sale_stock.product_availability',
combination
));
$('div.availability_messages').html($message);
});
};
publicWidget.registry.WebsiteSale.include({
/**
* Adds the stock checking to the regular _onChangeCombination method
* @override
*/
_onChangeCombination: function (){
this._super.apply(this, arguments);
VariantMixin._onChangeCombinationStock.apply(this, arguments);
}
});
return VariantMixin;
});
|