From 157273f15a19d6c85ea61a9e8a7b998a35fee11d Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 17 Jun 2011 16:19:45 +0200 Subject: [PATCH] [imp] added default name on false quick create in m2o bzr revid: nicolas.vanhoren@openerp.com-20110617141945-wnnhkhf8wezwfyed --- addons/base/controllers/main.py | 5 ++-- addons/base/static/src/js/data.js | 43 ++++++++++++++++--------------- addons/base/static/src/js/form.js | 23 ++++++++++------- openerpweb/nonliterals.py | 4 +-- 4 files changed, 41 insertions(+), 34 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 3b8ed588169..ac5341801f9 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -455,9 +455,10 @@ class DataSet(openerpweb.Controller): return {'result': r} @openerpweb.jsonrequest - def default_get(self, req, model, fields, context={}): + def default_get(self, req, model, fields): m = req.session.model(model) - r = m.default_get(fields, context) + ctx = _eval_domain_and_context(req, [req.context], [])["context"] + r = m.default_get(fields, ctx) return {'result': r} class DataGroup(openerpweb.Controller): diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index 581bd217ba9..1463ca279fa 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -231,10 +231,10 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base. * @param {openerp.base.Session} session current OpenERP session * @param {String} model the OpenERP model this dataset will manage */ - init: function(session, model) { + init: function(session, model, context) { this._super(session); this.model = model; - this.context = {}; + this.context = context || {}; this.index = 0; this.count = 0; }, @@ -371,9 +371,9 @@ openerp.base.DataSetStatic = openerp.base.DataSet.extend({ }); openerp.base.DataSetSearch = openerp.base.DataSet.extend({ - init: function(session, model) { - this._super(session, model); - this.domain = []; + init: function(session, model, context, domain) { + this._super(session, model, context); + this.domain = domain || []; this._sort = []; this.offset = 0; // subset records[offset:offset+limit] @@ -440,33 +440,34 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({ } }); -openerp.base.CompoundContext = function(source_context) { +openerp.base.CompoundContext = function() { this.__ref = "compound_context"; this.__contexts = []; - if (source_context === undefined) - return; - else if (source_context.__ref === "compound_context") - this.__contexts.concat(source_context.__contexts); - else - this.add(source_context); + var self = this; + _.each(arguments, function(x) { + self.add(x); + }); }; openerp.base.CompoundContext.prototype.add = function(context) { - this.__contexts.push(context); + if (context.__ref === "compound_context") + this.__contexts = this.__contexts.concat(context.__contexts); + else + this.__contexts.push(context); return this; }; -openerp.base.CompoundDomain = function(source_domain) { +openerp.base.CompoundDomain = function() { this.__ref = "compound_domain"; this.__domains = []; - if (source_domain === undefined) - return; - else if (source_domain.__ref === "compound_domain") - this.__domains.concat(source_domain.__domains); - else - this.add(source_domain); + _.each(arguments, function(x) { + self.add(x); + }); }; openerp.base.CompoundDomain.prototype.add = function(domain) { - this.__domains.push(domain); + if (domain.__ref === "compound_domain") + this.__domains = this.__domains.concat(domain.__domains); + else + this.__domains.push(domain); return this; }; diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 2aa29fac377..42041f1b024 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -34,6 +34,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV this.touched = false; this.flags = this.view_manager.flags || {}; this.registry = openerp.base.form.widgets; + this.has_been_loaded = $.Deferred(); }, start: function() { //this.log('Starting FormView '+this.model+this.view_id) @@ -47,7 +48,6 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV on_loaded: function(data) { var self = this; this.fields_view = data.fields_view; - var frame = new (this.registry.get_object('frame'))(this, this.fields_view.arch); this.$element.html(QWeb.render(this.template, { 'frame': frame, 'view': this })); @@ -65,6 +65,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV this.$element.find('#' + this.element_id + '_header button.oe_form_button_new').click(this.on_button_new); this.view_manager.sidebar.set_toolbar(data.fields_view.toolbar); + this.has_been_loaded.resolve(); }, do_show: function () { var self = this; @@ -222,8 +223,10 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV }, on_button_new: function() { var self = this; - this.dataset.default_get(_.keys(this.fields), function(result) { - self.on_record_loaded(result.result); + $.when(this.has_been_loaded).then(function() { + self.dataset.default_get(_.keys(self.fields_view.fields), function(result) { + self.on_record_loaded(result.result); + }); }); }, /** @@ -1183,11 +1186,11 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ self._change_int_ext_value(data.result); }, function(a, b) { self._change_int_value(null); - self._search_create_popup("form"); + self._search_create_popup("form", undefined, {"default_name": name}); }); }, // all search/create popup handling - _search_create_popup: function(view, ids) { + _search_create_popup: function(view, ids, context) { var dataset = new openerp.base.DataSetStatic(this.session, this.field.relation, []); var self = this; var pop = new openerp.base.form.SelectCreatePopup(null, self.view.session); @@ -1195,7 +1198,8 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ initial_ids: ids ? _.map(ids, function(x) {return x[0]}) : undefined, initial_view: view, disable_multiple_selection: true - }); + }, self.view.domain || [], + new openerp.base.CompoundContext(build_relation_context(self)).add(context || {})); pop.on_select_elements.add(function(element_ids) { dataset.call("name_get", [element_ids[0]], function(data) { self._change_int_ext_value(data.result[0]); @@ -1431,7 +1435,8 @@ openerp.base.form.SelectCreatePopup = openerp.base.BaseWidget.extend({ }, start: function() { this._super(); - this.dataset = new openerp.base.DataSetSearch(this.session, this.model); + this.dataset = new openerp.base.DataSetSearch(this.session, this.model, + this.context, this.domain); if ((this.options.initial_view || "search") == "search") { this.setup_search_view(); } else { // "form" @@ -1450,8 +1455,8 @@ 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, [[["id", "in", - self.initial_ids]]], contexts, groupbys); + self.view_list.do_search.call(self,[[["id", "in", self.initial_ids]]], + contexts, groupbys); self.initial_ids = undefined; } else { self.view_list.do_search.call(self, domains, contexts, groupbys); diff --git a/openerpweb/nonliterals.py b/openerpweb/nonliterals.py index 38c94e6d230..c5fa96c5bdc 100644 --- a/openerpweb/nonliterals.py +++ b/openerpweb/nonliterals.py @@ -173,7 +173,7 @@ class CompoundDomain: if isinstance(domain, list): final_domain.extend(domain) - break + continue ctx = dict(context or {}) ctx['context'] = ctx @@ -201,7 +201,7 @@ class CompoundContext: if isinstance(context_to_eval, dict): final_context.update(context_to_eval) - break + continue ctx.update(final_context) ctx["context"] = ctx