[IMP] website_sale: checkout + action return
[odoo/odoo.git] / addons / website_sale / static / src / js / ecommerce.js
index 4b92b54..818e5e7 100644 (file)
@@ -1,69 +1,46 @@
-$(document).ready(function (){
-    $('.oe_ecommerce').on('click', '.oe_product .btn-success,.oe_product .btn-primary, .oe_product .btn-inverse, .oe_product_detail .btn-success,.oe_product_detail .btn-primary, .oe_product_detail .btn-inverse', function (e) {
-        var mycart = !!$('.oe_ecommerce .oe_mycart').size();
+$(document).ready(function () {
+    $('.oe_ecommerce').on('click', '.oe_product .btn, .oe_product_detail .btn', function (e) {
         var $button = $(e.currentTarget);
+        var $product = $button.parents('.oe_product:first, .oe_product_detail:first');
         var link = $button.hasClass('btn-inverse') ? '/shop/remove_cart' : '/shop/add_cart';
-        var $add = $button.parent().find('.btn-success,.btn-primary');
-        var $remove = $button.parent().find('.btn-inverse');
+        var $add = $product.find('.btn-success,.btn-primary');
+        var $remove = $product.find('.btn-inverse');
 
         $.get(link, {'product_id': $button.data('id')}, function (result) {
             var result = JSON.parse(result);
             var quantity = parseInt(result.quantity);
-            $add.find('.oe_quantity').html(quantity);
-            $add.toggleClass('btn-primary', !quantity).toggleClass('btn-success', !!quantity);
+            $add.find('.oe_quantity')
+                .html(quantity);
+            $add.toggleClass('btn-primary', !quantity)
+                .toggleClass('btn-success', !!quantity);
             $remove.toggleClass('oe_hidden', !quantity);
-            if (mycart && !quantity) {
-                $button.parents('.oe_product:first').remove()
+            if ($('.oe_mycart').size() && !quantity) {
+                $product.remove()
             }
             $('.oe_ecommerce .oe_total').replaceWith(''+result.totalHTML);
         });
     });
-});
-
 
-openerp.website = function(instance) {
 
-    instance.website.sale = {};
-    instance.website.sale.Checkout = instance.web.Widget.extend({
-        template: 'Website.sale.Checkout',
-        events: {
-            'click .oe_error_payment': 'error_payment',
-        },
-        start: function() {
-            var self = this;
-            this._super.apply(this, arguments);
-            this.$('input[name="shipping_different"]').on('change', function (ev) {
-                self.$('.oe_shipping').toggle();
-            });
-        },
-        get_payment_image: function () {
-            // model: portal.payment.acquirer => form_template
-            // see Setting => Accounting => Bank & Cash => Configure payment acquiring methods
-        },
-        save: function () {
-        },
-        error_payment: function () {
-            alert("error_payment");
-        },
+    var $checkout = $(".oe_ecommerce .oe_checkout");
+    $(".oe_ecommerce input[name='shipping_different']").change(function() {
+        $(".oe_ecommerce .js_shipping").toggle();
+    });
+    $(".oe_ecommerce .js_error_payment").click(function(e) {
+        var values = {};
+        $checkout.find(".js_inputs:not(:hidden) input:not(:checkbox), .js_signin_modal input").each(function() {
+            values[$(this).attr("name")] = $(this).val();
+        });
+        $checkout.find("input").css("border", "");
+        $.post('/shop/confirm_order', values, function (result) {
+            var result = JSON.parse(result);
+            if (result.error.length) {
+                $inputs = $checkout.find("input[name='" + result.error.join("'], input[name='") + "']");
+                $inputs.css("border", "1px solid #dd0000");
+                $inputs.first().focus();
+            } else {
+                var $form = $(e.currentTarget).parent().find("input[name='submit']").click();
+            }
+        });
     });
-};
-
-
-$(document).ready(function () {
-    if (!$('.oe_checkout').size())
-        return;
-    // Init headless webclient
-    // TODO: Webclient research : use iframe embedding mode
-    //       Meanwhile, let's HACK !!!
-    var s = new openerp.init(['web', 'website']);
-    s.web.WebClient.bind_hashchange = s.web.WebClient.show_common = s.web.blockUI = s.web.unblockUI = function() {};
-    s.web.WebClient.include({ do_push_state: function() {} });
-    var wc = new s.web.WebClient();
-    wc.start();
-    var instance = openerp.instances[wc.session.name];
-    // Another hack since we have no callback when webclient has loaded modules.
-    instance.web.qweb.add_template('/website_sale/static/src/xml/ecommerce.xml');
-
-    var editor = new instance.website.sale.Checkout(instance.webclient);
-    editor.appendTo($('.oe_checkout'));
 });
\ No newline at end of file