diff --git a/addons/event/models/event_event.py b/addons/event/models/event_event.py index 9713d9847ee..45efd9b6436 100644 --- a/addons/event/models/event_event.py +++ b/addons/event/models/event_event.py @@ -523,6 +523,19 @@ class EventEvent(models.Model): default = dict(default or {}, name=_("%s (copy)") % (self.name)) return super(EventEvent, self).copy(default) + @api.model + def _get_mail_message_access(self, res_ids, operation, model_name=None): + if ( + operation == 'create' + and self.env.user.has_group('event.group_event_registration_desk') + and (not model_name or model_name == 'event.event') + ): + # allow the registration desk users to post messages on Event + # can not be done with "_mail_post_access" otherwise public user will be + # able to post on published Event (see website_event) + return 'read' + return super(EventEvent, self)._get_mail_message_access(res_ids, operation, model_name) + 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 diff --git a/addons/event/models/res_partner.py b/addons/event/models/res_partner.py index 1311e15d2f6..d67314cce4d 100644 --- a/addons/event/models/res_partner.py +++ b/addons/event/models/res_partner.py @@ -1,20 +1,18 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import api, fields, models +from odoo import fields, models class ResPartner(models.Model): _inherit = 'res.partner' event_count = fields.Integer( - '# Events', compute='_compute_event_count', groups='event.group_event_user', + '# Events', compute='_compute_event_count', groups='event.group_event_registration_desk', help='Number of events the partner has participated.') def _compute_event_count(self): self.event_count = 0 - if not self.user_has_groups('event.group_event_user'): - return for partner in self: partner.event_count = self.env['event.event'].search_count([('registration_ids.partner_id', 'child_of', partner.ids)]) diff --git a/addons/event/security/event_security.xml b/addons/event/security/event_security.xml index 1059c26c9c0..645f798641e 100644 --- a/addons/event/security/event_security.xml +++ b/addons/event/security/event_security.xml @@ -6,9 +6,15 @@ 18 + + Registration Desk + + + + User - + diff --git a/addons/event/security/ir.model.access.csv b/addons/event/security/ir.model.access.csv index 7a59e984934..06450e5dc96 100644 --- a/addons/event/security/ir.model.access.csv +++ b/addons/event/security/ir.model.access.csv @@ -1,24 +1,27 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_event_type_user,event.type.user,model_event_type,event.group_event_user,1,0,0,0 +access_event_type_registration,event.type.registration,model_event_type,event.group_event_registration_desk,1,0,0,0 access_event_type_manager,event.type.manager,model_event_type,event.group_event_manager,1,1,1,1 -access_event_type_ticket_user,event.type.ticket.user,model_event_type_ticket,event.group_event_user,1,0,0,0 +access_event_type_ticket_registration,event.type.ticket.registration,model_event_type_ticket,event.group_event_registration_desk,1,0,0,0 access_event_type_ticket_manager,event.type.ticket.manager,model_event_type_ticket,event.group_event_manager,1,1,1,1 -access_event_event,event.event,model_event_event,,1,0,0,0 -access_event_event_user,event.event.user,model_event_event,event.group_event_user,1,0,0,0 +access_event_event_registration,event.event.registration,model_event_event,event.group_event_registration_desk,1,0,0,0 +access_event_event_user,event.event.user,model_event_event,event.group_event_user,1,1,1,0 access_event_event_manager,event.event.manager,model_event_event,event.group_event_manager,1,1,1,1 -access_event_event_ticket_user,event.event.ticket.user,model_event_event_ticket,event.group_event_user,1,0,0,0 -access_event_event_ticket_manager,event.event.ticket.manager,model_event_event_ticket,event.group_event_manager,1,1,1,1 -access_event_registration_user,event.registration.user,model_event_registration,event.group_event_user,1,1,1,1 +access_event_event_ticket,event.event.ticket,model_event_event_ticket,,0,0,0,0 +access_event_event_ticket_user,event.event.ticket.user,model_event_event_ticket,event.group_event_user,1,1,1,1 access_event_registration,event.registration,model_event_registration,,0,0,0,0 -access_event_mail_user,event.mail.user,model_event_mail,event.group_event_user,1,0,0,0 -access_event_mail_manager,event.mail.manager,model_event_mail,event.group_event_manager,1,1,1,1 -access_event_mail_registration_user,event.mail.registration.user,model_event_mail_registration,event.group_event_user,1,0,0,0 +access_event_registration_registration,event.registration.registration,model_event_registration,event.group_event_registration_desk,1,1,1,0 +access_event_registration_manager,event.registration.manager,model_event_registration,event.group_event_manager,1,1,1,1 +access_event_mail_registration,event.mail.registration,model_event_mail,event.group_event_registration_desk,1,0,0,0 +access_event_mail_user,event.mail.user,model_event_mail,event.group_event_user,1,1,1,1 +access_event_mail_registration_registration,event.mail.registration.registration,model_event_mail_registration,event.group_event_registration_desk,1,0,0,0 access_event_mail_registration_manager,event.mail.registration.manager,model_event_mail_registration,event.group_event_manager,1,1,1,1 -access_event_type_mail_user,event.type.mail.user,model_event_type_mail,event.group_event_user,1,0,0,0 +access_event_type_mail_registration,event.type.mail.registration,model_event_type_mail,event.group_event_registration_desk,1,0,0,0 access_event_type_mail_manager,event.type.mail.manager,model_event_type_mail,event.group_event_manager,1,1,1,1 -access_event_stage_user,event.stage.user,model_event_stage,event.group_event_user,1,1,1,1 +access_event_stage_registration,event.stage.registration,model_event_stage,event.group_event_registration_desk,1,0,0,0 access_event_stage_manager,event.stage.manager,model_event_stage,event.group_event_manager,1,1,1,1 -access_event_tag_category_user,event.tag.category.user,model_event_tag_category,event.group_event_user,1,0,0,0 -access_event_tag_category_manager,event.tag.category.manager,model_event_tag_category,event.group_event_manager,1,1,1,1 -access_event_tag_user,event.tag.user,model_event_tag,event.group_event_user,1,1,0,0 +access_event_tag_category_registration,event.tag.category.registration,model_event_tag_category,event.group_event_registration_desk,1,0,0,0 +access_event_tag_category_user,event.tag.category.user,model_event_tag_category,event.group_event_user,1,1,1,1 +access_event_tag,event.tag,model_event_tag,,0,0,0,0 +access_event_tag_registration,event.tag.user,model_event_tag,event.group_event_registration_desk,1,0,0,0 +access_event_tag_user,event.tag.user,model_event_tag,event.group_event_user,1,1,1,0 access_event_tag_manager,event.tag.manager,model_event_tag,event.group_event_manager,1,1,1,1 diff --git a/addons/event/tests/common.py b/addons/event/tests/common.py index 5d4144d47cc..efbfbd27c78 100644 --- a/addons/event/tests/common.py +++ b/addons/event/tests/common.py @@ -27,6 +27,13 @@ class TestEventCommon(common.TransactionCase): company_id=cls.env.ref("base.main_company").id, groups='base.group_user', ) + cls.user_eventregistrationdesk = mail_new_test_user( + cls.env, login='user_eventregistrationdesk', + name='Ursule EventRegistration', email='ursule.eventregistration@test.example.com', + tz='Europe/Brussels', notification_type='inbox', + company_id=cls.env.ref("base.main_company").id, + groups='base.group_user,event.group_event_registration_desk', + ) cls.user_eventuser = mail_new_test_user( cls.env, login='user_eventuser', name='Ursule EventUser', email='ursule.eventuser@test.example.com', diff --git a/addons/event/views/event_menu_views.xml b/addons/event/views/event_menu_views.xml index 08d9bb6144e..a2c7ece25b2 100644 --- a/addons/event/views/event_menu_views.xml +++ b/addons/event/views/event_menu_views.xml @@ -5,7 +5,7 @@ @@ -13,14 +13,14 @@ id="menu_event_event" sequence="1" parent="event.event_main_menu" - groups="event.group_event_user"/> + groups="event.group_event_registration_desk"/> + groups="event.group_event_user"/> + groups="event.group_event_user"/> @@ -739,7 +739,7 @@ parent="event.menu_reporting_events" sequence="4" action="action_registration" - groups="event.group_event_manager"/> + groups="event.group_event_user"/> diff --git a/addons/event_crm/models/crm_lead.py b/addons/event_crm/models/crm_lead.py index e51aadc104f..751cb58f333 100644 --- a/addons/event_crm/models/crm_lead.py +++ b/addons/event_crm/models/crm_lead.py @@ -11,11 +11,11 @@ class Lead(models.Model): event_id = fields.Many2one('event.event', string="Source Event", help="Event triggering the rule that created this lead") registration_ids = fields.Many2many( 'event.registration', string="Source Registrations", - groups='event.group_event_user', + groups='event.group_event_registration_desk', help="Registrations triggering the rule that created this lead") registration_count = fields.Integer( string="# Registrations", compute='_compute_registration_count', - groups='event.group_event_user', + groups='event.group_event_registration_desk', help="Counter for the registrations linked to this lead") @api.depends('registration_ids') diff --git a/addons/event_crm/models/event_registration.py b/addons/event_crm/models/event_registration.py index a4b2d04edcd..033bb0d3aec 100644 --- a/addons/event_crm/models/event_registration.py +++ b/addons/event_crm/models/event_registration.py @@ -14,7 +14,7 @@ class EventRegistration(models.Model): groups='sales_team.group_sale_salesman', help="Leads generated from the registration.") lead_count = fields.Integer( - '# Leads', compute='_compute_lead_count', groups='sales_team.group_sale_salesman', + '# Leads', compute='_compute_lead_count', compute_sudo=True, help="Counter for the leads linked to this registration") @api.depends('lead_ids') @@ -57,7 +57,7 @@ class EventRegistration(models.Model): """ to_update, event_lead_rule_skip = False, self.env.context.get('event_lead_rule_skip') if not event_lead_rule_skip: - to_update = self.filtered(lambda reg: reg.lead_ids) + to_update = self.filtered(lambda reg: reg.lead_count) if to_update: lead_tracked_vals = to_update._get_lead_tracked_values() diff --git a/addons/event_crm/security/ir.model.access.csv b/addons/event_crm/security/ir.model.access.csv index 680057dbb4b..aa971801e35 100644 --- a/addons/event_crm/security/ir.model.access.csv +++ b/addons/event_crm/security/ir.model.access.csv @@ -1,4 +1,5 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_event_crm_manager,event.lead.rule.manager,model_event_lead_rule,event.group_event_manager,1,1,1,1 +access_event_crm_registration,event.lead.rule.user,model_event_lead_rule,event.group_event_registration_desk,1,0,0,0 access_event_crm_user,event.lead.rule.user,model_event_lead_rule,event.group_event_user,1,0,0,0 +access_event_crm_manager,event.lead.rule.manager,model_event_lead_rule,event.group_event_manager,1,1,1,1 access_event_crm_salesman,event.lead.rule.salesman,model_event_lead_rule,sales_team.group_sale_salesman,1,0,0,0 diff --git a/addons/event_crm/tests/test_event_crm_flow.py b/addons/event_crm/tests/test_event_crm_flow.py index 6f405825fa5..3c289f49e58 100644 --- a/addons/event_crm/tests/test_event_crm_flow.py +++ b/addons/event_crm/tests/test_event_crm_flow.py @@ -24,7 +24,7 @@ class TestEventCrmFlow(TestEventCrmCommon): self.assertEqual(self.event_customer.phone, '0485112233') self.assertFalse(self.event_customer.mobile) - @users('user_eventmanager') + @users('user_eventregistrationdesk') def test_event_crm_flow_batch_create(self): """ Test attendee- and order-based registrations creation. Event-based creation mimics a simplified website_event flow where grouping is done @@ -58,7 +58,7 @@ class TestEventCrmFlow(TestEventCrmCommon): # ensuring filtering out worked also at description level self.assertNotIn('invalid@not.example.com', lead.description) - @users('user_eventmanager') + @users('user_eventregistrationdesk') def test_event_crm_flow_batch_update(self): """ Test update of contact or description fields that leads to lead update. """ @@ -96,7 +96,7 @@ class TestEventCrmFlow(TestEventCrmCommon): # ensuring filtering out worked also at description level self.assertNotIn('invalid@not.example.com', lead.description) - @users('user_eventmanager') + @users('user_eventregistrationdesk') def test_event_crm_flow_per_attendee_single(self): self.assert_initial_data() @@ -145,3 +145,24 @@ class TestEventCrmFlow(TestEventCrmCommon): }) self.assertEqual(len(self.event_0.registration_ids), 4) self.assertLeadConvertion(self.test_rule_attendee, registration, partner=None) + + @users('user_eventregistrationdesk') + def test_event_crm_trigger_done(self): + """Test the case when the "crm.lead.rule" is executed when we write on the + registration state. """ + registration = self.env['event.registration'].create({ + 'partner_id': self.event_customer.id, + 'email': 'trigger.test@not.test.example.com', + 'phone': False, + 'mobile': '0456112233', + 'event_id': self.event_0.id, + }) + + leads = self.env['crm.lead'].sudo().search([ + ('registration_ids', 'in', registration.ids), + ]) + self.assertFalse(leads, 'The lead must not be created yet') + + registration.action_set_done() + + self.assertLeadConvertion(self.test_rule_order_done, registration) diff --git a/addons/event_sale/security/event_security.xml b/addons/event_sale/security/event_security.xml index a5bc0885b9b..dfb2911a32a 100644 --- a/addons/event_sale/security/event_security.xml +++ b/addons/event_sale/security/event_security.xml @@ -2,7 +2,7 @@ - + diff --git a/addons/event_sale/views/event_registration_views.xml b/addons/event_sale/views/event_registration_views.xml index eb091bd011f..b215ae02e49 100644 --- a/addons/event_sale/views/event_registration_views.xml +++ b/addons/event_sale/views/event_registration_views.xml @@ -37,7 +37,8 @@ diff --git a/addons/test_event_full/tests/test_event_security.py b/addons/test_event_full/tests/test_event_security.py index 573dc57a515..9e05631316b 100644 --- a/addons/test_event_full/tests/test_event_security.py +++ b/addons/test_event_full/tests/test_event_security.py @@ -15,12 +15,11 @@ class TestEventSecurity(TestEventCommon): @users('user_employee') @mute_logger('odoo.models.unlink', 'odoo.addons.base.models.ir_model') def test_event_access_employee(self): - # employee can read events (sure ?) + # Event: read ok event = self.event_0.with_user(self.env.user) event.read(['name']) - # event.stage_id.read(['name', 'description']) - # event.event_type_id.read(['name', 'has_seats_limitation']) + # Event: read only with self.assertRaises(AccessError): self.env['event.event'].create({ 'name': 'TestEvent', @@ -29,39 +28,80 @@ class TestEventSecurity(TestEventCommon): 'seats_limited': True, 'seats_max': 10, }) - with self.assertRaises(AccessError): event.write({ 'name': 'TestEvent Modified', }) + # Event Type + with self.assertRaises(AccessError): + self.event_type_complex.with_user(self.env.user).read(['name']) + with self.assertRaises(AccessError): + self.event_type_complex.with_user(self.env.user).write({'name': 'Test Write'}) + + # Event Stage with self.assertRaises(AccessError): self.env['event.stage'].create({ 'name': 'TestStage', }) - @users('user_eventuser') + # Event Registration + with self.assertRaises(AccessError): + self.env['event.registration'].search([]) + + @users('user_eventregistrationdesk') @mute_logger('odoo.models.unlink', 'odoo.addons.base.models.ir_model') - def test_event_access_event_user(self): + def test_event_access_event_registration(self): + # Event: read ok event = self.event_0.with_user(self.env.user) event.read(['name', 'user_id', 'kanban_state_label']) + # Event: read only with self.assertRaises(AccessError): - self.env['event.event'].create({ - 'name': 'TestEvent', - 'date_begin': datetime.now() + relativedelta(days=-1), - 'date_end': datetime.now() + relativedelta(days=1), - }) + event.name = 'Test' + with self.assertRaises(AccessError): + event.unlink() + # Event Registration + registration = self.env['event.registration'].create({ + 'event_id': self.event_0.id, + }) + self.assertEqual(registration.event_id.name, self.event_0.name, 'Registration users should be able to read') + registration.name = 'Test write' with self.assertRaises(AccessError): - event.write({ - 'name': 'TestEvent Modified', + registration.unlink() + + @users('user_eventuser') + @mute_logger('odoo.models.unlink', 'odoo.addons.base.models.ir_model') + def test_event_access_event_user(self): + # Event + event = self.event_0.with_user(self.env.user) + event.read(['name', 'user_id', 'kanban_state_label']) + event.write({'name': 'New name'}) + self.env['event.event'].create({ + 'name': 'Event', + 'date_begin': datetime.now() + relativedelta(days=-1), + 'date_end': datetime.now() + relativedelta(days=1), + }) + + # Event: cannot unlink + with self.assertRaises(AccessError): + event.unlink() + + # Event Type + with self.assertRaises(AccessError): + self.env['event.type'].create({ + 'name': 'ManagerEventType', + 'use_mail_schedule': True, + 'event_type_mail_ids': [(5, 0), (0, 0, { + 'interval_nbr': 1, 'interval_unit': 'days', 'interval_type': 'before_event', + 'template_id': self.env['ir.model.data'].xmlid_to_res_id('event.event_reminder')})] }) @users('user_eventmanager') @mute_logger('odoo.models.unlink', 'odoo.addons.base.models.ir_model') def test_event_access_event_manager(self): - # EventManager can do about everything + # Event Type event_type = self.env['event.type'].create({ 'name': 'ManagerEventType', 'use_mail_schedule': True, @@ -69,21 +109,26 @@ class TestEventSecurity(TestEventCommon): 'interval_nbr': 1, 'interval_unit': 'days', 'interval_type': 'before_event', 'template_id': self.env['ir.model.data'].xmlid_to_res_id('event.event_reminder')})] }) + event_type.write({'name': 'New Name'}) + + # Event event = self.env['event.event'].create({ 'name': 'ManagerEvent', - 'event_type_id': event_type.id, 'date_begin': datetime.now() + relativedelta(days=-1), 'date_end': datetime.now() + relativedelta(days=1), }) + event.write({'name': 'New Event Name'}) - registration = self.env['event.registration'].create({'event_id': event.id, 'name': 'Myself'}) - registration.write({'name': 'Myself2'}) - + # Event Stage stage = self.env['event.stage'].create({'name': 'test'}) stage.write({'name': 'ManagerTest'}) event.write({'stage_id': stage.id}) + # Event Registration + registration = self.env['event.registration'].create({'event_id': event.id, 'name': 'Myself'}) + registration.write({'name': 'Myself2'}) registration.unlink() + event.unlink() stage.unlink() event_type.unlink() @@ -97,3 +142,73 @@ class TestEventSecurity(TestEventCommon): event_config = self.env['res.config.settings'].with_user(self.user_eventmanager).create({ }) event_config.execute() + + def test_implied_groups(self): + """Test that the implied groups are correctly set. + + - Event Manager imply Event User + - Event User imply Registration user + """ + # Event Manager + self.assertTrue( + self.user_eventmanager.has_group('event.group_event_user'), + 'The event manager group must imply the event user group') + self.assertTrue( + self.user_eventmanager.has_group('event.group_event_registration_desk'), + 'The event manager group must imply the registration user group') + + # Event User + self.assertTrue( + self.user_eventuser.has_group('event.group_event_registration_desk'), + 'The event user group must imply the event user group') + self.assertFalse( + self.user_eventuser.has_group('event.group_event_manager'), + 'The event user group must not imply the event user group') + + # Registration User + self.assertFalse( + self.user_eventregistrationdesk.has_group('event.group_event_manager'), + 'The event registration group must not imply the event user manager') + self.assertFalse( + self.user_eventregistrationdesk.has_group('event.group_event_user'), + 'The event registration group must not imply the event user group') + + def test_multi_companies(self): + """Test ACLs with multi company. """ + company_1 = self.env.ref("base.main_company") + company_2 = self.env['res.company'].create({'name': 'Company 2'}) + user_company_1 = self.user_eventuser + + event_company_1, event_company_2 = self.env['event.event'].create([ + { + 'name': 'Event Company 1', + 'date_begin': datetime.now() + relativedelta(days=-1), + 'date_end': datetime.now() + relativedelta(days=1), + 'company_id': company_1.id, + }, { + 'name': 'Event Company 2', + 'date_begin': datetime.now() + relativedelta(days=-1), + 'date_end': datetime.now() + relativedelta(days=1), + 'company_id': company_2.id, + } + ]) + + registration_company_1, registration_company_2 = self.env['event.registration'].create([ + { + 'name': 'Registration Company 1', + 'event_id': event_company_1.id, + 'company_id': company_1.id, + }, { + 'name': 'Registration Company 2', + 'event_id': event_company_2.id, + 'company_id': company_2.id, + } + ]) + + result = self.env['event.event'].with_user(user_company_1).search([]) + self.assertIn(event_company_1, result, 'You must be able to read the events in your company') + self.assertNotIn(event_company_2, result, 'You must not be able to read events outside of your company') + + result = self.env['event.registration'].with_user(user_company_1).search([]) + self.assertIn(registration_company_1, result, 'You must be able to read the registrations in your company') + self.assertNotIn(registration_company_2, result, 'You must not be able to read registrations outside of your company') diff --git a/addons/website_event/models/event_event.py b/addons/website_event/models/event_event.py index 2ce195e456c..c8dc7259110 100644 --- a/addons/website_event/models/event_event.py +++ b/addons/website_event/models/event_event.py @@ -315,8 +315,9 @@ class Event(models.Model): :param menu_type: type of menu. Mainly used for inheritance purpose allowing more fine-grain tuning of menus. """ + self.check_access_rights('write') if not url: - self.env['ir.ui.view'].with_context(_force_unlink=True).search([('name', '=', name + ' ' + self.name)]).unlink() + self.env['ir.ui.view'].with_context(_force_unlink=True).sudo().search([('name', '=', name + ' ' + self.name)]).unlink() page_result = self.env['website'].sudo().new_page(name + ' ' + self.name, template=xml_id, ispage=False) url = "/event/" + slug(self) + "/page" + page_result['url'] # url contains starting "/" website_menu = self.env['website.menu'].sudo().create({ diff --git a/addons/website_event/models/website_visitor.py b/addons/website_event/models/website_visitor.py index 078e4f03296..20b4867cf68 100644 --- a/addons/website_event/models/website_visitor.py +++ b/addons/website_event/models/website_visitor.py @@ -13,15 +13,15 @@ class WebsiteVisitor(models.Model): help="Main identity") event_registration_ids = fields.One2many( 'event.registration', 'visitor_id', string='Event Registrations', - groups="event.group_event_user") + groups="event.group_event_registration_desk") event_registration_count = fields.Integer( '# Registrations', compute='_compute_event_registration_count', - groups="event.group_event_user") + groups="event.group_event_registration_desk") event_registered_ids = fields.Many2many( 'event.event', string="Registered Events", compute="_compute_event_registered_ids", compute_sudo=True, search="_search_event_registered_ids", - groups="event.group_event_user") + groups="event.group_event_registration_desk") @api.depends('event_registration_ids') def _compute_event_registration_count(self): diff --git a/addons/website_event/security/ir.model.access.csv b/addons/website_event/security/ir.model.access.csv index 44b13e4f59c..72eda57d554 100644 --- a/addons/website_event/security/ir.model.access.csv +++ b/addons/website_event/security/ir.model.access.csv @@ -1,11 +1,8 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_event_event_public,event.event.public,event.model_event_event,base.group_public,1,0,0,0 -access_event_event_portal,event.event.portal,event.model_event_event,base.group_portal,1,0,0,0 +access_event_event,event.event,model_event_event,,1,0,0,0 access_event_type,event.type,event.model_event_type,,0,0,0,0 -access_event_event_ticket_public,event.event.ticket.public,event.model_event_event_ticket,base.group_public,1,0,0,0 -access_event_event_ticket_portal,event.event.ticket.portal,event.model_event_event_ticket,base.group_portal,1,0,0,0 access_event_tag_category,event.tag.category,event.model_event_tag_category,,1,0,0,0 access_event_tag,event.tag,event.model_event_tag,,1,0,0,0 access_website_event_menu,website.event.menu,model_website_event_menu,,1,0,0,0 -access_website_event_menu_manager,website.event.menu.manager,model_website_event_menu,event.group_event_manager,1,1,1,1 +access_website_event_menu_user,website.event.menu.user,model_website_event_menu,event.group_event_user,1,1,1,1 access_website_visitor_user,website.visitor.user,model_website_visitor,event.group_event_user,1,1,0,0 diff --git a/addons/website_event/views/event_templates_list.xml b/addons/website_event/views/event_templates_list.xml index 2c10424fd4c..6ecd1645db3 100644 --- a/addons/website_event/views/event_templates_list.xml +++ b/addons/website_event/views/event_templates_list.xml @@ -155,7 +155,7 @@
No events found.
-
+

Use the top button '+ New' to create an event.

diff --git a/addons/website_event_exhibitor/views/event_exhibitor_templates_list.xml b/addons/website_event_exhibitor/views/event_exhibitor_templates_list.xml index ea4d27db9dc..cbc22dc98bc 100644 --- a/addons/website_event_exhibitor/views/event_exhibitor_templates_list.xml +++ b/addons/website_event_exhibitor/views/event_exhibitor_templates_list.xml @@ -123,7 +123,7 @@

We did not find any exhibitor matching your search.

-
+

Add some exhibitors to get started !

diff --git a/addons/website_event_meet/security/ir.model.access.csv b/addons/website_event_meet/security/ir.model.access.csv index c7a4cdc7459..7106df48654 100644 --- a/addons/website_event_meet/security/ir.model.access.csv +++ b/addons/website_event_meet/security/ir.model.access.csv @@ -1,6 +1,5 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_event_meeting_room,event.meeting.room,model_event_meeting_room,,1,0,0,0 -access_event_meeting_room_user,event.meeting.room.user,model_event_meeting_room,event.group_event_user,1,0,0,0 -access_event_meeting_room_manager,event.meeting.room.manager,model_event_meeting_room,event.group_event_manager,1,1,1,1 -access_chat_room_user,chat.room.user,website_jitsi.model_chat_room,event.group_event_user,1,0,0,0 -access_chat_room_manager,chat.room.manager,website_jitsi.model_chat_room,event.group_event_manager,1,1,1,1 +access_event_meeting_room_user,event.meeting.room.user,model_event_meeting_room,event.group_event_user,1,1,1,1 +access_chat_room_registration,chat.room.registration,website_jitsi.model_chat_room,event.group_event_registration_desk,1,0,0,0 +access_chat_room_user,chat.room.user,website_jitsi.model_chat_room,event.group_event_user,1,1,1,1 diff --git a/addons/website_event_questions/security/ir.model.access.csv b/addons/website_event_questions/security/ir.model.access.csv index 50ff4014e58..32d91853a38 100644 --- a/addons/website_event_questions/security/ir.model.access.csv +++ b/addons/website_event_questions/security/ir.model.access.csv @@ -2,5 +2,6 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_event_question,event.question,model_event_question,,1,0,0,0 access_event_question_user,event.question.user,model_event_question,event.group_event_user,1,1,1,1 access_event_question_answer,event.question.answer,model_event_question_answer,,1,0,0,0 +access_event_question_answer_registration,event.question.answer.registration,model_event_question_answer,event.group_event_registration_desk,1,1,0,0 access_event_question_answer_user,event.question.answer.user,model_event_question_answer,event.group_event_user,1,1,1,1 -access_event_registration_answer_user,event.registration.answer.user,model_event_registration_answer,event.group_event_user,1,1,1,1 +access_event_registration_answer_registration,event.registration.answer.registration,model_event_registration_answer,event.group_event_registration_desk,1,1,1,1 diff --git a/addons/website_event_questions/security/security.xml b/addons/website_event_questions/security/security.xml index 8c44829ca6b..98d7ed8be3e 100644 --- a/addons/website_event_questions/security/security.xml +++ b/addons/website_event_questions/security/security.xml @@ -15,7 +15,7 @@ Event Question: event user: read all [(1, '=', 1)] - + @@ -36,7 +36,7 @@ Event Question Answer: event user: read all [(1, '=', 1)] - + diff --git a/addons/website_event_sale/__manifest__.py b/addons/website_event_sale/__manifest__.py index 2a494737f1c..b6252592a14 100644 --- a/addons/website_event_sale/__manifest__.py +++ b/addons/website_event_sale/__manifest__.py @@ -14,6 +14,7 @@ Sell event tickets through eCommerce app. 'views/event_event_views.xml', 'views/website_event_templates.xml', 'views/website_sale_templates.xml', + 'security/ir.model.access.csv', 'security/website_event_sale_security.xml', ], 'auto_install': True, diff --git a/addons/website_event_sale/security/ir.model.access.csv b/addons/website_event_sale/security/ir.model.access.csv new file mode 100644 index 00000000000..e227364154e --- /dev/null +++ b/addons/website_event_sale/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_event_event_ticket,event.event.ticket,event.model_event_event_ticket,,1,0,0,0 diff --git a/addons/website_event_track/security/ir.model.access.csv b/addons/website_event_track/security/ir.model.access.csv index 6057bb52115..8f8f9bf4d1e 100644 --- a/addons/website_event_track/security/ir.model.access.csv +++ b/addons/website_event_track/security/ir.model.access.csv @@ -1,14 +1,16 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_event_track_manager,event.track.manager,model_event_track,event.group_event_manager,1,1,1,1 access_event_track,event.track,model_event_track,,1,0,0,0 +access_event_track_user,event.track.user,model_event_track,event.group_event_user,1,1,1,0 +access_event_track_manager,event.track.manager,model_event_track,event.group_event_manager,1,1,1,1 access_event_track_tag,event.track.tag,model_event_track_tag,,1,0,0,0 -access_event_track_tag_user,event.track.tag.user,model_event_track_tag,event.group_event_user,1,1,0,0 +access_event_track_tag_user,event.track.tag.user,model_event_track_tag,event.group_event_user,1,1,1,0 access_event_track_tag_manager,event.track.tag.manager,model_event_track_tag,event.group_event_manager,1,1,1,1 access_event_track_location,event.track.location,model_event_track_location,,1,0,0,0 +access_event_track_location_user,event.track.location.user,model_event_track_location,event.group_event_user,1,1,1,0 access_event_track_location_manager,event.track.location.manager,model_event_track_location,event.group_event_manager,1,1,1,1 access_event_track_stage,event.track.stage,model_event_track_stage,,1,0,0,0 access_event_track_stage_manager,event.track.stage.manager,model_event_track_stage,event.group_event_manager,1,1,1,1 access_event_track_visitor,event.track.visitor,model_event_track_visitor,,0,0,0,0 access_event_track_visitor_manager,event.track.visitor.manager,model_event_track_visitor,event.group_event_manager,1,1,1,1 access_event_track_tag_category,event.track.tag.category,model_event_track_tag_category,,1,0,0,0 -access_event_track_tag_category_manager,event.track.tag.category.manager,model_event_track_tag_category,event.group_event_manager,1,1,1,1 +access_event_track_tag_category_user,event.track.tag.category.user,model_event_track_tag_category,event.group_event_user,1,1,1,1 diff --git a/addons/website_event_track/views/event_track_templates_agenda.xml b/addons/website_event_track/views/event_track_templates_agenda.xml index 05059f54e4c..cd12205c35b 100644 --- a/addons/website_event_track/views/event_track_templates_agenda.xml +++ b/addons/website_event_track/views/event_track_templates_agenda.xml @@ -65,7 +65,7 @@

We did not find any track matching your search.

-
+

Schedule some tracks to get started !

diff --git a/addons/website_event_track/views/event_track_templates_list.xml b/addons/website_event_track/views/event_track_templates_list.xml index cfbf70b6ab0..bc32e74abb0 100644 --- a/addons/website_event_track/views/event_track_templates_list.xml +++ b/addons/website_event_track/views/event_track_templates_list.xml @@ -123,7 +123,7 @@

We did not find any track matching your search.

-
+

Schedule some tracks to get started !

diff --git a/addons/website_event_track/views/event_track_views.xml b/addons/website_event_track/views/event_track_views.xml index c76cad5c3c6..603fccd6c71 100644 --- a/addons/website_event_track/views/event_track_views.xml +++ b/addons/website_event_track/views/event_track_views.xml @@ -133,7 +133,8 @@ diff --git a/addons/website_event_track_quiz/security/ir.model.access.csv b/addons/website_event_track_quiz/security/ir.model.access.csv index 9ccf65851a7..b0e871fcb34 100644 --- a/addons/website_event_track_quiz/security/ir.model.access.csv +++ b/addons/website_event_track_quiz/security/ir.model.access.csv @@ -1,7 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -event_quiz_access_event_user,event.quiz.access.event.user,model_event_quiz,event.group_event_user,1,0,0,0 -event_quiz_access_event_manager,event.quiz.access.event.manager,model_event_quiz,event.group_event_manager,1,1,1,1 -event_quiz_question_access_event_user,event.quiz.question.access.event.user,model_event_quiz_question,event.group_event_user,1,0,0,0 -event_quiz_question_access_event_manager,event.quiz.question.access.event.manager,model_event_quiz_question,event.group_event_manager,1,1,1,1 -event_quiz_answer_access_event_user,event.quiz.answer.event.user,model_event_quiz_answer,event.group_event_user,1,0,0,0 -event_quiz_answer_access_event_manager,event.quiz.answer.event.manager,model_event_quiz_answer,event.group_event_manager,1,1,1,1 +event_quiz_access_event_user,event.quiz.access.event.user,model_event_quiz,event.group_event_user,1,1,1,1 +event_quiz_question_access_event_user,event.quiz.question.access.event.user,model_event_quiz_question,event.group_event_user,1,1,1,1 +event_quiz_answer_access_event_user,event.quiz.answer.event.user,model_event_quiz_answer,event.group_event_user,1,1,1,1