From f393171bc3b9931ec4bd9236d8d4f77004f49080 Mon Sep 17 00:00:00 2001 From: Arthur Maniet Date: Fri, 12 Sep 2014 15:28:50 +0200 Subject: [PATCH] [FIX] account: bank statement reconciliation widget: display only one line for a partial reconciliation --- addons/account/account_move_line.py | 1 + .../account/static/src/js/account_widgets.js | 35 ++++++++++--------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index f359289e8d8..a3e224cd80d 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -776,6 +776,7 @@ class account_move_line(osv.osv): if line.reconcile_partial_id: reconcile_partial_ids.append(line.reconcile_partial_id.id) partial_reconciliation_siblings_ids = self.search(cr, uid, [('reconcile_partial_id', '=', line.reconcile_partial_id.id)], context=context) + partial_reconciliation_siblings_ids.remove(line.id) ret_line = { 'id': line.id, diff --git a/addons/account/static/src/js/account_widgets.js b/addons/account/static/src/js/account_widgets.js index c42be9b6027..da6d489bcfe 100644 --- a/addons/account/static/src/js/account_widgets.js +++ b/addons/account/static/src/js/account_widgets.js @@ -293,13 +293,10 @@ openerp.account = function (instance) { // Adds move line ids to the list of move lines not to fetch for a given partner // This is required because the same move line cannot be selected for multiple reconciliation + // and because for a partial reconciliation only one line can be fetched) excludeMoveLines: function(source_child, partner_id, lines) { var self = this; - var line_ids = []; - _.each(lines, function(o) { - line_ids.push(o.id); - line_ids = line_ids.concat(o.partial_reconciliation_siblings_ids); - }); + var line_ids = _.collect(lines, function(o) { return o.id }); var excluded_ids = this.excluded_move_lines_ids[partner_id]; var excluded_move_lines_changed = false; @@ -338,11 +335,7 @@ openerp.account = function (instance) { unexcludeMoveLines: function(source_child, partner_id, lines) { var self = this; - var line_ids = []; - _.each(lines, function(o) { - line_ids.push(o.id); - line_ids = line_ids.concat(o.partial_reconciliation_siblings_ids); - }); + var line_ids = _.collect(lines, function(o) { return o.id }); var initial_excluded_lines_num = this.excluded_move_lines_ids[partner_id].length; this.excluded_move_lines_ids[partner_id] = _.difference(this.excluded_move_lines_ids[partner_id], line_ids); @@ -1291,7 +1284,14 @@ openerp.account = function (instance) { } else { self.$el.removeClass("no_match"); } - + + _.each(self.get("mv_lines"), function(line) { + if (line.partial_reconciliation_siblings_ids.length > 0) { + var correct_format = _.collect(line.partial_reconciliation_siblings_ids, function(o) { return {'id': o} }); + self.getParent().excludeMoveLines(self, self.partner_id, correct_format); + } + }); + self.updateMatchView(); self.updatePagerControls(); }, @@ -1487,12 +1487,13 @@ openerp.account = function (instance) { if (offset < 0) offset = 0; var limit = (self.get("pager_index")+1) * self.max_move_lines_displayed - deselected_lines_num; if (limit > self.max_move_lines_displayed) limit = self.max_move_lines_displayed; - if (self.st_line.has_no_partner) - var excluded_ids = self.getParent().excluded_move_lines_ids[self.partner_id]; - _.each(self.get("mv_lines_selected").concat(self.mv_lines_deselected), function(o){ - excluded_ids.push(o.id); - excluded_ids = excluded_ids.concat(o.partial_reconciliation_siblings_ids); - }); + var excluded_ids = self.getParent().excluded_move_lines_ids[self.partner_id]; + var excluded_ids = _.collect(self.get("mv_lines_selected").concat(self.mv_lines_deselected), function(o) { return o.id; }); + var globally_excluded_ids = self.getParent().excluded_move_lines_ids[self.partner_id]; + if (globally_excluded_ids !== undefined) + for (var i=0; i