Skip to content

Commit

Permalink
Merge pull request #32 from VolVoz/master
Browse files Browse the repository at this point in the history
validation for datesign in contract view
  • Loading branch information
vmaksymiv committed Mar 23, 2016
2 parents ba71ef1 + 0506206 commit a47a7b4
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
6 changes: 6 additions & 0 deletions openprocurement/tender/limited/tests/contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,12 @@ def test_patch_tender_contract(self):
self.assertEqual(response.status, '422 Unprocessable Entity')
self.assertEqual(response.json['errors'], [{u'description': [u"Contract signature date can't be in the future"], u'location': u'body', u'name': u'dateSigned'}])

twenty_five_hours_in_past = (get_now() - timedelta(hours=25)).isoformat()
response = self.app.patch_json('/tenders/{}/contracts/{}?acc_token={}'.format(self.tender_id, self.contract_id, self.tender_token), {"data": {"dateSigned": twenty_five_hours_in_past}}, status=403)
self.assertEqual(response.status, '403 Forbidden')
self.assertEqual(response.content_type, 'application/json')
self.assertEqual(response.json['errors'][0]["description"], "dateSigned has to be within the period of 24 hours before the current date")

custom_signature_date = get_now().isoformat()
response = self.app.patch_json('/tenders/{}/contracts/{}?acc_token={}'.format(self.tender_id, self.contract_id, self.tender_token), {"data": {"dateSigned": custom_signature_date}})
self.assertEqual(response.status, '200 OK')
Expand Down
10 changes: 9 additions & 1 deletion openprocurement/tender/limited/views/contract.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from openprocurement.api.models import get_now
from openprocurement.api.models import get_now, timedelta
from openprocurement.api.utils import (
apply_patch,
save_tender,
Expand Down Expand Up @@ -73,13 +73,21 @@ def patch(self):
self.request.errors.status = 403
return

contract_dateSigned = self.request.context.dateSigned
contract_status = self.request.context.status
apply_patch(self.request, save=False, src=self.request.context.serialize())
if contract_status != self.request.context.status and contract_status != 'pending' and self.request.context.status != 'active':
self.request.errors.add('body', 'data', 'Can\'t update contract status')
self.request.errors.status = 403
return

if self.request.context.dateSigned != contract_dateSigned:
if self.request.context.dateSigned < (get_now() - timedelta(days=1)):
self.request.errors.add('body', 'data', 'dateSigned has to be within the period of 24 hours before the current date')
self.request.errors.status = 403
return
if self.request.context.status == 'active' and not self.request.context.dateSigned:
self.request.context.dateSigned = get_now()
check_tender_status(self.request)
if save_tender(self.request):
self.LOGGER.info('Updated tender contract {}'.format(self.request.context.id),
Expand Down

0 comments on commit a47a7b4

Please sign in to comment.