[FIX] website_event[_track]: create menus on create
Before this commit, the website menus were created only on write on an event After this commit, the menus are created at create time too OPW 1914343 closes odoo/odoo#30919
This commit is contained in:
@@ -72,9 +72,7 @@ class Event(models.Model):
|
||||
(_('Register'), '/event/%s/register' % slug(self), False),
|
||||
]
|
||||
|
||||
@api.multi
|
||||
def write(self, vals):
|
||||
res = super(Event, self).write(vals)
|
||||
def _toggle_create_website_menus(self, vals):
|
||||
for event in self:
|
||||
if 'website_menu' in vals:
|
||||
if event.menu_id and not event.website_menu:
|
||||
@@ -85,6 +83,17 @@ class Event(models.Model):
|
||||
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)
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
res = super(Event, self).create(vals)
|
||||
res._toggle_create_website_menus(vals)
|
||||
return res
|
||||
|
||||
@api.multi
|
||||
def write(self, vals):
|
||||
res = super(Event, self).write(vals)
|
||||
self._toggle_create_website_menus(vals)
|
||||
return res
|
||||
|
||||
def _create_menu(self, sequence, name, url, xml_id):
|
||||
|
||||
@@ -2,3 +2,4 @@
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import test_ui
|
||||
from . import test_event_website
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from odoo import fields
|
||||
from odoo.addons.event.tests.common import TestEventCommon
|
||||
|
||||
|
||||
class TestEventWebsiteHelper(TestEventCommon):
|
||||
def _get_menus(self):
|
||||
return set(['Introduction', 'Location', 'Register'])
|
||||
|
||||
def _assert_website_menus(self, event):
|
||||
self.assertTrue(event.menu_id)
|
||||
|
||||
menus = self.env['website.menu'].search([('parent_id', '=', event.menu_id.id)])
|
||||
self.assertEqual(len(menus), len(self._get_menus()))
|
||||
self.assertEqual(set(menus.mapped('name')), self._get_menus())
|
||||
|
||||
|
||||
class TestEventWebsite(TestEventWebsiteHelper):
|
||||
|
||||
def test_create_menu0(self):
|
||||
event = self.env['event.event'].create({
|
||||
'name': 'TestEvent',
|
||||
'date_begin': fields.Datetime.to_string(datetime.today() + timedelta(days=1)),
|
||||
'date_end': fields.Datetime.to_string(datetime.today() + timedelta(days=15)),
|
||||
'registration_ids': [(0, 0, {
|
||||
'partner_id': self.user_eventuser.partner_id.id,
|
||||
})],
|
||||
'website_menu': True,
|
||||
})
|
||||
|
||||
self._assert_website_menus(event)
|
||||
|
||||
def test_write_menu0(self):
|
||||
self.assertFalse(self.event_0.menu_id)
|
||||
self.event_0.website_menu = True
|
||||
self._assert_website_menus(self.event_0)
|
||||
@@ -61,18 +61,17 @@ class Event(models.Model):
|
||||
for event in self:
|
||||
event.sponsor_count = result.get(event.id, 0)
|
||||
|
||||
@api.multi
|
||||
def write(self, vals):
|
||||
res = super(Event, self).write(vals)
|
||||
def _toggle_create_website_menus(self, vals):
|
||||
super(Event, self)._toggle_create_website_menus(vals)
|
||||
for event in self:
|
||||
if 'website_track' in vals:
|
||||
if vals['website_track']:
|
||||
for sequence, (name, url, xml_id, menu_type) in enumerate(self._get_track_menu_entries()):
|
||||
menu = super(Event, self)._create_menu(sequence, name, url, xml_id)
|
||||
self.env['website.event.menu'].create({
|
||||
'menu_id':menu.id,
|
||||
'event_id':self.id,
|
||||
'menu_type':menu_type,
|
||||
'menu_id': menu.id,
|
||||
'event_id': self.id,
|
||||
'menu_type': menu_type,
|
||||
})
|
||||
else:
|
||||
self.track_menu_ids.mapped('menu_id').unlink()
|
||||
@@ -81,14 +80,12 @@ class Event(models.Model):
|
||||
for sequence, (name, url, xml_id, menu_type) in enumerate(self._get_track_proposal_menu_entries()):
|
||||
menu = super(Event, self)._create_menu(sequence, name, url, xml_id)
|
||||
self.env['website.event.menu'].create({
|
||||
'menu_id':menu.id,
|
||||
'event_id':self.id,
|
||||
'menu_type':menu_type,
|
||||
'menu_id': menu.id,
|
||||
'event_id': self.id,
|
||||
'menu_type': menu_type,
|
||||
})
|
||||
else:
|
||||
self.track_proposal_menu_ids.mapped('menu_id').unlink()
|
||||
return res
|
||||
|
||||
|
||||
def _get_track_menu_entries(self):
|
||||
self.ensure_one()
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
from . import test_event_track_website
|
||||
@@ -0,0 +1,34 @@
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from odoo import fields
|
||||
from odoo.addons.website_event.tests.test_event_website import TestEventWebsiteHelper
|
||||
|
||||
|
||||
class TestEventWebsiteTrack(TestEventWebsiteHelper):
|
||||
|
||||
def _get_menus(self):
|
||||
return super(TestEventWebsiteTrack, self)._get_menus() | set(['Talks', 'Agenda', 'Talk Proposals'])
|
||||
|
||||
def test_create_menu1(self):
|
||||
event = self.env['event.event'].create({
|
||||
'name': 'TestEvent',
|
||||
'date_begin': fields.Datetime.to_string(datetime.today() + timedelta(days=1)),
|
||||
'date_end': fields.Datetime.to_string(datetime.today() + timedelta(days=15)),
|
||||
'registration_ids': [(0, 0, {
|
||||
'partner_id': self.user_eventuser.partner_id.id,
|
||||
})],
|
||||
'website_menu': True,
|
||||
'website_track': True,
|
||||
'website_track_proposal': True,
|
||||
})
|
||||
|
||||
self._assert_website_menus(event)
|
||||
|
||||
def test_write_menu1(self):
|
||||
self.assertFalse(self.event_0.menu_id)
|
||||
self.event_0.write({
|
||||
'website_menu': True,
|
||||
'website_track': True,
|
||||
'website_track_proposal': True,
|
||||
})
|
||||
self._assert_website_menus(self.event_0)
|
||||
Reference in New Issue
Block a user