summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js
diff options
context:
space:
mode:
authorChristophe Matthieu <chm@odoo.com>2017-04-13 15:32:12 +0200
committerChristophe Matthieu <chm@odoo.com>2017-04-13 16:55:11 +0200
commit2f67881d4517b786f08a84242f0dcb3c1c8ece57 (patch)
treea3937fa3308f29a924f32c6560f710bd6ec2cddf /addons/web/static/src/js
parentc32724eae06c987e74a0600f1669696e499edc33 (diff)
[FIX] calendar: Various fixes
Traceback when: * click on first row of calendar * move an event somewhere else with drag and drop * click on the mini calendar * filter from the control panel triggers a traceback * add an attendee: traceback * day/week/month: traceback * cannot add a leave, the fromViewDialog does not open * one day oo server-side when select all day
Diffstat (limited to 'addons/web/static/src/js')
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_controller.js20
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_model.js14
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_renderer.js13
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_view.js2
4 files changed, 29 insertions, 20 deletions
diff --git a/addons/web/static/src/js/views/calendar/calendar_controller.js b/addons/web/static/src/js/views/calendar/calendar_controller.js
index 5f432e37bfc..7327ff34108 100644
--- a/addons/web/static/src/js/views/calendar/calendar_controller.js
+++ b/addons/web/static/src/js/views/calendar/calendar_controller.js
@@ -102,7 +102,7 @@ var CalendarController = AbstractController.extend({
* @param {integer} record.id
*/
_updateRecord: function (record) {
- this.model.updateRecord(record).reload.bind(this);
+ this.model.updateRecord(record).then(this.reload.bind(this));
},
//--------------------------------------------------------------------------
@@ -156,7 +156,7 @@ var CalendarController = AbstractController.extend({
}, function () {
// This will occurs if there are some more fields required
event.data.options.disable_quick_create = true;
- event.data.options.on_save = this.destroy.bind(this);
+ event.data.data.on_save = self.quick.destroy.bind(self.quick);
self._onOpenCreate(event.data);
});
},
@@ -170,17 +170,17 @@ var CalendarController = AbstractController.extend({
}
var data = this.model.calendarEventToRecord(event.data);
- var context = _.extend({}, this.context);
- context.default_name = data.name;
- context['default_' + this.mapping.date_start] = data.start;
+ var context = _.extend({}, this.context, event.options && event.options.context);
+ context.default_name = data.name || null;
+ context['default_' + this.mapping.date_start] = data.start || null;
if (this.mapping.date_stop) {
- context['default_' + this.mapping.date_stop] = data.stop;
+ context['default_' + this.mapping.date_stop] = data.stop || null;
}
if (this.mapping.date_delay) {
- context['default_' + this.mapping.date_delay] = data.duration;
+ context['default_' + this.mapping.date_delay] = data.duration || null;
}
if (this.mapping.all_day) {
- context['default_' + this.mapping.all_day] = data[this.mapping.all_day];
+ context['default_' + this.mapping.all_day] = data[this.mapping.all_day] || null;
}
for (var k in context) {
@@ -189,9 +189,9 @@ var CalendarController = AbstractController.extend({
}
}
- var options = _.extend({}, this.options, {context: context});
+ var options = _.extend({}, this.options, event.options, {context: context});
- if(!options.disable_quick_create && !event.data.disable_quick_create) {
+ if(!options.disable_quick_create && !event.data.disable_quick_create && this.quick_add_pop) {
if (this.quick != null) {
this.quick.destroy();
this.quick = null;
diff --git a/addons/web/static/src/js/views/calendar/calendar_model.js b/addons/web/static/src/js/views/calendar/calendar_model.js
index c2f405e1b40..5f068e77847 100644
--- a/addons/web/static/src/js/views/calendar/calendar_model.js
+++ b/addons/web/static/src/js/views/calendar/calendar_model.js
@@ -42,7 +42,7 @@ return AbstractModel.extend({
end = start.clone().add(1, 'h');
}
- if (event.allDay || end.diff(start) === 86400000) {
+ if (event.allDay || end.diff(start) % 86400000 === 0) {
event.allDay = true;
if (this.scale === 'month') {
@@ -62,7 +62,7 @@ return AbstractModel.extend({
}
} else if (this.mapping.all_day) {
start.startOf('day');
- end.startOf('day');
+ end.startOf('day').add(-1, 'days');
} else {
// default hours in the user's timezone
start.hours(7).add(-this.getSession().tzOffset, 'minutes');
@@ -235,6 +235,9 @@ return AbstractModel.extend({
* @returns {Deferred}
*/
reload: function (_handle, params) {
+ if (params.domain) {
+ this.data.domain = params.domain;
+ }
return this._loadCalendar();
},
/**
@@ -290,7 +293,6 @@ return AbstractModel.extend({
model: this.modelName,
method: 'write',
args: [record.id, data],
- context: _.pick(event.data.options, 'context'),
});
},
@@ -590,6 +592,10 @@ return AbstractModel.extend({
date_start.add(this.getSession().tzOffset, 'minutes');
date_stop.add(this.getSession().tzOffset, 'minutes');
+ if (this.mapping.all_day && evt[this.mapping.all_day]) {
+ date_stop.add(1, 'days');
+ }
+
var r = {
'record': evt,
'start': date_start,
@@ -610,7 +616,7 @@ return AbstractModel.extend({
r.reset_allday = r.allDay;
r.allDay = true;
r.start = date_start.format('YYYY-MM-DD');
- r.end = date_stop.clone().add(1, 'day').startOf('day').format('YYYY-MM-DD');
+ r.end = date_stop.startOf('day').format('YYYY-MM-DD');
}
return r;
diff --git a/addons/web/static/src/js/views/calendar/calendar_renderer.js b/addons/web/static/src/js/views/calendar/calendar_renderer.js
index fc76d42544f..9ffdb6d0524 100644
--- a/addons/web/static/src/js/views/calendar/calendar_renderer.js
+++ b/addons/web/static/src/js/views/calendar/calendar_renderer.js
@@ -314,10 +314,13 @@ return AbstractRenderer.extend({
event.title = $render.find('.o_field_type_char:first').text();
element.find('.fc-content').html($render.html());
element.addClass($render.attr('class'));
- var display_hour = (event.start.format('HH:mm') === '00:00' ? event.r_start.format('HH:mm') : event.start.format('HH:mm')) + ' - ' +
- (event.end && event.end.format('HH:mm') !== '00:00' ? event.end.format('HH:mm') : event.r_end.format('HH:mm'));
- if (display_hour === '00:00 - 00:00') {
- display_hour = _t('All the day');
+ var display_hour = '';
+ if (!event.allDay) {
+ display_hour = (event.start.format('HH:mm') === '00:00' ? event.r_start.format('HH:mm') : event.start.format('HH:mm')) + ' - ' +
+ (event.end && event.end.format('HH:mm') !== '00:00' ? event.end.format('HH:mm') : event.r_end.format('HH:mm'));
+ if (display_hour === '00:00 - 00:00') {
+ display_hour = _t('All the day');
+ }
}
element.find('.fc-content .fc-time').text(display_hour);
},
@@ -336,7 +339,7 @@ return AbstractRenderer.extend({
this.$small_calendar.datepicker({
'onSelect': function (datum, obj) {
self.trigger_up('changeDate', {
- date: new Date(+obj.currentYear , +obj.currentMonth, +obj.currentDay).toString()
+ date: moment(new Date(+obj.currentYear , +obj.currentMonth, +obj.currentDay))
});
},
'dayNamesMin' : this.state.fc_options.dayNamesShort,
diff --git a/addons/web/static/src/js/views/calendar/calendar_view.js b/addons/web/static/src/js/views/calendar/calendar_view.js
index c7876c2e119..04fb032f8cd 100644
--- a/addons/web/static/src/js/views/calendar/calendar_view.js
+++ b/addons/web/static/src/js/views/calendar/calendar_view.js
@@ -108,7 +108,7 @@ var CalendarView = AbstractView.extend({
//if quick_add = False, we don't allow quick_add
//if quick_add = not specified in view, we use the default widgets.QuickCreate
//if quick_add = is NOT False and IS specified in view, we this one for widgets.QuickCreate'
- this.controllerParams.quick_add_pop = (attrs.quick_add || utils.toBoolElse(attrs.quick_add+'', true));
+ this.controllerParams.quick_add_pop = (!('quick_add' in attrs) || utils.toBoolElse(attrs.quick_add+'', true));
this.controllerParams.disable_quick_create = params.disable_quick_create || !this.controllerParams.quick_add_pop;
this.controllerParams.confirm_on_delete = true;
// If this field is set ot true, we don't open the event in form view, but in a popup with the view_id passed by this parameter