[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:
@@ -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):
|
||||
|
||||
+5
-5
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+1
-1
@@ -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),
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user