summaryrefslogtreecommitdiff
path: root/addons/website_event/controllers
diff options
context:
space:
mode:
authorParamjit Singh Sahota <psa@openerp.com>2014-07-16 14:38:10 +0530
committerThibault Delavallée <tde@openerp.com>2014-10-09 10:09:06 +0200
commitca862e7b852996cb44c444b5725beca8a5d8ae65 (patch)
tree57f6aa7f5de2da399c3469c14220e236d84d5453 /addons/website_event/controllers
parentb7eb97c39ebd7b667e1691eeea72f716fa11b420 (diff)
[IMP] event: Split Ticket: registration are now for one attendee only.
Registration are now for one attendee only. When buying several seats for an event you have now one registration for each attendee. event: nb_register field is removed; as well as unnecessary user_id and it subscribe / unsubscribe behavior. Also slighly cleaned some views. event_sale: do not auto confirm registrations linked to a draft sale order. Note: strange origin is a char field, not a sale_order_id. Added a small wizard to edit attendees data when confirming a sale order containing event related lines. website_event: when buying free tickets, ask for attendee details. Added template, controllers to handle that behavior. website_event_sale: when buying tickets, ask for attendee details. Events ecommerce should be better integrated with online events, using inheritance to add details instead of being very different.
Diffstat (limited to 'addons/website_event/controllers')
-rw-r--r--addons/website_event/controllers/main.py49
1 files changed, 48 insertions, 1 deletions
diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py
index da343c9fa3b..134371a3caf 100644
--- a/addons/website_event/controllers/main.py
+++ b/addons/website_event/controllers/main.py
@@ -4,9 +4,10 @@ import time
import werkzeug.urls
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
+from collections import OrderedDict
from openerp import http
-from openerp import tools
+from openerp import tools, SUPERUSER_ID
from openerp.addons.website.models.website import slug
from openerp.http import request
from openerp.tools.translate import _
@@ -195,6 +196,7 @@ class website_event(http.Controller):
'name': event_name,
'date_begin': date_begin.strftime('%Y-%m-%d'),
'date_end': (date_begin + timedelta(days=(1))).strftime('%Y-%m-%d'),
+ 'seats_available': 1000,
}
event_id = Event.create(request.cr, request.uid, vals, context=context)
event = Event.browse(request.cr, request.uid, event_id, context=context)
@@ -225,3 +227,48 @@ class website_event(http.Controller):
"event": event,
"url": event.website_url})
return request.website.render("website_event.country_events_list", result)
+
+ def _process_tickets_details(self, data):
+ nb_register = int(data.get('nb_register-0', 0))
+ if nb_register:
+ return [{'id': 0, 'name': 'Subscription', 'quantity': nb_register, 'price': 0}]
+ return []
+
+ @http.route(['/event/<model("event.event"):event>/registration/new'], type='json', auth="public", methods=['POST'], website=True)
+ def registration_new(self, event, **post):
+ tickets = self._process_tickets_details(post)
+ if not tickets:
+ return request.redirect("/event/%s" % slug(event))
+ return request.website._render("website_event.registration_attendee_details", {'tickets': tickets, 'event': event})
+
+ def _process_registration_details(self, details):
+ ''' Process data posted from the attendee details form. '''
+ registrations = {}
+ for key, value in details.iteritems():
+ counter, field_name = key.split('-', 1)
+ registrations.setdefault(counter, dict())[field_name] = value
+ return registrations.values()
+
+ @http.route(['/event/<model("event.event"):event>/registration/confirm'], type='http', auth="public", methods=['POST'], website=True)
+ def registration_confirm(self, event, **post):
+ cr, uid, context = request.cr, request.uid, request.context
+ Registration = request.registry['event.registration']
+ registrations = self._process_registration_details(post)
+
+ registration_ids = []
+ user = request.registry.get('res.users').browse(cr, uid, uid, context=context)
+ for registration in registrations:
+ registration_ids.append(
+ Registration.create(cr, SUPERUSER_ID, {
+ 'name': registration.get('name', user.name),
+ 'phone': registration.get('phone', user.phone),
+ 'email': registration.get('email', user.email),
+ 'partner_id': user.partner_id.id,
+ 'event_id': event.id,
+ }, context=context))
+
+ attendees = Registration.browse(cr, uid, registration_ids, context=context)
+ return request.website.render("website_event.registration_complete", {
+ 'attendees': attendees,
+ 'event': event,
+ })