def validate_verification_status(request, error_handler): if request.validated['data'].get( 'status' ) == 'verification' and request.context.status == 'composing': # Decision validation if not any(decision.decisionOf == 'lot' for decision in request.context.decisions): raise_operation_error( request, error_handler, 'Can\'t switch to verification while lot decisions not available.' ) # Auction validation lot = request.validated['lot'] auction_error_message = get_auction_validation_result(lot) # Raise errors from first and second auction if auction_error_message['description']: request.errors.add(**auction_error_message) request.errors.status = 422 raise error_handler(request) if not lot.relatedProcesses: request.errors.add( 'body', 'mode', 'You can set verification status ' 'only when lot have at least one relatedProcess') request.errors.status = 422 raise error_handler(request) if request.errors: raise error_handler(request)
def validate_verification_status(request, error_handler): if request.validated['data'].get( 'status' ) == 'verification' and request.context.status == 'composing': # Decision validation if not any(decision.decisionOf == 'lot' for decision in request.context.decisions): raise_operation_error( request, error_handler, 'Can\'t switch to verification while lot decisions not available.' ) # Auction validation lot = request.validated['lot'] auctions = sorted(lot.auctions, key=lambda a: a.tenderAttempts) english = auctions[0] auction_error_message = get_auction_validation_result(lot) # Raise errors from first and second auction if auction_error_message['description']: request.errors.add(**auction_error_message) request.errors.status = 422 raise error_handler(request) duration = DAYS_AFTER_RECTIFICATION_PERIOD + RECTIFICATION_PERIOD_DURATION min_auction_start_date = calculate_business_date(start=get_now(), delta=duration, context=lot, working_days=True) auction_period = english.auctionPeriod if auction_period and min_auction_start_date > auction_period.startDate: request.errors.add( 'body', 'mode', 'startDate of auctionPeriod must be ' 'at least in {} days after today'.format(duration.days)) request.errors.status = 422 raise error_handler(request) if not lot.relatedProcesses: request.errors.add( 'body', 'mode', 'You can set verification status ' 'only when lot have at least one relatedProcess') request.errors.status = 422 raise error_handler(request) if request.errors: raise error_handler(request)
def validate_verification_status(request, error_handler): if request.validated['data'].get( 'status' ) == 'verification' and request.context.status == 'composing': lot = request.validated['lot'] auctions = sorted(lot.auctions, key=lambda a: a.tenderAttempts) english = auctions[0] second_english = auctions[1] required_fields = [ 'value', 'minimalStep', 'auctionPeriod', 'guarantee' ] if not all(english[field] for field in required_fields): request.errors.add( 'body', 'data', 'Can\'t switch lot to verification status from composing until ' 'these fields are empty {} within the auctions'.format( required_fields)) request.errors.status = 422 required_fields = ['tenderingDuration'] if not all(second_english[field] for field in required_fields): request.errors.add( 'body', 'data', 'Can\'t switch lot to verification status from composing until ' 'these fields are empty {} within the second (english) auction' .format(required_fields)) request.errors.status = 422 if request.errors: raise error_handler(request)
def validate_decision_by_decisionOf(request, error_handler, **kwargs): decision = request.validated['decision'] if decision.decisionOf != 'lot': request.errors.add( 'body', 'mode', 'Can edit only decisions which have decisionOf equal to \'lot\'.') request.errors.status = 403 raise error_handler(request)
def rectificationPeriod_item_validation(request, error_handler, **kwargs): if bool(request.validated['lot'].rectificationPeriod and request.validated['lot'].rectificationPeriod.endDate < get_now()): request.errors.add( 'body', 'mode', 'You can\'t change items after rectification period') request.errors.status = 403 raise error_handler(request)
def rectificationPeriod_auction_document_validation(request, error_handler, **kwargs): is_period_ended = bool( request.validated['lot'].rectificationPeriod and request.validated['lot'].rectificationPeriod.endDate < get_now()) if is_period_ended and request.method == 'POST': request.errors.add( 'body', 'mode', 'You can\'t add documents to auction after rectification period') request.errors.status = 403 raise error_handler(request) if is_period_ended and request.method in ['PUT', 'PATCH']: request.errors.add( 'body', 'mode', 'You can\'t change documents after rectification period') request.errors.status = 403 raise error_handler(request)
def rectificationPeriod_auction_validation(request, error_handler, **kwargs): is_rectificationPeriod_finished = bool( request.validated['lot'].rectificationPeriod and request.validated['lot'].rectificationPeriod.endDate < get_now()) if request.authenticated_role != 'convoy' and is_rectificationPeriod_finished: request.errors.add( 'body', 'mode', 'You can\'t change auctions after rectification period') request.errors.status = 403 raise error_handler(request)
def validate_file_upload(request, **kwargs): update_logging_context(request, {'document_id': '__new__'}) if request.registry.use_docservice and request.content_type == "application/json": return validate_document_data(request) if 'file' not in request.POST or not hasattr(request.POST['file'], 'filename'): request.errors.add('body', 'file', 'Not Found') request.errors.status = 404 raise error_handler(request) else: request.validated['file'] = request.POST['file']
def rectificationPeriod_document_validation(request, error_handler, **kwargs): is_period_ended = bool( request.validated['lot'].rectificationPeriod and request.validated['lot'].rectificationPeriod.endDate < get_now()) if bool( (is_period_ended and request.validated['document'].documentType != 'cancellationDetails') and request.method == 'POST'): request.errors.add( 'body', 'mode', 'You can add only document with cancellationDetails after rectification period' ) request.errors.status = 403 raise error_handler(request) if is_period_ended and request.method in ['PUT', 'PATCH']: request.errors.add( 'body', 'mode', 'You can\'t change documents after rectification period') request.errors.status = 403 raise error_handler(request)
def validate_deleted_status(request, error_handler): can_be_deleted = any([ doc.documentType == 'cancellationDetails' for doc in request.context['documents'] ]) if request.json['data'].get( 'status') == 'pending.deleted' and not can_be_deleted: request.errors.add( 'body', 'mode', "You can set deleted status " "only when lot have at least one document with \'cancellationDetails\' documentType" ) request.errors.status = 403 raise error_handler(request)