changeset 4344a799807c in modules/account_asset:default
details: 
https://hg.tryton.org/modules/account_asset?cmd=changeset&node=4344a799807c
description:
        Allow resetting running assets without moves to draft

        issue9939
        review351821003
diffstat:

 CHANGELOG           |   3 +++
 asset.py            |  30 +++++++++++++++++++++++++-----
 asset.xml           |   6 ++++++
 message.xml         |   3 +++
 view/asset_form.xml |   1 +
 5 files changed, 38 insertions(+), 5 deletions(-)

diffs (138 lines):

diff -r d7738f6f7f42 -r 4344a799807c CHANGELOG
--- a/CHANGELOG Mon May 03 15:55:06 2021 +0200
+++ b/CHANGELOG Tue May 18 22:02:25 2021 +0200
@@ -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 -r d7738f6f7f42 -r 4344a799807c asset.py
--- a/asset.py  Mon May 03 15:55:06 2021 +0200
+++ b/asset.py  Tue May 18 22:02:25 2021 +0200
@@ -222,8 +222,14 @@
         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 @@
                     '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 @@
         # 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 @@
     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 @@
         Move = pool.get('account.move')
         Line = pool.get('account.asset.line')
 
+        cls.create_lines(assets)
+
         moves = []
         lines = []
         for asset_ids in grouped_slice(assets):
@@ -659,6 +668,16 @@
 
     @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')
     def run(cls, assets):
         cls.set_number(assets)
@@ -933,6 +952,7 @@
                 '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 -r d7738f6f7f42 -r 4344a799807c asset.xml
--- a/asset.xml Mon May 03 15:55:06 2021 +0200
+++ b/asset.xml Tue May 18 22:02:25 2021 +0200
@@ -132,6 +132,12 @@
             <field name="perm_delete" eval="True"/>
         </record>
 
+        <record model="ir.model.button" id="asset_draft_button">
+            <field name="name">draft</field>
+            <field name="string">Draft</field>
+            <field name="model" search="[('model', '=', 'account.asset')]"/>
+        </record>
+
         <record model="ir.model.button" id="asset_close_button">
             <field name="name">close</field>
             <field name="string">Close</field>
diff -r d7738f6f7f42 -r 4344a799807c message.xml
--- a/message.xml       Mon May 03 15:55:06 2021 +0200
+++ b/message.xml       Tue May 18 22:02:25 2021 +0200
@@ -3,6 +3,9 @@
 this repository contains the full copyright notices and license terms. -->
 <tryton>
     <data grouped="1">
+        <record model="ir.message" id="msg_asset_draft_lines">
+            <field name="text">You cannot reset to draft asset "%(asset)s" 
because it has lines.</field>
+        </record>
         <record model="ir.message" id="msg_asset_delete_draft">
             <field name="text">You cannot delete asset "%(asset)s" because it 
is not in "draft" state.</field>
         </record>
diff -r d7738f6f7f42 -r 4344a799807c view/asset_form.xml
--- a/view/asset_form.xml       Mon May 03 15:55:06 2021 +0200
+++ b/view/asset_form.xml       Tue May 18 22:02:25 2021 +0200
@@ -49,6 +49,7 @@
     <label name="state"/>
     <field name="state"/>
     <group col="-1" colspan="4" id="buttons">
+        <button name="draft" icon="tryton-back"/>
         <button name="clear_lines" icon="tryton-clear"/>
         <button name="create_lines" icon="tryton-launch"/>
         <button name="update" icon="tryton-create"/>

Reply via email to