mirror of
https://github.com/OCA/account-financial-tools.git
synced 2025-02-02 12:47:26 +02:00
Add option to reconcile the reversal move with the original move (#387)
[IMP] account_reversal: Several improvements * Default date for reverse move is not start_date of the period following the period of the original move (and not the period following today's period) * Return form view of account.move if only 1 move is reversed * Add option to reconcile with the reversal entry.
This commit is contained in:
committed by
Pedro M. Baeza
parent
751d234612
commit
bc45293273
@@ -50,7 +50,8 @@ class account_move(models.Model):
|
||||
@api.multi
|
||||
def _move_reversal(self, reversal_date,
|
||||
reversal_period_id=False, reversal_journal_id=False,
|
||||
move_prefix=False, move_line_prefix=False):
|
||||
move_prefix=False, move_line_prefix=False,
|
||||
reconcile=False):
|
||||
"""
|
||||
Create the reversal of a move
|
||||
|
||||
@@ -67,6 +68,7 @@ class account_move(models.Model):
|
||||
"""
|
||||
self.ensure_one()
|
||||
period_obj = self.env['account.period']
|
||||
amlo = self.env['account.move.line']
|
||||
|
||||
if reversal_period_id:
|
||||
reversal_period = period_obj.browse([reversal_period_id])[0]
|
||||
@@ -100,27 +102,44 @@ class account_move(models.Model):
|
||||
'to_be_reversed': False,
|
||||
})
|
||||
|
||||
for reversal_move_line in reversal_move.line_id:
|
||||
reversal_ml_name = ' '.join(
|
||||
rec_dict = {}
|
||||
for rev_move_line in reversal_move.line_id:
|
||||
rev_ml_name = ' '.join(
|
||||
[x for x
|
||||
in [move_line_prefix, reversal_move_line.name]
|
||||
in [move_line_prefix, rev_move_line.name]
|
||||
if x]
|
||||
)
|
||||
reversal_move_line.write(
|
||||
{'debit': reversal_move_line.credit,
|
||||
'credit': reversal_move_line.debit,
|
||||
'amount_currency': reversal_move_line.amount_currency * -1,
|
||||
'name': reversal_ml_name},
|
||||
rev_move_line.write(
|
||||
{'debit': rev_move_line.credit,
|
||||
'credit': rev_move_line.debit,
|
||||
'amount_currency': rev_move_line.amount_currency * -1,
|
||||
'name': rev_ml_name},
|
||||
check=True,
|
||||
update_check=True)
|
||||
|
||||
if reconcile and rev_move_line.account_id.reconcile:
|
||||
rec_dict.setdefault(
|
||||
(rev_move_line.account_id, rev_move_line.partner_id),
|
||||
amlo.browse(False))
|
||||
rec_dict[(rev_move_line.account_id, rev_move_line.partner_id)]\
|
||||
+= rev_move_line
|
||||
|
||||
reversal_move.validate()
|
||||
if reconcile:
|
||||
for mline in self.line_id:
|
||||
if mline.account_id.reconcile:
|
||||
rec_dict[(mline.account_id, mline.partner_id)] += mline
|
||||
|
||||
for to_rec_move_lines in rec_dict.itervalues():
|
||||
to_rec_move_lines.reconcile()
|
||||
|
||||
return reversal_move.id
|
||||
|
||||
@api.multi
|
||||
def create_reversals(self, reversal_date, reversal_period_id=False,
|
||||
reversal_journal_id=False,
|
||||
move_prefix=False, move_line_prefix=False):
|
||||
move_prefix=False, move_line_prefix=False,
|
||||
reconcile=False):
|
||||
"""
|
||||
Create the reversal of one or multiple moves
|
||||
|
||||
@@ -140,7 +159,8 @@ class account_move(models.Model):
|
||||
reversal_period_id=reversal_period_id,
|
||||
reversal_journal_id=reversal_journal_id,
|
||||
move_prefix=move_prefix,
|
||||
move_line_prefix=move_line_prefix
|
||||
move_line_prefix=move_line_prefix,
|
||||
reconcile=reconcile
|
||||
)
|
||||
for move in self
|
||||
if not move.reversal_id
|
||||
|
||||
@@ -37,7 +37,7 @@ class account_move_reversal(orm.TransientModel):
|
||||
required=True,
|
||||
help="Enter the date of the reversal account entries. "
|
||||
"By default, OpenERP proposes the first day of "
|
||||
"the next period."),
|
||||
"the period following the period of the move to reverse."),
|
||||
'period_id': fields.many2one(
|
||||
'account.period',
|
||||
'Reversal Period',
|
||||
@@ -57,6 +57,7 @@ class account_move_reversal(orm.TransientModel):
|
||||
help="Prefix that will be added to the name of the journal "
|
||||
"item to be reversed to create the name of the reversal "
|
||||
"journal item (a space is added after the prefix)."),
|
||||
'reconcile': fields.boolean('Reconcile'),
|
||||
}
|
||||
|
||||
def _next_period_first_date(self, cr, uid, context=None):
|
||||
@@ -66,21 +67,21 @@ class account_move_reversal(orm.TransientModel):
|
||||
period_ctx = context.copy()
|
||||
period_ctx['account_period_prefer_normal'] = True
|
||||
period_obj = self.pool.get('account.period')
|
||||
today_period_id = period_obj.find(cr, uid, context=period_ctx)
|
||||
if today_period_id:
|
||||
today_period = period_obj.browse(
|
||||
cr, uid, today_period_id[0], context=context)
|
||||
next_period_id = period_obj.next(
|
||||
cr, uid, today_period, 1, context=context)
|
||||
if next_period_id:
|
||||
next_period = period_obj.browse(
|
||||
cr, uid, next_period_id, context=context)
|
||||
res = next_period.date_start
|
||||
assert context['active_model'] == 'account.move'
|
||||
to_reverse_move = self.pool['account.move'].browse(
|
||||
cr, uid, context['active_id'], context=context)
|
||||
next_period_id = period_obj.next(
|
||||
cr, uid, to_reverse_move.period_id, 1, context=context)
|
||||
if next_period_id:
|
||||
next_period = period_obj.browse(
|
||||
cr, uid, next_period_id, context=context)
|
||||
res = next_period.date_start
|
||||
return res
|
||||
|
||||
_defaults = {
|
||||
'date': _next_period_first_date,
|
||||
'move_line_prefix': 'REV -',
|
||||
'reconcile': True,
|
||||
}
|
||||
|
||||
def action_reverse(self, cr, uid, ids, context=None):
|
||||
@@ -90,13 +91,12 @@ class account_move_reversal(orm.TransientModel):
|
||||
|
||||
form = self.read(cr, uid, ids, context=context)[0]
|
||||
|
||||
mod_obj = self.pool.get('ir.model.data')
|
||||
act_obj = self.pool.get('ir.actions.act_window')
|
||||
move_obj = self.pool.get('account.move')
|
||||
move_ids = context['active_ids']
|
||||
|
||||
period_id = form['period_id'][0] if form.get('period_id') else False
|
||||
journal_id = form['journal_id'][0] if form.get('journal_id') else False
|
||||
reconcile = form['reconcile'] if form.get('reconcile') else False
|
||||
reversed_move_ids = move_obj.create_reversals(
|
||||
cr, uid,
|
||||
move_ids,
|
||||
@@ -105,12 +105,18 @@ class account_move_reversal(orm.TransientModel):
|
||||
reversal_journal_id=journal_id,
|
||||
move_prefix=form['move_prefix'],
|
||||
move_line_prefix=form['move_line_prefix'],
|
||||
reconcile=reconcile,
|
||||
context=context)
|
||||
|
||||
__, action_id = mod_obj.get_object_reference(
|
||||
action = self.pool['ir.actions.act_window'].for_xml_id(
|
||||
cr, uid, 'account', 'action_move_journal_line')
|
||||
action = act_obj.read(cr, uid, [action_id], context=context)[0]
|
||||
action['domain'] = unicode([('id', 'in', reversed_move_ids)])
|
||||
action['name'] = _('Reversal Entries')
|
||||
action['context'] = unicode({'search_default_to_be_reversed': 0})
|
||||
if len(reversed_move_ids) == 1:
|
||||
action['res_id'] = reversed_move_ids[0]
|
||||
action['view_mode'] = 'form,tree'
|
||||
action['views'] = False
|
||||
action['view_id'] = False
|
||||
else:
|
||||
action['domain'] = unicode([('id', 'in', reversed_move_ids)])
|
||||
return action
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<field name="name">account.move.reverse.form</field>
|
||||
<field name="model">account.move.reverse</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Create reversal journal entries" version="7.0">
|
||||
<form string="Create reversal journal entries">
|
||||
<label string="This will create reversal for all selected entries whether checked 'to be reversed' or not."/>
|
||||
<group>
|
||||
<field name="date"/>
|
||||
@@ -15,6 +15,7 @@
|
||||
<newline/>
|
||||
<field name="move_prefix" />
|
||||
<field name="move_line_prefix" />
|
||||
<field name="reconcile"/>
|
||||
</group>
|
||||
|
||||
<footer>
|
||||
@@ -30,7 +31,6 @@
|
||||
<record id="act_account_move_reverse" model="ir.actions.act_window">
|
||||
<field name="name">Reverse Entries</field>
|
||||
<field name="res_model">account.move.reverse</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="view_account_move_reverse"/>
|
||||
<field name="target">new</field>
|
||||
|
||||
Reference in New Issue
Block a user