@@ -148,7 +134,6 @@
-
@@ -215,26 +200,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -242,20 +211,23 @@
+
+
+
+
+
-
+
+
+
-
-
- to
-
-
+
+ to Attendees
-
-
-
@@ -278,10 +250,8 @@
-
-
-
-
+
+
@@ -436,7 +406,6 @@
-
@@ -561,7 +530,7 @@
diff --git a/addons/event_sale/tests/test_event_internals.py b/addons/event_sale/tests/test_event_internals.py
index fc6341b51a5..b61b5a29872 100644
--- a/addons/event_sale/tests/test_event_internals.py
+++ b/addons/event_sale/tests/test_event_internals.py
@@ -43,7 +43,7 @@ class TestEventData(TestEventSaleCommon):
# synchronize event
event.write({'event_type_id': event_type.id})
self.assertEqual(event.event_ticket_ids.name, event.event_type_id.event_type_ticket_ids.name)
- self.assertEqual(event.event_ticket_ids.seats_availability, 'limited')
+ self.assertTrue(event.event_ticket_ids.seats_limited)
self.assertEqual(event.event_ticket_ids.seats_max, 5)
self.assertEqual(event.event_ticket_ids.product_id, self.event_product)
self.assertEqual(event.event_ticket_ids.price, self.event_product.list_price)
@@ -120,10 +120,10 @@ class TestEventTicketData(TestEventSaleCommon):
self.assertEqual(second_ticket.price, 8.0)
# default availability
- self.assertEqual(first_ticket.seats_availability, 'limited')
+ self.assertTrue(first_ticket.seats_limited)
self.assertTrue(first_ticket.sale_available)
self.assertFalse(first_ticket.is_expired)
- self.assertEqual(second_ticket.seats_availability, 'unlimited')
+ self.assertFalse(second_ticket.seats_limited)
self.assertTrue(second_ticket.sale_available)
self.assertFalse(second_ticket.is_expired)
diff --git a/addons/event_sale/views/sale_order_views.xml b/addons/event_sale/views/sale_order_views.xml
index c050a48dc4a..c05774168e8 100644
--- a/addons/event_sale/views/sale_order_views.xml
+++ b/addons/event_sale/views/sale_order_views.xml
@@ -27,7 +27,7 @@
domain="[
('event_id', '=', event_id),
('product_id','=',product_id),
- '|', ('seats_availability', '=', 'unlimited'), ('seats_available', '>', 0), '|', ('company_id', '=', False), ('company_id', '=', parent.company_id)
+ '|', ('seats_limited', '=', False), ('seats_available', '>', 0), '|', ('company_id', '=', False), ('company_id', '=', parent.company_id)
]"
attrs="{
'invisible': ['|', ('event_ok', '=', False), ('event_id', '=', False)],
diff --git a/addons/event_sale/wizard/event_configurator_views.xml b/addons/event_sale/wizard/event_configurator_views.xml
index e588808deb0..db1399cdb34 100644
--- a/addons/event_sale/wizard/event_configurator_views.xml
+++ b/addons/event_sale/wizard/event_configurator_views.xml
@@ -20,7 +20,7 @@
domain="[
('event_id', '=', event_id),
('product_id','=',product_id),
- '|', ('seats_availability', '=', 'unlimited'), ('seats_available', '>', 0)
+ '|', ('seats_limited', '=', False), ('seats_available', '>', 0)
]"
attrs="{
'invisible': [('event_id', '=', False)],
diff --git a/addons/mass_mailing_event_track/views/event_views.xml b/addons/mass_mailing_event_track/views/event_views.xml
index 231d9606920..2e18a8bbe0f 100644
--- a/addons/mass_mailing_event_track/views/event_views.xml
+++ b/addons/mass_mailing_event_track/views/event_views.xml
@@ -3,7 +3,7 @@
event.event.view.form.inherit.mass.mailing.track
event.event
-
+
diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py
index 5e6ffb16751..11e17a4f7a4 100644
--- a/addons/website_event/controllers/main.py
+++ b/addons/website_event/controllers/main.py
@@ -100,11 +100,9 @@ class WebsiteEventController(http.Controller):
current_type = EventType.browse(int(searches['type']))
domain_search["type"] = [("event_type_id", "=", int(searches["type"]))]
- if searches["country"] != 'all' and searches["country"] != 'online':
+ if searches["country"] != 'all':
current_country = request.env['res.country'].browse(int(searches['country']))
domain_search["country"] = ['|', ("country_id", "=", int(searches["country"])), ("country_id", "=", False)]
- elif searches["country"] == 'online':
- domain_search["country"] = [("country_id", "=", False)]
def dom_without(without):
domain = []
@@ -140,8 +138,6 @@ class WebsiteEventController(http.Controller):
order = 'date_begin'
if searches.get('date', 'all') == 'old':
order = 'date_begin desc'
- if searches["country"] != 'all': # if we are looking for a specific country
- order = 'is_online, ' + order # show physical events first
order = 'is_published desc, ' + order
events = Event.search(dom_without("none"), limit=step, offset=pager['offset'], order=order)
@@ -300,7 +296,7 @@ class WebsiteEventController(http.Controller):
def registration_new(self, event, **post):
tickets = self._process_tickets_form(event, post)
availability_check = True
- if event.seats_availability == 'limited':
+ if event.seats_limited:
ordered_seats = 0
for ticket in tickets:
ordered_seats += ticket['quantity']
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 @@
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
diff --git a/addons/website_event/views/event_templates.xml b/addons/website_event/views/event_templates.xml
index 3671ec46010..27815e3215c 100644
--- a/addons/website_event/views/event_templates.xml
+++ b/addons/website_event/views/event_templates.xml
@@ -213,7 +213,6 @@
-
Online