[IMP] Improve the form opened by quick_create in web_calendar, add function for google calendar button, improve event on add event

bzr revid: jke@openerp.com-20131217122038-rvrxp9lioa4ccw8b
This commit is contained in:
jke-openerp 2013-12-17 13:20:38 +01:00
parent 569d273f8b
commit e97db06cbe
2 changed files with 64 additions and 50 deletions

View File

@ -340,7 +340,7 @@ openerp.web_calendar = function(instance) {
}
);
};
this.extraSideBar();
}
self.$calendar.fullCalendar(self.get_fc_init_options());
@ -348,6 +348,9 @@ openerp.web_calendar = function(instance) {
return $.when();
},
extraSideBar: function() {
console.log("In extra Side bar from fullcalendar");
},
open_quick_create: function(data_template) {
if (!isNull(this.quick)) {
@ -356,6 +359,7 @@ openerp.web_calendar = function(instance) {
var QuickCreate = get_class(this.quick_create_class);
this.options.disable_quick_create = this.options.disable_quick_create || !this.quick_add_pop;
this.quick = new QuickCreate(this, this.dataset, true, this.options, data_template);
this.quick.on('added', this, this.proxy('quick_created'))
.on('slowadded', this, this.proxy('slow_created'))
@ -366,6 +370,7 @@ openerp.web_calendar = function(instance) {
});
this.quick.replace($(".oe_calendar_qc_placeholder"));
this.quick.focus();
},
/**
@ -616,20 +621,24 @@ openerp.web_calendar = function(instance) {
var event_end = event.end;
//Bug when we move an all_day event from week or day view, we don't have a dateend or duration...
if (event_end == null) {
debugger;
event_end = new Date(event.start).addHours(2);
}
if (event.allDay) {
// Sometimes fullcalendar doesn't give any event.end.
if (event_end === null || typeof event_end === "undefined")
event_end = new Date(event.start);
// Avoid inplace changes
event_end = (new Date(event_end.getTime())).addDays(1);
date_start_day = new Date(Date.UTC(event.start.getFullYear(),event.start.getMonth(),event.start.getDate()))
date_stop_day = new Date(Date.UTC(event_end.getFullYear(),event_end.getMonth(),event_end.getDate()))
if (this.all_day) {
event_end = (new Date(event_end.getTime())).addDays(1); //midnight to midnight
date_start_day = new Date(Date.UTC(event.start.getFullYear(),event.start.getMonth(),event.start.getDate()))
date_stop_day = new Date(Date.UTC(event_end.getFullYear(),event_end.getMonth(),event_end.getDate()))
}
else {
date_start_day = new Date(Date.UTC(event.start.getFullYear(),event.start.getMonth(),event.start.getDate(),7))
date_stop_day = new Date(Date.UTC(event_end.getFullYear(),event_end.getMonth(),event_end.getDate(),19))
}
data[this.date_start] = instance.web.parse_value(date_start_day, this.fields[this.date_start]);
if (this.date_stop) {
data[this.date_stop] = instance.web.parse_value(date_stop_day, this.fields[this.date_stop]);
@ -935,10 +944,12 @@ openerp.web_calendar = function(instance) {
},
get_title: function () {
var parent = this.getParent();
var title =
(typeof parent.field_widget === "undefined") ?
if (typeof parent === 'undefined') {
return _t("Create")
}
var title = (typeof parent.field_widget === "undefined") ?
(parent.string || parent.name) :
parent.field_widget.string || parent.field_widget.name || '';
parent.field_widget.string || parent.field_widget.name || '';
return _t("Create: ") + title;
},
start: function () {
@ -951,13 +962,21 @@ openerp.web_calendar = function(instance) {
}
self.$input = this.$el.find('input');
self.$input.keyup(function(event) {
self.$input.keyup(function enterHandler (event) {
if(event.keyCode == 13){
self.quick_add();
self.$input.off('keyup', enterHandler);
if (!self.quick_add()){
self.$input.on('keyup', enterHandler);
}
}
});
this.$el.find(".oe_calendar_quick_create_add").click(function () {
self.quick_add();
var submit = this.$el.find(".oe_calendar_quick_create_add");
submit.click(function clickHandler() {
submit.off('click', clickHandler);
if (!self.quick_add()){
submit.on('click', clickHandler);
}
self.focus();
});
this.$el.find(".oe_calendar_quick_create_edit").click(function () {
@ -968,7 +987,7 @@ openerp.web_calendar = function(instance) {
ev.preventDefault();
self.trigger('close');
});
self.$input.keyup(function(e) {
self.$input.keyup(function enterHandler (e) {
if (e.keyCode == 27 && self._buttons) {
self.trigger('close');
}
@ -993,8 +1012,8 @@ openerp.web_calendar = function(instance) {
*/
quick_add: function() {
var val = this.$input.val();
if (/^\s*$/.test(val)) { return; }
this.quick_create({'name': val});
if (/^\s*$/.test(val)) { return false; }
return this.quick_create({'name': val}).always(function() { return true });
},
slow_add: function() {
@ -1007,7 +1026,7 @@ openerp.web_calendar = function(instance) {
*/
quick_create: function(data, options) {
var self = this;
this.dataset.create($.extend({}, this.data_template, data), options)
return this.dataset.create($.extend({}, this.data_template, data), options)
.then(function(id) {
self.trigger('added', id);
self.$input.val("");
@ -1021,6 +1040,17 @@ openerp.web_calendar = function(instance) {
/**
* Show full form popup
*/
get_form_popup_infos: function() {
var parent = this.getParent();
var infos = {
view_id: false,
title: this.name,
};
if (typeof parent !== 'undefined' && typeof parent.ViewManager !== 'undefined') {
infos.view_id = parent.ViewManager.get_view_id('form');
}
return infos;
},
slow_create: function(data) {
var self = this;
var def = $.Deferred();
@ -1034,33 +1064,21 @@ openerp.web_calendar = function(instance) {
delete defaults['default_duration'];
}
var pop_infos = self.get_form_popup_infos();
var pop = new instance.web.form.FormOpenPopup(this);
var context = new instance.web.CompoundContext(this.dataset.context, defaults)
pop.show_element(this.dataset.model, null, context, {
pop.show_element(this.dataset.model, null, this.dataset.get_context(defaults), {
title: this.get_title(),
disable_multiple_selection: true,
view_id: pop_infos.view_id,
// Ensuring we use ``self.dataset`` and DO NOT create a new one.
create_function: function(data, options) {
return self.dataset.create(data, options).done(function(r) {
// Although ``self.dataset.create`` DOES not call ``dataset_changed`` in O2M
// it gets called thanks to ``create_completed`` -> ``added``
// XXXvlab: why ``create`` does not call dataset_changed AND adds id in dataset.ids
// is a mystery for me ATM.
}).fail(function (r, event) {
if (!r.data.message) //else manage by openerp
throw new Error(r);
});
},
// ATM this method should not be attainable as the current pop up is
// spawned only for newly created objects.
// write_function: function(id, data, options) {
// return self.dataset.write(id, data, options).done(function() {
// }).fail(function (r, event) {
// throw new Error(r);
// });
// },
read_function: function(id, fields, options) {
return self.dataset.read_ids.apply(self.dataset, arguments).done(function() {
}).fail(function (r, event) {
@ -1070,14 +1088,9 @@ openerp.web_calendar = function(instance) {
},
});
pop.on('closed', self, function() {
// Hum, this is bad trick happening: we must avoid
// calling ``self.trigger('close')`` directly because
// it would itself destroy all child element including
// the slow create popup, which would then re-trigger
// recursively the 'closed' signal.
//
// Thus, here, we use a deferred and its state to cut
// the endless recurrence.
// ``self.trigger('close')`` would itself destroy all child element including
// the slow create popup, which would then re-trigger recursively the 'closed' signal.
// Thus, here, we use a deferred and its state to cut the endless recurrence.
if (def.state() === "pending")
def.resolve();
});
@ -1285,7 +1298,6 @@ openerp.web_calendar = function(instance) {
}
var loaded = $.Deferred();
this.calendar_view.on("calendar_view_loaded", self, function() {
alert('Why never here ?');
self.initial_is_loaded.resolve();
loaded.resolve();
});
@ -1404,9 +1416,8 @@ openerp.web_calendar = function(instance) {
init: function(field_manager, node) {
this._super(field_manager, node);
this.dataset.on('dataset_changed', this, function() {
// Force dirty state, as if dataset changed, then 'get_value'
// result will change because it uses directly the dataset to
// compute its result.
// Force dirty state, as if dataset changed, then 'get_value' result will change
// because it uses directly the dataset to compute its result.
this.trigger('changed_value');
});
},
@ -1454,20 +1465,19 @@ openerp.web_calendar = function(instance) {
filter_click: function(e) {
var self = this,
responsibles = [];
//$e = $(e.target);
self.view.selected_filters = [];
this.$('div.oe_calendar_responsible input:checked').each(function() {
responsibles.push($(this).val());
if (e==null && parseInt($(this).val())<0) {
$(this).prop('checked',false);
; return;
return;
}
self.view.selected_filters.push(parseInt($(this).val()));
});
if (e !== null) { //First intialize
self.view.$calendar.fullCalendar('refetchEvents'); //RERENDER ALL...
self.view.$calendar.fullCalendar('refetchEvents');
}
@ -1487,4 +1497,3 @@ openerp.web_calendar = function(instance) {
};
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:

View File

@ -54,7 +54,12 @@
</div>
<div t-name="CalendarView.quick_create" class="oe_calendar_quick_create openerp">
<t t-esc="_t('What : ')"/> <input/>
<div class="form-group">
<label for='name' class=' control-label'><t t-esc="_t('Summary\'s event : ')"/></label>
<input name='name' class="form-control"/>
</div>
<t t-if="widget._buttons">
<div class="oe_calendar_quick_create_buttons">
<button class="openerp oe_button oe_highlight oe_calendar_quick_create_add ">Create event</button>