diff --git a/addons/event_sale/event_sale.py b/addons/event_sale/event_sale.py index b4f42673aba..c96b5d73932 100644 --- a/addons/event_sale/event_sale.py +++ b/addons/event_sale/event_sale.py @@ -37,6 +37,9 @@ class product_template(osv.osv): class product(osv.osv): _inherit = 'product.product' + _columns = { + 'event_ticket_ids': fields.one2many('event.event.ticket', 'product_id', 'Event Tickets'), + } def onchange_event_ok(self, cr, uid, ids, type, event_ok, context=None): # cannot directly forward to product.template as the ids are theoretically different diff --git a/addons/website_event_sale/controllers/main.py b/addons/website_event_sale/controllers/main.py index 9f340c86f9d..1c39484f8c8 100644 --- a/addons/website_event_sale/controllers/main.py +++ b/addons/website_event_sale/controllers/main.py @@ -28,54 +28,23 @@ from openerp.tools.translate import _ class website_event(website_event): - @http.route(['/event/add_cart'], type='http', auth="public", website=True, multilang=True) - def add_cart(self, event_id, **post): - user_obj = request.registry['res.users'] - order_line_obj = request.registry.get('sale.order.line') + @http.route(['/event/cart/update'], type='http', auth="public", methods=['POST'], website=True, multilang=True) + def cart_update(self, event_id, **post): + cr, uid, context = request.cr, request.uid, request.context ticket_obj = request.registry.get('event.event.ticket') - order_obj = request.registry.get('sale.order') - order = request.website.sale_get_order(force_create=1) - - partner_id = user_obj.browse(request.cr, SUPERUSER_ID, request.uid, - context=request.context).partner_id.id - - fields = [k for k, v in order_line_obj._columns.items()] - values = order_line_obj.default_get(request.cr, SUPERUSER_ID, fields, - context=request.context) - - _values = None + sale = False for key, value in post.items(): - try: - quantity = int(value) - assert quantity > 0 - except: - quantity = None - ticket_id = key.split("-")[0] == 'ticket' and int(key.split("-")[1]) or None - if not ticket_id or not quantity: + quantity = int(value or "0") + if not quantity: continue - ticket = ticket_obj.browse(request.cr, request.uid, ticket_id, - context=request.context) + sale = True + ticket_id = key.split("-")[0] == 'ticket' and int(key.split("-")[1]) or None + ticket = ticket_obj.browse(cr, SUPERUSER_ID, ticket_id, context=context) + request.website.sale_get_order(force_create=1)._cart_update( + product_id=ticket.product_id.id, add_qty=quantity, context=dict(context, event_ticket_id=ticket.id)) - values['product_id'] = ticket.product_id.id - values['event_id'] = ticket.event_id.id - values['event_ticket_id'] = ticket.id - values['product_uom_qty'] = quantity - values['price_unit'] = ticket.price - values['order_id'] = order.id - values['name'] = "%s: %s" % (ticket.event_id.name, ticket.name) - - # change and record value - pricelist_id = order.pricelist_id and order.pricelist_id.id or False - _values = order_line_obj.product_id_change( - request.cr, SUPERUSER_ID, [], pricelist_id, ticket.product_id.id, - partner_id=partner_id, context=request.context)['value'] - _values.update(values) - - order_line_id = order_line_obj.create(request.cr, SUPERUSER_ID, _values, context=request.context) - order_obj.write(request.cr, SUPERUSER_ID, [order.id], {'order_line': [(4, order_line_id)]}, context=request.context) - - if not _values: + if not sale: return request.redirect("/event/%s" % event_id) return request.redirect("/shop/checkout") diff --git a/addons/website_event_sale/models/__init__.py b/addons/website_event_sale/models/__init__.py index 498013de541..ed23b1cd133 100644 --- a/addons/website_event_sale/models/__init__.py +++ b/addons/website_event_sale/models/__init__.py @@ -1,2 +1,3 @@ import product import website +import sale_order diff --git a/addons/website_event_sale/models/sale_order.py b/addons/website_event_sale/models/sale_order.py new file mode 100644 index 00000000000..91f282a1c00 --- /dev/null +++ b/addons/website_event_sale/models/sale_order.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from openerp import SUPERUSER_ID +from openerp.osv import osv, fields +from openerp.tools.translate import _ + +# defined for access rules +class sale_order(osv.Model): + _inherit = "sale.order" + + def _cart_find_product_line(self, cr, uid, ids, product_id=None, line_id=None, context=None): + for so in self.browse(cr, uid, ids, context=context): + order_line_id = None + domain = [('order_id', '=', so.id), ('product_id', '=', product_id)] + if line_id: + domain += [('id', '=', line_id)] + elif context.get("event_ticket_id"): + domain += [('event_ticket_id', '=', context.get("event_ticket_id"))] + order_line_ids = self.pool.get('sale.order.line').search(cr, SUPERUSER_ID, domain, context=context) + if order_line_ids: + order_line_id = order_line_ids[0] + return order_line_id + + def _website_product_id_change(self, cr, uid, ids, order_id, product_id, line_id=None, context=None): + values = super(sale_order,self)._website_product_id_change(cr, uid, ids, order_id, product_id, line_id=None, context=None) + + event_ticket_id = None + if context.get("event_ticket_id"): + event_ticket_id = context.get("event_ticket_id") + elif line_id: + line = self.pool.get('sale.order.line').browse(cr, SUPERUSER_ID, line_id, context=context) + if line.event_ticket_id: + event_ticket_id = line.event_ticket_id.id + else: + product = self.pool.get('product.product').browse(cr, uid, product_id, context=context) + if product.event_ticket_ids: + event_ticket_id = product.event_ticket_ids[0] + + if event_ticket_id: + ticket = self.pool.get('event.event.ticket').browse(cr, uid, event_ticket_id, context=context) + if product_id != ticket.product_id.id: + raise osv.except_osv(_('Error!'),_("The ticket doesn't match with this product.")) + + values['product_id'] = ticket.product_id.id + values['event_id'] = ticket.event_id.id + values['event_ticket_id'] = ticket.id + values['price_unit'] = ticket.price + values['name'] = "%s: %s" % (ticket.event_id.name, ticket.name) + + return values diff --git a/addons/website_event_sale/views/website_event_sale.xml b/addons/website_event_sale/views/website_event_sale.xml index 84da4278555..b2f5d2a78f5 100644 --- a/addons/website_event_sale/views/website_event_sale.xml +++ b/addons/website_event_sale/views/website_event_sale.xml @@ -28,7 +28,7 @@