[IMP] account: bank statement reconciliation: for a partially reconciled move line...
authorArthur Maniet <ama@odoo.com>
Tue, 16 Sep 2014 10:23:13 +0000 (12:23 +0200)
committerArthur Maniet <ama@odoo.com>
Tue, 16 Sep 2014 10:23:13 +0000 (12:23 +0200)
addons/account/account_bank_statement.py
addons/account/account_move_line.py
addons/account/static/src/xml/account_bank_statement_reconciliation.xml

index f48efcc..805ce09 100644 (file)
@@ -417,6 +417,11 @@ class account_bank_statement(osv.osv):
 
 class account_bank_statement_line(osv.osv):
 
+    def create(self, cr, uid, vals, context=None):
+        if vals.get('amount_currency', 0) != 0 and vals.get('amount', 0) == 0:
+            raise osv.except_osv(_('Error!'), _('If "Amount Currency" is specified, then "Amount" must be as well.'))
+        return super(account_bank_statement_line, self).create(cr, uid, vals, context=context)
+
     def unlink(self, cr, uid, ids, context=None):
         for item in self.browse(cr, uid, ids, context=context):
             if item.journal_entry_id:
index 1918b54..fe33bde 100644 (file)
@@ -791,12 +791,15 @@ class account_move_line(osv.osv):
                 'journal_name': line.journal_id.name,
                 'partner_id': line.partner_id.id,
                 'partner_name': line.partner_id.name,
+                'is_partially_reconciled': bool(line.reconcile_partial_id),
                 'partial_reconciliation_siblings_ids': partial_reconciliation_siblings_ids,
             }
 
             # Amount residual can be negative
             debit = line.debit
             credit = line.credit
+            total_amount = debit-credit
+            total_amount_currency = line.amount_currency
             amount_residual = line.amount_residual
             amount_residual_currency = line.amount_residual_currency
             if line.amount_residual < 0:
@@ -807,30 +810,40 @@ class account_move_line(osv.osv):
             # Get right debit / credit:
             line_currency = line.currency_id or company_currency
             amount_currency_str = ""
+            total_amount_currency_str = ""
             if line.currency_id and line.amount_currency:
-                amount_currency_str = rml_parser.formatLang(line.amount_currency, currency_obj=line.currency_id)
+                amount_currency_str = rml_parser.formatLang(amount_residual_currency, currency_obj=line.currency_id)
+                total_amount_currency_str = rml_parser.formatLang(total_amount_currency, currency_obj=line.currency_id)
             if target_currency and line_currency == target_currency and target_currency != company_currency:
                 debit = debit > 0 and amount_residual_currency or 0.0
                 credit = credit > 0 and amount_residual_currency or 0.0
-                amount_currency_str = amount_residual_currency(amount_residual, currency_obj=company_currency)
+                amount_currency_str = rml_parser.formatLang(amount_residual, currency_obj=company_currency)
+                total_amount_currency_str = rml_parser.formatLang(total_amount, currency_obj=company_currency)
                 amount_str = rml_parser.formatLang(debit or credit, currency_obj=target_currency)
+                total_amount_str = rml_parser.formatLang(total_amount_currency, currency_obj=target_currency)
             else:
                 debit = debit > 0 and amount_residual or 0.0
                 credit = credit > 0 and amount_residual or 0.0
                 amount_str = rml_parser.formatLang(debit or credit, currency_obj=company_currency)
+                total_amount_str = rml_parser.formatLang(total_amount, currency_obj=company_currency)
                 if target_currency and target_currency != company_currency:
                     amount_currency_str = rml_parser.formatLang(debit or credit, currency_obj=line_currency)
+                    total_amount_currency_str = rml_parser.formatLang(total_amount, currency_obj=line_currency)
                     ctx = context.copy()
                     if target_date:
                         ctx.update({'date': target_date})
                     debit = currency_obj.compute(cr, uid, target_currency.id, company_currency.id, debit, context=ctx)
                     credit = currency_obj.compute(cr, uid, target_currency.id, company_currency.id, credit, context=ctx)
                     amount_str = rml_parser.formatLang(debit or credit, currency_obj=target_currency)
+                    total_amount = currency_obj.compute(cr, uid, target_currency.id, company_currency.id, total_amount, context=ctx)
+                    total_amount_str = rml_parser.formatLang(total_amount, currency_obj=target_currency)
 
             ret_line['credit'] = credit
             ret_line['debit'] = debit
             ret_line['amount_str'] = amount_str
             ret_line['amount_currency_str'] = amount_currency_str
+            ret_line['total_amount_str'] = total_amount_str # For partial reconciliations
+            ret_line['total_amount_currency_str'] = total_amount_currency_str
             ret.append(ret_line)
         return ret
 
index cdd4358..0b7fc3e 100644 (file)
             <tr><td>Period</td><td><t t-esc="line.period_name"/></td></tr>
             <tr><td>Date</td><td><t t-esc="line.date"/></td></tr>
             <tr><td>Due Date</td><td><t t-esc="line.q_due_date"/></td></tr>
-            <tr><td>Amount</td>
-                <td><t t-if="line.debit !== 0" t-esc="line.debit_str"/><t t-if="line.credit !== 0" t-esc="line.credit_str"/>
-                    <t t-if="line.amount_currency_str"> (<t t-esc="line.amount_currency_str"/>)</t>
+            <t t-if="line.is_partially_reconciled">
+                <tr><td>Total</td><td>
+                    <t t-esc="line.total_amount_str"/><t t-if="line.total_amount_currency_str"> (<t t-esc="line.total_amount_currency_str"/>)</t>
                 </td></tr>
+            </t>
+            <tr><td><t t-if="line.is_partially_reconciled">Residual</t><t t-if="! line.is_partially_reconciled">Amount</t></td><td>
+                <t t-if="line.debit !== 0" t-esc="line.debit_str"/><t t-if="line.credit !== 0" t-esc="line.credit_str"/>
+                <t t-if="line.amount_currency_str"> (<t t-esc="line.amount_currency_str"/>)</t>
+            </td></tr>
         </table>
     </t>