PURPOSE Try to move from onchange / default_get to stored editable computed fields. Behavior should be the same (computed or set by user), with support of create / write / onchange field update without additional code. SPECIFICATIONS: GLOBAL RULES Update classic fields updated in some cases by onchange and/or default methods by fields with store=True, readonly=False. It means their value comes either from manual user input, either from trigger based computation. Remove onchange and default_get when possible, leading to an unique computation method and clearing fields definition. Also clean some fields definition inconsistencies, notably required fields that should instead be correctly computed or default that have no real meaning. SPECIFICATIONS: REQUIRED FIELDS As computed fields are computed after create required attribute cannot be respected without computing them beforehand. That is why we have some custom code to compute required fields if not given at create and update the creation values accordingly. SPECIFICATIONS: MAIL SCHEDULING Mail scheduling on event type is modified in this commit. Previously checking the use_mail_schedule radio button had no effect on event_type_mail_ids field. It is now reset if unchecked. It is therefore coherent with use_ticket and event_type_ticket_ids field behavior. LINKS Task ID 2089156 Community PR odoo/odoo#42911 Co-Authored-By: Thibault Delavallée <tde@odoo.com> Co-Authored-By: Michaël Mattiello <mcm@odoo.com>
105 lines
3.9 KiB
Python
105 lines
3.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from datetime import datetime
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
from odoo.addons.event.tests.common import TestEventCommon
|
|
from odoo.exceptions import AccessError
|
|
from odoo.tests.common import users
|
|
from odoo.tools import mute_logger
|
|
|
|
|
|
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 = 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'])
|
|
|
|
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),
|
|
'seats_availability': 'limited',
|
|
'seats_max': 10,
|
|
})
|
|
|
|
with self.assertRaises(AccessError):
|
|
event.write({
|
|
'name': 'TestEvent Modified',
|
|
})
|
|
|
|
with self.assertRaises(AccessError):
|
|
self.env['event.stage'].create({
|
|
'name': 'TestStage',
|
|
})
|
|
|
|
@users('user_eventuser')
|
|
@mute_logger('odoo.models.unlink', 'odoo.addons.base.models.ir_model')
|
|
def test_event_access_event_user(self):
|
|
event = self.event_0.with_user(self.env.user)
|
|
event.read(['name', 'user_id', 'kanban_state_label'])
|
|
|
|
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),
|
|
})
|
|
|
|
with self.assertRaises(AccessError):
|
|
event.write({
|
|
'name': 'TestEvent Modified',
|
|
})
|
|
|
|
# with self.assertRaises(AccessError):
|
|
# self.env['event.stage'].create({
|
|
# 'name': 'TestStage',
|
|
# })
|
|
|
|
@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 = 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')})]
|
|
})
|
|
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),
|
|
})
|
|
|
|
registration = self.env['event.registration'].create({'event_id': event.id, 'name': 'Myself'})
|
|
registration.write({'name': 'Myself2'})
|
|
|
|
stage = self.env.ref('event.event_stage_done')
|
|
stage.write({'name': 'ManagerEnded'})
|
|
event.write({'stage_id': stage.id})
|
|
|
|
registration.unlink()
|
|
event.unlink()
|
|
stage.unlink()
|
|
event_type.unlink()
|
|
|
|
# Settings access rights required to enable some features
|
|
self.user_eventmanager.write({'groups_id': [
|
|
(3, self.env.ref('base.group_system').id),
|
|
(4, self.env.ref('base.group_erp_manager').id)
|
|
]})
|
|
with self.assertRaises(AccessError):
|
|
event_config = self.env['res.config.settings'].with_user(self.user_eventmanager).create({
|
|
})
|
|
event_config.execute()
|