[REF] Exchange difference move lines was pushed to an external method.

In this way calculation of this type of rounding method can be managed diferently 
from a law to another.

bzr revid: javier@vauxoo.com-20111011033233-ijbfcnp7f0tlcw2x
This commit is contained in:
Javier Duran javier@vauxoo.com
2011-10-10 23:32:33 -04:00
parent fd04f1bb9b
commit cb6892b20b
+60 -36
View File
@@ -658,6 +658,8 @@ class account_voucher(osv.osv):
:param voucher_id: Id of the actual voucher
:return Dict with new context
"""
company_currency = self._get_company_currency(cr, uid, voucher_id, context)
current_currency = self._get_current_currency(cr, uid, voucher_id, context)
context_multi_currency = context.copy()
voucher_brw = self.pool.get('account.voucher').browse(cr,uid,voucher_id,context)
context_multi_currency.update({'date': voucher_brw.date})
@@ -745,6 +747,50 @@ class account_voucher(osv.osv):
}
return move
def _get_exchange_lines(self, cr, uid, line, move_id, amount_residual, context = None):
'''
Generate two lines when the amount residual is due to difference on exchange.
@param line: browse object of the voucher.line
@param move_id: Account move wher the move lines will be.
@param amount_residual: Amount to be posted.
@param context: Context wher we are working
@return: Tuple with 2 dicts account move line in pos [0] and counterpart in pos [1].
'''
company_currency = self._get_company_currency(cr, uid, line.voucher_id.id, context)
current_currency = self._get_current_currency(cr, uid, line.voucher_id.id, context)
if not line.voucher_id.exchange_acc_id.id:
raise osv.except_osv(_('Error!'), _('You must provide an account for the exchange difference.'))
move_line = {
'journal_id': line.voucher_id.journal_id.id,
'period_id': line.voucher_id.period_id.id,
'name': _('change')+': '+(line.name or '/'),
'account_id': line.account_id.id,
'move_id': move_id,
'partner_id': line.voucher_id.partner_id.id,
'currency_id': company_currency <> current_currency and current_currency or False,
'amount_currency': 0.0,
'quantity': 1,
'credit': amount_residual > 0 and amount_residual or 0.0,
'debit': amount_residual < 0 and -amount_residual or 0.0,
'date': line.voucher_id.date,
}
move_line_counterpart = {
'journal_id': line.voucher_id.journal_id.id,
'period_id': line.voucher_id.period_id.id,
'name': _('change')+': '+(line.name or '/'),
'account_id': line.voucher_id.exchange_acc_id.id,
'move_id': move_id,
'amount_currency': 0.0,
'partner_id': line.voucher_id.partner_id.id,
'currency_id': company_currency <> current_currency and current_currency or False,
'quantity': 1,
'debit': amount_residual > 0 and amount_residual or 0.0,
'credit': amount_residual < 0 and -amount_residual or 0.0,
'date': line.voucher_id.date,
}
return (move_line,move_line_counterpart)
def voucher_move_line_create(self, cr, uid, voucher_id, line_total, move_id, context=None):
'''
Create all ther rest of account move lines on accout move object.
@@ -820,38 +866,11 @@ class account_voucher(osv.osv):
rec_ids = [voucher_line, line.move_line_id.id]
if amount_residual: # Change difference entry
if not voucher_brw.exchange_acc_id.id:
raise osv.except_osv(_('Error!'), _('You must provide an account for the exchange difference.'))
move_line = {
'journal_id': voucher_brw.journal_id.id,
'period_id': voucher_brw.period_id.id,
'name': _('change')+': '+(line.name or '/'),
'account_id': line.account_id.id,
'move_id': move_id,
'partner_id': voucher_brw.partner_id.id,
'currency_id': company_currency <> current_currency and current_currency or False,
'amount_currency': 0.0,
'quantity': 1,
'credit': amount_residual > 0 and amount_residual or 0.0,
'debit': amount_residual < 0 and -amount_residual or 0.0,
'date': voucher_brw.date,
}
new_id = move_line_pool.create(cr, uid, move_line)
move_line = {
'journal_id': voucher_brw.journal_id.id,
'period_id': voucher_brw.period_id.id,
'name': _('change')+': '+(line.name or '/'),
'account_id': voucher_brw.exchange_acc_id.id,
'move_id': move_id,
'amount_currency': 0.0,
'partner_id': voucher_brw.partner_id.id,
'currency_id': company_currency <> current_currency and current_currency or False,
'quantity': 1,
'debit': amount_residual > 0 and amount_residual or 0.0,
'credit': amount_residual < 0 and -amount_residual or 0.0,
'date': voucher_brw.date,
}
move_line_pool.create(cr, uid, move_line)
print "Amount Residual %s " % str(amount_residual)
exch_lines = self._get_exchange_lines(cr, uid, line, move_id,
amount_residual ,context)
new_id = move_line_obj.create(cr, uid, exch_lines[0],context)
move_line_obj.create(cr, uid, exch_lines[1], context)
rec_ids.append(new_id)
if line.move_line_id.id:
@@ -864,8 +883,6 @@ class account_voucher(osv.osv):
'''
Set a dict to be use to create the writeoff move line.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@param voucher_id: Id of voucher what we are creating account_move.
@param line_total: Amount total of the first account move line of the voucher.
@param move_id: Id of account move where this line will be added.
@@ -910,13 +927,19 @@ class account_voucher(osv.osv):
def _get_company_currency(self, cr, uid, voucher_id, context=None):
'''
@voucher_id: Id of the voucher what i want to obtain company currency.
Get the courrency of the actual company.
@param voucher_id: Id of the voucher what i want to obtain company currency.
@return id of currency
'''
return self.pool.get('account.voucher').browse(cr,uid,voucher_id,context).journal_id.company_id.currency_id.id
def _get_current_currency(self, cr, uid, voucher_id, context=None):
'''
@voucher_id: Id of the voucher what i want to obtain current currency.
Get currency we are working with.
@param voucher_id: Id of the voucher what i want to obtain current currency.
@return id of currency
'''
voucher = self.pool.get('account.voucher').browse(cr,uid,voucher_id,context)
return voucher.currency_id.id or self._get_company_currency(cr,uid,voucher.id,context)
@@ -924,6 +947,7 @@ class account_voucher(osv.osv):
def action_move_line_create(self, cr, uid, ids, context=None):
'''
Create account move for account voucher.
'''
if context is None:
context = {}