changeset d0ded81a618b in modules/purchase_requisition:default
details: 
https://hg.tryton.org/modules/purchase_requisition?cmd=changeset;node=d0ded81a618b
description:
        Allow to reset to draft approved but not processed requisition

        Use the queue to process the requisition.

        issue8274
        review265291002
diffstat:

 CHANGELOG   |   3 +++
 purchase.py |  43 ++++++++++++++++++++++++-------------------
 2 files changed, 27 insertions(+), 19 deletions(-)

diffs (93 lines):

diff -r 5c3ea40c8c79 -r d0ded81a618b CHANGELOG
--- a/CHANGELOG Mon May 06 15:10:09 2019 +0200
+++ b/CHANGELOG Mon May 20 17:29:12 2019 +0200
@@ -1,3 +1,6 @@
+* Use processing delay to process approved requisition
+* Allow reset to draft approved but not processed requisition
+
 Version 5.2.0 - 2019-05-06
 * Bug fixes (see mercurial logs for details)
 
diff -r 5c3ea40c8c79 -r d0ded81a618b purchase.py
--- a/purchase.py       Mon May 06 15:10:09 2019 +0200
+++ b/purchase.py       Mon May 20 17:29:12 2019 +0200
@@ -170,6 +170,7 @@
                 ('waiting', 'rejected'),
                 ('waiting', 'approved'),
                 ('approved', 'processing'),
+                ('approved', 'draft'),
                 ('processing', 'done'),
                 ('done', 'processing'),
                 ))
@@ -180,7 +181,7 @@
                     },
                 'draft': {
                     'invisible': ~Eval('state').in_(
-                        ['cancel', 'waiting', 'rejected']),
+                        ['cancel', 'waiting', 'approved', 'rejected']),
                     'icon': If(Eval('state').in_(['cancel', 'rejected']),
                         'tryton-undo',
                         'tryton-back'),
@@ -281,6 +282,19 @@
         return total_amount
 
     @classmethod
+    def create_requests(cls, requisitions):
+        pool = Pool()
+        Request = pool.get('purchase.request')
+        requests = []
+        for requisition in requisitions:
+            for line in requisition.lines:
+                request = line.compute_request()
+                if request:
+                    requests.append(request)
+        if requests:
+            Request.save(requests)
+
+    @classmethod
     def create(cls, vlist):
         pool = Pool()
         Sequence = pool.get('ir.sequence')
@@ -354,23 +368,13 @@
     @Workflow.transition('approved')
     def approve(cls, requisitions):
         pool = Pool()
-        Request = pool.get('purchase.request')
-        new_requests = []
-        for requisition in requisitions:
-            for line in requisition.lines:
-                request = line.compute_request()
-                if request:
-                    new_requests.append(request)
-        if new_requests:
-            Request.save(new_requests)
-
+        Configuration = pool.get('purchase.configuration')
         cls.store_cache(requisitions)
-
-        # Update the state to allow transition to processing
-        cls.write(requisitions, {
-                'state': 'approved',
-                })
-        cls.proceed(requisitions)
+        config = Configuration(1)
+        with Transaction().set_context(
+                queue_name='purchase',
+                queue_scheduled_at=config.purchase_process_after):
+            cls.__queue__.process(requisitions)
 
     @classmethod
     @Workflow.transition('processing')
@@ -386,9 +390,10 @@
     def process(cls, requisitions):
         done = []
         process = []
+        requisitions = [r for r in requisitions
+            if r.state in {'approved', 'processing', 'done'}]
+        cls.create_requests(requisitions)
         for requisition in requisitions:
-            if requisition.state not in {'processing', 'done'}:
-                continue
             if requisition.is_done():
                 if requisition.state != 'done':
                     done.append(requisition)

Reply via email to