# How to recalculate a residual?

By
Anirudh Lou
on 8/27/15, 4:52 AM 1,496 views

I think this gonna be the most hard situation i am facing, in my minisystem it involves a selling of an item where a customers need to make downpayment. So what i did were these:

• For a customers to make downpayment i used (Customer Payment, however i did not make any entry on it's Payment Information 'account_move_line'. The next thing i did was validate it, so it created a journal items)

• In my crm_lead, i add some field (many2one on account_voucher) that point to the customer payment

• I created a class named account_sale_line (many2one to both sale_order and account_invoice)

• In account_invoice i modified method _amount_all (because i add some field in account_invoice) this is how i modified it:

• `       def _amount_residual(self, cr, uid, ids, name, args, context=None):        _logger.info("\n\t\t\tI was called, my ids is ... %s"%(str(name)))        result = super(account_invoice,self)._amount_residual(cr, uid, ids, name, args)        #result = {}        for invoice in self.browse(cr, uid, ids, context=context):            result[invoice.id] = 0.0            if invoice.move_id:                for m in invoice.move_id.line_id:                    if m.account_id.type in ('receivable','payable'):                        result[invoice.id] += m.amount_residual_currency                        result[invoice.id] = result[invoice.id] - invoice.so_ai_amount            #prevent the residual amount on the invoice to be less than 0            result[invoice.id] = max(result[invoice.id], 0.0)                     return result`
`            def _get_invoice_factor(self, cr, uid, ids, context=None):        result = {}        for line in self.pool.get('sale.order.invoice').browse(cr, uid, ids, context=context):            result[line.order_id.id] = True        return result.keys()     'residual': fields.function(_amount_residual, digits_compute=dp.get_precision('Account'), string='Balance',                    store={                        'account.invoice': (lambda self, cr, uid, ids, c={}: ids, ['invoice_line','move_id','so_ai_lines'], 50),                        'account.invoice.tax': (_get_invoice_tax, None, 50),                        'account.invoice.line': (_get_invoice_line, ['price_unit','invoice_line_tax_id','quantity','discount','invoice_id'], 50),                        'account.move.line': (_get_invoice_from_line, None, 50),                        'account.move.reconcile': (_get_invoice_from_reconcile, None, 50),                        'sale.order.invoice': (_get_invoice_from_so_ai, ['amount'], 50),                    },                    help="Remaining amount due."), `

What problem i am facing is when i click the button Convert to Qoutation in class crm_sale, it says:

AttributeError: 'Field move_id not found in browse_record(account.invoice, 102)' . Here is what the log says:

`  File "/opt/openerp/custom_addons/mini_shop/account_invoice.py", line 74, in _amount_residual    result = super(account_invoice,self)._amount_residual(cr, uid, ids, name, args)  File "/opt/openerp/custom_addons/mini_shop/account_invoice.py", line 126, in _amount_residual    if invoice.move_id:  File "/opt/openerp/server-7/openerp/osv/orm.py", line 504, in __getattr__    raise AttributeError(e)  AttributeError: 'Field move_id not found in browse_record(account.invoice, 102)'`

I cannot understand why it point to account_invoice and i don't know why the id being pointed out is 102, if my guess is right this id is the supposed id of sale_order.

#### Any help is much appreciated

Hi, I guess your line has invoice id, other than order id. Try by result[line.invoice_id.id] = True

Serpent Consulting Services Pvt. Ltd., Serpent Consulting Services Pvt. Ltd.
on 8/27/15, 9:53 AM

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.

### Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

1 follower(s)

### Stats

 Asked: 8/27/15, 4:52 AM Seen: 1496 times Last updated: 2/12/16, 7:55 AM