diff options
| author | Patrick Hoste <pko@odoo.com> | 2020-03-03 14:24:00 +0000 |
|---|---|---|
| committer | Patrick Hoste <pko@odoo.com> | 2020-03-31 06:34:45 +0000 |
| commit | bd99cc24b145dcb2f4e7453050a5dc6d814f0c21 (patch) | |
| tree | 4dd2e680d3f1e8d02e05b373e9562cd5fc8a18bd /addons/website_event | |
| parent | d2e02976e2934274cdc7a37616713ba6166ca1b7 (diff) | |
[IMP] website_event(_track): improve website and track menus behavior
PURPOSE
Before this commit to activate the sub-menu, the tracks and the track proposal
you had to do it on the event form view. After this commit you'll have to go
on the event website page to change those options (through the customize dropdown)
SPECIFICATION
Remove the 'website_menu' / 'website_track' / 'website_track_proposal' from the
event form view and create a toggle option in the customize dropdown on the event
website page instead.
LINKS
Task ID : 2198660
PR : #46659
Diffstat (limited to 'addons/website_event')
4 files changed, 126 insertions, 11 deletions
diff --git a/addons/website_event/models/event_event.py b/addons/website_event/models/event_event.py index 5a7901ba22b..bfd96da84e6 100644 --- a/addons/website_event/models/event_event.py +++ b/addons/website_event/models/event_event.py @@ -70,12 +70,16 @@ class Event(models.Model): @api.model def create(self, vals): res = super(Event, self).create(vals) - res._update_website_menus(vals) + res._update_website_menus() return res def write(self, vals): + menu_activated = self.filtered(lambda event: event.website_menu) + menu_deactivated = self.filtered(lambda event: not event.website_menu) res = super(Event, self).write(vals) - self._update_website_menus(vals) + menu_to_deactivate = menu_activated.filtered(lambda event: not event.website_menu) + menu_to_activate = menu_deactivated.filtered(lambda event: event.website_menu) + (menu_to_activate | menu_to_deactivate)._update_website_menus() return res def _get_menu_entries(self): @@ -88,19 +92,19 @@ class Event(models.Model): (_('Register'), '/event/%s/register' % slug(self), False), ] - def _update_website_menus(self, vals): + def _update_website_menus(self): for event in self: - if 'website_menu' in vals: - if event.menu_id and not event.website_menu: - event.menu_id.unlink() - elif event.website_menu and not event.menu_id: - root_menu = self.env['website.menu'].create({'name': event.name, 'website_id': event.website_id.id}) - event.menu_id = root_menu - for sequence, (name, url, xml_id) in enumerate(event._get_menu_entries()): - event._create_menu(sequence, name, url, xml_id) + if event.menu_id and not event.website_menu: + event.menu_id.unlink() + elif event.website_menu and not event.menu_id: + root_menu = self.env['website.menu'].create({'name': event.name, 'website_id': event.website_id.id}) + event.menu_id = root_menu + for sequence, (name, url, xml_id) in enumerate(event._get_menu_entries()): + event._create_menu(sequence, name, url, xml_id) def _create_menu(self, sequence, name, url, xml_id): if not url: + self.env['ir.ui.view'].search([('name', '=', name + ' ' + self.name)]).unlink() newpath = self.env['website'].new_page(name + ' ' + self.name, template=xml_id, ispage=False)['url'] url = "/event/" + slug(self) + "/page/" + newpath[1:] menu = self.env['website.menu'].create({ diff --git a/addons/website_event/static/src/js/website_event_set_customize_options.js b/addons/website_event/static/src/js/website_event_set_customize_options.js new file mode 100644 index 00000000000..4b593fcefcc --- /dev/null +++ b/addons/website_event/static/src/js/website_event_set_customize_options.js @@ -0,0 +1,95 @@ +odoo.define('website_event.set_customize_options', function (require) { +"use strict"; + +var CustomizeMenu = require('website.customizeMenu'); +var publicWidget = require('web.public.widget'); + +var EventSpecificOptions = publicWidget.Widget.extend({ + template: 'website_event.customize_options', + xmlDependencies: ['/website_event/static/src/xml/customize_options.xml'], + events: { + 'change #display-website-menu': '_onDisplaySubmenuChange', + }, + + /** + * @override + */ + start: function () { + this.$submenuInput = this.$('#display-website-menu'); + this.modelName = this._getEventObject().model; + this.eventId = this._getEventObject().id; + this._initCheckbox(); + }, + + _initCheckbox: function () { + this._rpc({ + model: this.modelName, + method: 'read', + args: [[this.eventId], ['website_menu', 'website_url']], + }).then((data) => { + if (data[0]['website_menu']) { + this.$submenuInput.attr('checked', 'checked'); + } + this.eventUrl = data[0]['website_url']; + }); + }, + + _onDisplaySubmenuChange: function (ev) { + var checkboxValue = this.$submenuInput.is(':checked'); + this._toggleSubmenuDisplay(checkboxValue); + }, + + _toggleSubmenuDisplay: function (val) { + var self = this; + this._rpc({ + model: this.modelName, + method: 'toggle_website_menu', + args: [[this.eventId], val], + }).then(function () { + self._reloadEventPage(); + }); + }, + + _reloadEventPage: function () { + window.location = this.eventUrl; + }, + + _getEventObject: function() { + var repr = $('html').data('main-object'); + var m = repr.match(/(.+)\((\d+),(.*)\)/); + return { + model: m[1], + id: m[2] | 0, + }; + } + +}); + +CustomizeMenu.include({ + _getEventObject: function() { + var repr = $('html').data('main-object'); + var m = repr.match(/(.+)\((\d+),(.*)\)/); + return { + model: m[1], + id: m[2] | 0, + }; + }, + + _loadCustomizeOptions: function () { + var self = this; + var def = this._super.apply(this, arguments); + return def.then(function () { + if (!self.__eventOptionsLoaded && self._getEventObject().model === 'event.event') { + self.__eventOptionsLoaded = true; + self.eventOptions = new EventSpecificOptions(self); + self.eventOptions.insertAfter(self.$el.find('.dropdown-divider:first()')); + } + }); + }, +}); + +return { + EventSpecificOptions: EventSpecificOptions, +}; + +}); diff --git a/addons/website_event/static/src/xml/customize_options.xml b/addons/website_event/static/src/xml/customize_options.xml new file mode 100644 index 00000000000..539a3ef028f --- /dev/null +++ b/addons/website_event/static/src/xml/customize_options.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<templates xml:space="preserve"> + + <t t-name="website_event.customize_options" id="event_options"> + <li class="dropdown-header">Event Specific</li> + <a href="#" name="display-website-menu" class="dropdown-item" role="menuitem"> + <label class="o_switch" for="display-website-menu"> + <input id="display-website-menu" type="checkbox"/> + <span/> + Event Sub-menu + </label> + </a> + </t> + +</templates> diff --git a/addons/website_event/views/assets.xml b/addons/website_event/views/assets.xml index 28f03d3848b..e19a829e3ff 100644 --- a/addons/website_event/views/assets.xml +++ b/addons/website_event/views/assets.xml @@ -15,6 +15,7 @@ <script type="text/javascript" src="/website_event/static/src/js/website_geolocation.js"></script> <script type="text/javascript" src="/website_event/static/src/js/website_event.js"></script> <script type="text/javascript" src="/website_event/static/src/js/website_event_ticket_details.js"></script> + <script type="text/javascript" src="/website_event/static/src/js/website_event_set_customize_options.js"></script> </xpath> </template> |
