From d4fcfa1743f2d749082ec27647eecad6243bc098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sat, 29 Feb 2020 23:43:50 +0100 Subject: [PATCH] Manage readonly dates and editable calendar view If any of the dates is readonly, the event can not be modified by drag and drop. If the calendar is not editable no events can be modified. issue9012 review256451002 --- CHANGELOG | 2 ++ src/view/calendar.js | 30 +++++++++++++++++++++--------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index bfe32dbec2..d2811bf425 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +* Manage readonly dates in calendar view +* Manage editable on calendar view * Manage named separator as label * Add MultiSelection entry to Dict field * Position new record based on order diff --git a/src/view/calendar.js b/src/view/calendar.js index a6c8508412..22088dc76f 100644 --- a/src/view/calendar.js +++ b/src/view/calendar.js @@ -112,11 +112,23 @@ insert_event: function(record) { var title = this.screen.model.fields[this.fields[0]].get_client( record); - var date_start = record.field_get_client(this.attributes.dtstart); + var field_start = record.model.fields[this.attributes.dtstart]; + var date_start = field_start.get_client(record); + field_start.set_state(record); var date_end = null; + var field_end; if (this.attributes.dtend) { - date_end = record.field_get_client(this.attributes.dtend); + field_end = record.model.fields[this.attributes.dtend]; + date_end = field_end.get_client(record); + field_end.set_state(record); } + + var model_access = Sao.common.MODELACCESS.get( + this.screen.model_name); + var editable = ( + parseInt(this.attributes.editable || 1, 10) && + model_access.write); + var description = []; for (var i = 1; i < this.fields.length; i++) { description.push( @@ -137,13 +149,17 @@ if (date_end && date_start > date_end) { return; } + var event_editable = ( + editable && + !field_start.get_state_attrs(record).readonly && + (!date_end || !field_end.get_state_attrs(record).readonly)); var colors = this.get_colors(record); var values = { title: title, start: date_start, end: date_end, allDay: allDay, - editable: true, + editable: event_editable, color: colors.background_color, textColor: colors.text_color, record: record, @@ -264,16 +280,12 @@ .filter(function(e) { return e; }).join('\n')); - var model_access = Sao.common.MODELACCESS.get( - this.screen.model_name); - if (!model_access.write) { - event.editable = false; - } }, day_click: function(date, jsEvent, view){ var model_access = Sao.common.MODELACCESS.get( this.screen.model_name); - if (model_access.create) { + if (parseInt(this.attributes.editable || 1, 10) && + model_access.create) { // Set the calendar date to the clicked date this.el.fullCalendar('gotoDate', date); this.screen.current_record = null;