summaryrefslogtreecommitdiff
path: root/addons/website_event/controllers
diff options
context:
space:
mode:
authorqmo-odoo <qmo@odoo.com>2020-01-16 08:36:13 +0000
committerqmo-odoo <qmo@odoo.com>2020-03-26 14:59:16 +0000
commit91eded2eb280ddb2dc4acfe92cab5c98a7554fee (patch)
tree1e8d9964a5b97b6aa6baa93e3ec8f5c2a6d9f835 /addons/website_event/controllers
parent307263c22d9ea1eecc1f6fba478c24a7a845f2c7 (diff)
[IMP] website_event, event: Add event.tag.category and event.tag + rename event.type display name
This commit changes the display name for the model event.type from "Event Category" to "Event Template" This change was needed before introducing the new model event.tag.category which will be used to group tags (event.tag) This commit introduces two new models: event.tag.category & event.tag The tags will be grouped by category and will be used to filter events. In the front-end, if the user activates the "filter by categories", each event.tag.category will generate a new dropdown of related tags. Clicking on one of these tags will add a new "tag badge" above the events (same way as in eLearning). LINKS: TaskID:2162438 PR: #43856
Diffstat (limited to 'addons/website_event/controllers')
-rw-r--r--addons/website_event/controllers/main.py37
1 files changed, 31 insertions, 6 deletions
diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py
index 570074d7b4b..8691222101d 100644
--- a/addons/website_event/controllers/main.py
+++ b/addons/website_event/controllers/main.py
@@ -5,6 +5,8 @@ import re
import werkzeug
from werkzeug.datastructures import OrderedMultiDict
+from ast import literal_eval
+from collections import defaultdict
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
@@ -12,6 +14,7 @@ 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.http import request
+from odoo.osv import expression
from odoo.tools.misc import get_lang, format_date
@@ -28,6 +31,7 @@ class WebsiteEventController(http.Controller):
searches.setdefault('search', '')
searches.setdefault('date', 'all')
+ searches.setdefault('tags', '')
searches.setdefault('type', 'all')
searches.setdefault('country', 'all')
@@ -70,6 +74,19 @@ class WebsiteEventController(http.Controller):
if searches['search']:
domain_search['search'] = [('name', 'ilike', searches['search'])]
+ search_tags = self._extract_searched_event_tags(searches)
+ if search_tags:
+ # Example: You filter on age: 10-12 and activity: football.
+ # Doing it this way allows to only get events who are tagged "age: 10-12" AND "activity: football".
+ # Add another tag "age: 12-15" to the search and it would fetch the ones who are tagged:
+ # ("age: 10-12" OR "age: 12-15") AND "activity: football
+ grouped_tags = defaultdict(list)
+ for tag in search_tags:
+ grouped_tags[tag.category_id].append(tag)
+ domain_search['tags'] = []
+ for group in grouped_tags:
+ domain_search['tags'] = expression.AND([domain_search['tags'], [('tag_ids', 'in', [tag.id for tag in grouped_tags[group]])]])
+
current_date = None
current_type = None
current_country = None
@@ -102,11 +119,6 @@ class WebsiteEventController(http.Controller):
date[3] = Event.search_count(dom_without('date') + date[2])
domain = dom_without('type')
- types = Event.read_group(domain, ["id", "event_type_id"], groupby=["event_type_id"], orderby="event_type_id")
- types.insert(0, {
- 'event_type_id_count': sum([int(type['event_type_id_count']) for type in types]),
- 'event_type_id': ("all", _("All Categories"))
- })
domain = dom_without('country')
countries = Event.read_group(domain, ["id", "country_id"], groupby="country_id", orderby="country_id")
@@ -141,10 +153,11 @@ class WebsiteEventController(http.Controller):
'current_type': current_type,
'event_ids': events, # event_ids used in website_event_track so we keep name as it is
'dates': dates,
- 'types': types,
+ 'categories': request.env['event.tag.category'].search([]),
'countries': countries,
'pager': pager,
'searches': searches,
+ 'search_tags': search_tags,
'keep': keep,
}
@@ -342,3 +355,15 @@ class WebsiteEventController(http.Controller):
'google_url': urls.get('google_url'),
'iCal_url': urls.get('iCal_url')
})
+
+ def _extract_searched_event_tags(self, searches):
+ tags = request.env['event.tag']
+ if searches.get('tags'):
+ try:
+ tag_ids = literal_eval(searches['tags'])
+ except:
+ pass
+ else:
+ # perform a search to filter on existing / valid tags implicitely
+ tags = request.env['event.tag'].search([('id', 'in', tag_ids)])
+ return tags