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_document_operation_in_not_allowed_lot_status( request, error_handler, **kwargs): status = request.validated['lot_status'] if status not in ['pending', 'composing']: raise_operation_error( request, error_handler, 'Can\'t update document in current ({}) lot status'.format(status))
def validate_decision_patch(request, error_handler): # Validate second decision because second decision come from asset and can be changed is_decisions_available = bool( len(request.context.decisions) == 2 or len(request.json['data'].get('decisions', [])) == 2 ) if request.json['data'].get('status') == 'pending' and not is_decisions_available: raise_operation_error( request, error_handler, 'Can\'t switch to pending while decisions not available.' ) is_asset_decision_patched_wrong = bool( len(request.context.decisions) < 2 or ( request.json['data'].get('decisions') and ( len(request.json['data']['decisions']) < 2 or request.context.decisions[1].serialize() != request.json['data']['decisions'][1] ) ) ) if request.context.status == 'pending' and is_asset_decision_patched_wrong: raise_operation_error( request, error_handler, 'Can\'t update decision that was created from asset')
def validate_update_auction_document_in_not_allowed_status(request, error_handler, **kwargs): if request.validated['lot_status'] not in ['draft', 'composing', 'pending']: raise_operation_error( request, error_handler, 'Can\'t update document of auction in current ({}) lot status'.format(request.validated['lot_status']) )
def validate_update_auction_in_not_allowed_status(request, error_handler, **kwargs): is_convoy = bool(request.authenticated_role == 'convoy') if not is_convoy and request.validated['lot_status'] not in ['draft', 'composing', 'pending']: raise_operation_error( request, error_handler, 'Can\'t update auction in current ({}) lot status'.format(request.validated['lot_status']) )
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_related_process_operation_in_not_allowed_lot_status( request, error_handler, **kwargs): status = request.validated['lot_status'] if request.authenticated_role == 'concierge' and status not in [ 'verification' ]: raise_operation_error( request, error_handler, 'Can\'t update relatedProcess in current ({}) lot status by concierge' .format(status)) if request.authenticated_role == 'lot_owner' and status not in [ 'draft', 'composing' ]: raise_operation_error( request, error_handler, 'Can\'t update relatedProcess in current ({}) lot status'.format( status))
def validate_pending_status(request, error_handler): # Check if at least one decision with type = 'asset' is available in lot.decisions # or patching to pending status is going with decisions is_decisions_in_context = any(decision.decisionOf == 'asset' for decision in request.context.decisions) is_decision_in_data = any( decision['decisionOf'] == 'asset' for decision in request.validated['data'].get('decisions', [])) status_check = bool(request.json['data'].get('status') == 'pending' and request.context.status == 'verification') if status_check and not (is_decision_in_data or is_decisions_in_context): raise_operation_error( request, error_handler, 'Can\'t switch to pending while decisions not available.') if status_check and not request.json['data'].get('items', []): raise_operation_error( request, error_handler, 'Can\'t switch to pending while items in asset not available.')
def validate_decision_post(request, error_handler, **kwargs): if len(request.validated['lot'].decisions) > 1: raise_operation_error(request, error_handler, 'Can\'t add more than one decisions to lot')