def onchange_trx_lines(self, cr, uid, ids, transaction_lines, payment_lines, context=None):
        amount = 0.0
        if transaction_lines:
            _line_pool = self.pool.get('via.assign.transaction.line')
            transaction_lines = resolve_o2m_operations(cr, uid, _line_pool, transaction_lines, ['amount_to_use'], context=context) or []
        if payment_lines:
            _line_pool = self.pool.get('via.assign.payment.line')
            payment_lines = resolve_o2m_operations(cr, uid, _line_pool, payment_lines, context=context) or []

        if transaction_lines:
            amount = transaction_lines[0]['amount_to_use']

            for _line in payment_lines:
                _amount_to_pay = min(_line['amount_to_pay'] or _line['residual'], amount)
                _line['amount_to_pay'] = _amount_to_pay
                amount -= _amount_to_pay
                _line = prep_dict_for_write(cr, uid, _line, context=context)

            return {'value': {
                'payment_lines': payment_lines,
                'writeoff_amount': amount,
                'with_writeoff': amount and 'with_writeoff' or 'no_writeoff',
            }}
        else:
            for _line in payment_lines:
                _line['amount_to_pay'] = 0.0
                _line = prep_dict_for_write(cr, uid, _line, context=context)

            return {'value': {
                'payment_lines': payment_lines,
                'writeoff_amount': 0.0,
                'with_writeoff': 'no_writeoff',
            }}
        return {}
    def onchange_lines(self,
                       cr,
                       uid,
                       ids,
                       bank_lines,
                       assignment_lines,
                       context=None):
        _bank_sum = 0.0
        _assignment_sum = 0.0

        _line_pool = self.pool.get('via.account.move.line')
        bank_lines = resolve_o2m_operations(cr, uid, _line_pool, bank_lines,
                                            ['amount_to_use'], context)
        _line_pool = self.pool.get('via.expense.voucher.line')
        assignment_lines = resolve_o2m_operations(cr, uid, _line_pool,
                                                  assignment_lines,
                                                  ['credit', 'debit'], context)

        for _line in bank_lines:
            _bank_sum -= _line.get('amount_to_use', 0.0)

        for _line in assignment_lines:
            _assignment_sum += (_line['credit'] - _line['debit'])

        return {
            'value': {
                'no_of_lines': len(bank_lines),
                'bank_sum': _bank_sum,
                'assignment_sum': _assignment_sum,
                'with_writeoff': (_bank_sum != _assignment_sum),
                'writeoff_amount': _bank_sum - _assignment_sum,
            }
        }
    def onchange_payment_lines(self, cr, uid, ids, transaction_lines, payment_lines, context=None):
#        _wo_amount = self._get_writeoff_amount(cr, uid, ids, False, False, context=context)
#        _wwo = _wo_amount[ids[0]] and 'with_writeoff' or 'no_writeoff'
#        return {'value': {'writeoff_amount': _wo_amount[ids[0]], 'with_writeoff': _wwo}}
        amount = 0.0
        if transaction_lines:
            _line_pool = self.pool.get('via.assign.transaction.line')
            transaction_lines = resolve_o2m_operations(cr, uid, _line_pool, transaction_lines, ['amount_to_use'], context=context) or []
        if payment_lines:
            _line_pool = self.pool.get('via.assign.payment.line')
            payment_lines = resolve_o2m_operations(cr, uid, _line_pool, payment_lines, context=context) or []

        if transaction_lines:
            amount = transaction_lines[0]['amount_to_use']

            for _line in payment_lines:
                amount -= _line['amount_to_pay']
                _line = prep_dict_for_write(cr, uid, _line, context=context)

            return {'value': {
                'writeoff_amount': amount,
                'with_writeoff': amount and 'with_writeoff' or 'no_writeoff',
            }}
        else:
            return {'value': {
                'writeoff_amount': 0.0,
                'with_writeoff': 'no_writeoff',
            }}
        return {}
    def onchange_lines(self, cr, uid, ids, bank_lines, assignment_lines, context=None):
        _bank_sum = 0.0
        _assignment_sum = 0.0

        _line_pool = self.pool.get('via.account.move.line')
        bank_lines = resolve_o2m_operations(cr, uid, _line_pool, bank_lines, ['amount_to_use'], context)
        _line_pool = self.pool.get('via.expense.voucher.line')
        assignment_lines = resolve_o2m_operations(cr, uid, _line_pool, assignment_lines, ['credit', 'debit'], context)

        for _line in bank_lines:
            _bank_sum -= _line.get('amount_to_use', 0.0)

        for _line in assignment_lines:
            _assignment_sum += (_line['credit'] - _line['debit'])

        return {'value': {
            'no_of_lines': len(bank_lines),
            'bank_sum': _bank_sum,
            'assignment_sum': _assignment_sum,
            'with_writeoff': (_bank_sum != _assignment_sum),
            'writeoff_amount': _bank_sum - _assignment_sum,
        }}