Skip to content

Commit

Permalink
Merge branch 'a143330483135017_add_award_qualified_validation'
Browse files Browse the repository at this point in the history
  • Loading branch information
kroman0 committed Jul 28, 2016
2 parents d27d757 + e1a260a commit d6bcb99
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 30 deletions.
22 changes: 20 additions & 2 deletions openprocurement/tender/limited/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,22 @@ def validate_dateSigned(self, data, value):
if value and value > get_now():
raise ValidationError(u"Contract signature date can't be in the future")


award_edit_role = blacklist('id', 'date', 'documents', 'complaints', 'complaintPeriod')
award_create_role = blacklist('id', 'status', 'date', 'documents', 'complaints', 'complaintPeriod')
award_create_reporting_role = award_create_role + blacklist('qualified')
award_edit_reporting_role = award_edit_role + blacklist('qualified')


class Award(Model):
""" An award for the given procurement. There may be more than one award
per contracting process e.g. because the contract is split amongst
different providers, or because it is a standing offer.
"""
class Options:
roles = {
'create': blacklist('id', 'status', 'date', 'documents', 'complaints', 'complaintPeriod'),
'edit': blacklist('id', 'date', 'documents', 'complaints', 'complaintPeriod'),
'create': award_create_reporting_role,
'edit': award_edit_reporting_role,
'embedded': schematics_embedded_role,
'view': schematics_default_role,
'Administrator': whitelist('complaintPeriod'),
Expand All @@ -71,6 +78,7 @@ class Options:
complaints = ListType(ModelType(Complaint), default=list())
complaintPeriod = ModelType(Period)

ReportingAward = Award

class Cancellation(BaseCancellation):
class Options:
Expand Down Expand Up @@ -220,12 +228,22 @@ def import_data(self, raw_data, **kw):

ReportingTender = Tender


class Award(ReportingAward):
class Options:
roles = {
'create': award_create_role,
'edit': award_edit_role,
}


class Contract(BaseContract):
items = ListType(ModelType(Item))

@implementer(ITender)
class Tender(ReportingTender):
""" Negotiation """
awards = ListType(ModelType(Award), default=list())
contracts = ListType(ModelType(Contract), default=list())
cause = StringType(choices=['artContestIP', 'noCompetition', 'twiceUnsuccessful',
'additionalPurchase', 'additionalConstruction', 'stateLegalServices'],
Expand Down
5 changes: 4 additions & 1 deletion openprocurement/tender/limited/tests/award.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,10 @@ def test_create_tender_award(self):
self.assertIn('id', award)
self.assertIn(award['id'], response.headers['Location'])
self.assertEqual(award["subcontractingDetails"], "Details")
self.assertEqual(award['qualified'], True)
if self.initial_data['procurementMethodType'] == "reporting":
self.assertNotIn('qualified', award)
else:
self.assertEqual(award['qualified'], True)

response = self.app.get(request_path)
self.assertEqual(response.status, '200 OK')
Expand Down
16 changes: 4 additions & 12 deletions openprocurement/tender/limited/views/award.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,13 @@
APIResource
)
from openprocurement.api.validation import (
validate_patch_award_data,
validate_award_data,
validate_data,
)
from openprocurement.tender.limited.models import Award
from openprocurement.tender.openua.utils import calculate_business_date
from openprocurement.tender.openua.models import calculate_normalized_date


def validate_patch_award_data(request):
return validate_data(request, Award, True)


@opresource(name='Tender Limited Awards',
collection_path='/tenders/{tender_id}/awards',
path='/tenders/{tender_id}/awards/{award_id}',
Expand Down Expand Up @@ -303,18 +298,14 @@ def patch(self):
award = self.request.context
award_status = award.status
apply_patch(self.request, save=False, src=self.request.context.serialize())
if award.status == "active" and not award.qualified:
self.request.errors.add('body', 'data', 'Can\'t update award to active status with not qualified')
self.request.errors.status = 403
return
if award_status == 'pending' and award.status == 'active':
tender.contracts.append(type(tender).contracts.model_class({
'awardID': award.id,
'suppliers': award.suppliers,
'date': get_now(),
'value': award.value,
'items': tender.items,
'contractID': '{}-{}{}'.format(tender.tenderID, self.server_id, len(tender.contracts) +1) }))
'contractID': '{}-{}{}'.format(tender.tenderID, self.server_id, len(tender.contracts) + 1)}))
# add_next_award(self.request)
elif award_status == 'active' and award.status == 'cancelled':
for i in tender.contracts:
Expand All @@ -338,6 +329,7 @@ def patch(self):
extra=context_unpack(self.request, {'MESSAGE_ID': 'tender_award_patch'}, {'TENDER_REV': tender.rev}))
return {'data': award.serialize("view")}


@opresource(name='Tender Negotiation Awards',
collection_path='/tenders/{tender_id}/awards',
path='/tenders/{tender_id}/awards/{award_id}',
Expand Down Expand Up @@ -531,7 +523,7 @@ def patch(self):
'date': get_now(),
'value': award.value,
'items': tender.items,
'contractID': '{}-{}{}'.format(tender.tenderID, self.server_id, len(tender.contracts) +1) }))
'contractID': '{}-{}{}'.format(tender.tenderID, self.server_id, len(tender.contracts) + 1)}))
# add_next_award(self.request)
elif award_status == 'active' and award.status == 'cancelled' and any([i.status == 'satisfied' for i in award.complaints]):
now = get_now()
Expand Down
19 changes: 4 additions & 15 deletions openprocurement/tender/limited/views/award_complaint.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,18 @@
# -*- coding: utf-8 -*-
from openprocurement.api.models import get_now
from openprocurement.api.validation import validate_data
from openprocurement.api.views.award_complaint import TenderAwardComplaintResource
from openprocurement.api.utils import (
apply_patch,
check_tender_status,
context_unpack,
json_view,
opresource,
save_tender,
set_ownership,
update_logging_context,
)


def validate_complaint_data(request):
update_logging_context(request, {'complaint_id': '__new__'})
model = type(request.context).complaints.model_class
return validate_data(request, model)


def validate_patch_complaint_data(request):
model = type(request.context.__parent__).complaints.model_class
return validate_data(request, model, True)

from openprocurement.api.validation import (
validate_complaint_data,
validate_patch_complaint_data,
)


@opresource(name='Tender negotiation Award Complaints',
Expand Down

0 comments on commit d6bcb99

Please sign in to comment.