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 @@
+