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)