diff --git a/CHANGELOG b/CHANGELOG index 41e2aa2f87..fd75bbcd53 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +* Display the number of selected records +* Humanize the count result +* Add limit to search_count * Call view_get for board view * Limit board action domain to active id and ids * Manage creatable attribute of view diff --git a/src/common.js b/src/common.js index 95223ad296..e746454581 100644 --- a/src/common.js +++ b/src/common.js @@ -605,11 +605,21 @@ }); Sao.common.VIEW_SEARCH = new Sao.common.ViewSearch(); - Sao.common.humanize = function(size) { - var sizes = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB']; + Sao.common.humanize = function(size, suffix) { + suffix = suffix || ''; + var sizes = ['', 'K', 'M', 'G', 'T', 'P']; for (var i =0, len = sizes.length; i < len; i++) { - if (size < 1000) { - return size.toPrecision(4) + ' ' + sizes[i]; + if (size <= 1000) { + if (size % 1 === 0) { + size = '' + size; + } else { + size = size.toLocaleString( + Sao.i18n.BC47(Sao.i18n.getlang()), { + 'minimumFractionDigits': 0, + 'maximumFractionDigits': 2, + }); + } + return size + sizes[i] + suffix; } size /= 1000; } diff --git a/src/sao.less b/src/sao.less index 45488bb02f..9c64a3eeca 100644 --- a/src/sao.less +++ b/src/sao.less @@ -264,8 +264,8 @@ html.accesskey { .navbar-text { .badge { - max-width: 5em; - min-width: 5em; + max-width: 7em; + min-width: 7em; overflow: hidden; text-overflow: ellipsis; } diff --git a/src/screen.js b/src/screen.js index bdbc5e1273..c071b80268 100644 --- a/src/screen.js +++ b/src/screen.js @@ -376,7 +376,11 @@ counter.html(' '); counter.css('visibility', 'hidden'); } else { - counter.attr('title', count); + var title = Sao.common.humanize(count); + if (count >= 1000) { + title += '+'; + } + counter.attr('title', title); var text = count; if (count > 99) { text = '99+'; @@ -879,6 +883,9 @@ return r.deletable; }); }, + get count_limit() { + return this.limit * 100 + this.offset; + }, load_next_view: function() { if (!jQuery.isEmptyObject(this.view_to_load)) { var view_id; @@ -1077,7 +1084,8 @@ if ((this.limit !== null) && (ids.length == this.limit)) { count_prm = this.model.execute( - 'search_count', [domain], context) + 'search_count', + [domain, 0, this.count_limit], context) .then(function(count) { this.search_count = count; return this.search_count; @@ -1176,7 +1184,7 @@ var domain = ['AND', tab_domain[1], screen_domain]; this.screen_container.set_tab_counter(null, i); this.group.model.execute( - 'search_count', [domain], this.context) + 'search_count', [domain, 0, 1000], this.context) .then(function(count) { this.screen_container.set_tab_counter(count, i); }.bind(this)); diff --git a/src/tab.js b/src/tab.js index 2e9ca04d78..7e24d93cfd 100644 --- a/src/tab.js +++ b/src/tab.js @@ -1452,7 +1452,11 @@ record_message: function(position, size, max_size, record_id) { var name = "_"; if (position) { - name = position; + var selected = this.screen.selected_records.length; + name = '' + position; + if (selected > 1) { + name += '#' + selected; + } } var buttons = ['print', 'relate', 'email', 'save', 'attach']; buttons.forEach(function(button_id){ @@ -1483,11 +1487,17 @@ 'disabled', this.screen.readonly); this.buttons.save.prop('disabled', this.screen.readonly); - var msg = name + ' / ' + size; - if ((size < max_size) && - this.screen.limit !== null && - (max_size > this.screen.limit)) { - msg += Sao.i18n.gettext(' of ') + max_size; + var msg; + if (size < max_size) { + msg = ( + name + '@' + + Sao.common.humanize(size) + '/' + + Sao.common.humanize(max_size)); + if (max_size >= this.screen.count_limit) { + msg += '+'; + } + } else { + msg = name + '/' + Sao.common.humanize(size); } this.status_label.text(msg).attr('title', msg); this.info_bar.message(); diff --git a/src/view/form.js b/src/view/form.js index b8773f8025..df3940c606 100644 --- a/src/view/form.js +++ b/src/view/form.js @@ -1045,7 +1045,7 @@ function eval_pyson(value){ 'method': ( 'model.' + action.res_model + '.search_count'), 'params': [ - ['AND', domain, tab_domain], context], + ['AND', domain, 0, tab_domain], 100, context], }, Sao.Session.current_session).then(function(value) { this._set_count( value, i, current, counter, @@ -1056,7 +1056,7 @@ function eval_pyson(value){ Sao.rpc({ 'method': ( 'model.' + action.res_model + '.search_count'), - 'params': [domain, context], + 'params': [domain, 0, 100, context], }, Sao.Session.current_session).then(function(value) { this._set_count( value, 0, current, counter, @@ -1069,6 +1069,9 @@ function eval_pyson(value){ if (current != this._current) { return; } + if (value > 99) { + value = '99+'; + } counter[idx] = value; this.set_label(name, domains, counter); }, @@ -4188,7 +4191,7 @@ function eval_pyson(value){ } else { size = field.get(record).length; } - this.size.val(Sao.common.humanize(size)); + this.size.val(Sao.common.humanize(size, 'B')); if (this.text) { this.text.val(this.filename_field.get(record) || ''); diff --git a/src/view/tree.js b/src/view/tree.js index e54813de55..e6825769df 100644 --- a/src/view/tree.js +++ b/src/view/tree.js @@ -2573,7 +2573,7 @@ } else { size = this.field.get(record).length; } - var text = size? Sao.common.humanize(size) : ''; + var text = size? Sao.common.humanize(size, 'B') : ''; cell.children('span').text(text).attr('title', text); var button = cell.children('button'); if (!button.length) {