[FIX] website_sale, website_sale_delivery, delivery: price computation on quantity...
[odoo/odoo.git] / addons / website_sale / static / src / js / website_sale.js
1 $(document).ready(function () {
2     var $shippingDifferent = $(".oe_website_sale input[name='shipping_different']");
3     if ($shippingDifferent.is(':checked')) {
4        $(".oe_website_sale .js_shipping").show();
5     }
6     $shippingDifferent.change(function () {
7         $(".oe_website_sale .js_shipping").toggle();
8     });
9
10     // change for css
11     $(document).on('mouseup', '.js_publish', function (ev) {
12         $(ev.currentTarget).parents(".thumbnail").toggleClass("disabled");
13     });
14
15     function set_my_cart_quantity(qty) {
16         var $q = $(".my_cart_quantity");
17         $q.parent().parent().removeClass("hidden", !qty);
18         $q.html(qty)
19             .hide()
20             .fadeIn(600);
21     }
22
23     $(".oe_website_sale .oe_mycart input.js_quantity").change(function (ev) {
24         var $input = $(this);
25         var $link = $(ev.currentTarget);
26         var value = parseInt($input.val(), 10);
27         if (isNaN(value)) value = 0;
28         openerp.jsonRpc("/shop/set_cart_json/", 'call', {'order_line_id': $input.data('id'), 'set_number': value})
29             .then(function (data) {
30                 if (!data[0]) {
31                     location.reload();
32                     return;
33                 }
34                 set_my_cart_quantity(data[1]);
35                 $link.parents(".input-group:first").find(".js_quantity").val(data[0]);
36                 $('#mycart_total').replaceWith(data[3]);
37             });
38     });
39
40     // hack to add and rome from cart with json
41     $('.oe_website_sale a.js_add_cart_json').on('click', function (ev) {
42         ev.preventDefault();
43         var $link = $(ev.currentTarget);
44         var href = $link.attr("href");
45
46         var add_cart = href.match(/add_cart\/([0-9]+)/);
47         var product_id = add_cart && +add_cart[1] || false;
48
49         var change_cart = href.match(/change_cart\/([0-9]+)/);
50         var order_line_id = change_cart && +change_cart[1] || false;
51         openerp.jsonRpc("/shop/add_cart_json/", 'call', {
52                 'product_id': product_id,
53                 'order_line_id': order_line_id,
54                 'remove': $link.is('[href*="remove"]')})
55             .then(function (data) {
56                 if (!data[0]) {
57                     location.reload();
58                 }
59                 set_my_cart_quantity(data[1]);
60                 $link.parents(".input-group:first").find(".js_quantity").val(data[0]);
61                 $('#mycart_total').replaceWith(data[3]);
62             });
63         return false;
64     });
65
66     $('.a-submit').on('click', function () {
67         $(this).closest('form').submit();
68     });
69
70     // change price when they are variants
71     $('form.js_add_cart_json label').on('mouseup', function (ev) {
72         ev.preventDefault();
73         var $label = $(ev.currentTarget);
74         var $price = $label.parent("form").find(".oe_price .oe_currency_value");
75         if (!$price.data("price")) {
76             $price.data("price", parseFloat($price.text()));
77         }
78         $price.html($price.data("price")+parseFloat($label.find(".badge span").text() || 0));
79     });
80
81     // attributes
82
83     var js_slider_time = null;
84     var $form = $("form.attributes");
85     $form.on("change", "label input", function () {
86         clearTimeout(js_slider_time);
87         $form.submit();
88     });
89     $(".js_slider", $form).each(function() {
90         var $slide = $(this);
91         var $slider = $('<div>'+
92                 '<input type="hidden" name="att-'+$slide.data("id")+'-minmem" value="'+$slide.data("min")+'"/>'+
93                 '<input type="hidden" name="att-'+$slide.data("id")+'-maxmem" value="'+$slide.data("max")+'"/>'+
94             '</div>');
95         var $min = $("<input readonly name='att-"+$slide.data("id")+"-min'/>")
96             .css("border", "0").css("width", "50%")
97             .val($slide.data("min"));
98         var $max = $("<input readonly name='att-"+$slide.data("id")+"-max'/>")
99             .css("border", "0").css("width", "50%").css("text-align", "right")
100             .val($slide.data("max"));
101         $slide.append($min);
102         $slide.append($max);
103         $slide.append($slider);
104         $slider.slider({
105             range: true,
106             min: +$slide.data("min"),
107             max: +$slide.data("max"),
108             values: [
109                 $slide.data("value-min") ? +$slide.data("value-min") : +$slide.data("min"),
110                 $slide.data("value-max") ? +$slide.data("value-max") : +$slide.data("max")
111             ],
112             change: function( event, ui ) {
113                 $min.val( ui.values[ 0 ] );
114                 $max.val( ui.values[ 1 ] );
115                 $form.submit();
116             },
117             slide: function( event, ui ) {
118                 $min.val( ui.values[ 0 ] );
119                 $max.val( ui.values[ 1 ] );
120             }
121         });
122         $min.val( $slider.slider( "values", 0 ) );
123         $max.val( $slider.slider( "values", 1 ) );
124     });
125 });