[IMP] Provide _prepare* hooks in bank statement object for the entries creations of account.move.line from a statement line
bzr revid: joel.grandguillaume@camptocamp.com-20120621104018-ryylbaxh6696e0rc
This commit is contained in:
parent
6e30c1323d
commit
2911d6a8c5
|
@ -205,7 +205,182 @@ class account_bank_statement(osv.osv):
|
|||
def button_dummy(self, cr, uid, ids, context=None):
|
||||
return self.write(cr, uid, ids, {}, context=context)
|
||||
|
||||
def _prepare_move(self, cr, uid, st_line, st_line_number, context=None):
|
||||
"""Prepare the dict of values to create the move from a
|
||||
statement line. This method may be overridden to implement custom
|
||||
move generation (making sure to call super() to establish
|
||||
a clean extension chain).
|
||||
|
||||
:param browse_record st_line: account.bank.statement.line record to
|
||||
create the move from.
|
||||
:param char st_line_number: will be used as the name of the generated account move
|
||||
:return: dict of value to create() the account.move
|
||||
"""
|
||||
move_vals = {
|
||||
'journal_id': st_line.statement_id.journal_id.id,
|
||||
'period_id': st_line.statement_id.period_id.id,
|
||||
'date': st_line.date,
|
||||
'name': st_line_number,
|
||||
'ref': st_line.ref,
|
||||
}
|
||||
return move_vals
|
||||
|
||||
def _prepare_bank_move_line(self, cr, uid, st_line, move_id, amount, company_currency_id,
|
||||
context=None):
|
||||
"""Compute the args to build the dict of values to create the bank move line from a
|
||||
statement line by calling the _prepare_move_line_vals. This method may be
|
||||
overridden to implement custom move generation (making sure to call super() to
|
||||
establish a clean extension chain).
|
||||
|
||||
:param browse_record st_line: account.bank.statement.line record to
|
||||
create the move from.
|
||||
:param int/long move_id: ID of the account.move to link the move line
|
||||
:param float amount: amount of the move line
|
||||
:param int/long company_currency_id: ID of currency of the concerned company
|
||||
:return: dict of value to create() the bank account.move.line
|
||||
"""
|
||||
anl_id = st_line.analytic_account_id and st_line.analytic_account_id.id or False
|
||||
debit = ((amount<0) and -amount) or 0.0
|
||||
credit = ((amount>0) and amount) or 0.0
|
||||
cur_id = False
|
||||
amt_cur = False
|
||||
if st_line.statement_id.currency.id <> company_currency_id:
|
||||
amount_cur = res_currency_obj.compute(cr, uid, company_currency_id,
|
||||
st.currency.id, amount, context=context)
|
||||
amt_cur = -amount_cur
|
||||
if st_line.account_id and st_line.account_id.currency_id and st_line.account_id.currency_id.id <> company_currency_id:
|
||||
cur_id = st_line.account_id.currency_id.id
|
||||
amount_cur = res_currency_obj.compute(cr, uid, company_currency_id,
|
||||
st_line.account_id.currency_id.id, amount, context=context)
|
||||
amt_cur = -amount_cur
|
||||
|
||||
res = self._prepare_move_line_vals(cr, uid, st_line, move_id, debit, credit,
|
||||
amount_currency=amt_cur, currency_id=cur_id, analytic_id = anl_id, context=context)
|
||||
return res
|
||||
|
||||
def _get_counter_part_account(sefl, cr, uid, st_line, context=None):
|
||||
"""Retrieve the account to use in the counterpart move.
|
||||
This method may be overridden to implement custom move generation (making sure to
|
||||
call super() to establish a clean extension chain).
|
||||
|
||||
:param browse_record st_line: account.bank.statement.line record to
|
||||
create the move from.
|
||||
:return: int/long of the account.account to use as counterpart
|
||||
"""
|
||||
account_id = False
|
||||
if st_line.amount >= 0:
|
||||
account_id = st_line.statement_id.journal_id.default_credit_account_id.id
|
||||
else:
|
||||
account_id = st_line.statement_id.journal_id.default_debit_account_id.id
|
||||
return account_id
|
||||
|
||||
def _get_counter_part_partner(sefl, cr, uid, st_line, context=None):
|
||||
"""Retrieve the partner to use in the counterpart move.
|
||||
This method may be overridden to implement custom move generation (making sure to
|
||||
call super() to establish a clean extension chain).
|
||||
|
||||
:param browse_record st_line: account.bank.statement.line record to
|
||||
create the move from.
|
||||
:return: int/long of the res.partner to use as counterpart
|
||||
"""
|
||||
import pdb;pdb.set_trace()
|
||||
partner_id = ((st_line.partner_id) and st_line.partner_id.id) or False
|
||||
return partner_id
|
||||
|
||||
|
||||
def _prepare_counterpart_move_line(self, cr, uid, st_line, move_id, amount, company_currency_id,
|
||||
context=None):
|
||||
"""Compute the args to build the dict of values to create the counter part move line from a
|
||||
statement line by calling the _prepare_move_line_vals. This method may be
|
||||
overridden to implement custom move generation (making sure to call super() to
|
||||
establish a clean extension chain).
|
||||
|
||||
:param browse_record st_line: account.bank.statement.line record to
|
||||
create the move from.
|
||||
:param int/long move_id: ID of the account.move to link the move line
|
||||
:param float amount: amount of the move line
|
||||
:param int/long account_id: ID of account to use as counter part
|
||||
:param int/long company_currency_id: ID of currency of the concerned company
|
||||
:return: dict of value to create() the bank account.move.line
|
||||
"""
|
||||
account_id = self._get_counter_part_account(cr, uid, st_line, context=context)
|
||||
partner_id = self._get_counter_part_partner(cr, uid, st_line, context=context)
|
||||
debit = ((amount > 0) and amount) or 0.0
|
||||
credit = ((amount < 0) and -amount) or 0.0
|
||||
cur_id = False
|
||||
amt_cur = False
|
||||
if st_line.statement_id.currency.id <> company_currency_id:
|
||||
amt_cur = st_line.amount
|
||||
cur_id = st_line.statement_id.currency.id
|
||||
res = self._prepare_move_line_vals(cr, uid, st_line, move_id, debit, credit,
|
||||
amount_currency = amt_cur, currency_id = cur_id, account_id = account_id,
|
||||
partner_id = partner_id, context=context)
|
||||
return res
|
||||
|
||||
def _prepare_move_line_vals(self, cr, uid, st_line, move_id, debit, credit, currency_id = False,
|
||||
amount_currency= False, account_id = False, analytic_id = False,
|
||||
partner_id = False, context=None):
|
||||
"""Prepare the dict of values to create the move line from a
|
||||
statement line. All non-mandatory args will replace the default computed one.
|
||||
This method may be overridden to implement custom move generation (making sure to
|
||||
call super() to establish a clean extension chain).
|
||||
|
||||
:param browse_record st_line: account.bank.statement.line record to
|
||||
create the move from.
|
||||
:param int/long move_id: ID of the account.move to link the move line
|
||||
:param float debit: debit amount of the move line
|
||||
:param float credit: credit amount of the move line
|
||||
:param int/long currency_id: ID of currency of the move line to create
|
||||
:param float amount_currency: amount of the debit/credit expressed in the currency_id
|
||||
:param int/long account_id: ID of the account to use in the move line if different
|
||||
from the statement line account ID
|
||||
:param int/long analytic_id: ID of analytic account to put on the move line
|
||||
:param int/long partner_id: ID of the partner to put on the move line
|
||||
:return: dict of value to create() the account.move.line
|
||||
"""
|
||||
acc_id = (st_line.account_id) and st_line.account_id.id
|
||||
cur_id = st_line.statement_id.currency.id
|
||||
par_id = ((st_line.partner_id) and st_line.partner_id.id) or False
|
||||
anl_acc_id = False
|
||||
am_curr = False
|
||||
amount_currency = False
|
||||
if account_id:
|
||||
acc_id = account_id
|
||||
if currency_id:
|
||||
cur_id = currency_id
|
||||
if amount_currency:
|
||||
am_curr = amount_currency
|
||||
if analytic_id:
|
||||
anl_acc_id = analytic_id
|
||||
if partner_id:
|
||||
par_id = partner_id
|
||||
ml_val = {
|
||||
'name': st_line.name,
|
||||
'date': st_line.date,
|
||||
'ref': st_line.ref,
|
||||
'move_id': move_id,
|
||||
'partner_id': partner_id,
|
||||
'account_id': acc_id,
|
||||
'credit': credit,
|
||||
'debit': debit,
|
||||
'statement_id': st_line.statement_id.id,
|
||||
'journal_id': st_line.statement_id.journal_id.id,
|
||||
'period_id': st_line.statement_id.period_id.id,
|
||||
'currency_id': cur_id,
|
||||
'amount_currency': am_curr,
|
||||
'analytic_account_id': anl_acc_id,
|
||||
}
|
||||
return ml_val
|
||||
|
||||
def create_move_from_st_line(self, cr, uid, st_line_id, company_currency_id, st_line_number, context=None):
|
||||
"""Create the account move from the statement line using the _prepare_bank_move_line and
|
||||
_prepare_counterpart_move_line hook methods.
|
||||
:param int/long st_line: ID of the account.bank.statement.line to create the move from.
|
||||
:param int/long company_currency_id: ID of the res.currency of the company
|
||||
:param char st_line_number: will be used as the name of the generated account move
|
||||
:return: ID of the account.move created
|
||||
"""
|
||||
|
||||
if context is None:
|
||||
context = {}
|
||||
res_currency_obj = self.pool.get('res.currency')
|
||||
|
@ -217,82 +392,28 @@ class account_bank_statement(osv.osv):
|
|||
|
||||
context.update({'date': st_line.date})
|
||||
|
||||
move_id = account_move_obj.create(cr, uid, {
|
||||
'journal_id': st.journal_id.id,
|
||||
'period_id': st.period_id.id,
|
||||
'date': st_line.date,
|
||||
'name': st_line_number,
|
||||
'ref': st_line.ref,
|
||||
}, context=context)
|
||||
move_vals = self._prepare_move(cr, uid, st_line, st_line_number, context=context)
|
||||
move_id = account_move_obj.create(cr, uid, move_vals, context=context)
|
||||
account_bank_statement_line_obj.write(cr, uid, [st_line.id], {
|
||||
'move_ids': [(4, move_id, False)]
|
||||
})
|
||||
|
||||
torec = []
|
||||
if st_line.amount >= 0:
|
||||
account_id = st.journal_id.default_credit_account_id.id
|
||||
else:
|
||||
account_id = st.journal_id.default_debit_account_id.id
|
||||
|
||||
acc_cur = ((st_line.amount<=0) and st.journal_id.default_debit_account_id) or st_line.account_id
|
||||
|
||||
context.update({
|
||||
'res.currency.compute.account': acc_cur,
|
||||
})
|
||||
amount = res_currency_obj.compute(cr, uid, st.currency.id,
|
||||
company_currency_id, st_line.amount, context=context)
|
||||
|
||||
val = {
|
||||
'name': st_line.name,
|
||||
'date': st_line.date,
|
||||
'ref': st_line.ref,
|
||||
'move_id': move_id,
|
||||
'partner_id': ((st_line.partner_id) and st_line.partner_id.id) or False,
|
||||
'account_id': (st_line.account_id) and st_line.account_id.id,
|
||||
'credit': ((amount>0) and amount) or 0.0,
|
||||
'debit': ((amount<0) and -amount) or 0.0,
|
||||
'statement_id': st.id,
|
||||
'journal_id': st.journal_id.id,
|
||||
'period_id': st.period_id.id,
|
||||
'currency_id': st.currency.id,
|
||||
'analytic_account_id': st_line.analytic_account_id and st_line.analytic_account_id.id or False
|
||||
}
|
||||
|
||||
if st.currency.id <> company_currency_id:
|
||||
amount_cur = res_currency_obj.compute(cr, uid, company_currency_id,
|
||||
st.currency.id, amount, context=context)
|
||||
val['amount_currency'] = -amount_cur
|
||||
|
||||
if st_line.account_id and st_line.account_id.currency_id and st_line.account_id.currency_id.id <> company_currency_id:
|
||||
val['currency_id'] = st_line.account_id.currency_id.id
|
||||
amount_cur = res_currency_obj.compute(cr, uid, company_currency_id,
|
||||
st_line.account_id.currency_id.id, amount, context=context)
|
||||
val['amount_currency'] = -amount_cur
|
||||
|
||||
move_line_id = account_move_line_obj.create(cr, uid, val, context=context)
|
||||
bank_move_val = self._prepare_bank_move_line(cr, uid, st_line, move_id, amount,
|
||||
company_currency_id, context=context)
|
||||
move_line_id = account_move_line_obj.create(cr, uid, bank_move_val, context=context)
|
||||
torec.append(move_line_id)
|
||||
|
||||
# Fill the secondary amount/currency
|
||||
# if currency is not the same than the company
|
||||
amount_currency = False
|
||||
currency_id = False
|
||||
if st.currency.id <> company_currency_id:
|
||||
amount_currency = st_line.amount
|
||||
currency_id = st.currency.id
|
||||
account_move_line_obj.create(cr, uid, {
|
||||
'name': st_line.name,
|
||||
'date': st_line.date,
|
||||
'ref': st_line.ref,
|
||||
'move_id': move_id,
|
||||
'partner_id': ((st_line.partner_id) and st_line.partner_id.id) or False,
|
||||
'account_id': account_id,
|
||||
'credit': ((amount < 0) and -amount) or 0.0,
|
||||
'debit': ((amount > 0) and amount) or 0.0,
|
||||
'statement_id': st.id,
|
||||
'journal_id': st.journal_id.id,
|
||||
'period_id': st.period_id.id,
|
||||
'amount_currency': amount_currency,
|
||||
'currency_id': currency_id,
|
||||
}, context=context)
|
||||
counterpart_move_val = self._prepare_counterpart_move_line(cr, uid, st_line, move_id,
|
||||
amount, company_currency_id, context=context)
|
||||
account_move_line_obj.create(cr, uid, counterpart_move_val, context=context)
|
||||
|
||||
for line in account_move_line_obj.browse(cr, uid, [x.id for x in
|
||||
account_move_obj.browse(cr, uid, move_id,
|
||||
|
|
Loading…
Reference in New Issue