Example #1
0
def post_applicant_info():
    address_form = request.form

    current_app.logger.info("Running validation")
    validation_error_builder = ApplicantInfoValidator.validate(address_form)

    if validation_error_builder.errors:
        current_app.logger.warning("Validation errors occurred")
        return render_template(
            'applicant_info.html',
            validation_errors=validation_error_builder.errors,
            validation_summary_heading=validation_error_builder.
            summary_heading_text,
            submit_url=url_for('add_lon.post_applicant_info'),
            country_list=get_sorted_countries(),
            request_body=request.form), 400

    applicant_address = AddressConverter.condense_address(address_form)
    applicant_name = address_form.get('applicant_name')

    current_app.logger.info("Updating session object")
    ReviewRouter.update_edited_field('applicant_name', applicant_name)
    ReviewRouter.update_edited_field('applicant_address', applicant_address)

    g.session.add_lon_charge_state.applicant_name = applicant_name
    g.session.add_lon_charge_state.applicant_address = applicant_address
    g.session.commit()

    return redirect(
        ReviewRouter.get_redirect_url('add_lon.get_dominant_building_info'))
def post_servient_structure_position():
    if g.session.add_lon_charge_state is None:
        current_app.logger.info("Redirecting to: %s", url_for("add_lon.new"))
        return redirect(url_for("add_lon.new"))

    extent = request.form.get('extent')
    part_extent_detail = request.form.get('part_extent_detail')

    validation_error_builder = ServientStructurePositionValidator.validate(
        extent, part_extent_detail)

    if validation_error_builder.errors:
        current_app.logger.warning("Validation errors occurred")
        return render_template(
            'servient_structure_position.html',
            validation_errors=validation_error_builder.errors,
            validation_summary_heading=validation_error_builder.
            summary_heading_text,
            submit_url=url_for('add_lon.post_servient_structure_position'),
            request_body=request.form), 400

    position_and_dimension = copy(
        g.session.add_lon_charge_state.structure_position_and_dimension)
    position_and_dimension['extent-covered'] = extent
    if extent == "Part of the extent":
        position_and_dimension["part-explanatory-text"] = part_extent_detail
    elif "part-explanatory-text" in position_and_dimension:
        del position_and_dimension["part-explanatory-text"]

    ReviewRouter.update_edited_height_or_position(position_and_dimension)
    g.session.add_lon_charge_state.structure_position_and_dimension = position_and_dimension
    g.session.commit()

    return redirect(ReviewRouter.get_redirect_url('add_lon.get_review'))
    def test_update_edited_field_with_empty_session(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 test_update_edited_field_with_matching_field(self):
        """Should not add an entry to the edited_fields if the given value matches the value stored in session."""
        with main.app.test_request_context():
            self.build_session()
            g.session.add_lon_charge_state.charge_type = CHARGE_TYPE
            g.session.redirect_route = REDIRECT_ROUTE

            ReviewRouter.update_edited_field('charge_type', CHARGE_TYPE)
            self.assertTrue(len(g.session.edited_fields) == 0)
    def test_update_update_edited_height_or_position_with_redirect_route_not_set(
            self):
        with main.app.test_request_context():
            self.build_session()
            g.session.add_lon_charge_state.structure_position_and_dimension = {}
            g.session.redirect_route = None

            ReviewRouter.update_edited_height_or_position({})
            self.assertTrue(len(g.session.edited_fields) == 0)
    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_lon_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_dominant_address_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_lon_charge_state.charge_geographic_description = CHARGE_GEOGRAPHIC_DESCRIPTION
            g.session.redirect_route = None

            ReviewRouter.update_edited_dominant_address(
                'charge_geographic_description', CHARGE_GEOGRAPHIC_DESCRIPTION)
            self.assertTrue(len(g.session.edited_fields) == 0)
def post_dominant_building():
    address_form = request.form

    validation_error_builder = DominantAddressValidator.validate(address_form)

    if validation_error_builder.errors:
        current_app.logger.warning("Validation errors occurred")
        return render_template(
            'dominant_building.html',
            validation_errors=validation_error_builder.errors,
            validation_summary_heading=validation_error_builder.
            summary_heading_text,
            submit_url=url_for('add_lon.post_dominant_building'),
            request_body=request.form), 400

    current_app.logger.info("Updating session object")

    if address_form['have_address'] == 'Yes':
        charge_address = {
            'unique-property-reference-number': int(address_form['uprn']),
            'postcode': address_form['postcode'],
            'line-1': address_form['address_line_1']
        }
        if address_form['address_line_2']:
            charge_address['line-2'] = address_form['address_line_2']
        if address_form['address_line_3']:
            charge_address['line-3'] = address_form['address_line_3']
        if address_form['address_line_4']:
            charge_address['line-4'] = address_form['address_line_4']
        if address_form['address_line_5']:
            charge_address['line-5'] = address_form['address_line_5']
        if address_form['address_line_6']:
            charge_address['line-6'] = address_form['address_line_6']

        ReviewRouter.update_edited_dominant_address('charge_address',
                                                    charge_address)
        g.session.add_lon_charge_state.charge_address = charge_address
        g.session.add_lon_charge_state.charge_geographic_description = ''
    else:
        charge_geographic_description = address_form[
            'charge_geographic_description']
        ReviewRouter.update_edited_dominant_address(
            'charge_geographic_description', charge_geographic_description)
        g.session.add_lon_charge_state.charge_address = ''
        g.session.add_lon_charge_state.charge_geographic_description = charge_geographic_description

    g.session.commit()

    return redirect(
        ReviewRouter.get_redirect_url('add_lon.get_dominant_building_extent'))
def post_upload_lon_documents():
    upload_lon_documents_form = request.form

    current_app.logger.info("Running validation")
    validation_error_builder = UploadLonDocumentsValidator.validate(
        upload_lon_documents_form, request.files)

    if validation_error_builder.errors:
        current_app.logger.warning("Validation errors occurred")
        return render_template(
            'upload_lon_documents.html',
            validation_errors=validation_error_builder.errors,
            validation_summary_heading=validation_error_builder.
            summary_heading_text,
            request_body=request.form), 400

    current_app.logger.info("Updating session object")
    update_lon_document_fields(upload_lon_documents_form)
    upload_response = upload_lon_docs(request.files, upload_lon_documents_form)

    if upload_response.status_code == 400:
        raise UploadDocumentError("Virus scan failed. Upload a new document.",
                                  url_for('add_lon.get_upload_lon_documents'))

    filenames = {"form_a": request.files.get('form-a-file-input').filename}

    if "Temporary LON certificate" in upload_lon_documents_form.getlist(
            'certificate'):
        filenames["temporary_lon_cert"] = request.files.get(
            'temporary-lon-cert-file-input').filename
    else:
        filenames["temporary_lon_cert"] = ''

    if "Definitive LON certificate" in upload_lon_documents_form.getlist(
            'certificate'):
        filenames["definitive_lon_cert"] = request.files.get(
            'definitive-lon-cert-file-input').filename
    else:
        filenames["definitive_lon_cert"] = ''

    ReviewRouter.update_edited_filename_field(filenames)

    g.session.filenames = filenames
    g.session.add_lon_charge_state.documents_filed = upload_response.json()
    g.session.commit()

    current_app.logger.info("Redirecting to: %s",
                            url_for("add_lon.get_servient_structure_height"))
    return redirect(
        ReviewRouter.get_redirect_url('add_lon.get_servient_structure_height'))
    def test_update_edited_dominant_address_with_old_address_new_description(
            self):
        """Should remove charge address if charge geo description is changed."""
        with main.app.test_request_context():
            self.build_session()
            g.session.add_lon_charge_state.charge_geographic_description = CHARGE_GEOGRAPHIC_DESCRIPTION
            g.session.redirect_route = REDIRECT_ROUTE
            g.session.edited_fields = {'charge_address': 'charge_address'}

            ReviewRouter.update_edited_dominant_address(
                'charge_geographic_description', 'new geographic description')
            self.assertTrue(len(g.session.edited_fields) == 1)
            self.assertIn('charge_geographic_description',
                          g.session.edited_fields)
            self.assertNotIn('charge_address', g.session.edited_fields)
    def test_update_edited_filename_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.filenames = {
                'form_a': '',
                'temporary_lon_cert': '',
                'definitive_lon_cert': ''
            }
            g.session.redirect_route = None

            ReviewRouter.update_edited_filename_field({
                'form_a': '',
                'temporary_lon_cert': '',
                'definitive_lon_cert': ''
            })
            self.assertTrue(len(g.session.edited_fields) == 0)
    def test_get_redirect_url(self):
        """Should return the URL of the redirect_route if the redirect_route is set in session."""
        with main.app.test_request_context():
            self.build_session()
            g.session.redirect_route = REDIRECT_ROUTE

            result = ReviewRouter.get_redirect_url(DEFAULT_ROUTE)
            self.assertEqual(result, REDIRECT_URL)
Example #13
0
def post_land_interest():
    if g.session.add_lon_charge_state is None:
        current_app.logger.info("Redirecting to: %s", url_for("add_lon.new"))
        return redirect(url_for("add_lon.new"))

    current_app.logger.info("Running validation")

    # Different validation and error messages are required for other instead of the existing options.
    land_interest = request.form.get("servient-land-interest-description")
    if land_interest == "Other":
        land_interest = request.form.get("servient-land-interest-detail")
        validation_error_builder = ValidationErrorBuilder()
        FieldValidator(land_interest, 'servient-land-interest-detail', 'Land Interest', validation_error_builder,
                       summary_message="There are errors on the page. Describe the interest in land",
                       inline_message="Explain how the person applying for the light obstruction notice "
                       "owns or uses the land") \
            .is_required()
        checked = "Other"
    else:
        validation_error_builder = ValidationErrorBuilder()
        FieldValidator(land_interest, 'servient-land-interest-description', 'Land Interest', validation_error_builder,
                       summary_message="Choose one",
                       inline_message="Choose one") \
            .is_required()
        checked = request.form.get("servient-land-interest-description")

    if validation_error_builder.errors:
        current_app.logger.warning("Validation errors occurred")
        return render_template(
            'lon_land_interest.html',
            submit_url=url_for("add_lon.post_land_interest"),
            validation_errors=validation_error_builder.errors,
            validation_summary_heading=validation_error_builder.
            summary_heading_text,
            checked=checked,
            request_body=land_interest), 400

    current_app.logger.info("Updating session object")
    ReviewRouter.update_edited_field('servient_land_interest_description',
                                     land_interest)

    g.session.add_lon_charge_state.servient_land_interest_description = land_interest
    g.session.commit()

    return redirect(
        ReviewRouter.get_redirect_url("add_lon.get_upload_lon_documents"))
    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_servient_structure_height():
    if g.session.add_lon_charge_state is None:
        current_app.logger.info("Redirecting to: %s", url_for("add_lon.new"))
        return redirect(url_for("add_lon.new"))

    servient_structure_height_form = request.form
    measurement = servient_structure_height_form.get('measurement')
    height = servient_structure_height_form.get('height')
    unit = servient_structure_height_form.get('unit')

    validation_error_builder = ServientStructureHeightValidator.validate(
        measurement, height, unit)

    if validation_error_builder.errors:
        current_app.logger.warning("Validation errors occurred")
        return render_template(
            'servient_structure_height.html',
            validation_errors=validation_error_builder.errors,
            validation_summary_heading=validation_error_builder.
            summary_heading_text,
            submit_url=url_for('add_lon.post_servient_structure_height'),
            request_body=request.form), 400

    current_app.logger.info("Updating session object")

    if g.session.add_lon_charge_state.structure_position_and_dimension:
        position_and_dimension = copy(
            g.session.add_lon_charge_state.structure_position_and_dimension)
    else:
        position_and_dimension = {"height": ""}

    if measurement == "Unlimited height":
        position_and_dimension["height"] = measurement
        if 'units' in position_and_dimension:
            del (position_and_dimension['units'])
    else:
        position_and_dimension["height"] = height
        position_and_dimension["units"] = unit

    ReviewRouter.update_edited_height_or_position(position_and_dimension)
    g.session.add_lon_charge_state.structure_position_and_dimension = position_and_dimension
    g.session.commit()

    return redirect(
        ReviewRouter.get_redirect_url(
            'add_lon.get_servient_structure_position'))
    def test_update_update_edited_height_or_position_change_extent_type_to_all(
            self):
        with main.app.test_request_context():
            self.build_session()
            g.session.add_lon_charge_state.structure_position_and_dimension = \
                {'height': 'unlimited height',
                 'extent-covered': 'some of the extent',
                 'part-explanatory-text': 'test area coverage'}
            g.session.redirect_route = REDIRECT_ROUTE

            ReviewRouter.update_edited_height_or_position({
                'height':
                'unlimited height',
                'extent-covered':
                'all of the extent'
            })
            self.assertTrue(len(g.session.edited_fields) == 1)
            self.assertIn('servient_position', g.session.edited_fields)
    def test_update_update_edited_height_or_position_change_height_and_units_type(
            self):
        with main.app.test_request_context():
            self.build_session()
            g.session.add_lon_charge_state.structure_position_and_dimension = {
                'height': '10',
                'units': 'metres',
                'extent-covered': 'all of the extent'
            }
            g.session.redirect_route = REDIRECT_ROUTE

            ReviewRouter.update_edited_height_or_position({
                'height':
                'unlimited height',
                'extent-covered':
                'all of the extent'
            })
            self.assertTrue(len(g.session.edited_fields) == 1)
            self.assertIn('servient_height', g.session.edited_fields)
Example #18
0
def post_dominant_building_extent():
    if g.session.add_lon_charge_state is None:
        current_app.logger.info("Redirecting to: %s", url_for("add_lon.new"))
        return redirect(url_for("add_lon.new"))

    information = None

    if 'saved-features' in request.form:
        information = json.loads(request.form['saved-features'].strip())

    current_app.logger.info("Running validation")
    validation_errors = AddLocationMapValidator.validate(information, "Draw the extent", "Draw the extent")

    if validation_errors.errors:
        current_app.logger.warning("Validation errors occurred")

        postcode_to_zoom = ''
        if g.session.add_lon_charge_state.charge_address:
            postcode_to_zoom = g.session.add_lon_charge_state.charge_address['postcode']

        return render_template(
            'dominant_building_extent.html',
            validation_errors=validation_errors.errors,
            validation_summary_heading=validation_errors.summary_heading_text,
            submit_url=url_for("add_lon.post_dominant_building_extent"),
            information=information,
            postcode=postcode_to_zoom
        ), 400

    current_app.logger.info("Updating session object")
    ReviewRouter.update_edited_field('geometry', information)

    g.session.add_lon_charge_state.geometry = information
    g.session.commit()

    return redirect(ReviewRouter.get_redirect_url("add_lon.get_land_interest"))
def update_lon_document_fields(upload_lon_documents_form):
    definitive_cert = "Definitive LON certificate"
    temporary_cert = "Temporary LON certificate"

    if definitive_cert in upload_lon_documents_form.getlist('certificate'):
        tribunal_definitive_certificate_date = datetime.date(
            int(upload_lon_documents_form.get('definitive_cert_year')),
            int(upload_lon_documents_form.get('definitive_cert_month')),
            int(upload_lon_documents_form.get('definitive_cert_day')))

        if tribunal_definitive_certificate_date:
            current_app.logger.info(
                "Update tribunal_definitive_certificate_date in session object"
            )
            ReviewRouter.update_edited_field(
                'tribunal_definitive_certificate_date',
                tribunal_definitive_certificate_date)
            g.session.add_lon_charge_state.tribunal_definitive_certificate_date = tribunal_definitive_certificate_date
            g.session.add_lon_charge_state.expiry_date = datetime.date.today(
            ) + relativedelta(years=+21)
    else:
        # Need this in case they are coming from review page and are removing an existing date by un-checking box
        ReviewRouter.remove_from_edited_fields(
            'tribunal_definitive_certificate_date')
        g.session.add_lon_charge_state.tribunal_definitive_certificate_date = None
        g.session.add_lon_charge_state.expiry_date = None

    if temporary_cert in upload_lon_documents_form.getlist('certificate'):
        tribunal_temporary_certificate_date = datetime.date(
            int(upload_lon_documents_form.get('temp_cert_year')),
            int(upload_lon_documents_form.get('temp_cert_month')),
            int(upload_lon_documents_form.get('temp_cert_day')))

        if tribunal_temporary_certificate_date:
            current_app.logger.info(
                "Update tribunal_temporary_certificate_date in session object")
            ReviewRouter.update_edited_field(
                'tribunal_temporary_certificate_date',
                tribunal_temporary_certificate_date)
            g.session.add_lon_charge_state.tribunal_temporary_certificate_date = tribunal_temporary_certificate_date

        tribunal_temporary_certificate_expiry_date = datetime.date(
            int(upload_lon_documents_form.get('temp_expiry_year')),
            int(upload_lon_documents_form.get('temp_expiry_month')),
            int(upload_lon_documents_form.get('temp_expiry_day')))

        if tribunal_temporary_certificate_expiry_date:
            current_app.logger.info(
                "Update tribunal_temporary_certificate_expiry_date in session object"
            )
            ReviewRouter.update_edited_field(
                'tribunal_temporary_certificate_expiry_date',
                tribunal_temporary_certificate_expiry_date)
            g.session.add_lon_charge_state.tribunal_temporary_certificate_expiry_date = \
                tribunal_temporary_certificate_expiry_date

    else:
        # Need this in case they are coming from review page and are removing an existing date by un-checking box
        ReviewRouter.remove_from_edited_fields(
            'tribunal_temporary_certificate_date')
        ReviewRouter.remove_from_edited_fields(
            'tribunal_temporary_certificate_expiry_date')
        g.session.add_lon_charge_state.tribunal_temporary_certificate_date = None
        g.session.add_lon_charge_state.tribunal_temporary_certificate_expiry_date = None