diff --git a/addons/account/__manifest__.py b/addons/account/__manifest__.py
index 3024b1702f5..8ead6af8961 100644
--- a/addons/account/__manifest__.py
+++ b/addons/account/__manifest__.py
@@ -65,6 +65,7 @@ Core mechanisms for the accounting modules. To display the menuitems, install th
'views/account_dashboard_setup_bar.xml',
'wizard/account_report_tax_view.xml',
'views/report_tax.xml',
+ 'data/service_cron_reverse.xml',
],
'demo': [
'demo/account_demo.xml',
diff --git a/addons/account/data/service_cron_reverse.xml b/addons/account/data/service_cron_reverse.xml
new file mode 100644
index 00000000000..982abbeea1f
--- /dev/null
+++ b/addons/account/data/service_cron_reverse.xml
@@ -0,0 +1,13 @@
+
+
+
+ Account; Reverse entries
+ 1
+ days
+ -1
+
+
+ model._run_reverses_entries()
+ code
+
+
diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py
index 3fe029f62be..df44362cb7f 100644
--- a/addons/account/models/account_move.py
+++ b/addons/account/models/account_move.py
@@ -112,6 +112,9 @@ class AccountMove(models.Model):
string='Tax Cash Basis Entry of',
help="Technical field used to keep track of the tax cash basis reconciliation."
"This is needed when cancelling the source: it will post the inverse journal entry to cancel that part too.")
+ auto_reverse = fields.Boolean(string='Reverse Automatically', default=False, help='If this checkbox is ticked, this entry will be automatically reversed at the reversal date you defined.')
+ reverse_date = fields.Date(string='Reversal Date', help='Date of the reverse accounting entry.')
+ reverse_entry_id = fields.Many2one('account.move', String="Reverse entry", store=True, readonly=True)
@api.model
def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False):
@@ -228,27 +231,30 @@ class AccountMove(models.Model):
return True
@api.multi
- def _reverse_move(self, date=None, journal_id=None):
+ def _reverse_move(self, date=None, journal_id=None, auto=False):
self.ensure_one()
reversed_move = self.copy(default={
'date': date,
'journal_id': journal_id.id if journal_id else self.journal_id.id,
- 'ref': _('reversal of: ') + self.name})
+ 'ref': _('%sreversal of: ') % (_('Automatic ') if auto else '') + self.name,
+ 'auto_reverse': False})
for acm_line in reversed_move.line_ids.with_context(check_move_validity=False):
acm_line.write({
'debit': acm_line.credit,
'credit': acm_line.debit,
'amount_currency': -acm_line.amount_currency
})
+ self.reverse_entry_id = reversed_move
return reversed_move
@api.multi
- def reverse_moves(self, date=None, journal_id=None):
+ def reverse_moves(self, date=None, journal_id=None, auto=False):
date = date or fields.Date.today()
reversed_moves = self.env['account.move']
for ac_move in self:
reversed_move = ac_move._reverse_move(date=date,
- journal_id=journal_id)
+ journal_id=journal_id,
+ auto=auto)
reversed_moves |= reversed_move
#unreconcile all lines reversed
aml = ac_move.line_ids.filtered(lambda x: x.account_id.reconcile or x.account_id.internal_type == 'liquidity')
@@ -270,6 +276,26 @@ class AccountMove(models.Model):
def open_reconcile_view(self):
return self.line_ids.open_reconcile_view()
+ @api.model
+ def _run_reverses_entries(self):
+ ''' This method is called from a cron job. '''
+ records = self.search([
+ ('state', '=', 'posted'),
+ ('auto_reverse', '=', True),
+ ('reverse_date', '<=', fields.Date.today()),
+ ('reverse_entry_id', '=', False)])
+ for move in records:
+ date = None
+ if move.reverse_date and (not self.env.user.company_id.period_lock_date or move.reverse_date > self.env.user.company_id.period_lock_date):
+ date = move.reverse_date
+ move.reverse_moves(date=date, auto=True)
+
+ @api.multi
+ def action_view_reverse_entry(self):
+ action = self.env.ref('account.action_move_journal_line').read()[0]
+ action['views'] = [(self.env.ref('account.view_move_form').id, 'form')]
+ action['res_id'] = self.reverse_entry_id.id
+ return action
class AccountMoveLine(models.Model):
_name = "account.move.line"
diff --git a/addons/account/views/account_view.xml b/addons/account/views/account_view.xml
index 7b392caf4b1..280659d9610 100644
--- a/addons/account/views/account_view.xml
+++ b/addons/account/views/account_view.xml
@@ -1434,6 +1434,13 @@