Skip to content

Commit

Permalink
Fixed tender workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
kroman0 committed Jan 28, 2015
1 parent 07a120d commit 633e6d1
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 11 deletions.
13 changes: 13 additions & 0 deletions src/openprocurement/api/tests/award.py
Original file line number Diff line number Diff line change
Expand Up @@ -929,6 +929,19 @@ def test_patch_tender_award_contract(self):

self.set_status('complete', {'status': 'active.awarded'})

response = self.app.post_json('/tenders/{}/awards/{}/complaints'.format(
self.tender_id, self.award_id), {'data': {'title': 'complaint title', 'description': 'complaint description', 'author': test_tender_data["procuringEntity"]}})
self.assertEqual(response.status, '201 Created')
complaint = response.json['data']

response = self.app.patch_json('/tenders/{}/awards/{}/contracts/{}'.format(self.tender_id, self.award_id, contract['id']), {"data": {"status": "active"}}, status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "Can't sign contract before reviewing all complaints")

response = self.app.patch_json('/tenders/{}/awards/{}/complaints/{}'.format(self.tender_id, self.award_id, complaint['id']), {"data": {"status": "invalid", "resolution": "spam"}})
self.assertEqual(response.status, '200 OK')

response = self.app.patch_json('/tenders/{}/awards/{}/contracts/{}'.format(self.tender_id, self.award_id, contract['id']), {"data": {"status": "active"}})
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
Expand Down
4 changes: 1 addition & 3 deletions src/openprocurement/api/views/award_complaint.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,7 @@ def patch(self):
for a in tender.awards
if a.status == 'active'
]
if active_awards:
tender.status = 'complete'
else:
if not active_awards:
tender.status = 'unsuccessful'
if save_tender(self.request):
LOGGER.info('Updated tender award complaint {}'.format(self.request.context.id), extra={'MESSAGE_ID': 'tender_award_complaint_patch'})
Expand Down
27 changes: 22 additions & 5 deletions src/openprocurement/api/views/award_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,28 @@ def patch(self):
self.request.errors.add('body', 'data', 'Can\'t update contract in current ({}) tender status'.format(self.request.validated['tender_status']))
self.request.errors.status = 403
data = self.request.validated['data']
stand_still_end = self.request.validated['tender'].awardPeriod.endDate + STAND_STILL_TIME
if self.request.context.status != 'active' and 'status' in data and data['status'] == 'active' and stand_still_end > get_now():
self.request.errors.add('body', 'data', 'Can\'t sign contract before stand-still period end ({})'.format(stand_still_end.isoformat()))
self.request.errors.status = 403
return
if self.request.context.status != 'active' and 'status' in data and data['status'] == 'active':
tender = self.request.validated['tender']
stand_still_end = tender.awardPeriod.endDate + STAND_STILL_TIME
if stand_still_end > get_now():
self.request.errors.add('body', 'data', 'Can\'t sign contract before stand-still period end ({})'.format(stand_still_end.isoformat()))
self.request.errors.status = 403
return
pending_complaints = [
i
for i in tender.complaints
if i.status == 'pending'
]
pending_awards_complaints = [
i
for a in tender.awards
for i in a.complaints
if i.status == 'pending'
]
if pending_complaints or pending_awards_complaints:
self.request.errors.add('body', 'data', 'Can\'t sign contract before reviewing all complaints')
self.request.errors.status = 403
return
apply_patch(self.request, save=False, src=self.request.context.serialize())
if self.request.context.status == 'active' and self.request.validated['tender_status'] != 'complete':
self.request.validated['tender'].status = 'complete'
Expand Down
4 changes: 1 addition & 3 deletions src/openprocurement/api/views/complaint.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,7 @@ def patch(self):
for a in tender.awards
if a.status == 'active'
]
if active_awards:
tender.status = 'complete'
else:
if not active_awards:
tender.status = 'unsuccessful'
if save_tender(self.request):
LOGGER.info('Updated tender complaint {}'.format(self.request.context.id), extra={'MESSAGE_ID': 'tender_complaint_patch'})
Expand Down

0 comments on commit 633e6d1

Please sign in to comment.