[MeRGE] Merge with trunk upto revision no 802.

bzr revid: ysa@tinyerp.com-20110812045222-993fbrjuzma3jywe
This commit is contained in:
Yogesh (OpenERP)
2011-08-12 10:22:22 +05:30
9 changed files with 165 additions and 197 deletions
+1 -1
View File
@@ -923,7 +923,7 @@ label.error {
height: 15px;
}
.openerp td.required input, .openerp td.required select {
background-color: #D2D2FF;
background-color: #D2D2FF !important;
}
.openerp td.invalid input, .openerp td.invalid select, .openerp td.invalid textarea {
background-color: #F66 !important;
+49 -22
View File
@@ -1506,7 +1506,6 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
var dataset = new openerp.base.DataSetStatic(self, self.field.relation, self.build_context());
dataset.name_get([element_ids[0]], function(data) {
self._change_int_ext_value(data[0]);
pop.stop();
});
});
},
@@ -1842,16 +1841,16 @@ openerp.base.form.One2ManyListView = openerp.base.ListView.extend({
pop.select_element(self.o2m.field.relation,{
initial_view: "form",
alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined,
auto_create: false,
create_function: function(data) {
return self.o2m.dataset.create(data, function(r) {
self.o2m.dataset.set_ids(self.o2m.dataset.ids.concat([r.result]));
self.o2m.dataset.on_change();
});
},
parent_view: self.o2m.view
}, self.o2m.build_domain(), self.o2m.build_context());
pop.on_create.add(function(data) {
self.o2m.dataset.create(data, function(r) {
self.o2m.dataset.set_ids(self.o2m.dataset.ids.concat([r.result]));
self.o2m.dataset.on_change();
pop.stop();
self.o2m.reload_current_view();
});
pop.on_select_elements.add_last(function() {
self.o2m.reload_current_view();
});
}
},
@@ -1946,7 +1945,6 @@ openerp.base.form.Many2ManyListView = openerp.base.ListView.extend({
self.reload_content();
}
});
pop.stop();
});
},
do_activate_record: function(index, id) {
@@ -1968,16 +1966,22 @@ openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({
* - initial_view: form or search (default search)
* - disable_multiple_selection
* - alternative_form_view
* - auto_create (default true)
* - create_function (defaults to a naive saving behavior)
* - parent_view
*/
select_element: function(model, options, domain, context) {
var self = this;
this.model = model;
this.domain = domain || [];
this.context = context || {};
this.options = _.defaults(options || {}, {"initial_view": "search", "auto_create": true});
this.options = _.defaults(options || {}, {"initial_view": "search", "create_function": function() {
return self.create_row.apply(self, arguments);
}});
this.initial_ids = this.options.initial_ids;
openerp.base.form.dialog(this.render());
this.created_elements = [];
openerp.base.form.dialog(this.render(), {close:function() {
self.check_exit();
}});
this.start();
},
start: function() {
@@ -2023,6 +2027,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({
}
$sbutton.click(function() {
self.on_select_elements(self.selected_ids);
self.stop();
});
self.view_list = new openerp.base.form.SelectCreateListView(self,
self.element_id + "_view_list", self.dataset, false,
@@ -2035,15 +2040,11 @@ openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({
});
this.searchview.start();
},
on_create: function(data) {
if (!this.options.auto_create)
return;
create_row: function(data) {
var self = this;
var wdataset = new openerp.base.DataSetSearch(this, this.model, this.context, this.domain);
wdataset.parent_view = this.options.parent_view;
wdataset.create(data, function(r) {
self.on_select_elements([r.result]);
});
return wdataset.create(data);
},
on_select_elements: function(element_ids) {
},
@@ -2071,18 +2072,43 @@ openerp.base.form.SelectCreatePopup = openerp.base.OldWidget.extend({
this.view_form.start();
this.view_form.on_loaded.add_last(function() {
var $buttons = self.view_form.$element.find(".oe_form_buttons");
$buttons.html(QWeb.render("SelectCreatePopup.form.buttons"));
$buttons.html(QWeb.render("SelectCreatePopup.form.buttons", {widget:self}));
var $nbutton = $buttons.find(".oe_selectcreatepopup-form-save-new");
$nbutton.click(function() {
self._created = $.Deferred().then(function() {
self._created = undefined;
self.view_form.on_button_new();
});
self.view_form.do_save();
});
var $nbutton = $buttons.find(".oe_selectcreatepopup-form-save");
$nbutton.click(function() {
self._created = $.Deferred().then(function() {
self._created = undefined;
self.check_exit();
});
self.view_form.do_save();
});
var $cbutton = $buttons.find(".oe_selectcreatepopup-form-close");
$cbutton.click(function() {
self.stop();
self.check_exit();
});
});
this.dataset.on_create.add(function(data) {
self.options.create_function(data).then(function(r) {
self.created_elements.push(r.result);
if (self._created) {
self._created.resolve();
}
});
});
this.dataset.on_create.add(this.on_create);
this.view_form.do_show();
},
check_exit: function() {
if (this.created_elements.length > 0) {
this.on_select_elements(this.created_elements);
}
this.stop();
}
});
@@ -2092,6 +2118,7 @@ openerp.base.form.SelectCreateListView = openerp.base.ListView.extend({
},
select_record: function(index) {
this.popup.on_select_elements([this.dataset.ids[index]]);
this.popup.stop();
},
do_select: function(ids, records) {
this._super(ids, records);
+4 -3
View File
@@ -352,8 +352,9 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
* Reloads the list view based on the current settings (dataset & al)
*
* @param {Boolean} [grouped] Should the list be displayed grouped
* @param {Object} [context] context to send the server while loading the view
*/
reload_view: function (grouped) {
reload_view: function (grouped, context) {
var self = this;
var callback = function (field_view_get) {
self.on_loaded(field_view_get, grouped);
@@ -364,7 +365,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
return this.rpc('/base/listview/load', {
model: this.model,
view_id: this.view_id,
context: this.dataset.get_context(),
context: this.dataset.get_context(context),
toolbar: this.options.sidebar
}, callback);
}
@@ -411,7 +412,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
results.group_by = null;
}
this.reload_view(!!results.group_by).then(
this.reload_view(!!results.group_by, results.context).then(
$.proxy(this, 'reload_content'));
},
/**
+6 -1
View File
@@ -361,7 +361,6 @@ openerp.base.search.fields = new openerp.base.Registry({
'selection': 'openerp.base.search.SelectionField',
'datetime': 'openerp.base.search.DateTimeField',
'date': 'openerp.base.search.DateField',
'one2many': 'openerp.base.search.OneToManyField',
'many2one': 'openerp.base.search.ManyToOneField',
'many2many': 'openerp.base.search.ManyToManyField'
});
@@ -796,6 +795,12 @@ openerp.base.search.ManyToOneField = openerp.base.search.CharField.extend({
return this._super();
}
});
/**
* m2m search field behaves pretty much exactly like a char field
*
* @class
*/
openerp.base.search.ManyToManyField = openerp.base.search.CharField.extend({});
openerp.base.search.ExtendedSearch = openerp.base.OldWidget.extend({
template: 'SearchView.extended_search',
-1
View File
@@ -176,7 +176,6 @@ openerp.base.TreeView = openerp.base.View.extend({
}, function (actions) {
if (!actions.length) { return; }
var action = actions[0][2];
action.flags.new_window = true;
self.do_action(action);
});
},
+4 -3
View File
@@ -39,7 +39,6 @@ openerp.base.ActionManager = openerp.base.Widget.extend({
var type = action.type.replace(/\./g,'_');
var popup = action.target === 'new';
action.flags = _.extend({
popup: popup,
views_switcher : !popup,
search_view : !popup,
action_buttons : !popup,
@@ -53,7 +52,7 @@ openerp.base.ActionManager = openerp.base.Widget.extend({
this[type](action, on_closed);
},
ir_actions_act_window: function (action, on_close) {
if (action.flags.popup) {
if (action.target === 'new') {
if (this.dialog == null) {
this.dialog = new openerp.base.Dialog(this, { title: action.name, width: '80%' });
if(on_close)
@@ -252,13 +251,15 @@ openerp.base.ViewManager = openerp.base.Widget.extend({
openerp.base.ViewManagerAction = openerp.base.ViewManager.extend({
init: function(parent, action) {
this.session = parent.session;
this.action = action;
var dataset;
if (!action.res_id) {
dataset = new openerp.base.DataSetSearch(this, action.res_model, action.context, action.domain);
} else {
this.action.flags.search_view = false;
dataset = new openerp.base.DataSetStatic(this, action.res_model, action.context, [action.res_id]);
dataset.index = 0;
}
this.action = action;
this._super(parent, dataset, action.views);
this.action = action;
this.flags = this.action.flags || {};
+10 -4
View File
@@ -1114,11 +1114,17 @@
</t>
<t t-name="SelectCreatePopup.search.buttons">
<button type="button" class="oe_selectcreatepopup-search-select" disabled="disabled">Select</button>
<button type="button" class="oe_selectcreatepopup-search-close">Close</button>
<button type="button" class="oe_selectcreatepopup-search-close">Cancel</button>
</t>
<t t-name="SelectCreatePopup.form.buttons">
<button type="button" class="oe_selectcreatepopup-form-save">Save</button>
<button type="button" class="oe_selectcreatepopup-form-close">Close</button>
<t t-if="widget.options.disable_multiple_selection">
<button type="button" class="oe_selectcreatepopup-form-save">Save</button>
</t>
<t t-if="! widget.options.disable_multiple_selection">
<button type="button" class="oe_selectcreatepopup-form-save-new">Save &amp; New</button>
<button type="button" class="oe_selectcreatepopup-form-save">Save &amp; Close</button>
</t>
<button type="button" class="oe_selectcreatepopup-form-close">Cancel</button>
</t>
<t t-name="FormOpenPopup">
<div t-att-id="element_id">
@@ -1127,7 +1133,7 @@
</t>
<t t-name="FormOpenPopup.form.buttons">
<button type="button" class="oe_formopenpopup-form-save">Save</button>
<button type="button" class="oe_formopenpopup-form-close">Close</button>
<button type="button" class="oe_formopenpopup-form-close">Cancel</button>
</t>
<t t-name="ListView.row.frame" t-extend="WidgetFrame">
<t t-jquery="tr">
+88 -159
View File
@@ -17,10 +17,15 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
this.context = this.dataset.context || {};
this.has_been_loaded = $.Deferred();
this.creating_event_id = null;
this.dataset_events = [];
if (this.options.action_views_ids.form) {
this.form_dialog = new openerp.base_calendar.CalendarFormDialog(this, {}, this.options.action_views_ids.form, dataset);
this.form_dialog.start();
}
this.COLOR_PALETTE = ['#f57900', '#cc0000', '#d400a8', '#75507b', '#3465a4', '#73d216', '#c17d11', '#edd400',
'#fcaf3e', '#ef2929', '#ff00c9', '#ad7fa8', '#729fcf', '#8ae234', '#e9b96e', '#fce94f',
'#ff8e00', '#ff0000', '#b0008c', '#9000ff', '#0078ff', '#00ff00', '#e6ff00', '#ffff00',
'#905000', '#9b0000', '#840067', '#510090', '#0000c9', '#009b00', '#9abe00', '#ffc900' ];
},
start: function() {
this.rpc("/base_calendar/calendarview/load", {"model": this.model, "view_id": this.view_id, 'toolbar': true}, this.on_loaded);
@@ -99,7 +104,8 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
scheduler.config.multi_day = true; //Multi day events are not rendered in daily and weekly views
scheduler.config.start_on_monday = true;
scheduler.config.scroll_hour = 8;
scheduler.config.drag_resize = scheduler.config.drag_create = !!this.date_stop;
scheduler.config.drag_resize = true;
scheduler.config.drag_create = true;
// Initialize Sceduler
this.mode = this.mode || 'month';
@@ -110,6 +116,7 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
scheduler.attachEvent('onEventDeleted', this.do_delete_event);
scheduler.attachEvent('onEventChanged', this.do_save_event);
scheduler.attachEvent('onDblClick', this.do_edit_event);
scheduler.attachEvent('onBeforeLightbox', this.do_edit_event);
this.mini_calendar = scheduler.renderCalendar({
container: this.sidebar.navigator.element_id,
@@ -129,23 +136,11 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
reload_event: function(id) {
this.dataset.read_ids([id], _.keys(this.fields), this.on_events_loaded);
},
load_scheduler: function() {
var self = this;
this.dataset.read_slice({}, function(events) {
if (self.session.locale_code) {
// TODO: replace $LAB
$LAB.setOptions({AlwaysPreserveOrder: true}).script([
'/base_calendar/static/lib/dhtmlxScheduler/sources/locale_' + self.session.locale_code + '.js',
'/base_calendar/static/lib/dhtmlxScheduler/sources/locale_recurring_' + self.session.locale_code + '.js'
]).wait(function() {
self.on_events_loaded(events);
});
} else {
self.on_events_loaded(events);
}
});
get_color: function(index) {
index = index % this.COLOR_PALETTE.length;
return this.COLOR_PALETTE[index];
},
on_events_loaded: function(events) {
on_events_loaded: function(events, fn_filter, no_filter_reload) {
var self = this;
//To parse Events we have to convert date Format
@@ -159,111 +154,81 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
break;
}
if (this.color_field) {
var filter = evt[this.color_field];
if (filter) {
var filter_item = {
value: (typeof filter === 'object') ? filter[0] : filter,
label: (typeof filter === 'object') ? filter[1] : filter
}
if (typeof(fn_filter) === 'function' && !fn_filter(filter_item.value)) {
continue;
}
var filter_index = _.indexOf(sidebar_ids, filter_item.value);
if (filter_index === -1) {
evt.color = filter_item.color = this.get_color(sidebar_ids.length);
sidebar_items.push(filter_item);
sidebar_ids.push(filter_item.value);
} else {
evt.color = this.get_color(filter_index);
}
evt.textColor = '#ffffff';
}
}
if (this.fields[this.date_start]['type'] == 'date') {
evt[this.date_start] = openerp.base.parse_date(evt[this.date_start]).set({hour: 9}).toString('yyyy-MM-dd HH:mm:ss');
}
if (this.date_stop && evt[this.date_stop] && this.fields[this.date_stop]['type'] == 'date') {
evt[this.date_stop] = openerp.base.parse_date(evt[this.date_stop]).set({hour: 17}).toString('yyyy-MM-dd HH:mm:ss');
}
if (this.color_field) {
var user = evt[this.color_field];
if (user) {
if (_.indexOf(sidebar_ids, user[0]) === -1) {
sidebar_items.push({
id: user[0],
name: user[1],
// TODO: use color table
color: '#dddddd'
});
sidebar_ids.push(user[0]);
}
}
}
res_events.push(this.convert_event(evt));
}
scheduler.parse(res_events, 'json');
this.refresh_scheduler();
this.refresh_minical();
this.sidebar.responsible.on_events_loaded(sidebar_items);
if (!no_filter_reload) {
this.sidebar.responsible.on_events_loaded(sidebar_items);
}
},
convert_event: function(event) {
var starts = event[this.date_start],
ends = event[this.date_delay] || 1,
span = 0,
convert_event: function(evt) {
var date_start = openerp.base.parse_datetime(evt[this.date_start]),
date_stop = this.date_stop ? openerp.base.parse_datetime(evt[this.date_stop]) : null,
date_delay = evt[this.date_delay] || null,
res_text = '',
res_description = [];
var parse_start_date = openerp.base.parse_datetime(starts);
if (event[this.date_stop]) {
var parse_end_date = openerp.base.parse_datetime(event[this.date_stop]);
}
if (this.info_fields) {
var fld = event[this.info_fields[0]];
if (typeof fld == 'object') {
res_text = fld[fld.length -1];
} else {
res_text = fld;
}
var fld = evt[this.info_fields[0]];
res_text = (typeof fld == 'object') ? fld[fld.length -1] : res_text = fld;
var sliced_info_fields = this.info_fields.slice(1);
for (sl_fld in sliced_info_fields) {
var slc_fld = event[sliced_info_fields[sl_fld]];
for (var sl_fld in sliced_info_fields) {
var slc_fld = evt[sliced_info_fields[sl_fld]];
if (typeof slc_fld == 'object') {
res_description.push(slc_fld[slc_fld.length - 1]);
} else {
if(slc_fld) res_description.push(slc_fld);
} else if (slc_fld) {
res_description.push(slc_fld);
}
}
}
if (starts && ends) {
var n = 0,
h = ends;
if (ends == this.day_length) {
span = 1;
} else if (ends > this.day_length) {
n = ends / this.day_length;
h = ends % this.day_length;
n = parseInt(Math.floor(n));
if (h > 0) {
span = n + 1;
} else {
span = n;
}
}
var start = parse_start_date.setTime((parse_start_date.getTime() + (h * 60 * 60) + (n * 24 * 60 * 60)));
ends = parse_start_date;
if (!date_stop && date_delay) {
date_stop = date_start.clone().addHours(date_delay);
}
if (starts && this.date_stop) {
ends = parse_end_date;
if (event[this.date_stop] == undefined) {
var start = parse_start_date.setTime((parse_start_date.getTime() + (h * 60 * 60) + (n * 24 * 60 * 60)));
ends = parse_start_date;
}
var tds = parse_start_date.getTime(),
tde = parse_end_date.getTime();
if (tds >= tde) {
tde = tds + 60 * 60;
parse_end_date.setTime(tde);
ends = parse_end_date;
}
n = (tde - tds) / (60 * 60);
if (n >= this.day_length) {
span = Math.ceil(n / 24);
}
}
return {
'start_date': parse_start_date.toString('yyyy-MM-dd HH:mm:ss'),
'end_date': ends.toString('yyyy-MM-dd HH:mm:ss'),
var r = {
'start_date': date_start.toString('yyyy-MM-dd HH:mm:ss'),
'end_date': date_stop.toString('yyyy-MM-dd HH:mm:ss'),
'text': res_text,
'id': event['id'],
'id': evt.id,
'title': res_description.join()
}
if (evt.color) {
r.color = evt.color;
}
if (evt.textColor) {
r.textColor = evt.textColor;
}
return r;
},
do_create_event: function(event_id, event_obj) {
var self = this,
@@ -304,9 +269,9 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
this.dataset.index = index;
this.form_dialog.form.do_show();
this.form_dialog.open();
} else {
this.notification.warn("Edit event", "Could not find event #" + event_id);
return false;
}
return true;
},
get_event_data: function(event_obj) {
var data = {
@@ -317,20 +282,14 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
data[this.date_stop] = openerp.base.format_datetime(event_obj.end_date);
}
if (this.date_delay) {
var tds = (event_obj.start_date.getOrdinalNumber() / 1e3 >> 0) - (event_obj.start_date.getOrdinalNumber() < 0);
var tde = (event_obj.end_date.getOrdinalNumber() / 1e3 >> 0) - (event_obj.end_date.getOrdinalNumber() < 0);
var n = (tde - tds) / (60 * 60);
if (n > this.day_length) {
var d = Math.floor(n / 24),
h = n % 24;
n = d * this.day_length + h;
}
data[this.date_delay] = n;
var diff_seconds = Math.round((event_obj.end_date.getTime() - event_obj.start_date.getTime()) / 1000);
data[this.date_delay] = diff_seconds / 3600;
}
return data;
},
do_search: function(domains, contexts, groupbys) {
var self = this;
scheduler.clearAll();
$.when(this.has_been_loaded).then(function() {
self.rpc('/base/session/eval_domain_and_context', {
domains: domains,
@@ -344,7 +303,11 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
fields: _.keys(self.fields),
offset:0,
limit: self.limit
}, self.on_events_loaded);
}, function(events) {
self.dataset_events = events;
self.on_events_loaded(events);
}
);
});
});
},
@@ -362,54 +325,6 @@ openerp.base_calendar.CalendarView = openerp.base.View.extend({
if (this.sidebar) {
this.sidebar.$element.hide();
}
},
popup_event: function(event_id) {
var self = this;
if (event_id) event_id = parseInt(event_id, 10);
var action = {
res_model: this.dataset.model,
res_id: event_id,
views: [[false, 'form']],
type: 'ir.actions.act_window',
view_type: 'form',
view_mode: 'form',
flags : {
search_view: false,
sidebar : false,
views_switcher : false,
action_buttons : false,
pager: false
}
}
var element_id = _.uniqueId("act_window_dialog");
var dialog = $('<div>', {
'id': element_id
}).dialog({
modal: true,
width: 'auto',
height: 'auto',
buttons: {
Cancel: function() {
$(this).dialog("destroy");
},
Save: function() {
var view_manager = action_manager.viewmanager;
var _dialog = this;
view_manager.views[view_manager.active_view].controller.do_save(function(r) {
$(_dialog).dialog("destroy");
// self.start();
self.load_scheduler();
})
}
}
});
var action_manager = new openerp.base.ActionManager(this, element_id);
action_manager.start();
action_manager.do_action(action);
//Default_get
if (!event_id) {
this.dataset.index = null;
}
}
});
@@ -451,10 +366,25 @@ openerp.base_calendar.SidebarResponsible = openerp.base.Widget.extend({
init: function(parent, element_id, view) {
this._super(parent, element_id);
this.view = view;
this.$element.delegate('input:checkbox', 'change', this.on_filter_click);
},
on_events_loaded: function(users) {
this.$element.html(QWeb.render('CalendarView.sidebar.responsible', { users : users }));
// TODO: bind checkboxes reload sheduler
on_events_loaded: function(filters) {
this.$element.html(QWeb.render('CalendarView.sidebar.responsible', { filters: filters }));
},
on_filter_click: function(e) {
var responsibles = [],
$e = $(e.target);
this.$element.find('div.oe_calendar_responsible input:checked').each(function() {
responsibles.push($(this).val());
});
scheduler.clearAll();
if (responsibles.length) {
this.view.on_events_loaded(this.view.dataset_events, function(filter_value) {
return _.indexOf(responsibles, filter_value.toString()) > -1;
}, true);
} else {
this.view.on_events_loaded(this.view.dataset_events, false, true);
}
}
});
@@ -466,7 +396,6 @@ openerp.base_calendar.SidebarNavigator = openerp.base.Widget.extend({
on_events_loaded: function(events) {
}
});
};
// DEBUG_RPC:rpc.request:('execute', 'addons-dsh-l10n_us', 1, '*', ('ir.filters', 'get_filters', u'res.partner'))
@@ -18,9 +18,9 @@
</div>
</t>
<t t-name="CalendarView.sidebar.responsible">
<div t-foreach="users" t-as="user" class="oe_calendar_responsible" t-attf-style="background: #{user.color}">
<input type="checkbox" name="selection" t-att-value="user.id"/>
<span><t t-esc="user.name"/></span>
<div t-foreach="filters" t-as="filter" class="oe_calendar_responsible" t-attf-style="background: #{filter.color}">
<input type="checkbox" name="selection" t-att-value="filter.value"/>
<span><t t-esc="filter.label"/></span>
</div>
</t>
</template>