diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index 15d258626e6..3c1563c84e2 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -1,21 +1,19 @@ # -*- coding: utf-8 -*- -import collections import babel.dates import re import werkzeug -from werkzeug.datastructures import OrderedMultiDict -from werkzeug.exceptions import NotFound from ast import literal_eval from collections import defaultdict from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta +from werkzeug.datastructures import OrderedMultiDict +from werkzeug.exceptions import NotFound from odoo import fields, http, _ from odoo.addons.http_routing.models.ir_http import slug from odoo.addons.website.controllers.main import QueryURL -from odoo.addons.event.controllers.main import EventController from odoo.http import request from odoo.osv import expression from odoo.tools.misc import get_lang, format_date @@ -27,6 +25,10 @@ class WebsiteEventController(http.Controller): if not qs or qs.lower() in '/events': yield {'loc': '/events'} + # ------------------------------------------------------------ + # EVENT LIST + # ------------------------------------------------------------ + @http.route(['/event', '/event/page/', '/events', '/events/page/'], type='http', auth="public", website=True, sitemap=sitemap_event) def events(self, page=1, **searches): Event = request.env['event.event'] @@ -167,6 +169,10 @@ class WebsiteEventController(http.Controller): return request.render("website_event.index", values) + # ------------------------------------------------------------ + # EVENT PAGE + # ------------------------------------------------------------ + @http.route(['''/event//page/'''], type='http', auth="public", website=True, sitemap=False) def event_page(self, event, page, **post): values = { @@ -214,51 +220,6 @@ class WebsiteEventController(http.Controller): 'iCal_url': urls.get('iCal_url'), } - @http.route('/event/add_event', type='json', auth="user", methods=['POST'], website=True) - def add_event(self, event_name="New Event", **kwargs): - event = self._add_event(event_name, request.context) - return "/event/%s/register?enable_editor=1" % slug(event) - - def _add_event(self, event_name=None, context=None, **kwargs): - if not event_name: - event_name = _("New Event") - date_begin = datetime.today() + timedelta(days=(14)) - vals = { - 'name': event_name, - 'date_begin': fields.Date.to_string(date_begin), - 'date_end': fields.Date.to_string((date_begin + timedelta(days=(1)))), - 'seats_available': 1000, - 'website_id': request.website.id, - } - return request.env['event.event'].with_context(context or {}).create(vals) - - def get_formated_date(self, event): - start_date = fields.Datetime.from_string(event.date_begin).date() - end_date = fields.Datetime.from_string(event.date_end).date() - month = babel.dates.get_month_names('abbreviated', locale=get_lang(event.env).code)[start_date.month] - return ('%s %s%s') % (month, start_date.strftime("%e"), (end_date != start_date and ("-" + end_date.strftime("%e")) or "")) - - @http.route('/event/get_country_event_list', type='json', auth='public', website=True) - def get_country_events(self, **post): - Event = request.env['event.event'] - country_code = request.session['geoip'].get('country_code') - result = {'events': [], 'country': False} - events = None - domain = request.website.website_domain() - if country_code: - country = request.env['res.country'].search([('code', '=', country_code)], limit=1) - events = Event.search(domain + ['|', ('address_id', '=', None), ('country_id.code', '=', country_code), ('date_begin', '>=', '%s 00:00:00' % fields.Date.today())], order="date_begin") - if not events: - events = Event.search(domain + [('date_begin', '>=', '%s 00:00:00' % fields.Date.today())], order="date_begin") - for event in events: - if country_code and event.country_id.code == country_code: - result['country'] = country - result['events'].append({ - "date": self.get_formated_date(event), - "event": event, - "url": event.website_url}) - return request.env['ir.ui.view']._render_template("website_event.country_events_list", result) - def _process_tickets_form(self, event, form_details): """ Process posted data about ticket order. Generic ticket are supported for event without tickets (generic registration). @@ -414,6 +375,63 @@ class WebsiteEventController(http.Controller): 'iCal_url': urls.get('iCal_url') } + # ------------------------------------------------------------ + # EDITOR (NEW EVENT) + # ------------------------------------------------------------ + + @http.route('/event/add_event', type='json', auth="user", methods=['POST'], website=True) + def add_event(self, event_name="New Event", **kwargs): + event = self._add_event(event_name, request.context) + return "/event/%s/register?enable_editor=1" % slug(event) + + def _add_event(self, event_name=None, context=None, **kwargs): + if not event_name: + event_name = _("New Event") + date_begin = datetime.today() + timedelta(days=(14)) + vals = { + 'name': event_name, + 'date_begin': fields.Date.to_string(date_begin), + 'date_end': fields.Date.to_string((date_begin + timedelta(days=(1)))), + 'seats_available': 1000, + 'website_id': request.website.id, + } + return request.env['event.event'].with_context(context or {}).create(vals) + + # ------------------------------------------------------------ + # TOOLS (JSON) + # ------------------------------------------------------------ + + @http.route('/event/get_country_event_list', type='json', auth='public', website=True) + def get_country_events(self, **post): + Event = request.env['event.event'] + country_code = request.session['geoip'].get('country_code') + result = {'events': [], 'country': False} + events = None + domain = request.website.website_domain() + if country_code: + country = request.env['res.country'].search([('code', '=', country_code)], limit=1) + events = Event.search(domain + ['|', ('address_id', '=', None), ('country_id.code', '=', country_code), ('date_begin', '>=', '%s 00:00:00' % fields.Date.today())], order="date_begin") + if not events: + events = Event.search(domain + [('date_begin', '>=', '%s 00:00:00' % fields.Date.today())], order="date_begin") + for event in events: + if country_code and event.country_id.code == country_code: + result['country'] = country + result['events'].append({ + "date": self.get_formated_date(event), + "event": event, + "url": event.website_url}) + return request.env['ir.ui.view']._render_template("website_event.country_events_list", result) + + # ------------------------------------------------------------ + # TOOLS (HELPERS) + # ------------------------------------------------------------ + + def get_formated_date(self, event): + start_date = fields.Datetime.from_string(event.date_begin).date() + end_date = fields.Datetime.from_string(event.date_end).date() + month = babel.dates.get_month_names('abbreviated', locale=get_lang(event.env).code)[start_date.month] + return ('%s %s%s') % (month, start_date.strftime("%e"), (end_date != start_date and ("-" + end_date.strftime("%e")) or "")) + def _extract_searched_event_tags(self, searches): tags = request.env['event.tag'] if searches.get('tags'):