def post_originating_authority_page(): authority = request.form.get('authority-search-field') local_authority_service = LocalAuthorityService(current_app.config) response = local_authority_service.get_organisations() authorities = list(map(lambda org: org.get('title'), response)) current_app.logger.info("Running validation") validation_errors = AuthorityValidator.validate(authority, authorities) if validation_errors.errors: current_app.logger.warning("Validation errors occurred") return render_template( 'originating_authority.html', authorities=authorities, validation_errors=validation_errors.errors, validation_summary_heading=validation_errors.summary_heading_text, submit_url=url_for( 'add_land_charge.post_originating_authority_page')), 400 ReviewRouter.update_edited_field('originating_authority', authority) g.session.add_charge_state.originating_authority = authority g.session.commit() return redirect( ReviewRouter.get_redirect_url('add_land_charge.get_charge_type'))
def post_location_confirmation(): current_app.logger.info('Endpoint called') if g.session.add_charge_state is None: current_app.logger.info('Redirecting to: {}'.format(url_for('add_land_charge.new'))) return redirect(url_for('add_land_charge.new')) if g.session.add_charge_state.geometry is None: return redirect(url_for('add_land_charge.get_location')) confirmation = request.form.get('location-confirmation') current_app.logger.info('Running validation') validation_errors = LocationConfirmationValidator.validate(confirmation, 'add') if validation_errors.errors: current_app.logger.warning('Validation errors occurred') return render_template( 'location_confirmation.html', validation_errors=validation_errors.errors, validation_summary_heading=validation_errors.summary_heading_text, submit_url=url_for('add_land_charge.post_location_confirmation') ), 400 address_selected = request.args.get('address_selected') g.session.charge_added_outside_users_authority = True g.session.commit() if address_selected == 'True': return redirect(ReviewRouter.get_redirect_url('add_land_charge.get_address_confirmation')) else: return redirect(ReviewRouter.get_redirect_url('add_land_charge.get_address_for_charge'))
def post_charge_description(): current_app.logger.info("Endpoint called with charge-description = '{}'".format( request.form.get('charge-description', '').strip() )) if g.session.add_charge_state is None: current_app.logger.info('Redirecting to: {}'.format(url_for('add_land_charge.new'))) return redirect(url_for('add_land_charge.new')) description = request.form['charge-description'].strip() current_app.logger.info('Running validation') validation_errors = ChargeDescriptionValidator.validate(description) if validation_errors.errors: current_app.logger.warning('Validation errors occurred') return render_template('charge_description.html', validation_errors=validation_errors.errors, validation_summary_heading=validation_errors.summary_heading_text, data=description, submit_url=url_for('add_land_charge.post_charge_description')), 400 current_app.logger.info('Updating session object') if has_value_changed(g.session.add_charge_state.supplementary_information, description): ReviewRouter.update_edited_field('supplementary_information', description) g.session.add_charge_state.supplementary_information = description g.session.commit() return redirect(ReviewRouter.get_redirect_url('add_land_charge.get_review'))
def test_update_edited_field_with_redirect_route_not_set(self): """Should not update edited_fields if the redirect_route in session is not set.""" with main.app.test_request_context(): self.build_session() g.session.add_charge_state.charge_type = CHARGE_TYPE g.session.redirect_route = None ReviewRouter.update_edited_field('charge_type', CHARGE_TYPE) self.assertTrue(len(g.session.edited_fields) == 0)
def test_update_edited_field_with_redirect_route_set_and_pass_non_matching_field( self): """Should add an entry to the edited_fields if the given value does not match the value stored in session.""" with main.app.test_request_context(): self.build_session() g.session.redirect_route = REDIRECT_ROUTE ReviewRouter.update_edited_field('charge_type', CHARGE_TYPE) self.assertTrue(len(g.session.edited_fields) == 1) self.assertIn('charge_type', g.session.edited_fields)
def post_expiry(): current_app.logger.info( "Endpoint called with does_charge_expire = '{}', charge_expiry_day = '{}', " "charge_expiry_month = '{}', charge_expiry_year = '{}'".format( request.form.get('does_charge_expire', ''), request.form.get('charge_expiry_day', ''), request.form.get('charge_expiry_month', ''), request.form.get('charge_expiry_year', ''))) if g.session.add_charge_state is None: current_app.logger.info('Redirecting to: {}'.format( url_for('add_land_charge.new'))) return redirect(url_for('add_land_charge.new')) does_charge_expire = request.form.get('does_charge_expire', '') charge_expiry_day = request.form.get('charge_expiry_day', '') charge_expiry_month = request.form.get('charge_expiry_month', '') charge_expiry_year = request.form.get('charge_expiry_year', '') validation_errors = ExpiryValidator.validate(does_charge_expire, charge_expiry_day, charge_expiry_month, charge_expiry_year) current_app.logger.info('Running validation') if validation_errors.errors: current_app.logger.warning('Validation errors occurred') return render_template( 'expiry.html', validation_errors=validation_errors.errors, validation_summary_heading=validation_errors.summary_heading_text, submit_url=url_for('add_land_charge.post_expiry'), request_body=request.form), 400 if does_charge_expire == 'yes': charge_expiry_date = None if (charge_expiry_day and charge_expiry_month and charge_expiry_year): charge_expiry_date = date(int(charge_expiry_year), int(charge_expiry_month), int(charge_expiry_day)) current_app.logger.info('Update expiry_date in session object') ReviewRouter.update_edited_field('expiry_date', charge_expiry_date) g.session.add_charge_state.expiry_date = charge_expiry_date g.session.commit() else: g.session.add_charge_state.expiry_date = None g.session.commit() return redirect( ReviewRouter.get_redirect_url('add_land_charge.get_additional_info'))
def post_location(): current_app.logger.info('Endpoint called') features = None selected_address = None if request.form.get('saved-features'): features = json.loads(request.form['saved-features'].strip()) if request.form.get('selected-address'): selected_address = json.loads(request.form['selected-address']) current_app.logger.info('Running validation') validation_errors = AddLocationMapValidator.validate(features) if validation_errors.errors: current_app.logger.warning('Validation errors occurred') return render_template( 'location.html', validation_errors=validation_errors.errors, validation_summary_heading=validation_errors.summary_heading_text, information=features, submit_url=url_for('add_land_charge.post_location')), 400 current_app.logger.info('Updating session object') ReviewRouter.update_edited_field('geometry', features) select_address_param = False add_extent_anywhere_redirect_url = 'add_land_charge.get_address_for_charge' if selected_address and select_address_valid(selected_address): g.session.previously_selected_address = selected_address select_address_param = True add_extent_anywhere_redirect_url = 'add_land_charge.get_address_confirmation' g.session.add_charge_state.geometry = features g.session.commit() if Permissions.add_extent_anywhere not in g.session.user.permissions: extent = build_extents_from_features(features) result = LocalAuthorityService( current_app.config).get_authorities_by_extent(extent) if should_show_confirmation_warning(result): return redirect( url_for('add_land_charge.get_location_confirmation', address_selected=select_address_param)) return redirect( ReviewRouter.get_redirect_url(add_extent_anywhere_redirect_url))
def test_get_redirect_url_with_redirect_route_not_set(self): """Should return the URL of the given route if the redirect_route is not set in session.""" with main.app.test_request_context(): self.build_session() g.session.redirect_route = None result = ReviewRouter.get_redirect_url(DEFAULT_ROUTE) self.assertEqual(result, DEFAULT_URL)
def post_additional_info(): current_app.logger.info( "Endpoint called with additional-info = '{}', reference = '{}'".format( request.form.get('additional-info', '').strip(), request.form.get('reference', '').strip())) if g.session.add_charge_state is None: current_app.logger.info('Redirecting to: {}'.format( url_for('add_land_charge.new'))) return redirect(url_for('add_land_charge.new')) information = request.form['additional-info'].strip() reference = request.form['reference'].strip() current_app.logger.info('Running validation') validation_errors = AddChargeAdditionalInfoValidator.validate( information, reference) if validation_errors.errors: current_app.logger.warning('Validation errors occurred') return render_template( 'additional_info.html', validation_errors=validation_errors.errors, validation_summary_heading=validation_errors.summary_heading_text, information=information, submit_url=url_for('add_land_charge.post_additional_info'), source_information_list=get_source_information_list(), reference=reference), 400 current_app.logger.info('Updating session object') ReviewRouter.update_edited_field('further_information_location', information) if has_value_changed( g.session.add_charge_state.further_information_reference, reference): ReviewRouter.update_edited_field('further_information_reference', reference) g.session.add_charge_state.further_information_reference = reference g.session.add_charge_state.further_information_location = information g.session.commit() return redirect( ReviewRouter.get_redirect_url( 'add_land_charge.get_charge_description'))
def post_land_compensation_payment(): land_compensation_paid = NumberConverter.format_number_string( request.form.get('land-compensation-paid'), leading_char='£', force_two_dp=True) amount_of_compensation = NumberConverter.format_number_string( request.form.get('amount-of-compensation'), leading_char='£', force_two_dp=True) land_compensation_amount_type = request.form.get( 'land-compensation-amount-type') current_app.logger.info( "Endpoint called with land-compensation-paid = '%s', land-compensation-amount-type = '%s'", land_compensation_paid, amount_of_compensation, land_compensation_amount_type) if g.session.add_charge_state is None: current_app.logger.info("Redirecting to: %s", url_for("add_land_charge.new")) return redirect(url_for("add_land_charge.new")) current_app.logger.info("Running validation") validation_errors = LandCompensationPaymentValidator.validate( land_compensation_paid, amount_of_compensation, False) if validation_errors.errors: current_app.logger.warning("Validation errors occurred") return render_template( 'land_compensation_payment.html', validation_errors=validation_errors.errors, validation_summary_heading=validation_errors.summary_heading_text, request_body=request.form, submit_url=url_for( 'add_land_charge.post_land_compensation_payment')), 400 current_app.logger.info( "Updating session object with land compensation amount: '%s' and \ land compensation amount type: '%s'", land_compensation_paid, land_compensation_amount_type) ReviewRouter.update_edited_field('land_compensation_paid', land_compensation_paid) ReviewRouter.update_edited_field('amount_of_compensation', amount_of_compensation) ReviewRouter.update_edited_field('land_compensation_amount_type', land_compensation_amount_type) g.session.add_charge_state.land_compensation_paid = land_compensation_paid g.session.add_charge_state.amount_of_compensation = amount_of_compensation g.session.add_charge_state.land_compensation_amount_type = land_compensation_amount_type g.session.commit() # Force the flow to go to the next page if that value is not in the session (in case browser back button is used) if not g.session.add_charge_state.land_capacity_description: next_url = url_for("add_land_charge.get_land_compensation_owned") else: next_url = ReviewRouter.get_redirect_url( "add_land_charge.get_land_compensation_owned") current_app.logger.info("Redirecting to next step: %s", next_url) return redirect(next_url)
def post_land_compensation_land_sold(): current_app.logger.info( "Endpoint called with land-sold-description = '%s' and land-works-particulars = '%s'", request.form.get('land-sold-description', ''), request.form.get('land-works-particulars', '')) if g.session.add_charge_state is None: current_app.logger.info('Redirecting to: {}'.format( url_for('add_land_charge.new'))) return redirect(url_for('add_land_charge.new')) description = request.form['land-sold-description'].strip() land_works_particulars = request.form['land-works-particulars'].strip() current_app.logger.info('Running validation') validation_errors = LandCompensationLandSoldValidator.validate( description, land_works_particulars) if validation_errors.errors: current_app.logger.warning('Validation errors occurred') return render_template( 'land_compensation_land_sold.html', validation_errors=validation_errors.errors, validation_summary_heading=validation_errors.summary_heading_text, request_body=request.form, submit_url=url_for( 'add_land_charge.post_land_compensation_land_sold')), 400 current_app.logger.info('Updating session object') ReviewRouter.update_edited_field('land_sold_description', description) g.session.add_charge_state.land_sold_description = description ReviewRouter.update_edited_field('land_works_particulars', land_works_particulars) g.session.add_charge_state.land_works_particulars = land_works_particulars g.session.commit() return redirect( ReviewRouter.get_redirect_url('add_land_charge.get_charge_date'))
def post_charge_date(): current_app.logger.info( "Endpoint called with date-day = '{}', date-month = '{}', date-year = '{}'" .format(request.form.get('date-day', ''), request.form.get('date-month', ''), request.form.get('date-year', ''))) if g.session.add_charge_state is None: current_app.logger.info('Redirecting to: {}'.format( url_for('add_land_charge.new'))) return redirect(url_for('add_land_charge.new')) day = request.form.get('date-day') month = request.form.get('date-month') year = request.form.get('date-year') current_app.logger.info('Running validation') validation_errors = ChargeDateValidator.validate(day, month, year) if validation_errors.errors: charge_date = {'day': day, 'month': month, 'year': year} current_app.logger.warning('Validation errors occurred') return render_template( 'charge_date.html', validation_errors=validation_errors.errors, validation_summary_heading=validation_errors.summary_heading_text, submit_url=url_for('add_land_charge.post_charge_date'), request=request, date=charge_date) if year and month and day: current_app.logger.info('Updating session object') charge_creation_date = date(int(year), int(month), int(day)) ReviewRouter.update_edited_field('charge_creation_date', charge_creation_date) g.session.add_charge_state.charge_creation_date = charge_creation_date g.session.commit() return redirect( ReviewRouter.get_redirect_url('add_land_charge.get_location'))
def post_address_for_charge(): if g.session.add_charge_state is None: current_app.logger.info('Redirecting to: {}'.format(url_for('add_land_charge.new'))) return redirect(url_for('add_land_charge.new')) has_address = request.form.get('has-address') charge_geographic_description = request.form.get('charge-geographic-description') selected_address = request.form.get('selected-address') current_app.logger.info("Running validation") validation_errors = AddressForChargeValidator.validate(has_address, selected_address, charge_geographic_description) if validation_errors.errors: current_app.logger.warning("Validation errors occurred") return render_template( 'address_for_charge.html', validation_errors=validation_errors.errors, validation_summary_heading=validation_errors.summary_heading_text, has_address=has_address, charge_geographic_description=charge_geographic_description, submit_url=url_for('add_land_charge.post_address_for_charge') ), 400 if selected_address: selected_address = json.loads(selected_address) charge_address = AddressConverter.to_charge_address(selected_address) ReviewRouter.update_edited_field('charge_address', charge_address) ReviewRouter.remove_edited_field('charge_geographic_description') g.session.add_charge_state.charge_address = charge_address g.session.add_charge_state.charge_geographic_description = None g.session.previously_selected_address = None elif charge_geographic_description: ReviewRouter.update_edited_field('charge_geographic_description', charge_geographic_description) ReviewRouter.remove_edited_field('charge_address') g.session.add_charge_state.charge_geographic_description = charge_geographic_description g.session.add_charge_state.charge_address = None g.session.previously_selected_address = None g.session.commit() return redirect(ReviewRouter.get_redirect_url('add_land_charge.get_expiry'))
def post_financial_charge_details(): current_app.logger.info( "Endpoint called with amount-secured = '%s', interest-paid-indicator = '%s', " "interest-rate = '%s' and ", request.form.get('amount-secured', ''), request.form.get('interest-paid-indicator', ''), request.form.get('interest-rate', '')) if g.session.add_charge_state is None: current_app.logger.info("Redirecting to: %s", url_for("add_land_charge.new")) return redirect(url_for("add_land_charge.new")) amount_secured = NumberConverter.format_number_string(request.form.get( 'amount-secured', ''), leading_char='£', force_two_dp=True) interest_paid_indicator = request.form.get('interest-paid-indicator', '') interest_rate = request.form.get('interest-rate', '') current_app.logger.info("Running validation") validation_errors = FinancialChargeDetailsValidator.validate( amount_secured, interest_paid_indicator, interest_rate) if validation_errors.errors: current_app.logger.warning("Validation errors occurred") return render_template( 'financial_charge_details.html', validation_errors=validation_errors.errors, validation_summary_heading=validation_errors.summary_heading_text, request_body=request.form, submit_url=url_for( 'add_land_charge.post_financial_charge_details')), 400 if interest_paid_indicator == "No": interest_rate = NO_INTEREST_IS_PAYABLE current_app.logger.info( "Updating session object with charge amount: '%s' and no interest rate", amount_secured) ReviewRouter.update_edited_field('amount_originally_secured', amount_secured) ReviewRouter.update_edited_field('rate_of_interest', interest_rate) g.session.add_charge_state.amount_originally_secured = amount_secured g.session.add_charge_state.rate_of_interest = interest_rate g.session.commit() current_app.logger.info( "Redirecting to next step: %s", ReviewRouter.get_redirect_url("add_land_charge.get_charge_date")) return redirect( ReviewRouter.get_redirect_url("add_land_charge.get_charge_date"))
def post_financial_charge(): current_app.logger.info( "Endpoint called with amount-known-indicator = '%s'", request.form.get('amount-known-indicator', '')) if g.session.add_charge_state is None: current_app.logger.info("Redirecting to: %s", url_for("add_land_charge.new")) return redirect(url_for("add_land_charge.new")) amount_known_indicator = request.form.get('amount-known-indicator', '') current_app.logger.info("Running validation") validation_errors = FinancialChargeValidator.validate( amount_known_indicator) if validation_errors.errors: current_app.logger.warning("Validation errors occurred") return render_template( 'financial_charge.html', validation_errors=validation_errors.errors, validation_summary_heading=validation_errors.summary_heading_text, request_body=request.form, submit_url=url_for('add_land_charge.post_financial_charge')), 400 if amount_known_indicator == "Yes": next_url = url_for("add_land_charge.get_financial_charge_details") else: # Clear any values entered for amount and interest rate g.session.add_charge_state.amount_originally_secured = None g.session.add_charge_state.rate_of_interest = None g.session.commit() # Remove fields from edited fields list as the fields will not display on review page if 'amount_originally_secured' in g.session.edited_fields: g.session.edited_fields.remove('amount_originally_secured') if 'rate_of_interest' in g.session.edited_fields: g.session.edited_fields.remove('rate_of_interest') next_url = ReviewRouter.get_redirect_url( "add_land_charge.get_charge_date") g.session.commit() current_app.logger.info("Redirecting to next step: %s", next_url) return redirect(next_url)
def post_land_compensation_owned(): current_app.logger.info( "Endpoint called with land-owned-indicator = '%s' and land-owned-other = '%s'", request.form.get('land-owned-indicator', ''), request.form.get('land-owned-other', '')) if g.session.add_charge_state is None: current_app.logger.info("Redirecting to: %s", url_for("add_land_charge.new")) return redirect(url_for("add_land_charge.new")) land_owned_indicator = request.form.get('land-owned-indicator', '') land_owned_other = request.form.get('land-owned-other', '').strip() current_app.logger.info("Running validation") validation_errors = LandCompensationOwnedValidator.validate( land_owned_indicator, land_owned_other) if validation_errors.errors: current_app.logger.warning("Validation errors occurred") return render_template( 'land_compensation_owned.html', validation_errors=validation_errors.errors, validation_summary_heading=validation_errors.summary_heading_text, request_body=request.form, submit_url=url_for( 'add_land_charge.post_land_compensation_owned')), 400 if land_owned_indicator == "Other": ReviewRouter.update_edited_field('land_capacity_description', land_owned_other) g.session.add_charge_state.land_capacity_description = land_owned_other else: ReviewRouter.update_edited_field('land_capacity_description', land_owned_indicator) g.session.add_charge_state.land_capacity_description = land_owned_indicator current_app.logger.info( "Updating session object with land capacity description: '%s'", g.session.add_charge_state.land_capacity_description) g.session.commit() current_app.logger.info( "Redirecting to next step: %s", ReviewRouter.get_redirect_url("add_land_charge.get_charge_date")) return redirect( ReviewRouter.get_redirect_url("add_land_charge.get_charge_date"))