[IMP] account: support for partial reconciliation in aged partner balance
authorMartin Trigaux <mat@openerp.com>
Wed, 21 May 2014 13:44:46 +0000 (15:44 +0200)
committerMartin Trigaux <mat@openerp.com>
Wed, 21 May 2014 13:48:35 +0000 (15:48 +0200)
When computing the aged partner balance, the partial reconciliation was not
handled correctly. The reconciled amount should be removed from the original
remaining amount instead of displaying two entries in the journal.
eg: if invocie of 1000 in period 1 and payment of 300 in period 2, should only
display +700 in period 1 instead of two entries

addons/account/report/account_aged_partner_balance.py

index 3b000e4..b7c2612 100644 (file)
@@ -159,7 +159,7 @@ class aged_trial_report(report_sxw.rml_parse, common_report_header):
                 dates_query += ' < %s)'
                 args_list += (form[str(i)]['stop'],)
             args_list += (self.date_from,)
-            self.cr.execute('''SELECT l.partner_id, SUM(l.debit-l.credit)
+            self.cr.execute('''SELECT l.partner_id, SUM(l.debit-l.credit), l.reconcile_partial_id
                     FROM account_move_line AS l, account_account, account_move am 
                     WHERE (l.account_id = account_account.id) AND (l.move_id=am.id)
                         AND (am.state IN %s)
@@ -171,12 +171,24 @@ class aged_trial_report(report_sxw.rml_parse, common_report_header):
                         AND account_account.active
                         AND ''' + dates_query + '''
                     AND (l.date <= %s)
-                    GROUP BY l.partner_id''', args_list)
-            t = self.cr.fetchall()
-            d = {}
-            for i in t:
-                d[i[0]] = i[1]
-            history.append(d)
+                    GROUP BY l.partner_id, l.reconcile_partial_id''', args_list)
+            partners_partial = self.cr.fetchall()
+            partners_amount = dict((i[0],0) for i in partners_partial)
+            for partner_info in partners_partial:
+                if partner_info[2]:
+                    # in case of partial reconciliation, we want to keep the left amount in the oldest period
+                    self.cr.execute('''SELECT MIN(COALESCE(date_maturity,date)) FROM account_move_line WHERE reconcile_partial_id = %s''', (partner_info[2],))
+                    date = self.cr.fetchall()
+                    if date and args_list[-3] <= date[0][0] <= args_list[-2]:
+                        # partial reconcilation
+                        self.cr.execute('''SELECT SUM(l.debit-l.credit)
+                                           FROM account_move_line AS l
+                                           WHERE l.reconcile_partial_id = %s''', (partner_info[2],))
+                        unreconciled_amount = self.cr.fetchall()
+                        partners_amount[partner_info[0]] += unreconciled_amount[0][0]
+                else:
+                    partners_amount[partner_info[0]] += partner_info[1]
+            history.append(partners_amount)
 
         for partner in partners:
             values = {}