Skip to content

Commit

Permalink
Merged
Browse files Browse the repository at this point in the history
  • Loading branch information
ktarasz committed Jan 22, 2016
2 parents 12128f1 + 5eb174e commit 7f2fe3e
Show file tree
Hide file tree
Showing 10 changed files with 121 additions and 34 deletions.
8 changes: 4 additions & 4 deletions openprocurement/tender/openua/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
)
from openprocurement.tender.openua.interfaces import ITenderUA
from schematics.exceptions import ValidationError
from openprocurement.tender.openua.utils import calculate_buisness_date
from openprocurement.tender.openua.utils import calculate_business_date
from schematics.types.serializable import serializable
from openprocurement.api.models import embedded_lot_role, default_lot_role

Expand Down Expand Up @@ -263,18 +263,18 @@ class Options:
status = StringType(choices=['active.tendering', 'active.auction', 'active.qualification', 'active.awarded', 'complete', 'cancelled', 'unsuccessful'], default='active.tendering')

def validate_enquiryPeriod(self, data, period):
if period and calculate_buisness_date(period.endDate, -timedelta(days=12)) < period.startDate:
if period and calculate_business_date(period.endDate, -timedelta(days=12)) < period.startDate:
raise ValidationError(u"enquiryPeriod should be greater than 12 days")

def validate_tenderPeriod(self, data, period):
if period and calculate_buisness_date(period.endDate, -timedelta(days=15)) < period.startDate:
if period and calculate_business_date(period.endDate, -timedelta(days=15)) < period.startDate:
raise ValidationError(u"tenderPeriod should be greater than 15 days")

def initialize(self):
if not self.tenderPeriod.startDate:
self.tenderPeriod.startDate = get_now()
self.enquiryPeriod = Period(self.tenderPeriod.to_native())
self.enquiryPeriod.endDate = calculate_buisness_date(self.tenderPeriod.endDate, -timedelta(days=3))
self.enquiryPeriod.endDate = calculate_business_date(self.tenderPeriod.endDate, -timedelta(days=3))
if hasattr(self, "auctionPeriod") and hasattr(self.auctionPeriod, "startDate"):
self.auctionPeriod.startDate = ""

Expand Down
6 changes: 2 additions & 4 deletions openprocurement/tender/openua/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@
from logging import getLogger
from openprocurement.api.models import get_now, TZ
from openprocurement.api.utils import (
check_bids,
check_tender_status,
context_unpack,
add_next_award
)

PKG = get_distribution(__package__)
Expand All @@ -24,11 +22,10 @@ def get_invalidated_bids_data(request):
return data


def calculate_buisness_date(date_obj, timedelta_obj):
def calculate_business_date(date_obj, timedelta_obj):
return date_obj + timedelta_obj



def check_bids(request):
tender = request.validated['tender']
if tender.lots:
Expand All @@ -39,6 +36,7 @@ def check_bids(request):
if tender.numberOfBids < 2:
tender.status = 'unsuccessful'


def check_status(request):
tender = request.validated['tender']
now = get_now()
Expand Down
2 changes: 0 additions & 2 deletions openprocurement/tender/openua/views/award.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
# -*- coding: utf-8 -*-
from logging import getLogger
from openprocurement.api.models import Contract, STAND_STILL_TIME, get_now
from openprocurement.api.utils import opresource

from openprocurement.api.views.award import TenderAwardResource

LOGGER = getLogger(__name__)
Expand Down
2 changes: 1 addition & 1 deletion openprocurement/tender/openua/views/award_complaint.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def collection_post(self):
complaint.dateSubmitted = get_now()
complaint.type = 'complaint'
else:
complaint.status == 'draft'
complaint.status = 'draft'
set_ownership(complaint, self.request)
self.context.complaints.append(complaint)
if save_tender(self.request):
Expand Down
95 changes: 93 additions & 2 deletions openprocurement/tender/openua/views/award_complaint_document.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
# -*- coding: utf-8 -*-
from logging import getLogger
from openprocurement.api.views.award_complaint_document import TenderAwardComplaintDocumentResource
from openprocurement.api.utils import opresource
from openprocurement.api.utils import (
apply_patch,
context_unpack,
json_view,
opresource,
save_tender,
update_file_content_type,
upload_file,
)
from openprocurement.api.validation import (
validate_file_update,
validate_file_upload,
validate_patch_document_data,
)
from openprocurement.tender.openua.views.complaint_document import STATUS4ROLE

LOGGER = getLogger(__name__)

Expand All @@ -12,4 +26,81 @@
procurementMethodType='aboveThresholdUA',
description="Tender award complaint documents")
class TenderUaAwardComplaintDocumentResource(TenderAwardComplaintDocumentResource):
pass
@json_view(permission='edit_complaint', validators=(validate_file_upload,))
def collection_post(self):
"""Tender Award Complaint Document Upload
"""
if self.request.validated['tender_status'] not in ['active.qualification', 'active.awarded']:
self.request.errors.add('body', 'data', 'Can\'t add document in current ({}) tender status'.format(self.request.validated['tender_status']))
self.request.errors.status = 403
return
if any([i.status != 'active' for i in self.request.validated['tender'].lots if i.id == self.request.validated['award'].lotID]):
self.request.errors.add('body', 'data', 'Can add document only in active lot status')
self.request.errors.status = 403
return
if self.context.status not in STATUS4ROLE.get(self.request.authenticated_role, []):
self.request.errors.add('body', 'data', 'Can\'t add document in current ({}) complaint status'.format(self.context.status))
self.request.errors.status = 403
return
document = upload_file(self.request)
document.author = self.request.authenticated_role
self.context.documents.append(document)
if save_tender(self.request):
LOGGER.info('Created tender award complaint document {}'.format(document.id),
extra=context_unpack(self.request, {'MESSAGE_ID': 'tender_award_complaint_document_create'}, {'document_id': document.id}))
self.request.response.status = 201
document_route = self.request.matched_route.name.replace("collection_", "")
self.request.response.headers['Location'] = self.request.current_route_url(_route_name=document_route, document_id=document.id, _query={})
return {'data': document.serialize("view")}

@json_view(validators=(validate_file_update,), permission='edit_complaint')
def put(self):
"""Tender Award Complaint Document Update"""
if self.request.authenticated_role != self.context.author:
self.request.errors.add('url', 'role', 'Can update document only author')
self.request.errors.status = 403
return
if self.request.validated['tender_status'] not in ['active.qualification', 'active.awarded']:
self.request.errors.add('body', 'data', 'Can\'t update document in current ({}) tender status'.format(self.request.validated['tender_status']))
self.request.errors.status = 403
return
if any([i.status != 'active' for i in self.request.validated['tender'].lots if i.id == self.request.validated['award'].lotID]):
self.request.errors.add('body', 'data', 'Can update document only in active lot status')
self.request.errors.status = 403
return
if self.request.validated['complaint'].status not in STATUS4ROLE.get(self.request.authenticated_role, []):
self.request.errors.add('body', 'data', 'Can\'t update document in current ({}) complaint status'.format(self.request.validated['complaint'].status))
self.request.errors.status = 403
return
document = upload_file(self.request)
document.author = self.request.authenticated_role
self.request.validated['complaint'].documents.append(document)
if save_tender(self.request):
LOGGER.info('Updated tender award complaint document {}'.format(self.request.context.id),
extra=context_unpack(self.request, {'MESSAGE_ID': 'tender_award_complaint_document_put'}))
return {'data': document.serialize("view")}

@json_view(content_type="application/json", validators=(validate_patch_document_data,), permission='edit_complaint')
def patch(self):
"""Tender Award Complaint Document Update"""
if self.request.authenticated_role != self.context.author:
self.request.errors.add('url', 'role', 'Can update document only author')
self.request.errors.status = 403
return
if self.request.validated['tender_status'] not in ['active.qualification', 'active.awarded']:
self.request.errors.add('body', 'data', 'Can\'t update document in current ({}) tender status'.format(self.request.validated['tender_status']))
self.request.errors.status = 403
return
if any([i.status != 'active' for i in self.request.validated['tender'].lots if i.id == self.request.validated['award'].lotID]):
self.request.errors.add('body', 'data', 'Can update document only in active lot status')
self.request.errors.status = 403
return
if self.request.validated['complaint'].status not in STATUS4ROLE.get(self.request.authenticated_role, []):
self.request.errors.add('body', 'data', 'Can\'t update document in current ({}) complaint status'.format(self.request.validated['complaint'].status))
self.request.errors.status = 403
return
if apply_patch(self.request, src=self.request.context.serialize()):
update_file_content_type(self.request)
LOGGER.info('Updated tender award complaint document {}'.format(self.request.context.id),
extra=context_unpack(self.request, {'MESSAGE_ID': 'tender_award_complaint_document_patch'}))
return {'data': self.request.context.serialize("view")}
2 changes: 1 addition & 1 deletion openprocurement/tender/openua/views/complaint.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def collection_post(self):
complaint.dateSubmitted = get_now()
complaint.type = 'complaint'
else:
complaint.status == 'draft'
complaint.status = 'draft'
set_ownership(complaint, self.request)
tender.complaints.append(complaint)
if save_tender(self.request):
Expand Down
8 changes: 4 additions & 4 deletions openprocurement/tender/openua/views/complaint_document.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
LOGGER = getLogger(__name__)
STATUS4ROLE = {
'complaint_owner': ['draft', 'answered'],
'reviewers': ['pending'],
'reviewers': ['pending', 'accepted'],
'tender_owner': ['claim'],
}

Expand Down Expand Up @@ -53,7 +53,7 @@ def collection_get(self):
def collection_post(self):
"""Tender Complaint Document Upload
"""
if self.request.validated['tender_status'] not in ['active.enquiries', 'active.tendering', 'active.auction', 'active.qualification', 'active.awarded']:
if self.request.validated['tender_status'] not in ['active.tendering', 'active.auction', 'active.qualification', 'active.awarded']:
self.request.errors.add('body', 'data', 'Can\'t add document in current ({}) tender status'.format(self.request.validated['tender_status']))
self.request.errors.status = 403
return
Expand Down Expand Up @@ -93,7 +93,7 @@ def put(self):
self.request.errors.add('url', 'role', 'Can update document only author')
self.request.errors.status = 403
return
if self.request.validated['tender_status'] not in ['active.enquiries', 'active.tendering', 'active.auction', 'active.qualification', 'active.awarded']:
if self.request.validated['tender_status'] not in ['active.tendering', 'active.auction', 'active.qualification', 'active.awarded']:
self.request.errors.add('body', 'data', 'Can\'t update document in current ({}) tender status'.format(self.request.validated['tender_status']))
self.request.errors.status = 403
return
Expand All @@ -116,7 +116,7 @@ def patch(self):
self.request.errors.add('url', 'role', 'Can update document only author')
self.request.errors.status = 403
return
if self.request.validated['tender_status'] not in ['active.enquiries', 'active.tendering', 'active.auction', 'active.qualification', 'active.awarded']:
if self.request.validated['tender_status'] not in ['active.tendering', 'active.auction', 'active.qualification', 'active.awarded']:
self.request.errors.add('body', 'data', 'Can\'t update document in current ({}) tender status'.format(self.request.validated['tender_status']))
self.request.errors.status = 403
return
Expand Down
4 changes: 2 additions & 2 deletions openprocurement/tender/openua/views/lot.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
validate_patch_lot_data,
)
from openprocurement.api.models import get_now
from openprocurement.tender.openua.utils import calculate_buisness_date
from openprocurement.tender.openua.utils import calculate_business_date

LOGGER = getLogger(__name__)

Expand All @@ -34,7 +34,7 @@ def validate_update_tender(self, operation):
self.request.errors.add('body', 'data', 'Can\'t {} lot in current ({}) tender status'.format(operation, tender.status))
self.request.errors.status = 403
return
if calculate_buisness_date(get_now(), timedelta(days=7)) > tender.tenderPeriod.endDate:
if calculate_business_date(get_now(), timedelta(days=7)) > tender.tenderPeriod.endDate:
self.request.errors.add('body', 'data', 'tenderPeriod should be extended by 7 days')
self.request.errors.status = 403
return
Expand Down
24 changes: 12 additions & 12 deletions openprocurement/tender/openua/views/tender.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from openprocurement.tender.openua.utils import (
get_invalidated_bids_data,
check_status,
calculate_buisness_date
calculate_business_date
)
from openprocurement.api.utils import (
save_tender,
Expand Down Expand Up @@ -88,18 +88,18 @@ def patch(self):
self.request.errors.add('body', 'data', 'Can\'t update tender status')
self.request.errors.status = 403
return

# TODO move to validators
if self.request.authenticated_role == 'tender_owner':
if self.request.validated['tender_status'] == 'active.tendering':
if 'tenderPeriod' in data and 'endDate' in data['tenderPeriod']:
self.request.validated['tender'].tenderPeriod.import_data(data['tenderPeriod'])
if calculate_buisness_date(get_now(), timedelta(days=7)) > self.request.validated['tender'].tenderPeriod.endDate:
self.request.errors.add('body', 'data', 'tenderPeriod should be extended by 7 days')
self.request.errors.status = 403
return
self.request.validated['tender'].initialize()
self.request.validated['data']["enquiryPeriod"] = self.request.validated['tender'].enquiryPeriod.serialize()
self.request.validated['data']["auctionPeriod"] = {'startDate': None}
if self.request.authenticated_role == 'tender_owner' and self.request.validated['tender_status'] == 'active.tendering':
if 'tenderPeriod' in data and 'endDate' in data['tenderPeriod']:
self.request.validated['tender'].tenderPeriod.import_data(data['tenderPeriod'])
if calculate_business_date(get_now(), timedelta(days=7)) > self.request.validated['tender'].tenderPeriod.endDate:
self.request.errors.add('body', 'data', 'tenderPeriod should be extended by 7 days')
self.request.errors.status = 403
return
self.request.validated['tender'].initialize()
self.request.validated['data']["enquiryPeriod"] = self.request.validated['tender'].enquiryPeriod.serialize()
self.request.validated['data']["auctionPeriod"] = {'startDate': None}

if self.request.authenticated_role == 'chronograph':
apply_patch(self.request, save=False, src=self.request.validated['tender_src'])
Expand Down
4 changes: 2 additions & 2 deletions openprocurement/tender/openua/views/tender_document.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from openprocurement.api.validation import validate_file_upload, validate_file_update, validate_patch_document_data
from openprocurement.api.models import get_now

from openprocurement.tender.openua.utils import calculate_buisness_date
from openprocurement.tender.openua.utils import calculate_business_date
LOGGER = getLogger(__name__)


Expand All @@ -25,7 +25,7 @@ def validate_update_tender(self, operation):
self.request.errors.status = 403
return
if self.request.validated['tender_status'] == 'active.tendering':
if calculate_buisness_date(get_now(), timedelta(days=7)) >= tender.tenderPeriod.endDate:
if calculate_business_date(get_now(), timedelta(days=7)) >= tender.tenderPeriod.endDate:
self.request.errors.add('body', 'data', 'tenderPeriod should be extended by 7 days')
self.request.errors.status = 403
return
Expand Down

0 comments on commit 7f2fe3e

Please sign in to comment.