[FIX] Some fixes for calendar view

bzr revid: fme@openerp.com-20111201230736-p9dih0ni953z2mcb
This commit is contained in:
Fabien Meghazi 2011-12-02 00:07:36 +01:00
parent be78331f01
commit 70f13baacf
1 changed files with 48 additions and 19 deletions

View File

@ -246,49 +246,78 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({
var self = this,
data = this.get_event_data(event_obj);
this.dataset.create(data, function(r) {
var id = parseInt(r.result, 10);
var id = r.result;
self.dataset.ids.push(id);
scheduler.changeEventId(event_id, id);
self.refresh_minical();
}, function(r, event) {
self.creating_event_id = event_id;
var fields = self.form_dialog.form.fields_view.fields,
fields_to_fetch = _.difference(_(fields).keys(), _(data).keys());
self.dataset.default_get(fields_to_fetch, function (default_values) {
self.form_dialog.form.on_record_loaded(
_.extend(default_values, data));
self.form_dialog.open();
});
event.preventDefault();
self.do_create_event_with_formdialog(event_id, event_obj);
});
},
do_create_event_with_formdialog: function(event_id, event_obj) {
if (!event_obj) {
event_obj = scheduler.getEvent(event_id);
}
var self = this,
data = this.get_event_data(event_obj),
form = self.form_dialog.form,
fields_to_fetch = _(form.fields_view.fields).keys();
self.creating_event_id = event_id;
self.dataset.default_get(fields_to_fetch, function(default_values) {
form.on_record_loaded(default_values).then(function() {
form.show_invalid = false;
_.each(['date_start', 'date_stop', 'date_delay'], function(field) {
var field_name = self[field];
if (field_name) {
field = form.fields[field_name];
field.set_value(data[field_name]);
field.dirty = true;
form.do_onchange(field);
}
});
form.show_invalid = true;
form.do_show().then(function() {
self.form_dialog.open();
});
});
});
},
do_save_event: function(event_id, event_obj) {
var self = this,
data = this.get_event_data(event_obj);
this.dataset.write(parseInt(event_id, 10), data, {}, function() {
self.refresh_minical();
});
data = this.get_event_data(event_obj),
index = this.dataset.get_id_index(event_id);
if (index != null) {
this.dataset.write(event_id, data, {}, function() {
self.refresh_minical();
});
}
},
do_delete_event: function(event_id, event_obj) {
var self = this;
// dhtmlx sends this event even when it does not exist in openerp.
// Eg: use cancel in dhtmlx new event dialog
if (_.indexOf(this.dataset.ids, parseInt(event_id, 10)) > -1) {
this.dataset.unlink(parseInt(event_id, 10), function() {
var self = this,
index = this.dataset.get_id_index(event_id);
if (index !== null) {
this.dataset.unlink(event_id, function() {
self.refresh_minical();
});
}
},
do_edit_event: function(event_id) {
var self = this;
event_id = parseInt(event_id, 10);
var index = _.indexOf(this.dataset.ids, event_id);
if (index > -1) {
var index = this.dataset.get_id_index(event_id);
if (index !== null) {
this.dataset.index = index;
this.form_dialog.form.do_show().then(function() {
self.form_dialog.open();
});
return false;
} else if (scheduler.getState().mode === 'month') {
this.do_create_event_with_formdialog(event_id);
// TODO: check dhtmlxscheduler problem here. At this line, scheduler
// event 'onEventChanged' bound to this.do_save_event() won't be fired !;
return false;
}
return true;
},