[Merge] With trunk upto revision 567.

bzr revid: noz@tinyerp.com-20110704135058-qmzbrcwx8xsdl91c
bzr revid: noz@tinyerp.com-20110705043811-bfgosk80vf03vz3v
This commit is contained in:
noz (OpenERP) 2011-07-05 10:08:11 +05:30
commit 271d873d8e
8 changed files with 92 additions and 89 deletions

View File

@ -1099,12 +1099,6 @@ background: linear-gradient(top, #ffffff 0%,#ebe9e9 100%); /* W3C */
background: #828282;
border-color: #828282;
}
.openerp .oe_necessary_team_song {
display: none;
}
.openerp.kitten-mode-activated .oe_necessary_team_song {
display: block;
}
.openerp .oe-m2o {
padding-right: 16px;

View File

@ -357,8 +357,6 @@ openerp.base.Session = openerp.base.BasicController.extend( /** @lends openerp.b
var self = this;
// Construct a JSON-RPC2 request, method is currently unused
params.session_id = this.session_id;
// niv: wtf?
//params.context = typeof(params.context) != "undefined" ? params.context : this.context;
// Call using the rpc_mode
var deferred = $.Deferred();
@ -408,7 +406,8 @@ openerp.base.Session = openerp.base.BasicController.extend( /** @lends openerp.b
self.on_session_invalid(function() {
self.rpc(url, payload.params,
function() {deferred.resolve.apply(deferred, arguments);},
function() {deferred.reject.apply(deferred, arguments);});
function(error, event) {event.preventDefault();
deferred.reject.apply(deferred, arguments);});
});
} else {
deferred.reject(response.error);
@ -1016,20 +1015,18 @@ openerp.base.Database = openerp.base.Controller.extend({
}
});
openerp.base.Login = openerp.base.Controller.extend({
openerp.base.Login = openerp.base.Controller.extend({
remember_creditentials: true,
init: function(session, element_id) {
this._super(session, element_id);
this.has_local_storage = typeof(localStorage) != 'undefined';
this.selected_db = null;
this.selected_login = null;
this.selected_password = null;
this.remember = false;
if (this.has_local_storage && localStorage.getItem('remember_creditentials') === 'true') {
this.remember = true;
if (this.has_local_storage && this.remember_creditentials) {
this.selected_db = localStorage.getItem('last_db_login_success');
this.selected_login = localStorage.getItem('last_login_login_success');
this.selected_password = localStorage.getItem('last_password_login_success');
}
},
start: function() {
@ -1069,22 +1066,17 @@ openerp.base.Login = openerp.base.Controller.extend({
var db = $e.find("form [name=db]").val();
var login = $e.find("form input[name=login]").val();
var password = $e.find("form input[name=password]").val();
var remember = $e.find("form input[name=remember]").attr('checked');
//$e.hide();
// Should hide then call callback
this.session.session_login(db, login, password, function() {
if(self.session.session_is_valid()) {
if (self.has_local_storage) {
if(remember) {
localStorage.setItem('remember_creditentials', 'true');
if(self.remember_creditentials) {
localStorage.setItem('last_db_login_success', db);
localStorage.setItem('last_login_login_success', login);
localStorage.setItem('last_password_login_success', password);
} else {
localStorage.setItem('remember_creditentials', '');
localStorage.setItem('last_db_login_success', '');
localStorage.setItem('last_login_login_success', '');
localStorage.setItem('last_password_login_success', '');
}
}
self.on_login_valid();

View File

@ -483,7 +483,6 @@ openerp.base.BufferedDataSet = openerp.base.DataSetStatic.extend({
var cached = {id:_.uniqueId(this.virtual_id_prefix), values: data};
this.to_create.push(cached);
this.cache.push(cached);
this.on_change();
var to_return = $.Deferred().then(callback);
setTimeout(function() {to_return.resolve({result: cached.id});}, 0);
return to_return.promise();

View File

@ -43,7 +43,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
if (this.embedded_view) {
return $.Deferred().then(this.on_loaded).resolve({fields_view: this.embedded_view});
} else {
var context = new openerp.base.CompoundContext(this.dataset.context);
var context = new openerp.base.CompoundContext(this.dataset.get_context());
if (this.view_manager.action && this.view_manager.action.context) {
context.add(this.view_manager.action.context);
}
@ -169,17 +169,22 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
console.log("Onchange triggered for field '%s' -> %s", widget.name, onchange);
if (call) {
var method = call[1], args = [];
var context_index = null;
var argument_replacement = {
'False' : false,
'True' : true,
'None' : null,
'context': widget.build_context ? widget.build_context() : {}
'False' : function() {return false;},
'True' : function() {return true;},
'None' : function() {return null;},
'context': function(i) {
context_index = i;
var ctx = widget.build_context ? widget.build_context() : {};
return ctx;
}
}
var parent_fields = null;
_.each(call[2].split(','), function(a) {
_.each(call[2].split(','), function(a, i) {
var field = _.trim(a);
if (field in argument_replacement) {
args.push(argument_replacement[field]);
args.push(argument_replacement[field](i));
return;
} else if (self.fields[field]) {
var value = self.fields[field].get_on_change_value();
@ -193,7 +198,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
}
var p_val = parent_fields[_.trim(splitted[1])];
if (p_val !== undefined) {
args.push(value ? value : false);
args.push(p_val == null ? false : p_val);
return;
}
}
@ -208,7 +213,8 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
return this.rpc(ajax, {
model: this.dataset.model,
method: method,
args: [(this.datarecord.id == null ? [] : [this.datarecord.id])].concat(args)
args: [(this.datarecord.id == null ? [] : [this.datarecord.id])].concat(args),
context_id: context_index === null ? null : context_index + 1
}, function(response) {
self.on_processed_onchange(response, processed);
});
@ -236,12 +242,12 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
}
} else {
// this is a common case, the normal behavior should be to ignore it
this.log("on_processed_onchange can't find field " + f, result);
console.debug("on_processed_onchange can't find field " + f, result);
}
}
this.on_form_changed();
}
if (result.warning) {
if (result.warning && !_.isEmpty(result.warning)) {
$(QWeb.render("DialogWarning", result.warning)).dialog({
modal: true,
buttons: {
@ -394,7 +400,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
model: 'ir.attachment',
fields: ['name', 'url', 'type'],
domain: [['res_model', '=', this.dataset.model], ['res_id', '=', this.datarecord.id], ['type', 'in', ['binary', 'url']]],
context: this.dataset.context
context: this.dataset.get_context()
}, this.on_attachments_loaded);*/
}
},
@ -437,7 +443,8 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
get_fields_values: function() {
var values = {};
_.each(this.fields, function(value, key) {
values[key] = value.get_value();
var val = value.get_value();
values[key] = val;
});
return values;
}
@ -1298,7 +1305,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
// create...
values.push({label: "<em>   Create and Edit...</em>", action: function() {
self._change_int_value(null);
self._search_create_popup("form");
self._search_create_popup("form", undefined, {"default_name": search_val});
}});
response(values);
@ -1437,6 +1444,7 @@ var commands = {
}
};
openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
multi_selection: false,
init: function(view, node) {
this._super(view, node);
this.template = "FieldOne2Many";
@ -1464,6 +1472,7 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
}
if(view.view_type === "list") {
view.options = {
'selectable': self.multi_selection
};
}
views.push(view);
@ -1585,26 +1594,31 @@ openerp.base.form.One2ManyDataSet = openerp.base.BufferedDataSet.extend({
openerp.base.form.One2ManyListView = openerp.base.ListView.extend({
do_add_record: function () {
var self = this;
var pop = new openerp.base.form.SelectCreatePopup(null, self.o2m.view.session);
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,
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();
if (this.options.editable) {
this._super.apply(this, arguments);
} else {
var self = this;
var pop = new openerp.base.form.SelectCreatePopup(null, self.o2m.view.session);
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,
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();
});
});
});
}
}
});
openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({
multi_selection: false,
init: function(view, node) {
this._super(view, node);
this.template = "FieldMany2Many";
@ -1616,16 +1630,17 @@ openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({
var self = this;
this.dataset = new openerp.base.DataSetStatic(
this.dataset = new openerp.base.form.Many2ManyDataSet(
this.session, this.field.relation);
this.dataset.m2m = this;
this.dataset.on_unlink.add_last(function(ids) {
//TODO niv: should check this for other cases
self.on_ui_change();
});
this.list_view = new openerp.base.form.Many2ManyListView(
null, this.view.session, this.list_id, this.dataset, false, {
'addable': 'Add'
'addable': 'Add',
'selectable': self.multi_selection
});
this.list_view.m2m_field = this;
this.list_view.on_loaded.add_last(function() {
@ -1647,6 +1662,18 @@ openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({
},
get_value: function() {
return [commands.replace_with(this.dataset.ids)];
},
set_value_from_ui: function() {},
validate: function() {
this.invalid = false;
// TODO niv
}
});
openerp.base.form.Many2ManyDataSet = openerp.base.DataSetStatic.extend({
get_context: function() {
this.context = this.m2m.build_context();
return this.context;
}
});
@ -1654,12 +1681,15 @@ openerp.base.form.Many2ManyListView = openerp.base.ListView.extend({
do_add_record: function () {
var pop = new openerp.base.form.SelectCreatePopup(
null, this.m2m_field.view.session);
pop.select_element(this.model);
pop.select_element(this.model, {},
new openerp.base.CompoundDomain(this.m2m_field.build_domain(), ["!", ["id", "in", this.m2m_field.dataset.ids]]),
this.m2m_field.build_context());
var self = this;
pop.on_select_elements.add(function(element_ids) {
_.each(element_ids, function(element_id) {
if(! _.detect(self.dataset.ids, function(x) {return x == element_id;})) {
self.dataset.set_ids([].concat(self.dataset.ids, [element_id]));
self.m2m_field.on_ui_change();
self.reload_content();
}
});
@ -1669,12 +1699,13 @@ openerp.base.form.Many2ManyListView = openerp.base.ListView.extend({
do_activate_record: function(index, id) {
this.m2m_field.view.session.action_manager.do_action({
"res_model": this.dataset.model,
"views":[[false,"form"]],
"views": [[false,"form"]],
"res_id": id,
"type":"ir.actions.act_window",
"view_type":"form",
"view_mode":"form",
"target":"new"
"type": "ir.actions.act_window",
"view_type": "form",
"view_mode": "form",
"target": "new",
"context": this.m2m_field.build_context()
});
}
});
@ -1705,7 +1736,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.BaseWidget.extend({
start: function() {
this._super();
this.dataset = new openerp.base.ReadOnlyDataSetSearch(this.session, this.model,
this.context, this.domain);
this.context);
this.dataset.parent_view = this.options.parent_view;
if (this.options.initial_view == "search") {
this.setup_search_view();
@ -1725,11 +1756,11 @@ openerp.base.form.SelectCreatePopup = openerp.base.BaseWidget.extend({
});
this.searchview.on_search.add(function(domains, contexts, groupbys) {
if (self.initial_ids) {
self.view_list.do_search.call(self, domains.concat([[["id", "in", self.initial_ids]]]),
self.view_list.do_search.call(self, domains.concat([[["id", "in", self.initial_ids]], self.domain]),
contexts, groupbys);
self.initial_ids = undefined;
} else {
self.view_list.do_search.call(self, domains, contexts, groupbys);
self.view_list.do_search.call(self, domains.concat([self.domain]), contexts, groupbys);
}
});
this.searchview.on_loaded.add_last(function () {

View File

@ -275,7 +275,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.context,
context: this.dataset.get_context(),
toolbar: !!this.flags.sidebar
}, callback);
}
@ -388,7 +388,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
var self = this;
_.extend(this.dataset, {
domain: dataset.domain,
context: dataset.context
context: dataset.get_context()
}).read_slice([], 0, false, function () {
self.select_record(index);
});

View File

@ -467,7 +467,7 @@ openerp.base.View = openerp.base.Controller.extend({
result : { type: 'ir.actions.act_window_close', special: action_data.special }
});
} else {
var context = new openerp.base.CompoundContext(dataset.context, action_data.context || {});
var context = new openerp.base.CompoundContext(dataset.get_context(), action_data.context || {});
switch(action_data.type) {
case 'object':
return dataset.call_button(action_data.name, [[record_id], context], handler);

View File

@ -50,9 +50,6 @@
<td colspan="2">
<div id="oe_footer" class="oe_footer">
<p class="oe_footer_powered">Powered by <a href="http://www.openerp.com">openerp.com</a>.</p>
<iframe class="oe_necessary_team_song" style="height:1;" height="1"
src="http://www.youtube.com/embed/QH2-TGUlwu4?autoplay=1"
frameborder="0"></iframe>
</div>
</td>
</tr>
@ -263,19 +260,7 @@
</tr>
<tr>
<td><label for="password">Password:</label></td>
<td><input type="password" name="password"
t-att-value="selected_password || ''"/></td>
</tr>
<tr t-if="has_local_storage">
<td><label for="remember">Remember password:</label></td>
<td class="oe_remember">
<t t-if="remember">
<input type="checkbox" name="remember" checked="yes"/>
</t>
<t t-if="!remember">
<input type="checkbox" name="remember"/>
</t>
</td>
<td><input type="password" name="password"/></td>
</tr>
<tr>
<td></td>
@ -719,9 +704,9 @@
<span class="oe-m2o-cm-button" t-att-id="widget.name + '_open'">
<img src="/base/static/src/img/icons/gtk-index.png"/></span>
<div t-att-id="widget.cm_id" class="contextMenu" style="display:none"><ul>
<li t-att-id="widget.cm_id + '_search'">Search</li>
<li t-att-id="widget.cm_id + '_create'">Create New</li>
<li t-att-id="widget.cm_id + '_open'" style="color:grey">Open</li>
<li t-att-id="widget.cm_id + '_search'">Search...</li>
<li t-att-id="widget.cm_id + '_create'">Create New...</li>
<li t-att-id="widget.cm_id + '_open'" style="color:grey">Open...</li>
</ul></div>
</div>
</t>
@ -981,8 +966,8 @@
<t t-name="SearchView.extended_search.group">
<div t-att-id="element_id" class="searchview_extended_group">
<select class="searchview_extended_group_choice">
<option value="all">All the following conditions must match</option>
<option value="any">Any of the following conditions must match</option>
<option value="all">All the following conditions must match</option>
<option value="none">None of the following conditions must match</option>
</select>
<a class="searchview_extended_delete_group"
@ -1064,7 +1049,9 @@
<td>
<p>
<t t-js="d">
d.html_error = context.engine.tools.html_escape(d.error.data.fault_code).replace(/\n/g, '<br/>');
var message = d.message ? d.message : d.error.data.fault_code;
d.html_error = context.engine.tools.html_escape(message)
.replace(/\n/g, '<br/>');
</t>
<t t-raw="html_error"/>
</p>

View File

@ -271,7 +271,7 @@ init: function(view_manager, session, element_id, dataset, view_id) {
this.rpc(ajax, {
model: this.dataset.model,
domain: self.dataset.domain,
context :self.dataset.context
context :self.dataset.get_context()
}, function(response) {
ganttChartControl.clearAll();
jQuery("#GanttDiv").children().remove();