diff --git a/addons/event/data/event_data.xml b/addons/event/data/event_data.xml index 0c430e37799..d274d70e8df 100644 --- a/addons/event/data/event_data.xml +++ b/addons/event/data/event_data.xml @@ -17,7 +17,6 @@ Online - diff --git a/addons/event/data/event_demo.xml b/addons/event/data/event_demo.xml index 01022610b7e..9817ce15e2d 100644 --- a/addons/event/data/event_demo.xml +++ b/addons/event/data/event_demo.xml @@ -75,7 +75,7 @@ - limited + True 50 US/Pacific @@ -168,7 +168,7 @@ - limited + True 200 @@ -241,7 +241,7 @@ - limited + True 4 US/Pacific diff --git a/addons/event/models/event_event.py b/addons/event/models/event_event.py index a091da8ff6b..7acafd5b7a6 100644 --- a/addons/event/models/event_event.py +++ b/addons/event/models/event_event.py @@ -44,8 +44,6 @@ class EventType(models.Model): help="Events and registrations will automatically be confirmed " "upon creation, easing the flow for simple events.") # location - is_online = fields.Boolean( - 'Online Event', help='Online events like webinars do not require a specific location and are hosted online.') use_timezone = fields.Boolean('Use Default Timezone') default_timezone = fields.Selection( _tz_get, string='Timezone', default=lambda self: self.env.user.tz or 'UTC') @@ -141,10 +139,8 @@ class EventEvent(models.Model): string='Maximum Attendees Number', compute='_compute_from_event_type', copy=True, readonly=False, store=True, help="For each event you can define a maximum registration of seats(number of attendees), above this numbers the registrations are not accepted.") - seats_availability = fields.Selection( - [('unlimited', 'Unlimited'), ('limited', 'Limited')], - string='Maximum Attendees', required=True, - compute='_compute_seats_availability', copy=True, readonly=False, store=True) + seats_limited = fields.Boolean('Maximum Attendees', required=True, compute='_compute_seats_limited', + copy=True, readonly=False, store=True) seats_reserved = fields.Integer( string='Reserved Seats', store=True, readonly=True, compute='_compute_seats') @@ -162,8 +158,9 @@ class EventEvent(models.Model): compute_sudo=True, readonly=True, compute='_compute_seats') # Registration fields auto_confirm = fields.Boolean( - string='Autoconfirm Registrations', - compute='_compute_from_event_type', copy=True, readonly=False, store=True) + string='Autoconfirmation', + compute='_compute_from_event_type', copy=True, readonly=False, store=True, + help = 'Autoconfirm Registrations. Registrations will automatically be confirmed upon creation.') registration_ids = fields.One2many('event.registration', 'event_id', string='Attendees') event_registrations_open = fields.Boolean('Registration open', compute='_compute_event_registrations_open') event_ticket_ids = fields.One2many( @@ -181,13 +178,9 @@ class EventEvent(models.Model): is_one_day = fields.Boolean(compute='_compute_field_is_one_day') start_sale_date = fields.Date('Start sale date', compute='_compute_start_sale_date') # Location and communication - is_online = fields.Boolean( - string='Online Event', compute='_compute_from_event_type', - copy=True, readonly=False, store=True) address_id = fields.Many2one( - 'res.partner', string='Venue', compute='_compute_address_id', - copy=True, readonly=False, store=True, tracking=True, - domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]") + 'res.partner', string='Venue', default=lambda self: self.env.company.partner_id.id, + tracking=True, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]") country_id = fields.Many2one( 'res.country', 'Country', related='address_id.country_id', copy=True, readonly=False, store=True) @@ -232,11 +225,11 @@ class EventEvent(models.Model): seats_expected = event.seats_unconfirmed + event.seats_reserved + event.seats_used event.seats_expected = seats_expected - @api.depends('date_end', 'seats_available', 'seats_availability', 'event_ticket_ids.sale_available') + @api.depends('date_end', 'seats_available', 'seats_limited', 'event_ticket_ids.sale_available') def _compute_event_registrations_open(self): for event in self: event.event_registrations_open = event.date_end and (event.date_end > fields.Datetime.now()) and \ - (event.seats_available or event.seats_availability == 'unlimited') and \ + (event.seats_available or not event.seats_limited) and \ (not event.event_ticket_ids or any(ticket.sale_available for ticket in event.event_ticket_ids)) @api.depends('stage_id', 'kanban_state') @@ -302,14 +295,6 @@ class EventEvent(models.Model): start_dates = [ticket.start_sale_date for ticket in event.event_ticket_ids if ticket.start_sale_date] event.start_sale_date = min(start_dates) if start_dates else False - @api.depends('is_online') - def _compute_address_id(self): - for event in self: - if event.is_online: - event.address_id = False - elif not event.address_id: - event.address_id = self.env.company.partner_id.id - @api.depends('event_type_id') def _compute_date_tz(self): for event in self: @@ -319,7 +304,7 @@ class EventEvent(models.Model): event.date_tz = self.env.user.tz or 'UTC' @api.depends('event_type_id') - def _compute_seats_availability(self): + def _compute_seats_limited(self): """ Make it separate from ``_compute_from_event_type`` because otherwise a value given at create (see create override) would protect all other fields depending on event type id from being computed as compute method will be @@ -327,9 +312,9 @@ class EventEvent(models.Model): to compute protected field from re-computation) """ for event in self: if event.event_type_id.seats_max: - event.seats_availability = 'limited' - if not event.seats_availability: - event.seats_availability = 'unlimited' + event.seats_limited = True + if not event.seats_limited: + event.seats_limited = False @api.depends('event_type_id') def _compute_from_event_type(self): @@ -341,7 +326,6 @@ class EventEvent(models.Model): Updated by this method * seats_max -> triggers _compute_seats (all seats computation) * auto_confirm - * is_online -> triggers _compute_address_id (address_id computation) * event_mail_ids * event_ticket_ids -> triggers _compute_start_sale_date (start_sale_date computation) """ @@ -349,8 +333,6 @@ class EventEvent(models.Model): if not event.event_type_id: if not event.seats_max: event.seats_max = 0 - if not event.is_online: - event.is_online = False if not event.event_ticket_ids: event.event_ticket_ids = False continue @@ -361,8 +343,6 @@ class EventEvent(models.Model): if event.event_type_id.auto_confirm: event.auto_confirm = event.event_type_id.auto_confirm - event.is_online = event.event_type_id.is_online - # compute mailing information (force only if activated and mailing defined) if event.event_type_id.use_mail_schedule and event.event_type_id.event_type_mail_ids: event.event_mail_ids = [(5, 0, 0)] + [ @@ -384,9 +364,9 @@ class EventEvent(models.Model): if event.event_type_id.tag_ids: event.tag_ids = event.event_type_id.tag_ids - @api.constrains('seats_max', 'seats_available', 'seats_availability') + @api.constrains('seats_max', 'seats_available', 'seats_limited') def _check_seats_limit(self): - if any(event.seats_availability == 'limited' and event.seats_max and event.seats_available < 0 for event in self): + if any(event.seats_limited and event.seats_max and event.seats_available < 0 for event in self): raise ValidationError(_('No more available seats.')) @api.constrains('date_begin', 'date_end') @@ -412,7 +392,7 @@ class EventEvent(models.Model): @api.model def create(self, vals): - # Temporary fix for ``seats_availability`` and ``date_tz`` required fields (see ``_compute_from_event_type`` + # Temporary fix for ``seats_limited`` and ``date_tz`` required fields (see ``_compute_from_event_type`` vals.update(self._sync_required_computed(vals)) res = super(EventEvent, self).create(vals) @@ -433,9 +413,10 @@ class EventEvent(models.Model): return super(EventEvent, self).copy(default) def _sync_required_computed(self, values): + # TODO: See if the change to seats_limited affects this ? """ Call compute fields in cache to find missing values for required fields - (seats_availability and date_tz) in case they are not given in values """ - missing_fields = list(set(['seats_availability', 'date_tz']).difference(set(values.keys()))) + (seats_limited and date_tz) in case they are not given in values """ + missing_fields = list(set(['seats_limited', 'date_tz']).difference(set(values.keys()))) if missing_fields and values: cache_event = self.new(values) cache_event._compute_from_event_type() diff --git a/addons/event/models/event_registration.py b/addons/event/models/event_registration.py index a70931038b6..c5366c8acc9 100644 --- a/addons/event/models/event_registration.py +++ b/addons/event/models/event_registration.py @@ -92,7 +92,7 @@ class EventRegistration(models.Model): @api.constrains('event_id', 'state') def _check_seats_limit(self): for registration in self: - if registration.event_id.seats_availability == 'limited' and registration.event_id.seats_max and registration.event_id.seats_available < (1 if registration.state == 'draft' else 0): + if registration.event_id.seats_limited and registration.event_id.seats_max and registration.event_id.seats_available < (1 if registration.state == 'draft' else 0): raise ValidationError(_('No more seats available for this event.')) @api.constrains('event_ticket_id', 'state') @@ -151,7 +151,7 @@ class EventRegistration(models.Model): def _check_auto_confirmation(self): if any(not registration.event_id.auto_confirm or - (not registration.event_id.seats_available and registration.event_id.seats_availability == 'limited') for registration in self): + (not registration.event_id.seats_available and registration.event_id.seats_limited) for registration in self): return False return True diff --git a/addons/event/models/event_ticket.py b/addons/event/models/event_ticket.py index 8ae2c985fee..37572bc86eb 100644 --- a/addons/event/models/event_ticket.py +++ b/addons/event/models/event_ticket.py @@ -19,18 +19,17 @@ class EventTemplateTicket(models.Model): event_type_id = fields.Many2one( 'event.type', string='Event Category', ondelete='cascade', required=True) # seats - seats_availability = fields.Selection([ - ('limited', 'Limited'), ('unlimited', 'Unlimited')], string='Seats Limit', - readonly=True, store=True, compute='_compute_seats_availability') + seats_limited = fields.Boolean(string='Seats Limit', readonly=True, store=True, + compute='_compute_seats_limited') seats_max = fields.Integer( string='Maximum Seats', help="Define the number of available tickets. If you have too many registrations you will " "not be able to sell tickets anymore. Set 0 to ignore this rule set as unlimited.") @api.depends('seats_max') - def _compute_seats_availability(self): + def _compute_seats_limited(self): for ticket in self: - ticket.seats_availability = 'limited' if ticket.seats_max else 'unlimited' + ticket.seats_limited = ticket.seats_max @api.model def _get_event_ticket_fields_whitelist(self): diff --git a/addons/event/tests/common.py b/addons/event/tests/common.py index 62509636ed9..dab3e3339a1 100644 --- a/addons/event/tests/common.py +++ b/addons/event/tests/common.py @@ -51,7 +51,6 @@ class TestEventCommon(common.SavepointCase): cls.event_type_complex = cls.env['event.type'].create({ 'name': 'Update Type', 'auto_confirm': True, - 'is_online': False, 'has_seats_limitation': True, 'seats_max': 30, 'use_timezone': True, diff --git a/addons/event/tests/test_event_flow.py b/addons/event/tests/test_event_flow.py index ff114bb4196..a1bd3ffcd35 100644 --- a/addons/event/tests/test_event_flow.py +++ b/addons/event/tests/test_event_flow.py @@ -82,7 +82,7 @@ class TestEventFlow(TestEventCommon): 'date_begin': datetime.datetime.now() + relativedelta(days=-1), 'date_end': datetime.datetime.now() + relativedelta(days=1), 'seats_max': 2, - 'seats_availability': 'limited', + 'seats_limited': True, }) self.assertTrue(test_event.auto_confirm) @@ -124,7 +124,7 @@ class TestEventFlow(TestEventCommon): 'name': 'TestEvent', 'date_begin': datetime.datetime.now() + relativedelta(days=-1), 'date_end': datetime.datetime.now() + relativedelta(days=1), - 'seats_availability': 'limited', + 'seats_limited': True, 'seats_max': 10, }) self.assertFalse(test_event.auto_confirm) diff --git a/addons/event/tests/test_event_internals.py b/addons/event/tests/test_event_internals.py index 1a381f3f37b..9fa9b9476d5 100644 --- a/addons/event/tests/test_event_internals.py +++ b/addons/event/tests/test_event_internals.py @@ -59,21 +59,15 @@ class TestEventData(TestEventCommon): 'date_end': FieldsDatetime.to_string(datetime.today() + timedelta(days=15)), }) - self.assertFalse(event.is_online) self.assertEqual(event.address_id, self.env.user.company_id.partner_id) # seats: coming from event type configuration - self.assertEqual(event.seats_availability, 'limited') + self.assertTrue(event.seats_limited) self.assertEqual(event.seats_available, event.event_type_id.seats_max) self.assertEqual(event.seats_unconfirmed, 0) self.assertEqual(event.seats_reserved, 0) self.assertEqual(event.seats_used, 0) self.assertEqual(event.seats_expected, 0) - # set is_online: should reset the address_id field - event.update({'is_online': True}) - self.assertTrue(event.is_online) - self.assertFalse(event.address_id) - # create registration in order to check the seats computation self.assertTrue(event.auto_confirm) for x in range(5): @@ -117,12 +111,10 @@ class TestEventData(TestEventCommon): 'name': 'Event Update Type', 'date_begin': FieldsDatetime.to_string(datetime.today() + timedelta(days=1)), 'date_end': FieldsDatetime.to_string(datetime.today() + timedelta(days=15)), - 'is_online': True, }) self.assertEqual(event.date_tz, self.env.user.tz) - self.assertEqual(event.seats_availability, 'unlimited') + self.assertFalse(event.seats_limited) self.assertFalse(event.auto_confirm) - self.assertTrue(event.is_online) self.assertEqual(event.event_mail_ids, self.env['event.mail']) event_type.write({ @@ -133,10 +125,9 @@ class TestEventData(TestEventCommon): }) event.write({'event_type_id': event_type.id}) self.assertEqual(event.date_tz, 'Europe/Paris') - self.assertEqual(event.seats_availability, 'limited') + self.assertTrue(event.seats_limited) self.assertEqual(event.seats_max, event_type.seats_max) self.assertTrue(event.auto_confirm) - self.assertFalse(event.is_online) self.assertEqual(event.event_mail_ids.interval_nbr, 1) self.assertEqual(event.event_mail_ids.interval_unit, 'days') self.assertEqual(event.event_mail_ids.interval_type, 'before_event') @@ -171,7 +162,7 @@ class TestEventData(TestEventCommon): event.write({ 'date_end': datetime.now() + timedelta(days=3), 'seats_max': 1, - 'seats_availability': 'limited', + 'seats_limited': True, }) self.assertEqual(event.seats_available, 0) self.assertFalse(event.event_registrations_open) @@ -255,11 +246,11 @@ class TestEventTicketData(TestEventCommon): first_ticket = event.event_ticket_ids.filtered(lambda t: t.name == 'First Ticket') second_ticket = event.event_ticket_ids.filtered(lambda t: t.name == 'Second Ticket') - 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) # sale is ended diff --git a/addons/event/tests/test_event_security.py b/addons/event/tests/test_event_security.py index 2ee16f2781b..019458e2fd9 100644 --- a/addons/event/tests/test_event_security.py +++ b/addons/event/tests/test_event_security.py @@ -26,7 +26,7 @@ class TestEventSecurity(TestEventCommon): 'name': 'TestEvent', 'date_begin': datetime.now() + relativedelta(days=-1), 'date_end': datetime.now() + relativedelta(days=1), - 'seats_availability': 'limited', + 'seats_limited': True, 'seats_max': 10, }) diff --git a/addons/event/views/event_ticket_views.xml b/addons/event/views/event_ticket_views.xml index 973c0eb0c1f..b4210f37f0d 100644 --- a/addons/event/views/event_ticket_views.xml +++ b/addons/event/views/event_ticket_views.xml @@ -11,7 +11,7 @@ - + @@ -26,7 +26,7 @@ - + @@ -162,7 +162,7 @@ - + diff --git a/addons/event/views/event_views.xml b/addons/event/views/event_views.xml index bfb1815c8ff..4173227fb86 100644 --- a/addons/event/views/event_views.xml +++ b/addons/event/views/event_views.xml @@ -15,20 +15,6 @@

Location

-
-
- -
-
-
-
@@ -148,7 +134,6 @@ - @@ -215,26 +200,10 @@
- - - - - - - - - - - - - - - @@ -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
-
- +
@@ -240,7 +238,7 @@
+ t-if="event.seats_limited and not event.seats_available"> Sold Out
@@ -466,31 +464,24 @@
- -
-
Location
-

-
- - - -
-
Online Event
-
-
+
+
Location
+

+
+
Organizer
@@ -596,8 +587,8 @@ - - + +