[FIX] account: structured communication have a higher priority
authorCedric Snauwaert <csn@openerp.com>
Fri, 20 Jun 2014 14:56:27 +0000 (16:56 +0200)
committerqdp-odoo <qdp@openerp.com>
Mon, 23 Jun 2014 09:39:43 +0000 (11:39 +0200)
addons/account/account_bank_statement.py
addons/account/static/src/js/account_widgets.js

index 7a45cf8..2a75c94 100644 (file)
@@ -448,15 +448,31 @@ class account_bank_statement_line(osv.osv):
         """ Used to instanciate a batch of reconciliations in a single request """
         # Build a list of reconciliations data
         ret = []
+        statement_line_done = {}
         mv_line_ids_selected = []
+        for st_line in self.browse(cr, uid, ids, context=context):
+            # look for structured communication first
+            exact_match_id = self.search_structured_com(cr, uid, st_line, context=context)
+            if exact_match_id:
+                reconciliation_data = {
+                    'st_line': self.get_statement_line_for_reconciliation(cr, uid, st_line.id, context),
+                    'reconciliation_proposition': self.make_counter_part_lines(cr, uid, st_line, [exact_match_id], context=context)
+                }
+                for mv_line in reconciliation_data['reconciliation_proposition']:
+                    mv_line_ids_selected.append(mv_line['id'])
+                statement_line_done[st_line.id] = reconciliation_data
+                
         for st_line_id in ids:
-            reconciliation_data = {
-                'st_line': self.get_statement_line_for_reconciliation(cr, uid, st_line_id, context),
-                'reconciliation_proposition': self.get_reconciliation_proposition(cr, uid, st_line_id, mv_line_ids_selected, context)
-            }
-            for mv_line in reconciliation_data['reconciliation_proposition']:
-                mv_line_ids_selected.append(mv_line['id'])
-            ret.append(reconciliation_data)
+            if statement_line_done.get(st_line_id):
+                ret.append(statement_line_done.get(st_line_id))
+            else:
+                reconciliation_data = {
+                    'st_line': self.get_statement_line_for_reconciliation(cr, uid, st_line_id, context),
+                    'reconciliation_proposition': self.get_reconciliation_proposition(cr, uid, st_line_id, mv_line_ids_selected, context)
+                }
+                for mv_line in reconciliation_data['reconciliation_proposition']:
+                    mv_line_ids_selected.append(mv_line['id'])
+                ret.append(reconciliation_data)
 
         # Check if, now that 'candidate' move lines were selected, there are moves left for statement lines
         #for reconciliation_data in ret:
@@ -529,10 +545,6 @@ class account_bank_statement_line(osv.osv):
             if st_line.amount < 0:
                 sign = -1
 
-        # look for structured communication
-        exact_match_id = self.search_structured_com(cr, uid, st_line, context=context)
-        if exact_match_id:
-            return self.make_counter_part_lines(cr, uid, st_line, [exact_match_id], context=context)
         #we don't propose anything if there is no partner detected
         if not st_line.partner_id.id:
             return []
index b78c851..8063752 100644 (file)
@@ -1356,8 +1356,6 @@ openerp.account = function (instance) {
             var self = this;
             if (! self.is_consistent) return;
     
-            self.getParent().unexcludeMoveLines(_.map(self.get("mv_lines_selected"), function(o){ return o.id }));
-    
             // Prepare data
             var mv_line_dicts = [];
             _.each(self.get("mv_lines_selected"), function(o) { mv_line_dicts.push(self.prepareSelectedMoveLineForPersisting(o)) });