diff --git a/addons/website_event_exhibitor/__manifest__.py b/addons/website_event_exhibitor/__manifest__.py index 521fa6c1140..5991e662488 100644 --- a/addons/website_event_exhibitor/__manifest__.py +++ b/addons/website_event_exhibitor/__manifest__.py @@ -37,6 +37,7 @@ 'website_event_exhibitor/static/src/scss/event_templates_sponsor.scss', 'website_event_exhibitor/static/src/scss/event_exhibitor_templates.scss', 'website_event_exhibitor/static/src/js/event_exhibitor_connect.js', + 'website_event_exhibitor/static/src/js/event_sponsor_search.js', ], } } diff --git a/addons/website_event_exhibitor/controllers/exhibitor.py b/addons/website_event_exhibitor/controllers/exhibitor.py index e0bb980040d..e141d2a78e6 100644 --- a/addons/website_event_exhibitor/controllers/exhibitor.py +++ b/addons/website_event_exhibitor/controllers/exhibitor.py @@ -32,7 +32,7 @@ class ExhibitorController(WebsiteEventController): '/event//exhibitors', # TDE BACKWARD: matches event/event-1/exhibitor/exhib-1 sub domain '/event//exhibitor' - ], type='http', auth="public", website=True, sitemap=False) + ], type='http', auth="public", website=True, sitemap=False, methods=['GET', 'POST']) def event_exhibitors(self, event, **searches): return request.render( "website_event_exhibitor.event_exhibitors", @@ -209,22 +209,20 @@ class ExhibitorController(WebsiteEventController): def _get_search_countries(self, country_search): # TDE FIXME: make me generic (slides, event, ...) + country_ids = set(request.httprequest.form.getlist('sponsor_country')) try: - country_ids = literal_eval(country_search) + country_ids.update(literal_eval(country_search)) except Exception: - countries = request.env['res.country'].sudo() - else: - # perform a search to filter on existing / valid tags implicitly - countries = request.env['res.country'].sudo().search([('id', 'in', country_ids)]) - return countries + pass + # perform a search to filter on existing / valid tags implicitly + return request.env['res.country'].sudo().search([('id', 'in', list(country_ids))]) def _get_search_sponsorships(self, sponsorship_search): # TDE FIXME: make me generic (slides, event, ...) + sponsorship_ids = set(request.httprequest.form.getlist('sponsor_type')) try: - sponsorship_ids = literal_eval(sponsorship_search) + sponsorship_ids.update(literal_eval(sponsorship_search)) except Exception: - sponsorships = request.env['event.sponsor.type'].sudo() - else: - # perform a search to filter on existing / valid tags implicitly - sponsorships = request.env['event.sponsor.type'].sudo().search([('id', 'in', sponsorship_ids)]) - return sponsorships + pass + # perform a search to filter on existing / valid tags implicitly + return request.env['event.sponsor.type'].sudo().search([('id', 'in', list(sponsorship_ids))]) diff --git a/addons/website_event_exhibitor/models/event_sponsor.py b/addons/website_event_exhibitor/models/event_sponsor.py index 8d3798283fa..10a7d047d33 100644 --- a/addons/website_event_exhibitor/models/event_sponsor.py +++ b/addons/website_event_exhibitor/models/event_sponsor.py @@ -31,7 +31,7 @@ class Sponsor(models.Model): event_id = fields.Many2one('event.event', 'Event', required=True) sponsor_type_id = fields.Many2one( 'event.sponsor.type', 'Sponsoring Level', - default=lambda self: self._default_sponsor_type_id(), required=True) + default=lambda self: self._default_sponsor_type_id(), required=True, auto_join=True) url = fields.Char('Sponsor Website', compute='_compute_url', readonly=False, store=True) sequence = fields.Integer('Sequence') active = fields.Boolean(default=True) diff --git a/addons/website_event_exhibitor/static/src/js/event_sponsor_search.js b/addons/website_event_exhibitor/static/src/js/event_sponsor_search.js new file mode 100644 index 00000000000..192ab4e77f1 --- /dev/null +++ b/addons/website_event_exhibitor/static/src/js/event_sponsor_search.js @@ -0,0 +1,69 @@ +odoo.define('website_event_exhibitor.event_sponsor_search', function (require) { +'use strict'; + +const publicWidget = require('web.public.widget'); +publicWidget.registry.websiteEventSearchSponsor = publicWidget.Widget.extend({ + + selector: '.o_wesponsor_index', + events: { + 'click .o_wevent_event_search_box .btn': '_onSearch', + 'click .o_search_tag .btn': '_onTagRemove', + 'click .o_dropdown_reset_tags': '_onTagReset', + 'change .o_wevent_event_tags_form input': '_onTagAdd', + }, + + start: function () { + this.form = this.$el.find('.o_wevent_event_tags_form'); + return this._super.apply(this, arguments); + }, + + _onSearch: function () { + const input = this.$el.find('.o_wevent_event_search_box input'); + const params = new URLSearchParams(window.location.search); + params.set('search', input.val()); + const url = window.location.pathname + '?' + params.toString(); + this.form.attr('action', url); + this.form.submit(); + }, + + _onTagAdd: function () { + this.form.submit(); + }, + + _onTagRemove: function (event) { + const tag = $(event.target).parent(); + const data = tag.data(); + const selector = 'input[name="' + data.field + '"][value="' + data.value + '"]'; + this._updateFormActionURL(data); + this.form.find(selector).prop('checked', false); + this.form.submit(); + }, + + _onTagReset: function (event) { + const dropdown = $(event.target).parent(); + dropdown.find('input').prop('checked', false); + this.form.submit(); + }, + + _updateFormActionURL: function (data) { + const mapping = new Map([ + ['sponsor_country', 'countries'], + ['sponsor_type', 'sponsorships'] + ]); + if (!mapping.has(data.field)) { + return + } + const name = mapping.get(data.field); + const params = new URLSearchParams(window.location.search); + try { + const ids = JSON.parse(params.get(name)); + params.set(name, JSON.stringify(ids.filter(id => id !== data.value))); + this.form.attr('action', `${window.location.href.split('?')[0]}?${params.toString()}`); + } catch (e) { + return; + } + }, +}); + +return publicWidget.registry.websiteEventSearchSponsor; +}); diff --git a/addons/website_event_exhibitor/static/src/scss/event_exhibitor_templates.scss b/addons/website_event_exhibitor/static/src/scss/event_exhibitor_templates.scss index 86836d3b0c9..6e2d39536fb 100644 --- a/addons/website_event_exhibitor/static/src/scss/event_exhibitor_templates.scss +++ b/addons/website_event_exhibitor/static/src/scss/event_exhibitor_templates.scss @@ -9,6 +9,10 @@ opacity: 0.8; } + .o_wesponsor_topbar_filters .dropdown-item { + cursor: pointer; + } + /* * MAIN PAGE: LIST */ diff --git a/addons/website_event_exhibitor/views/event_exhibitor_templates_list.xml b/addons/website_event_exhibitor/views/event_exhibitor_templates_list.xml index 04f898482ee..52423d57acc 100644 --- a/addons/website_event_exhibitor/views/event_exhibitor_templates_list.xml +++ b/addons/website_event_exhibitor/views/event_exhibitor_templates_list.xml @@ -30,17 +30,18 @@ -