From 3124f0c1448494cf61bd30b5497b487dc2cd12be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Fri, 24 Jul 2015 13:38:25 +0200 Subject: [PATCH 1/2] [FIX] account_reversal: allow reversing move in closed periods, fixes #265 --- account_reversal/account_reversal.py | 10 +++++++- .../tests/test_account_reversal.py | 25 +++++++++++++++---- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/account_reversal/account_reversal.py b/account_reversal/account_reversal.py index 6af9445ca..fc896dc15 100644 --- a/account_reversal/account_reversal.py +++ b/account_reversal/account_reversal.py @@ -39,6 +39,14 @@ class account_move(models.Model): ondelete='set null', readonly=True) + @api.multi + def validate(self): + # TODO: remove this method if and when + # https://github.com/odoo/odoo/pull/7735 is merged + if self.env.context.get('novalidate'): + return + super(account_move, self).validate() + @api.multi def _move_reversal(self, reversal_date, reversal_period_id=False, reversal_journal_id=False, @@ -85,7 +93,7 @@ class account_move(models.Model): 'to_be_reversed': False, }) - self.write({ + self.with_context(novalidate=True).write({ 'reversal_id': reversal_move.id, 'to_be_reversed': False, }) diff --git a/account_reversal/tests/test_account_reversal.py b/account_reversal/tests/test_account_reversal.py index ef0d2534c..341d95f2e 100644 --- a/account_reversal/tests/test_account_reversal.py +++ b/account_reversal/tests/test_account_reversal.py @@ -34,12 +34,10 @@ class test_account_reversal(common.TransactionCase): self.move_obj = self.env['account.move'] self.move_line_obj = self.env['account.move.line'] - def _create_move(self, with_partner, amount=100): + def _create_move(self, with_partner, amount=100, period=None): date = datetime.now() company_id = self.env.ref('base.main_company').id - period_id = self.env['account.period'].with_context( - account_period_prefer_normal=True, - company_id=self.env.ref('base.main_company').id).find(date)[0] + period = period or self.env.ref('account.period_0') journal = self.env['account.journal'].create({ 'name': 'Test journal', @@ -50,7 +48,7 @@ class test_account_reversal(common.TransactionCase): move_vals = { 'journal_id': journal.id, - 'period_id': period_id.id, + 'period_id': period.id, 'date': date, 'company_id': company_id, } @@ -82,6 +80,15 @@ class test_account_reversal(common.TransactionCase): ) return move_line_id.move_id + def _close_period(self, period_id): + self.env.cr.execute('update account_journal_period ' + 'set state=%s where period_id=%s', + ('done', period_id)) + self.env.cr.execute('update account_period ' + 'set state=%s where id=%s', + ('done', period_id)) + self.env.invalidate_all() + def test_reverse(self): move = self._create_move(with_partner=False) company_id = self.env.ref('base.main_company').id @@ -103,3 +110,11 @@ class test_account_reversal(common.TransactionCase): x.account_id == account1 and 'aaaa' or 'bbbb') for x in reversed_moves.line_id]) self.assertEqual(movestr_reversed, '0.00100.00bbbb100.000.00aaaa') + + def test_reverse_closed_period(self): + move_period = self.env.ref('account.period_0') + move = self._create_move(with_partner=False, period=move_period) + self._close_period(move_period.id) + reversal_period = self.env.ref('account.period_1') + move.create_reversals(reversal_date=reversal_period.date_start, + reversal_period_id=reversal_period) From 70ea73a034465b9d0a16397f6221f63e767adb57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Fri, 24 Jul 2015 16:08:32 +0200 Subject: [PATCH 2/2] [FIX] add missing return statement --- account_reversal/account_reversal.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/account_reversal/account_reversal.py b/account_reversal/account_reversal.py index fc896dc15..c6aa28f9d 100644 --- a/account_reversal/account_reversal.py +++ b/account_reversal/account_reversal.py @@ -45,7 +45,7 @@ class account_move(models.Model): # https://github.com/odoo/odoo/pull/7735 is merged if self.env.context.get('novalidate'): return - super(account_move, self).validate() + return super(account_move, self).validate() @api.multi def _move_reversal(self, reversal_date,