55from schematics .types import IntType , StringType
66from schematics .types .compound import ModelType
77from schematics .types .serializable import serializable
8+ from pyramid .security import Allow
89from zope .interface import implementer
910from openprocurement .api .constants import TZ , CPV_ITEMS_CLASS_FROM
1011from openprocurement .api .models import \
@@ -81,7 +82,6 @@ class Options:
8182 "tenderPeriod" ,
8283 "procuringEntity" ,
8384 "guarantee" ,
84- "value" ,
8585 "minimalStep" ,
8686 )
8787 _edit_role = _core_roles ["edit" ] \
@@ -92,12 +92,16 @@ class Options:
9292 "profile"
9393 )
9494 _create_role = _core_roles ["create" ] + _edit_role
95- _edit_pq_bot_role = whitelist ("items" , "shortlistedFirms" , "status" , "criteria" , "value" )
95+ _edit_pq_bot_role = whitelist (
96+ "items" , "shortlistedFirms" ,
97+ "status" , "criteria" , "value" ,
98+ )
9699 _view_tendering_role = (
97100 _core_roles ["view" ]
98101 + _edit_fields
99102 + whitelist (
100103 "awards" ,
104+ 'value' ,
101105 "awardPeriod" ,
102106 "cancellations" ,
103107 "contracts" ,
@@ -113,7 +117,7 @@ class Options:
113117 "edit" : _edit_role ,
114118 "edit_draft" : _edit_role ,
115119 "edit_draft.unsuccessful" : _edit_role ,
116- "edit_draft.publishing" : _all_forbidden ,
120+ "edit_draft.publishing" : _edit_pq_bot_role ,
117121 "edit_active.tendering" : _all_forbidden ,
118122 "edit_active.qualification" : _all_forbidden ,
119123 "edit_active.awarded" : _all_forbidden ,
@@ -161,7 +165,7 @@ class Options:
161165 validators = [validate_items_uniq ],
162166 )
163167 # The total estimated value of the procurement.
164- value = ModelType (Value , required = True )
168+ value = ModelType (Value )
165169 # The period when the tender is open for submissions.
166170 # The end date is the closing date for tender submissions.
167171 tenderPeriod = ModelType (
@@ -211,8 +215,6 @@ def get_role(self):
211215 if request .authenticated_role in \
212216 ("Administrator" , "chronograph" , "contracting" , "bots" ):
213217 role = request .authenticated_role
214- elif request .authenticated_role == "auction" :
215- role = "auction_{}" .format (request .method .lower ())
216218 else :
217219 role = "edit_{}" .format (request .context .status )
218220 return role
@@ -225,6 +227,12 @@ def next_check(self):
225227
226228 if self .status .startswith ("active" ):
227229 for award in self .awards :
230+ if award .status == 'pending' :
231+ checks .append (
232+ calculate_tender_business_date (award .date ,
233+ timedelta (days = 2 ),
234+ self )
235+ )
228236 if award .status == "active" and not \
229237 any ([i .awardID == award .id for i in self .contracts ]):
230238 checks .append (award .date )
@@ -271,3 +279,16 @@ def validate_tenderPeriod(self, data, period):
271279 and period .endDate < calculate_tender_business_date (period .startDate , timedelta (days = 2 ), data , True )
272280 ):
273281 raise ValidationError (u"the tenderPeriod cannot end earlier than 2 business days after the start" )
282+
283+ def __local_roles__ (self ):
284+ roles = dict ([("{}_{}" .format (self .owner , self .owner_token ), "tender_owner" )])
285+ for i in self .bids :
286+ roles ["{}_{}" .format (i .owner , i .owner_token )] = "bid_owner"
287+ return roles
288+
289+ def __acl__ (self ):
290+ acl = [
291+ (Allow , "g:bots" , "upload_award_documents" ),
292+ ]
293+ self ._acl_cancellation (acl )
294+ return acl
0 commit comments