Skip to content

Commit

Permalink
Merge pull request #52 from gorserg/open_deliveryDate
Browse files Browse the repository at this point in the history
open deliveryDate
  • Loading branch information
kroman0 committed Aug 8, 2016
2 parents 0b0c421 + a539e43 commit 975a26e
Show file tree
Hide file tree
Showing 3 changed files with 1,605 additions and 53 deletions.
36 changes: 31 additions & 5 deletions openprocurement/tender/competitivedialogue/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,18 @@
from schematics.types.serializable import serializable
from openprocurement.api.models import ITender, Identifier, Model, Value, validate_values_uniq, get_tender, validate_features_uniq, Feature as BaseFeature, FeatureValue as BaseFeatureValue
from openprocurement.api.utils import calculate_business_date, get_now
from openprocurement.tender.openua.models import (SifterListType, Item as BaseItem, Tender as BaseTenderUA,
TENDER_PERIOD as TENDERING_DURATION_UA, Lot as BaseLotUA)
from openprocurement.tender.openua.models import (SifterListType, Item as BaseUAItem, Tender as BaseTenderUA,
TENDER_PERIOD as TENDERING_DURATION_UA, Lot as BaseLotUA,
PeriodEndRequired as BasePeriodEndRequired)
from openprocurement.tender.openeu.models import (Tender as BaseTenderEU, Administrator_bid_role, view_bid_role,
pre_qualifications_role, Bid as BidEU, ConfidentialDocument,
edit_role_eu, auction_patch_role, auction_view_role,
auction_post_role, QUESTIONS_STAND_STILL, ENQUIRY_STAND_STILL_TIME,
PeriodStartEndRequired, EnquiryPeriod,
validate_lots_uniq, embedded_lot_role, default_lot_role,
Lot as BaseLotEU,
TENDERING_DURATION as TENDERING_DURATION_EU)
TENDERING_DURATION as TENDERING_DURATION_EU,
Item as BaseEUItem)
from openprocurement.api.models import (
plain_role, create_role, edit_role, view_role, listing_role,
enquiries_role, validate_cpv_group, validate_items_uniq,
Expand Down Expand Up @@ -210,7 +212,7 @@ class Firms(Model):
class Tender(CompetitiveDialogEU):
procurementMethodType = StringType(default=CD_UA_TYPE)
title_en = StringType()
items = ListType(ModelType(BaseItem), required=True, min_size=1,
items = ListType(ModelType(BaseUAItem), required=True, min_size=1,
validators=[validate_cpv_group, validate_items_uniq])
procuringEntity = ModelType(BaseProcuringEntity, required=True)
stage2TenderID = StringType(required=False)
Expand All @@ -231,7 +233,7 @@ class Tender(CompetitiveDialogEU):
'edit': whitelist('tenderPeriod'),
'edit_draft': whitelist('status'), # only bridge must change only status
'edit_'+STAGE2_STATUS: whitelist('tenderPeriod', 'status'),
'edit_active.tendering': whitelist('tenderPeriod'),
'edit_active.tendering': whitelist('tenderPeriod', 'items'),
'edit_active.pre-qualification': whitelist('status'),
'edit_active.pre-qualification.stand-still': whitelist(),
'edit_active.auction': whitelist(),
Expand Down Expand Up @@ -323,6 +325,24 @@ class Options:
LotStage2EU = Lot


class Item(BaseEUItem):

class Options:
roles = {'edit_active.tendering': whitelist('deliveryDate')}


ItemStage2EU = Item


class Item(BaseUAItem):

class Options:
roles = {'edit_active.tendering': whitelist('deliveryDate')}


ItemStage2UA = Item


@implementer(ITender)
class Tender(BaseTenderEU):
procurementMethodType = StringType(default=STAGE_2_EU_TYPE)
Expand All @@ -338,6 +358,10 @@ class Tender(BaseTenderEU):
default='active.tendering')
lots = ListType(ModelType(LotStage2EU), default=list(), validators=[validate_lots_uniq])

# The goods and services to be purchased, broken into line items wherever possible. Items should not be duplicated, but a quantity of 2 specified instead.
items = ListType(ModelType(ItemStage2EU), required=True, min_size=1, validators=[validate_cpv_group,
validate_items_uniq])

create_accreditation = 'c'

class Options:
Expand Down Expand Up @@ -367,6 +391,8 @@ class Tender(BaseTenderUA):
'unsuccessful', STAGE2_STATUS],
default='active.tendering')
lots = ListType(ModelType(LotStage2UA), default=list(), validators=[validate_lots_uniq])
items = ListType(ModelType(ItemStage2UA), required=True, min_size=1, validators=[validate_cpv_group,
validate_items_uniq])

create_accreditation = 'c'

Expand Down
145 changes: 145 additions & 0 deletions openprocurement/tender/competitivedialogue/tests/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,151 @@ class BaseCompetitiveDialogEUStage2WebTest(BaseCompetitiveDialogWebTest):
class BaseCompetitiveDialogUAStage2WebTest(BaseCompetitiveDialogWebTest):
initial_data = test_tender_stage2_data_ua

def set_status(self, status, extra=None):
data = {'status': status}
if status == 'active.tendering':
data.update({
"enquiryPeriod": {
"startDate": (now).isoformat(),
"endDate": (now + timedelta(days=13)).isoformat()
},
"tenderPeriod": {
"startDate": (now).isoformat(),
"endDate": (now + timedelta(days=16)).isoformat()
}
})
elif status == 'active.auction':
data.update({
"enquiryPeriod": {
"startDate": (now - timedelta(days=16)).isoformat(),
"endDate": (now - timedelta(days=3)).isoformat()
},
"tenderPeriod": {
"startDate": (now - timedelta(days=16)).isoformat(),
"endDate": (now).isoformat()
},
"auctionPeriod": {
"startDate": (now).isoformat()
}
})
if self.initial_lots:
data.update({
'lots': [
{
"auctionPeriod": {
"startDate": (now).isoformat()
}
}
for i in self.initial_lots
]
})
elif status == 'active.qualification':
data.update({
"enquiryPeriod": {
"startDate": (now - timedelta(days=17)).isoformat(),
"endDate": (now - timedelta(days=4)).isoformat()
},
"tenderPeriod": {
"startDate": (now - timedelta(days=17)).isoformat(),
"endDate": (now - timedelta(days=1)).isoformat()
},
"auctionPeriod": {
"startDate": (now - timedelta(days=1)).isoformat(),
"endDate": (now).isoformat()
},
"awardPeriod": {
"startDate": (now).isoformat()
}
})
if self.initial_lots:
data.update({
'lots': [
{
"auctionPeriod": {
"startDate": (now - timedelta(days=1)).isoformat(),
"endDate": (now).isoformat()
}
}
for i in self.initial_lots
]
})
elif status == 'active.awarded':
data.update({
"enquiryPeriod": {
"startDate": (now - timedelta(days=17)).isoformat(),
"endDate": (now - timedelta(days=4)).isoformat()
},
"tenderPeriod": {
"startDate": (now - timedelta(days=17)).isoformat(),
"endDate": (now - timedelta(days=1)).isoformat()
},
"auctionPeriod": {
"startDate": (now - timedelta(days=1)).isoformat(),
"endDate": (now).isoformat()
},
"awardPeriod": {
"startDate": (now).isoformat(),
"endDate": (now).isoformat()
}
})
if self.initial_lots:
data.update({
'lots': [
{
"auctionPeriod": {
"startDate": (now - timedelta(days=1)).isoformat(),
"endDate": (now).isoformat()
}
}
for i in self.initial_lots
]
})
elif status == 'complete':
data.update({
"enquiryPeriod": {
"startDate": (now - timedelta(days=25)).isoformat(),
"endDate": (now - timedelta(days=11)).isoformat()
},
"tenderPeriod": {
"startDate": (now - timedelta(days=25)).isoformat(),
"endDate": (now - timedelta(days=8)).isoformat()
},
"auctionPeriod": {
"startDate": (now - timedelta(days=8)).isoformat(),
"endDate": (now - timedelta(days=7)).isoformat()
},
"awardPeriod": {
"startDate": (now - timedelta(days=7)).isoformat(),
"endDate": (now - timedelta(days=7)).isoformat()
}
})
if self.initial_lots:
data.update({
'lots': [
{
"auctionPeriod": {
"startDate": (now - timedelta(days=8)).isoformat(),
"endDate": (now - timedelta(days=7)).isoformat()
}
}
for i in self.initial_lots
]
})
if extra:
data.update(extra)

tender = self.db.get(self.tender_id)
tender.update(apply_data_patch(tender, data))
self.db.save(tender)

authorization = self.app.authorization
self.app.authorization = ('Basic', ('chronograph', ''))
response = self.app.get('/tenders/{}'.format(self.tender_id))
self.app.authorization = authorization
self.assertEqual(response.status, '200 OK')
self.assertEqual(response.content_type, 'application/json')
return response


class BaseCompetitiveDialogEUWebTest(BaseCompetitiveDialogWebTest):
initial_data = test_tender_data_eu
Expand Down

0 comments on commit 975a26e

Please sign in to comment.