Comment 3 for bug 461617

Revision history for this message
Jan Verlaan (jan-verlaan) wrote :

Module account -> source invoice.py ->

def _amount_residual(self, cr, uid, ids, name, args, context=None):
        res = {}
        data_inv = self.browse(cr, uid, ids)
        cur_obj = self.pool.get('res.currency')
        for inv in data_inv:
            debit = credit = 0.0
            for lines in inv.move_lines:
                if lines.account_id.company_currency_id.id <> inv.currency_id.id:
                    if lines.debit:
                        debit += cur_obj.compute(cr, uid, lines.account_id.company_currency_id.id, inv.currency_id.id, lines.debit)
                    if lines.credit:
                        credit += cur_obj.compute(cr, uid, lines.account_id.company_currency_id.id, inv.currency_id.id, lines.credit)
                else:
                    debit += lines.debit
                    credit += lines.credit

            if not inv.amount_total:
                result = 0.0
            elif inv.type in ('out_invoice','in_refund'):
                result = inv.amount_total * (1.0 - credit / (debit + inv.amount_total))
            else:
                result = inv.amount_total * (1.0 - debit / (credit + inv.amount_total))
            res[inv.id] = round(result,int(config['price_accuracy']))
        return res