From 4937b6bdd6624a9f2c2ebb5384b4559adf2ff462 Mon Sep 17 00:00:00 2001 From: "tfr@openerp.com" <> Date: Tue, 12 Jul 2011 16:07:03 +0200 Subject: [PATCH 01/21] [IMP] get_hostname tools function based on ir.config_parameter on the key network.hostname bzr revid: tfr@openerp.com-20110712140703-gvfnjs1y3r51kagn --- openerp/tools/misc.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index dc66142fc4a..0e14211ce60 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -248,6 +248,15 @@ def flatten(list): r.append(e) return r +def get_hostname(obj, cr, uid): + parameter_pool = obj.pool.get('ir.config_parameter') + ids = parameter_pool.search(cr, uid, [('key', '=', 'network.hostname')]) + if ids: + return parameter_pool.browse(cr, uid, ids)[0].value + else: + return 'localhost' + + def reverse_enumerate(l): """Like enumerate but in the other sens From 17d87a95992e7fd006ca996a2d8bebf4217534d9 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 12 Jul 2011 16:19:34 +0200 Subject: [PATCH 02/21] [FIX] group titles should display 'Undefined' for false values, rather than 'false' bzr revid: xmo@openerp.com-20110712141934-qk3zfckzh32b8xu1 --- addons/base/static/src/js/list-editable.js | 7 +- addons/base/static/src/js/list.js | 100 +++++++++++---------- 2 files changed, 61 insertions(+), 46 deletions(-) diff --git a/addons/base/static/src/js/list-editable.js b/addons/base/static/src/js/list-editable.js index a460dfcff41..4aa06cc8152 100644 --- a/addons/base/static/src/js/list-editable.js +++ b/addons/base/static/src/js/list-editable.js @@ -247,7 +247,12 @@ openerp.base.list.editable = function (openerp) { this.render_row_as_form(); } }); - openerp.base.list = {form: {}}; + if (!openerp.base.list) { + openerp.base.list = {}; + } + if (!openerp.base.list.form) { + openerp.base.list.form = {}; + } openerp.base.list.form.WidgetFrame = openerp.base.form.WidgetFrame.extend({ template: 'ListView.row.frame' }); diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index 7922f690784..bfa429fd454 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -1,5 +1,50 @@ openerp.base.list = function (openerp) { openerp.base.views.add('list', 'openerp.base.ListView'); +openerp.base.list = { + /** + * Formats the rendring of a given value based on its field type + * + * @param {Object} row_data record whose values should be displayed in the cell + * @param {Object} column column descriptor + * @param {"button"|"field"} column.tag base control type + * @param {String} column.type widget type for a field control + * @param {String} [column.string] button label + * @param {String} [column.icon] button icon + * @param {String} [value_if_empty=''] what to display if the field's value is ``false`` + */ + render_cell: function (row_data, column, value_if_empty) { + var attrs = column.modifiers_for(row_data); + if (attrs.invisible) { return ''; } + if (column.tag === 'button') { + return [ + '' + ].join('') + } + + var record = row_data[column.id]; + if (record.value === false) { + return value_if_empty === undefined ? '' : value_if_empty; + } + switch (column.widget || column.type) { + case 'many2one': + // name_get value format + return record.value[1]; + case 'float_time': + return _.sprintf("%02d:%02d", + Math.floor(record.value), + Math.round((record.value % 1) * 60)); + case 'progressbar': + return _.sprintf( + '%.2f%%', + record.value, record.value); + default: + return record.value; + } + } +}; openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListView# */ { defaults: { // records can be selected one by one @@ -634,7 +679,7 @@ openerp.base.ListView.List = Class.extend( /** @lends openerp.base.ListView.List this.$current = this.$_element.clone(true); this.$current.empty().append( QWeb.render('ListView.rows', _.extend({ - render_cell: this.render_cell}, this))); + render_cell: openerp.base.list.render_cell}, this))); }, /** * Gets the ids of all currently selected records, if any @@ -765,49 +810,9 @@ openerp.base.ListView.List = Class.extend( /** @lends openerp.base.ListView.List row: this.rows[record_index], row_parity: (record_index % 2 === 0) ? 'even' : 'odd', row_index: record_index, - render_cell: this.render_cell + render_cell: openerp.base.list.render_cell }); }, - /** - * Formats the rendring of a given value based on its field type - * - * @param {Object} row_data record whose values should be displayed in the cell - * @param {Object} column column descriptor - * @param {"button"|"field"} column.tag base control type - * @param {String} column.type widget type for a field control - * @param {String} [column.string] button label - * @param {String} [column.icon] button icon - */ - render_cell: function (row_data, column) { - var attrs = column.modifiers_for(row_data); - if (attrs.invisible) { return ''; } - if (column.tag === 'button') { - return [ - '' - ].join('') - } - - var record = row_data[column.id]; - if (record.value === false) { return ''; } - switch (column.widget || column.type) { - case 'many2one': - // name_get value format - return record.value[1]; - case 'float_time': - return _.sprintf("%02d:%02d", - Math.floor(record.value), - Math.round((record.value % 1) * 60)); - case 'progressbar': - return _.sprintf( - '%.2f%%', - record.value, record.value); - default: - return record.value; - } - }, /** * Stops displaying the records matching the provided ids. * @@ -959,10 +964,15 @@ openerp.base.ListView.Groups = Class.extend( /** @lends openerp.base.ListView.Gr placeholder.appendChild($row[0]); var $group_column = $('').appendTo($row); + // Don't fill this if group_by_no_leaf but no group_by if (group.grouped_on) { - // Don't fill this if group_by_no_leaf but no group_by - $group_column - .text((group.value instanceof Array ? group.value[1] : group.value)); + var row_data = {}; + row_data[group.grouped_on] = group; + var group_column = _(self.columns).detect(function (column) { + return column.id === group.grouped_on; }); + $group_column.text(openerp.base.list.render_cell( + row_data, group_column, "Undefined" + )); if (group.openable) { // Make openable if not terminal group & group_by_no_leaf $group_column From 9e0738b97dc8e28983bbfe59436181978ac87ab6 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 12 Jul 2011 16:34:08 +0200 Subject: [PATCH 03/21] [FIX] column visibility, due to removal of attribute computation and replacement with modifiers mapping bzr revid: xmo@openerp.com-20110712143408-tv1wlyfolfj0qish --- addons/base/static/src/js/list.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index bfa429fd454..99e96dc6d2d 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -308,6 +308,9 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi 'invisible': domain_computer(modifiers.invisible, fields) }; }; + if (modifiers['tree_invisible']) { + column.invisible = '1'; + } } else { column.modifiers_for = noop; } From f6acf3129535d5441c391fdaed83b2a897d83efe Mon Sep 17 00:00:00 2001 From: "tfr@openerp.com" <> Date: Tue, 12 Jul 2011 17:20:27 +0200 Subject: [PATCH 04/21] [IMP] get hostname using get_param + add default value in get_param bzr revid: tfr@openerp.com-20110712152027-oj6b42o0bttijkst --- openerp/addons/base/ir/ir_config_parameter.py | 4 ++-- openerp/tools/misc.py | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/openerp/addons/base/ir/ir_config_parameter.py b/openerp/addons/base/ir/ir_config_parameter.py index b1688b9a669..f8c0348e8f6 100644 --- a/openerp/addons/base/ir/ir_config_parameter.py +++ b/openerp/addons/base/ir/ir_config_parameter.py @@ -62,7 +62,7 @@ class ir_config_parameter(osv.osv): if not ids: self.set_param(cr, 1, key, func()) - def get_param(self, cr, uid, key, context=None): + def get_param(self, cr, uid, key, default=False, context=None): """ Get the value of a parameter. @param key: The key of the parameter. @@ -72,7 +72,7 @@ class ir_config_parameter(osv.osv): """ ids = self.search(cr, uid, [('key','=',key)], context=context) if not ids: - return False + return default param = self.browse(cr, uid, ids[0], context=context) value = param.value return value diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index dc66142fc4a..fd72728d3e8 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -248,6 +248,10 @@ def flatten(list): r.append(e) return r +def get_hostname(obj, cr, uid): + return obj.pool.get('ir.config_parameter').get_param(cr, uid, 'network.hostname', default="localhost") + + def reverse_enumerate(l): """Like enumerate but in the other sens From 822b3936697ac9f30ca00d8d6bd7511ce30333b5 Mon Sep 17 00:00:00 2001 From: "tfr@openerp.com" <> Date: Tue, 12 Jul 2011 17:37:30 +0200 Subject: [PATCH 05/21] [RM] remove get hostname bzr revid: tfr@openerp.com-20110712153730-u29ss55hee7qs1et --- openerp/tools/misc.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index fd72728d3e8..dc66142fc4a 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -248,10 +248,6 @@ def flatten(list): r.append(e) return r -def get_hostname(obj, cr, uid): - return obj.pool.get('ir.config_parameter').get_param(cr, uid, 'network.hostname', default="localhost") - - def reverse_enumerate(l): """Like enumerate but in the other sens From d1209c847bdc252eef3a7627439d22c35163579f Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 13 Jul 2011 12:37:25 +0200 Subject: [PATCH 06/21] [FIX] sorting list views lp bug: https://launchpad.net/bugs/809309 fixed bzr revid: xmo@openerp.com-20110713103725-y9fnpp36z78bjbhn --- addons/base/controllers/main.py | 4 ++-- addons/base/static/src/js/data.js | 38 +++++++++++++++++++++---------- addons/base/static/src/js/list.js | 3 ++- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index a1fcc51818c..8138594c6eb 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -531,13 +531,13 @@ class DataSet(openerpweb.Controller): class DataGroup(openerpweb.Controller): _cp_path = "/base/group" @openerpweb.jsonrequest - def read(self, request, model, fields, group_by_fields, domain=None): + def read(self, request, model, fields, group_by_fields, domain=None, sort=None): Model = request.session.model(model) context, domain = eval_context_and_domain(request.session, request.context, domain) return Model.read_group( domain or [], fields, group_by_fields, 0, False, - dict(context, group_by=group_by_fields)) + dict(context, group_by=group_by_fields), sort or False) class View(openerpweb.Controller): _cp_path = "/base/view" diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index a49e6cf901f..b01ceeaed5c 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -1,6 +1,23 @@ openerp.base.data = function(openerp) { +/** + * Serializes the sort criterion array of a dataset into a form which can be + * consumed by OpenERP's RPC APIs. + * + * @param {Array} criterion array of fields, from first to last criteria, prefixed with '-' for reverse sorting + * @returns {String} SQL-like sorting string (``ORDER BY``) clause + */ +openerp.base.serialize_sort = function (criterion) { + return _.map(criterion, + function (criteria) { + if (criteria[0] === '-') { + return criteria.slice(1) + ' DESC'; + } + return criteria + ' ASC'; + }).join(', '); +}; + openerp.base.DataGroup = openerp.base.Controller.extend( /** @lends openerp.base.DataGroup# */{ /** * Management interface between views and grouped collections of OpenERP @@ -130,7 +147,8 @@ openerp.base.ContainerDataGroup = openerp.base.DataGroup.extend( context: this.context, domain: this.domain, fields: _.uniq(this.group_by.concat(fields)), - group_by_fields: this.group_by + group_by_fields: this.group_by, + sort: openerp.base.serialize_sort(this.sort) }, function () { }).then(function (response) { var data_groups = _(response).map( _.bind(self.transform_group, self)); @@ -174,7 +192,7 @@ openerp.base.ContainerDataGroup = openerp.base.DataGroup.extend( self.session, self.model, group.__domain, child_context, child_context.group_by, self.level + 1), - group); + group, {sort: self.sort}); })); }); } @@ -197,8 +215,8 @@ openerp.base.GrouplessDataGroup = openerp.base.DataGroup.extend( }, list: function (fields, ifGroups, ifRecords) { ifRecords(_.extend( - new openerp.base.DataSetSearch(this.session, this.model), - {domain: this.domain, context: this.context})); + new openerp.base.DataSetSearch(this.session, this.model), + {domain: this.domain, context: this.context, _sort: this.sort})); } }); @@ -444,16 +462,12 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({ */ sort: function (field, force_reverse) { if (!field) { - return _.map(this._sort, function (criteria) { - if (criteria[0] === '-') { - return criteria.slice(1) + ' DESC'; - } - return criteria + ' ASC'; - }).join(', '); + return openerp.base.serialize_sort(this._sort); } - var reverse = force_reverse || (this._sort[0] === field); - this._sort = _.without(this._sort, field, '-' + field); + this._sort.splice.apply( + this._sort, [0, this._sort.length].concat( + _.without(this._sort, field, '-' + field))); this._sort.unshift((reverse ? '-' : '') + field); return undefined; diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index 99e96dc6d2d..333bc2f0029 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -209,7 +209,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi self.dataset.sort($(this).data('id')); // TODO: should only reload content (and set the right column to a sorted display state) - self.reload_view(); + self.reload_content(); }); this.$element.find('.oe-list-pager') @@ -449,6 +449,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi this.session, this.model, results.domain, results.context, results.group_by); + this.groups.datagroup.sort = this.dataset._sort; if (_.isEmpty(results.group_by) && !results.context['group_by_no_leaf']) { results.group_by = null; From 3496acfab4fde8ae095999fa8a053d5bcfa9bf58 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 13 Jul 2011 13:18:15 +0200 Subject: [PATCH 07/21] [FIX] reintroduce little arrows indicating the current sorting orientation in list views bzr revid: xmo@openerp.com-20110713111815-v0rhnt31vykx2xcu --- addons/base/static/src/css/base.css | 8 ++++++-- addons/base/static/src/js/list.js | 15 ++++++++++----- addons/base/static/src/xml/base.xml | 6 ++---- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css index e91bbd922ec..53470bb266a 100644 --- a/addons/base/static/src/css/base.css +++ b/addons/base/static/src/css/base.css @@ -609,10 +609,14 @@ background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%, .openerp .oe-listview td.oe-record-delete { text-align: right; } -.openerp .oe-listview th.oe-sortable, -.openerp .oe-listview th.oe-sortable .ui-icon { +.openerp .oe-listview th.oe-sortable { cursor: pointer; } +.openerp .oe-listview th.oe-sortable .ui-icon { + height: 1em; + display: inline; + display: inline-block; +} .openerp .oe-listview .oe-field-cell { cursor: pointer; diff --git a/addons/base/static/src/js/list.js b/addons/base/static/src/js/list.js index 333bc2f0029..49cd10c10b6 100644 --- a/addons/base/static/src/js/list.js +++ b/addons/base/static/src/js/list.js @@ -192,8 +192,6 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi this.setup_columns(this.fields_view.fields, grouped); - if (!this.fields_view.sorted) { this.fields_view.sorted = {}; } - this.$element.html(QWeb.render("ListView", this)); // Head hook @@ -203,12 +201,19 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi this.$element.find('.oe-list-delete') .attr('disabled', true) .click(this.do_delete_selected); - this.$element.find('thead').delegate('th[data-id]', 'click', function (e) { + this.$element.find('thead').delegate('th.oe-sortable[data-id]', 'click', function (e) { e.stopPropagation(); - self.dataset.sort($(this).data('id')); + var $this = $(this); + self.dataset.sort($this.data('id')); + if ($this.find('span').length) { + $this.find('span').toggleClass( + 'ui-icon-triangle-1-s ui-icon-triangle-1-n'); + } else { + $this.append('') + .siblings('.oe-sortable').find('span').remove(); + } - // TODO: should only reload content (and set the right column to a sorted display state) self.reload_content(); }); diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index 603c75cdb74..ef0c1848f1e 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -283,10 +283,8 @@ - - - - + From 3c985b0201a9128f9d090e7bfb3648850b613699 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Wed, 13 Jul 2011 17:37:12 +0200 Subject: [PATCH 08/21] [FIX] remove incorrect res_currency name_get bzr revid: al@openerp.com-20110713153712-j2v1nlm9q5e2319d --- openerp/addons/base/res/res_currency.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/openerp/addons/base/res/res_currency.py b/openerp/addons/base/res/res_currency.py index d8a4edfe0df..d81248a735d 100644 --- a/openerp/addons/base/res/res_currency.py +++ b/openerp/addons/base/res/res_currency.py @@ -131,13 +131,6 @@ class res_currency(osv.osv): else: return (from_amount * rate) - def name_search(self, cr, uid, name, args=[], operator='ilike', context={}, limit=100): - args2 = args[:] - if name: - args += [('name', operator, name)] - ids = self.search(cr, uid, args, limit=limit) - res = self.name_get(cr, uid, ids, context) - return res res_currency() class res_currency_rate(osv.osv): From c6bcc855e19cfd77e6b5b7d6577825726553644b Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 14 Jul 2011 11:56:19 +0200 Subject: [PATCH 09/21] [FIX] DataSet.read_slice needs to return the relevant deferred so callers can add new callbacks or use $.when multiplexing bzr revid: xmo@openerp.com-20110714095619-4owz98azxy9xkpi0 --- addons/base/static/src/js/data.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index b01ceeaed5c..c1b64b93307 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -396,7 +396,7 @@ openerp.base.DataSetStatic = openerp.base.DataSet.extend({ var self = this; offset = offset || 0; var end_pos = limit && limit !== -1 ? offset + limit : undefined; - this.read_ids(this.ids.slice(offset, end_pos), fields, callback); + return this.read_ids(this.ids.slice(offset, end_pos), fields, callback); }, set_ids: function (ids) { this.ids = ids; @@ -433,7 +433,7 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({ // return read_ids(ids.slice(start,start+limit),fields,callback) } } - this.rpc('/base/dataset/search_read', { + return this.rpc('/base/dataset/search_read', { model: this.model, fields: fields, domain: this.domain, @@ -444,7 +444,9 @@ openerp.base.DataSetSearch = openerp.base.DataSet.extend({ }, function (result) { self.ids = result.ids; self.offset = offset; - callback(result.records); + if (callback) { + callback(result.records); + } }); }, /** From 7578658e69b5106ec281c699886a5186735644c5 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 14 Jul 2011 11:57:31 +0200 Subject: [PATCH 10/21] [FIX] indentation in Session.rpc and Session.rpc_ajax, use early bailout to make code flow simpler and reduce indentation significantly bzr revid: xmo@openerp.com-20110714095731-2kuqyl0p289ouut7 --- addons/base/static/src/js/chrome.js | 54 ++++++++++++++++------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 0e07b62ae39..5eb0261100e 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -365,7 +365,7 @@ openerp.base.Session = openerp.base.BasicController.extend( /** @lends openerp.b params: params, id:null }).then(function () {deferred.resolve.apply(deferred, arguments);}, - function(error) {deferred.reject(error, $.Event());}); + function(error) {deferred.reject(error, $.Event());}); return deferred.fail(function() { deferred.fail(function(error, event) { if (!event.isDefaultPrevented()) { @@ -398,31 +398,35 @@ openerp.base.Session = openerp.base.BasicController.extend( /** @lends openerp.b }, url); var deferred = $.Deferred(); $.ajax(ajax).done(function(response, textStatus, jqXHR) { - self.on_rpc_response(); - if (response.error) { - if (response.error.data.type == "session_invalid") { - self.uid = false; - self.on_session_invalid(function() { - self.rpc(url, payload.params, - function() {deferred.resolve.apply(deferred, arguments);}, - function(error, event) {event.preventDefault(); - deferred.reject.apply(deferred, arguments);}); - }); - } else { - deferred.reject(response.error); - } - } else { - deferred.resolve(response["result"], textStatus, jqXHR); - } - }).fail(function(jqXHR, textStatus, errorThrown) { - self.on_rpc_response(); - var error = { - code: -32098, - message: "XmlHttpRequestError " + errorThrown, - data: {type: "xhr"+textStatus, debug: jqXHR.responseText, objects: [jqXHR, errorThrown] } - }; - deferred.reject(error); + self.on_rpc_response(); + if (!response.error) { + deferred.resolve(response["result"], textStatus, jqXHR); + return; + } + if (response.error.data.type !== "session_invalid") { + deferred.reject(response.error); + return; + } + self.uid = false; + self.on_session_invalid(function() { + self.rpc(url, payload.params, + function() { + deferred.resolve.apply(deferred, arguments); + }, + function(error, event) { + event.preventDefault(); + deferred.reject.apply(deferred, arguments); + }); }); + }).fail(function(jqXHR, textStatus, errorThrown) { + self.on_rpc_response(); + var error = { + code: -32098, + message: "XmlHttpRequestError " + errorThrown, + data: {type: "xhr"+textStatus, debug: jqXHR.responseText, objects: [jqXHR, errorThrown] } + }; + deferred.reject(error); + }); return deferred.promise(); }, on_rpc_request: function() { From 9d814c830b5e3146b939c986f70268cbd0ac169c Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 14 Jul 2011 12:05:22 +0200 Subject: [PATCH 11/21] [FIX] remove bloody crazy (and useless) indirection keys in DataSet.call and DataSet.get_result RPC methods bzr revid: xmo@openerp.com-20110714100522-94rp1otj1n4hrf2x --- addons/base/controllers/main.py | 7 +++---- addons/base/static/src/js/form.js | 5 ++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 8138594c6eb..d6a81124c4d 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -508,7 +508,7 @@ class DataSet(openerpweb.Controller): @openerpweb.jsonrequest def call(self, req, model, method, args, domain_id=None, context_id=None): - return {'result': self.call_common(req, model, method, args, domain_id, context_id)} + return self.call_common(req, model, method, args, domain_id, context_id) @openerpweb.jsonrequest def call_button(self, req, model, method, args, domain_id=None, context_id=None): @@ -524,9 +524,8 @@ class DataSet(openerpweb.Controller): @openerpweb.jsonrequest def default_get(self, req, model, fields): - m = req.session.model(model) - r = m.default_get(fields, req.session.eval_context(req.context)) - return {'result': r} + Model = req.session.model(model) + return Model.default_get(fields, req.session.eval_context(req.context)) class DataGroup(openerpweb.Controller): _cp_path = "/base/group" diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 60511c49c17..701b4113bf4 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -269,9 +269,8 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV on_button_new: function() { var self = this; $.when(this.has_been_loaded).then(function() { - self.dataset.default_get(_.keys(self.fields_view.fields), function(result) { - self.on_record_loaded(result.result); - }); + self.dataset.default_get( + _.keys(self.fields_view.fields), self.on_record_loaded); }); }, /** From e32df7bb5d594cce1adb22e1cc9a951014f18d83 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 14 Jul 2011 12:09:33 +0200 Subject: [PATCH 12/21] [ADD] Add a dialog function + xml view debug mode bzr revid: fme@openerp.com-20110714100933-ce42j7ca2yzw0bsr --- addons/base/static/src/js/form.js | 24 ++++++++++++++++++++---- addons/base/static/src/xml/base.xml | 2 +- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 701b4113bf4..0313c3d9ac0 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -79,6 +79,10 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV this.$form_header.find('button.oe_form_button_cancel').click(this.do_cancel); this.$form_header.find('button.oe_form_button_new').click(this.on_button_new); + this.$form_header.find('button.oe_get_xml_view').click(function() { + $('' + openerp.base.json_node_to_xml(self.fields_view.arch, true) + '').dialog({ width: '95%', height: 600}); + }); + this.view_manager.sidebar.set_toolbar(data.fields_view.toolbar); this.has_been_loaded.resolve(); }, @@ -1238,6 +1242,21 @@ openerp.base.form.FieldSelection = openerp.base.form.Field.extend({ }); })(); +openerp.base.form.dialog = function(content, options) { + options = _.extend({ + autoOpen: true, + width: '90%', + height: '90%', + min_width: '800px', + min_height: '600px' + }, options || {}); + options.autoOpen = true; + var dialog = new openerp.base.Dialog(null, options); + dialog.$dialog = $(content).dialog(dialog.options); + console.log(dialog.options) + return dialog.$dialog; +} + openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ init: function(view, node) { this._super(view, node); @@ -1826,10 +1845,7 @@ openerp.base.form.SelectCreatePopup = openerp.base.BaseWidget.extend({ this.context = context || {}; this.options = _.defaults(options || {}, {"initial_view": "search", "auto_create": true}); this.initial_ids = this.options.initial_ids; - jQuery(this.render()).dialog({title: '', - modal: true, - width: 960, - height: 600}); + openerp.base.form.dialog(this.render()); this.start(); }, start: function() { diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index ef0c1848f1e..8aa392a3fd1 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -334,8 +334,8 @@ -

+

-
+
From 823f2efd057452e817a2bc828f7da3c1717b155c Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 14 Jul 2011 17:11:13 +0200 Subject: [PATCH 20/21] [IMP] dashboard css bzr revid: al@openerp.com-20110714151113-49vur1m55m7z0ybm --- addons/base_dashboard/static/src/css/dashboard.css | 1 + addons/base_graph/static/src/xml/base_graph.xml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/base_dashboard/static/src/css/dashboard.css b/addons/base_dashboard/static/src/css/dashboard.css index df4e9195440..65c62ced5f4 100644 --- a/addons/base_dashboard/static/src/css/dashboard.css +++ b/addons/base_dashboard/static/src/css/dashboard.css @@ -16,6 +16,7 @@ .openerp .oe-dashboard-action .oe-dashboard-action-header { font-size: 125%; + font-weight: bold; } .openerp a.oe-dashboard-action-rename { padding-right: 4px; diff --git a/addons/base_graph/static/src/xml/base_graph.xml b/addons/base_graph/static/src/xml/base_graph.xml index f8dee0a91c6..cb5b1b2b0c4 100644 --- a/addons/base_graph/static/src/xml/base_graph.xml +++ b/addons/base_graph/static/src/xml/base_graph.xml @@ -1,6 +1,6 @@ \ No newline at end of file + From 55be9c8aa0c678d9adcedd48275d3e293e535203 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 14 Jul 2011 17:36:47 +0200 Subject: [PATCH 21/21] [FIX] fields fixer in process_view: contexts should be parsed via parse_context, has_key should not be used, dict.get ~ in + __getitem__ bzr revid: xmo@openerp.com-20110714153647-qilykek2df0uhp3t --- addons/base/controllers/main.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 20419e03d3e..701bb0f1723 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -569,14 +569,15 @@ class View(openerpweb.Controller): else: xml = ElementTree.fromstring(arch) fvg['arch'] = Xml2Json.convert_element(xml) - for field in fvg['fields'].values(): - if field.has_key('views') and field['views']: - for view in field["views"].values(): + + for field in fvg['fields'].itervalues(): + if field.get('views'): + for view in field["views"].itervalues(): self.process_view(session, view, None, transform) if field.get('domain'): field["domain"] = self.parse_domain(field["domain"], session) if field.get('context'): - field["context"] = self.parse_domain(field["context"], session) + field["context"] = self.parse_context(field["context"], session) @openerpweb.jsonrequest def add_custom(self, request, view_id, arch):