[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:
Lucas Perais (lpe)
2019-02-07 13:43:00 +00:00
parent bb0eccd263
commit b5c7099b95
6 changed files with 93 additions and 14 deletions
+12 -3
View File
@@ -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):
+1
View File
@@ -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)
+8 -11
View File
@@ -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)