summaryrefslogtreecommitdiff
path: root/addons/website_event
diff options
context:
space:
mode:
authorPatrick Hoste <pko@odoo.com>2020-03-03 14:24:00 +0000
committerPatrick Hoste <pko@odoo.com>2020-03-31 06:34:45 +0000
commitbd99cc24b145dcb2f4e7453050a5dc6d814f0c21 (patch)
tree4dd2e680d3f1e8d02e05b373e9562cd5fc8a18bd /addons/website_event
parentd2e02976e2934274cdc7a37616713ba6166ca1b7 (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')
-rw-r--r--addons/website_event/models/event_event.py26
-rw-r--r--addons/website_event/static/src/js/website_event_set_customize_options.js95
-rw-r--r--addons/website_event/static/src/xml/customize_options.xml15
-rw-r--r--addons/website_event/views/assets.xml1
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>