From a00524e44c0c5de1bdc04cfdf497a212136608e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 18 May 2021 22:02:25 +0200 Subject: [PATCH] Allow resetting running assets without moves to draft issue9939 review351821003 --- CHANGELOG | 3 +++ asset.py | 30 +++++++++++++++++++++++++----- asset.xml | 6 ++++++ message.xml | 3 +++ view/asset_form.xml | 1 + 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 0288d07a1f..bbf2b985d0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +* Allow resetting running assets without moves to draft +* Allow refreshing pending asset lines + Version 6.0.0 - 2021-05-03 * Bug fixes (see mercurial logs for details) diff --git a/asset.py b/asset.py index 35a24f4429..8009143579 100644 --- a/asset.py +++ b/asset.py @@ -222,8 +222,14 @@ class Asset(Workflow, ModelSQL, ModelView): cls._transitions |= set(( ('draft', 'running'), ('running', 'closed'), + ('running', 'draft'), )) cls._buttons.update({ + 'draft': { + 'invisible': (Eval('lines', []) + | (Eval('state') != 'running')), + 'depends': ['state'], + }, 'run': { 'invisible': Eval('state') != 'draft', 'depends': ['state'], @@ -233,13 +239,12 @@ class Asset(Workflow, ModelSQL, ModelView): 'depends': ['state'], }, 'create_lines': { - 'invisible': (Eval('lines', []) - | (Eval('state') != 'draft')), + 'invisible': ~Eval('state').in_(['draft', 'running']), 'depends': ['state'], }, 'clear_lines': { 'invisible': (~Eval('lines', [0]) - | (Eval('state') != 'draft')), + | ~Eval('state').in_(['draft', 'running'])), 'depends': ['state'], }, 'update': { @@ -407,7 +412,10 @@ class Asset(Workflow, ModelSQL, ModelView): # dateutil >= 2.0 has replace __nonzero__ by __bool__ which doesn't # work in Python < 3 if delta == relativedelta.relativedelta(): - return [self.end_date] + if not self.lines: + return [self.end_date] + else: + return [] if self.frequency == 'monthly': rule = rrule.rrule(rrule.MONTHLY, dtstart=self.start_date, bymonthday=int(config.get_multivalue( @@ -510,7 +518,6 @@ class Asset(Workflow, ModelSQL, ModelView): def create_lines(cls, assets): pool = Pool() Line = pool.get('account.asset.line') - cls.clear_lines(assets) lines = [] for asset in assets: @@ -577,6 +584,8 @@ class Asset(Workflow, ModelSQL, ModelView): Move = pool.get('account.move') Line = pool.get('account.asset.line') + cls.create_lines(assets) + moves = [] lines = [] for asset_ids in grouped_slice(assets): @@ -657,6 +666,16 @@ class Asset(Workflow, ModelSQL, ModelView): 'asset_sequence', company=asset.company.id).get() cls.save(assets) + @classmethod + @ModelView.button + @Workflow.transition('draft') + def draft(cls, assets): + for asset in assets: + if asset.lines: + raise AccessError( + gettext('account_asset.msg_draft_lines', + asset=asset.rec_name)) + @classmethod @ModelView.button @Workflow.transition('running') @@ -933,6 +952,7 @@ class UpdateAsset(Wizard): 'residual_value': self.start.residual_value, 'end_date': self.start.end_date, }) + self.model.clear_lines([self.record]) self.model.create_lines([self.record]) return 'end' diff --git a/asset.xml b/asset.xml index 6cd4e5b781..6bbe5f265e 100644 --- a/asset.xml +++ b/asset.xml @@ -132,6 +132,12 @@ + + draft + Draft + + + close Close diff --git a/message.xml b/message.xml index 27301758a2..d588844f9a 100644 --- a/message.xml +++ b/message.xml @@ -3,6 +3,9 @@ this repository contains the full copyright notices and license terms. --> + + You cannot reset to draft asset "%(asset)s" because it has lines. + You cannot delete asset "%(asset)s" because it is not in "draft" state. diff --git a/view/asset_form.xml b/view/asset_form.xml index e9a83ad5af..898d40762b 100644 --- a/view/asset_form.xml +++ b/view/asset_form.xml @@ -49,6 +49,7 @@