[FIX] account: reconciliation widget: when updating matches (move lines), exclude...
authorArthur Maniet <ama@odoo.com>
Wed, 10 Sep 2014 14:58:31 +0000 (16:58 +0200)
committerArthur Maniet <ama@odoo.com>
Wed, 10 Sep 2014 14:59:19 +0000 (16:59 +0200)
addons/account/account_move_line.py
addons/account/static/src/js/account_widgets.js

index 99c40f3..c404b93 100644 (file)
@@ -772,8 +772,10 @@ class account_move_line(osv.osv):
         for line in lines:
             if line.reconcile_partial_id and line.reconcile_partial_id.id in reconcile_partial_ids:
                 continue
+            partial_reconciliation_siblings_ids = []
             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)
 
             ret_line = {
                 'id': line.id,
@@ -788,6 +790,7 @@ class account_move_line(osv.osv):
                 'journal_name': line.journal_id.name,
                 'partner_id': line.partner_id.id,
                 'partner_name': line.partner_id.name,
+                'partial_reconciliation_siblings_ids': partial_reconciliation_siblings_ids,
             }
 
             # Get right debit / credit:
index 411ed3f..e69165b 100644 (file)
@@ -293,8 +293,13 @@ 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
-        excludeMoveLines: function(source_child, partner_id, line_ids) {
+        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 excluded_ids = this.excluded_move_lines_ids[partner_id];
             var excluded_move_lines_changed = false;
@@ -331,9 +336,14 @@ openerp.account = function (instance) {
             });
         },
         
-        unexcludeMoveLines: function(source_child, partner_id, line_ids) {
+        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 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);
             if (this.excluded_move_lines_ids[partner_id].length === initial_excluded_lines_num)
@@ -530,10 +540,9 @@ openerp.account = function (instance) {
                 this.decorateStatementLine(this.st_line);
     
                 // Exclude selected move lines
-                var selected_line_ids = _(context.reconciliation_proposition).map(function(o){ return o.id });
                 if (this.getParent().excluded_move_lines_ids[this.partner_id] === undefined)
                     this.getParent().excluded_move_lines_ids[this.partner_id] = [];
-                this.getParent().excludeMoveLines(this, this.partner_id, selected_line_ids);
+                this.getParent().excludeMoveLines(this, this.partner_id, context.reconciliation_proposition);
             } else {
                 this.set("mv_lines_selected", []);
                 this.st_line = undefined;
@@ -684,7 +693,7 @@ openerp.account = function (instance) {
             _.each(self.getChildren(), function(o){ o.destroy() });
             self.is_consistent = false;
             return $.when(self.$el.animate({opacity: 0}, self.animation_speed)).then(function() {
-                self.getParent().unexcludeMoveLines(self, self.partner_id, _.map(self.get("mv_lines_selected"), function(o){ return o.id }));
+                self.getParent().unexcludeMoveLines(self, self.partner_id, self.get("mv_lines_selected"));
                 $.each(self.$(".bootstrap_popover"), function(){ $(this).popover('destroy') });
                 self.$el.empty();
                 self.$el.removeClass("no_partner");
@@ -1277,11 +1286,11 @@ openerp.account = function (instance) {
         mvLinesSelectedChanged: function(elt, val) {
             var self = this;
         
-            var added_lines_ids = _.map(_.difference(val.newValue, val.oldValue), function(o){ return o.id });
-            var removed_lines_ids = _.map(_.difference(val.oldValue, val.newValue), function(o){ return o.id });
+            var added_lines = _.difference(val.newValue, val.oldValue);
+            var removed_lines = _.difference(val.oldValue, val.newValue);
         
-            self.getParent().excludeMoveLines(self, self.partner_id, added_lines_ids);
-            self.getParent().unexcludeMoveLines(self, self.partner_id, removed_lines_ids);
+            self.getParent().excludeMoveLines(self, self.partner_id, added_lines);
+            self.getParent().unexcludeMoveLines(self, self.partner_id, removed_lines);
         
             $.when(self.updateMatches()).then(function(){
                 self.updateAccountingViewMatchedLines();
@@ -1459,8 +1468,11 @@ 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;
-            var excluded_ids = _.collect(self.get("mv_lines_selected").concat(self.mv_lines_deselected), function(o){ return o.id });
-            excluded_ids = excluded_ids.concat(self.getParent().excluded_move_lines_ids[self.partner_id]);
+            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 deferred_move_lines;
             var move_lines = [];
@@ -1552,7 +1564,7 @@ openerp.account = function (instance) {
             speed = (isNaN(speed) ? self.animation_speed : speed);
             if (! self.is_consistent) return;
 
-            self.getParent().unexcludeMoveLines(self, self.partner_id, _.map(self.get("mv_lines_selected"), function(o){ return o.id }));
+            self.getParent().unexcludeMoveLines(self, self.partner_id, self.get("mv_lines_selected"));
             
             // Sliding animation
             var height = self.$el.outerHeight();