[FIX] calendar: allow admin to edit any event

Steps to reproduce:

  - Install `calendar` module
  - With demo user, go to calendar and create a new event
  - With admin user, go to the calendar and try to edit the event

Issue:

  Admin can't edit the event.

Cause:

  Only allowing the user who created the event or who is in the
  attendees list to edit it.

Solution:

  Allow to edit the event if user is admin (or created the event
  or is in attendees list).

opw-3185743

closes odoo/odoo#135071

X-original-commit: bf79086886e053c9f7fa2f784297bcb9b1e8d51d
Signed-off-by: Arnaud Joset (arj) <arj@odoo.com>
Signed-off-by: Nasreddin Boulif (bon) <bon@odoo.com>
This commit is contained in:
Nasreddin Boulif (bon)
2023-09-12 17:16:29 +00:00
parent 0d806fc515
commit 3f55f57c44
4 changed files with 8 additions and 7 deletions
+1 -1
View File
@@ -269,7 +269,7 @@ class Meeting(models.Model):
@api.depends_context('uid')
def _compute_user_can_edit(self):
for event in self:
event.user_can_edit = self.env.user in event.partner_ids.user_ids + event.user_id
event.user_can_edit = self.env.user in event.partner_ids.user_ids + event.user_id or self.env.user.has_group('base.group_partner_manager')
@api.depends('attendee_ids')
def _compute_invalid_email_partner_ids(self):
@@ -19,7 +19,7 @@ export class AttendeeCalendarCommonPopover extends CalendarCommonPopover {
async onWillStart() {
// Show status dropdown if user is in attendees list
if (this.isCurrentUserAttendee) {
if (this.isEventEditable) {
const stateSelections = await this.env.services.orm.call(
this.props.model.resModel,
"get_state_selections",
@@ -61,7 +61,7 @@ export class AttendeeCalendarCommonPopover extends CalendarCommonPopover {
}
get isEventDetailsVisible() {
return this.isEventPrivate ? this.isCurrentUserAttendee : true;
return this.isEventPrivate ? this.isEventEditable : true;
}
get isEventArchivable() {
@@ -72,18 +72,18 @@ export class AttendeeCalendarCommonPopover extends CalendarCommonPopover {
* @override
*/
get isEventDeletable() {
return super.isEventDeletable && this.isCurrentUserAttendee && !this.isEventArchivable;
return super.isEventDeletable && this.isEventEditable && !this.isEventArchivable;
}
/**
* @override
*/
get isEventEditable() {
return this.isCurrentUserAttendee;
return this.props.record.rawRecord.user_can_edit;
}
get isEventViewable() {
return this.isEventPrivate ? this.isCurrentUserAttendee : super.isEventEditable;
return this.isEventPrivate ? this.isEventEditable : super.isEventEditable;
}
/**
@@ -18,7 +18,7 @@ export class AttendeeCalendarCommonRenderer extends CalendarCommonRenderer {
convertRecordToEvent(record) {
let editable = false;
if (record && record.rawRecord) {
editable = record.rawRecord.partner_ids.includes(this.user.partnerId)
editable = record.rawRecord.user_can_edit;
}
return {
...super.convertRecordToEvent(record),
+1
View File
@@ -364,6 +364,7 @@
<field name="attendees_count" invisible="1"/>
<field name="accepted_count" invisible="1"/>
<field name="declined_count" invisible="1"/>
<field name="user_can_edit" invisible="1"/>
<field name="partner_ids" options="{'block': True, 'icon': 'fa fa-users'}"
filters="1" widget="many2manyattendeeexpandable" write_model="calendar.filters"
write_field="partner_id" filter_field="partner_checked" avatar_field="avatar_128"