diff --git a/addons/calendar/models/calendar_event.py b/addons/calendar/models/calendar_event.py
index b85df7eaf7a..7d9fee82036 100644
--- a/addons/calendar/models/calendar_event.py
+++ b/addons/calendar/models/calendar_event.py
@@ -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):
diff --git a/addons/calendar/static/src/views/attendee_calendar/common/attendee_calendar_common_popover.js b/addons/calendar/static/src/views/attendee_calendar/common/attendee_calendar_common_popover.js
index 272493bb9b8..12f53dab45f 100644
--- a/addons/calendar/static/src/views/attendee_calendar/common/attendee_calendar_common_popover.js
+++ b/addons/calendar/static/src/views/attendee_calendar/common/attendee_calendar_common_popover.js
@@ -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;
}
/**
diff --git a/addons/calendar/static/src/views/attendee_calendar/common/attendee_calendar_common_renderer.js b/addons/calendar/static/src/views/attendee_calendar/common/attendee_calendar_common_renderer.js
index 4e667fe4464..1aec93bf8f2 100644
--- a/addons/calendar/static/src/views/attendee_calendar/common/attendee_calendar_common_renderer.js
+++ b/addons/calendar/static/src/views/attendee_calendar/common/attendee_calendar_common_renderer.js
@@ -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),
diff --git a/addons/calendar/views/calendar_views.xml b/addons/calendar/views/calendar_views.xml
index 718c39eb703..5fd4bf88798 100644
--- a/addons/calendar/views/calendar_views.xml
+++ b/addons/calendar/views/calendar_views.xml
@@ -364,6 +364,7 @@
+