diff --git a/addons/ecommerce/controllers/main.py b/addons/ecommerce/controllers/main.py index 91ff18c2a6e..656aaa39e7b 100644 --- a/addons/ecommerce/controllers/main.py +++ b/addons/ecommerce/controllers/main.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import openerp +import simplejson from openerp.addons.web import http from openerp.addons.web.http import request from werkzeug.exceptions import NotFound @@ -16,34 +17,45 @@ class Ecommerce(http.Controller): uid = request.session._uid except http.SessionExpiredException: uid = openerp.SUPERUSER_ID - partner_id = request.session.get('partner_id') or request.registry.get('res.users').browse(cr, uid, uid).partner_id.id + + partner_id = request.session.variables.get('ecommerce_partner_id', False) + if not partner_id and uid != 1: + partner_id = request.registry.get('res.users').browse(cr, uid, uid).partner_id.id + request.session.variables['ecommerce_partner_id'] = partner_id + return (cr, uid, partner_id) def get_values(self): cr, uid, partner_id = self.get_cr_uid() order_obj = request.registry.get('sale.order') + category_obj = request.registry.get('pos.category') context = {} - if not request.session.get('ecommerce'): + order_id = request.session.variables.get('ecommerce') + # check if order allready exists + try: + order_obj.browse(cr, uid, order_id).pricelist_id + except: + order_id = None + + if not order_id: fields = [k for k, v in order_obj._columns.items()] order_value = order_obj.default_get(cr, uid, fields, context=context) - order_value['partner_id'] = partner_id + order_value['partner_id'] = partner_id or request.registry.get('res.users').browse(cr, uid, uid).partner_id.id order_value.update(order_obj.onchange_partner_id(cr, uid, [], uid, context=context)['value']) order_id = order_obj.create(cr, uid, order_value, context=context) - request.session['ecommerce'] = order_id + request.session.variables['ecommerce'] = order_id - cart = {} - order = order_obj.browse(cr, uid, request.session.get('ecommerce')) - for line in order.order_line: - cart[line.product_id.id] = {'product_id': line.product_id.id, 'quantity': int(line.product_uom_qty)} + category_ids = category_obj.search(cr, uid, [('parent_id', '=', False)]) values = { + 'temp': 0, 'request': request, 'registry': request.registry, 'cr': cr, 'uid': uid, - 'cart': cart, - 'order': order, + 'order': order_obj.browse(cr, uid, order_id), + 'categories': category_obj.browse(cr, uid, category_ids), } return values @@ -72,86 +84,79 @@ class Ecommerce(http.Controller): cr, uid, partner_id = self.get_cr_uid() product_id = product_id and int(product_id) or 0 - category_obj = request.registry.get('pos.category') product_obj = request.registry.get('product.product') - category_ids = category_obj.search(cr, uid, [('parent_id', '=', False)]) values.update({ - 'categories': category_obj.browse(cr, uid, category_ids), 'product': product_obj.browse(cr, uid, product_id), }) html = request.registry.get("ir.ui.view").render(cr, uid, "ecommerce.product", values) return html @http.route(['/shop/my_cart'], type='http', auth="db") - def my_cart(self, cat_id=0, offset=0): - values = self.get_values() + def my_cart(self, offset=0): cr, uid, partner_id = self.get_cr_uid() - - cat_id = cat_id and int(cat_id) or 0 - category_obj = request.registry.get('pos.category') - product_obj = request.registry.get('product.product') - - category_ids = category_obj.search(cr, uid, [('parent_id', '=', False)]) - product_ids = [product for product in values['cart']] - - values.update({ - 'categories': category_obj.browse(cr, uid, category_ids), - }) - html = request.registry.get("ir.ui.view").render(cr, uid, "ecommerce.my_cart", values) + html = request.registry.get("ir.ui.view").render(cr, uid, "ecommerce.my_cart", self.get_values()) return html @http.route(['/shop/add_cart'], type='http', auth="db") def add_cart(self, product_id=0, remove=False): cr, uid, partner_id = self.get_cr_uid() + values = self.get_values() context = {} order_obj = request.registry.get('sale.order') order_line_obj = request.registry.get('sale.order.line') product_id = product_id and int(product_id) or 0 - order_id = request.session.get('ecommerce') - order = order_obj.browse(cr, uid, order_id, context=context) + order = values['order'] + + quantity = 0 # values initialisation - order_line_ids = order_line_obj.search(cr, uid, [('order_id', '=', order_id), ('product_id', '=', product_id)], context=context) + order_line_ids = order_line_obj.search(cr, uid, [('order_id', '=', order.id), ('product_id', '=', product_id)], context=context) values = {} if order_line_ids: order_line = order_line_obj.read(cr, uid, order_line_ids, [], context=context)[0] quantity = order_line['product_uom_qty'] + (remove and -1 or 1) if quantity <= 0: order_line_obj.unlink(cr, uid, order_line_ids, context=context) - return "0" else: fields = [k for k, v in order_line_obj._columns.items()] values = order_line_obj.default_get(cr, uid, fields, context=context) quantity = 1 values['product_uom_qty'] = quantity values['product_id'] = product_id - values['order_id'] = order_id + values['order_id'] = order.id # change and record value - pricelist_id = order.pricelist_id and order.pricelist_id.id or False - values.update(order_line_obj.product_id_change(cr, uid, [], pricelist_id, product_id, partner_id=partner_id, context=context)['value']) - if order_line_ids: - order_line_obj.write(cr, uid, order_line_ids, values, context=context) - else: - order_line_id = order_line_obj.create(cr, uid, values, context=context) - order.write({'order_line': [(4, order_line_id)]}, context=context) + if quantity: + pricelist_id = order.pricelist_id and order.pricelist_id.id or False + values.update(order_line_obj.product_id_change(cr, uid, [], pricelist_id, product_id, partner_id=partner_id, context=context)['value']) + if order_line_ids: + order_line_obj.write(cr, uid, order_line_ids, values, context=context) + else: + order_line_id = order_line_obj.create(cr, uid, values, context=context) + order.write({'order_line': [(4, order_line_id)]}, context=context) - return "%s" % values['product_uom_qty'] + html = request.registry.get("ir.ui.view").render(cr, uid, "ecommerce.total", self.get_values()) + + return simplejson.dumps({"quantity": quantity, "totalHTML": html}) @http.route(['/shop/remove_cart'], type='http', auth="db") def remove_cart(self, product_id=0): return self.add_cart(product_id=product_id, remove=True) - @http.route(['/shop/customer'], type='http', auth="db") - def confirm_cart(self): + @http.route(['/shop/confirm_cart'], type='http', auth="db") + def confirm_cart(self, *arg, **post): cr, uid, partner_id = self.get_cr_uid() values = self.get_values() - values.update({ - 'partner_id': request.registry.get('res.users').browse(cr, uid, partner_id), - }) + if post: + print post + + {'city': u'regfs', 'name': u'Demo User', 'zip': u'5432534', 'street2': u'', 'country_id': u'gfgfdg', 'phone': u'4523545', 'state': u'fgdgsfgdf', 'street': u'fdsfdsffdsfqsdf 54', 'email': u'demo@example.com'} + + values['partner'] = partner_id and request.registry.get('res.users').browse(cr, uid, partner_id) or False + html = request.registry.get("ir.ui.view").render(cr, uid, "ecommerce.customer", values) return html diff --git a/addons/ecommerce/static/src/js/ecommerce.js b/addons/ecommerce/static/src/js/ecommerce.js index b6afc2b2ee8..e9976b8f790 100644 --- a/addons/ecommerce/static/src/js/ecommerce.js +++ b/addons/ecommerce/static/src/js/ecommerce.js @@ -1,19 +1,20 @@ $(document).ready(function (){ - $('.oe_ecommerce').on('click', '.btn-success,.btn-primary,.btn-inverse', function (e) { + $('.oe_ecommerce').on('click', '.oe_product .btn-success,.oe_product .btn-primary,.btn-inverse', function (e) { var $button = $(e.currentTarget); 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 = $button.parent().find('.btn-success,.btn-primary'); + var $remove = $button.parent().find('.btn-inverse'); - $.get(link, {'product_id': $button.data('id')}, function (quantity) { - // var quantity = parseInt(quantity); - // $add.find('.oe_quantity').html(quantity); - // $add.toggleClass('btn-primary', !quantity).toggleClass('btn-success', !!quantity); - // $remove.toggleClass('oe_hidden', !quantity); - // if (!quantity) { - // $button.parents('.media:first').remove() - // } - window.location.href = window.location.pathname; + $.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); + $remove.toggleClass('oe_hidden', !quantity); + if (!quantity) { + $button.parents('.oe_product:first').remove() + } + $('.oe_ecommerce .oe_total').replaceWith(''+result.totalHTML); }); }); }); \ No newline at end of file diff --git a/addons/ecommerce/views/ecommerce.xml b/addons/ecommerce/views/ecommerce.xml index 23d002631db..e8e6d57acaf 100644 --- a/addons/ecommerce/views/ecommerce.xml +++ b/addons/ecommerce/views/ecommerce.xml @@ -39,7 +39,7 @@
- + @@ -73,13 +73,13 @@ products qweb -
+
- + - Total: € - -
+ + + + + total + qweb + +
+
+ + + + + +
Untaxed Amount €
Taxes €
Total

€

+
+
+ Your cart is empty +
+
+
+
@@ -146,10 +162,21 @@ Your information -
- - - + +
Please enter your informations
+
+ + +
Please enter your address
+
+
+
+ +
+ + +
+
diff --git a/addons/website/views/views.xml b/addons/website/views/views.xml index d9144edd4f6..be19857cc17 100644 --- a/addons/website/views/views.xml +++ b/addons/website/views/views.xml @@ -160,21 +160,6 @@
- - event - - - - -
  • Event
  • -
    - -
    Our last events
    -
    -
    -
    -
    -