예제 #1
0
    def get_initial(self):
        """
        Get initial defines the initial data for the form instance that is to be rendered on the page
        :return: a dictionary mapping form field names, to values of the correct type
        """
        initial = super().get_initial()

        application_id = app_id_finder(self.request)

        response = NannyGatewayActions().list('previous-name', params={'application_id': application_id})
        if response.status_code == 200:
            initial['name_history'] = True
        else:
            initial['name_history'] = False

        return initial
 def get_form(self, form_class=None):
     """
     Method to instantiate the form for rendering in the view.
     If it is a GET request, perform check for ARC comments.
     If it is a POST, remove any existing ARC comments.
     """
     form = super(NannyFormView, self).get_form(form_class)
     endpoint = self.endpoint
     id = app_id_finder(self.request)
     if self.request.method == "GET":
         if getattr(form, "check_flags", None):
             form.check_flags(id, endpoint, id)
     elif self.request.method == "POST":
         if getattr(form, "remove_flags", None):
             form.remove_flags(id, endpoint, id)
     return form
예제 #3
0
 def get_form(self, form_class=None):
     """
     Method to instantiate the form for rendering in the view.
     for this view it takes comment from ArcComments and saves it in context
     """
     form = super(NannyFormView, self).get_form(form_class)
     id = app_id_finder(self.request)
     if self.request.method == "GET":
         if getattr(form, "check_flags", None):
             flag = form.check_flags(id)
             # context["flag"] = flag
             # print(context)
     elif self.request.method == "POST":
         if getattr(form, "remove_flags", None):
             form.remove_flags(id)
     return form
    def get_initial(self):
        """
        Get initial defines the initial data for the form instance that is to be rendered on the page
        :return: a dictionary mapping form field names, to values of the correct type
        """
        initial = super().get_initial()

        application_id = app_id_finder(self.request)
        response = NannyGatewayActions().list(
            "missing-address-gap", params={"application_id": application_id}
        )
        if response.status_code == 200:
            gaps = True
        elif response.status_code == 404:
            gaps = False

        initial = {"gaps_in_five_year_address_history": gaps}
        return initial
예제 #5
0
    def get_context_data(self, **kwargs):
        context = super().get_context_data()
        application_id = app_id_finder(self.request)
        show_extra = bool(self.request.GET.get('show-extra'))
        context["id"] = application_id
        application_record = (NannyGatewayActions().read("application",
                                                         params={
                                                             "application_id":
                                                             application_id
                                                         }).record)
        context["personal_details_status"] = application_record[
            "personal_details_status"]

        context.update(
            self._previous_names_page_render(application_id,
                                             show_extra=show_extra))

        return context
    def get_initial(self):
        initial = super().get_initial()
        app_id = app_id_finder(self.request)
        initial['id'] = app_id

        api_response = NannyGatewayActions().list('previous-address',
                                                  params={
                                                      'person_id': app_id,
                                                      'order': '0'
                                                  })
        if api_response.status_code == 200:
            initial['postcode'] = api_response.record[0]['postcode']

        crc_api_response = NannyGatewayActions().read(
            "dbs-check", params={'application_id': app_id})
        if crc_api_response.status_code == 200:
            initial['lived_abroad'] = crc_api_response.record['lived_abroad']

        return initial
예제 #7
0
    def get_initial(self):
        """
        Get initial defines the initial data for the form instance that is to be rendered on the page
        :return: a dictionary mapping form field names, to values of the correct type
        """
        initial = super().get_initial()

        application_id = app_id_finder(self.request)

        response = NannyGatewayActions().read(
            'suitability', params={'application_id': application_id})
        if response.status_code == 200:
            personal_details_record = response.record
        elif response.status_code == 404:
            return initial

        initial['social_services'] = personal_details_record['social_services']
        # If there has yet to be an entry for the model associated with the form, then no population necessary
        return initial
예제 #8
0
    def get_initial(self):
        initial = super(PersonalDetailSelectAddressView, self).get_initial()
        app_id = app_id_finder(self.request)
        api_response = NannyGatewayActions().read('applicant-home-address', params={'application_id': app_id})

        if api_response.status_code == 200:
            postcode = api_response.record['postcode']
            initial['postcode'] = postcode
            initial['id'] = app_id
            address_choices = AddressHelper.create_address_lookup_list(postcode)
            initial['choices'] = address_choices

        pd_api_response = NannyGatewayActions().read('applicant-personal-details', params={'application_id': app_id})
        if pd_api_response.status_code == 200:
            record = pd_api_response.record
            if record['moved_in_date'] is not None:
                initial['moved_in_date'] = initial['moved_in_date'] = datetime.strptime(record['moved_in_date'], '%Y-%m-%d').date()

        return initial
예제 #9
0
    def form_valid(self, form):
        application_id = app_id_finder(self.request)
        postcode = form.cleaned_data['postcode']

        api_response = NannyGatewayActions().read('applicant-home-address', params={'application_id': application_id})
        if api_response.status_code == 200:
            address_record = api_response.record
            address_record['postcode'] = postcode
            NannyGatewayActions().put('applicant-home-address', params=address_record)
        else:
            personal_details = NannyGatewayActions().read('applicant-personal-details', params={'application_id': application_id}).record
            NannyGatewayActions().create(
                'applicant-home-address',
                params={
                     'application_id': application_id,
                     'personal_detail_id': personal_details['personal_detail_id'],
                     'postcode': postcode,
                 })

        return super().form_valid(form)
    def get_initial(self):
        initial = super(PersonalDetailSelectPreviousAddressView,
                        self).get_initial()
        app_id = app_id_finder(self.request)
        master_summary = self.request.GET.get('master_summary')
        api_response = NannyGatewayActions().list('previous-address',
                                                  params={
                                                      'person_id': app_id,
                                                      'order': '0'
                                                  })

        if api_response.status_code == 200:
            postcode = api_response.record[0]['postcode']
            initial['postcode'] = postcode
            initial['id'] = app_id
            address_choices = AddressHelper.create_address_lookup_list(
                postcode)
            initial['choices'] = address_choices

        return initial
예제 #11
0
    def form_valid(self, form):
        application_id = app_id_finder(self.request)
        application_record = (NannyGatewayActions().read("application",
                                                         params={
                                                             "application_id":
                                                             application_id
                                                         }).record)
        if (application_record["personal_details_status"] != "COMPLETED"
                or application_record["personal_details_status"] != "FLAGGED"):
            application_record["personal_details_status"] = "IN_PROGRESS"
        NannyGatewayActions().put("application", params=application_record)

        data_dict = {
            "application_id": application_id,
            "date_of_birth": form.cleaned_data["date_of_birth"],
        }

        response = NannyGatewayActions().read(
            "applicant-personal-details",
            params={"application_id": application_id})
        if response.status_code == 200:
            NannyGatewayActions().patch("applicant-personal-details",
                                        params=data_dict)
        elif response.status_code == 404:
            NannyGatewayActions().create("applicant-personal-details",
                                         params=data_dict)

        prev_name_response = NannyGatewayActions().list("previous-name",
                                                        params={
                                                            "application_id":
                                                            application_id,
                                                            "order": "0"
                                                        })
        if prev_name_response.status_code == 200:
            data_dict = prev_name_response.record[0]
            data_dict["start_day"] = form.cleaned_data["date_of_birth"].day
            data_dict["start_month"] = form.cleaned_data["date_of_birth"].month
            data_dict["start_year"] = form.cleaned_data["date_of_birth"].year
            NannyGatewayActions().put("previous-name", params=data_dict)

        return super().form_valid(form)
    def form_valid(self, form):
        application_id = app_id_finder(self.request)
        application_record = NannyGatewayActions().read("application",
                                                        params={
                                                            "application_id":
                                                            application_id
                                                        }).record
        if application_record["suitability_details_status"] not in (
                "COMPLETED",
                "FLAGGED",
        ):
            application_record["suitability_details_status"] = "IN_PROGRESS"
        NannyGatewayActions().put("application", params=application_record)

        answer = form.cleaned_data["disqualification"]
        data_dict = {
            "application_id": application_id,
            "disqualification": answer,
        }

        if answer == "False":
            data_dict["disqualification_details"] = ""
            arc_comments_response = NannyGatewayActions().list(
                "arc-comments",
                params={
                    "application_id": application_id,
                    'field_name': 'disqualification_details',
                    'endpoint_name': 'suitability'
                })
            if arc_comments_response.status_code == 200:
                arc_record = arc_comments_response.record[0]
                arc_record['flagged'] = False
                NannyGatewayActions().put('arc-comments', params=arc_record)

        existing_record = NannyGatewayActions().read(
            "suitability", params={"application_id": application_id})
        if existing_record.status_code == 200:
            NannyGatewayActions().patch("suitability", params=data_dict)
        elif existing_record.status_code == 404:
            NannyGatewayActions().create("suitability", params=data_dict)
        return super().form_valid(form)
예제 #13
0
    def get_initial(self):
        initial = super().get_initial()
        app_id = app_id_finder(self.request)
        initial['id'] = app_id

        api_response = NannyGatewayActions().read('applicant-home-address', params={'application_id': app_id})
        if api_response.status_code == 200:
            initial['street_line1'] = api_response.record['street_line1']
            initial['street_line2'] = api_response.record['street_line2']
            initial['town'] = api_response.record['town']
            initial['county'] = api_response.record['county']
            initial['postcode'] = api_response.record['postcode']

       # get moved in date
        pd_api_response = NannyGatewayActions().read('applicant-personal-details', params={'application_id': app_id})
        if pd_api_response.status_code == 200:
            record = pd_api_response.record
            if record['moved_in_date'] is not None:
                initial['moved_in_date'] = datetime.strptime(record['moved_in_date'], '%Y-%m-%d').date()

        return initial
예제 #14
0
    def form_valid(self, form):
        application_id = app_id_finder(self.request)
        application_record = NannyGatewayActions().read('application',
                                                        params={
                                                            'application_id':
                                                            application_id
                                                        }).record
        if application_record[
                'suitability_details_status'] != 'COMPLETED' or application_record[
                    'suitability_details_status'] != 'FLAGGED':
            application_record['suitability_details_status'] = 'IN_PROGRESS'
        NannyGatewayActions().put('application', params=application_record)

        answer = form.cleaned_data["social_services"]
        data_dict = {
            'application_id': application_id,
            'social_services': answer,
        }

        if answer == "False":
            data_dict["social_services_details"] = ""
            arc_comments_response = NannyGatewayActions().list(
                "arc-comments",
                params={
                    "application_id": application_id,
                    'field_name': 'social_services_details',
                    'endpoint_name': 'suitability'
                })
            if arc_comments_response.status_code == 200:
                arc_record = arc_comments_response.record[0]
                arc_record['flagged'] = False
                NannyGatewayActions().put('arc-comments', params=arc_record)

        existing_record = NannyGatewayActions().read(
            'suitability', params={'application_id': application_id})
        if existing_record.status_code == 200:
            NannyGatewayActions().patch('suitability', params=data_dict)
        elif existing_record.status_code == 404:
            NannyGatewayActions().create('suitability', params=data_dict)
        return super().form_valid(form)
    def form_valid(self, form):
        app_id = app_id_finder(self.request)
        selected_address_index = form.cleaned_data['previous_address']
        postcode = self.request.POST.get('postcode')
        api_response = NannyGatewayActions().list('previous-address',
                                                  params={
                                                      'person_id': app_id,
                                                      'order': '0'
                                                  })

        # if statement for routing on "add another address" button, same form validation and database changes
        # but redirect to the other page, and snippet into HTML of the redirected to page, get address from
        # database and add to the template, value from request has ID and then
        # NannyGatewayActions().delete("previous_address_id"...)

        if api_response.status_code == 200:
            record = api_response.record[0]
            NannyGatewayActions().delete(
                'previous-address',
                params={'previous_address_id': record['previous_address_id']})
            selected_address = AddressHelper.get_posted_address(
                selected_address_index, postcode)
            record['street_line1'] = selected_address['line1'].title()
            record['street_line2'] = selected_address['line2'].title()
            record['town'] = selected_address['townOrCity'].title()
            record['county'] = ''.title()
            record['postcode'] = selected_address['postcode']
            record['country'] = 'United Kingdom'
            record['moved_in_date'] = form.cleaned_data['moved_in_date']
            record['moved_out_date'] = form.cleaned_data['moved_out_date']
            all_addresses_response = NannyGatewayActions().list(
                'previous-address', params={'person_id': app_id})
            if all_addresses_response.status_code == 200:
                record['order'] = len(all_addresses_response.record) + 1
            else:
                record['order'] = 1
            NannyGatewayActions().create(
                'previous-address', params=record)  # Update entire record.
        return super(PersonalDetailSelectPreviousAddressView,
                     self).form_valid(form)
예제 #16
0
    def form_valid(self, form):
        application_id = app_id_finder(self.request)
        record = NannyGatewayActions().read('application',
                                            params={
                                                'application_id':
                                                application_id
                                            }).record
        record['information_correct_declare'] = form.cleaned_data[
            'confirm_declare']
        record['date_updated'] = datetime.datetime.today()
        NannyGatewayActions().put('application', params=record)

        if record['application_status'] == 'FURTHER_INFORMATION':
            # TODO: create a list of updated tasks
            updated_list = generate_list_of_updated_tasks(record)
            # TODO: send a re-submission email
            pd_record = NannyGatewayActions().read(
                'applicant-personal-details',
                params={
                    'application_id': application_id
                }).record
            user_record = IdentityGatewayActions().read('user',
                                                        params={
                                                            'application_id':
                                                            application_id
                                                        }).record
            resubmission_confirmation_email(user_record['email'],
                                            record['application_reference'],
                                            pd_record['first_name'],
                                            updated_list)
            # TODO: clear statuses against Nanny application
            clear_arc_flagged_statuses(record)
            # TODO: redirect to resubmitted page
            self.success_url = 'declaration:confirmation'

        else:
            self.success_url = 'payment:gov-pay-send-handler'

        return super().form_valid(form)
    def form_valid(self, form):
        app_id = app_id_finder(self.request)
        gap_id = self.request.POST.get("gap_id")
        api_response = NannyGatewayActions().read(
            "missing-address-gap", params={"missing_address_gap_id": gap_id}
        )
        reason = form.cleaned_data["gap_reason"]
        moved_in_date = form.cleaned_data["moved_in_date"]
        moved_out_date = form.cleaned_data["moved_out_date"]

        # update the address record if it already existed
        if api_response.status_code == 200:
            record = api_response.record
            record["gap_reason"] = reason
            record["moved_in_day"] = moved_in_date.day
            record["moved_in_month"] = moved_in_date.month
            record["moved_in_year"] = moved_in_date.year
            record["moved_out_day"] = moved_out_date.day
            record["moved_out_month"] = moved_out_date.month
            record["moved_out_year"] = moved_out_date.year
            NannyGatewayActions().put("missing-address-gap", params=record)

        return super().form_valid(form)
    def form_valid(self, form):
        application_id = app_id_finder(self.request)
        postcode = form.cleaned_data['postcode']

        api_response = NannyGatewayActions().list('previous-address',
                                                  params={
                                                      'person_id':
                                                      application_id,
                                                      'order': '0'
                                                  })
        if api_response.status_code == 200:
            record = api_response.record[0]
            record['postcode'] = postcode
            NannyGatewayActions().put('previous-address', params=record)
        else:
            NannyGatewayActions().create('previous-address',
                                         params={
                                             'person_id': application_id,
                                             'postcode': postcode,
                                             'order': 0
                                         })

        return super().form_valid(form)
    def get_success_url(self):
        app_id = app_id_finder(self.request)
        pd_api_response = NannyGatewayActions().read(
            'applicant-personal-details', params={'application_id': app_id})
        if pd_api_response.status_code == 200:
            record = pd_api_response.record
            moved_in_date_str = record['moved_in_date']
            moved_in_date = datetime.datetime.strptime(moved_in_date_str,
                                                       '%Y-%m-%d').date()
        else:
            raise Exception(
                "Issue calculating whether move in date is within the last 5 years."
            )

        today_date = datetime.date.today()
        five_years_ago_date = today_date - relativedelta(years=5)

        correct_lived_abroad = 'dbs:Criminal-Records-Abroad-View'
        incorrect_lived_abroad_within_five = 'personal-details:Personal-Details-Previous-Address'
        incorrect_lived_abroad_outside_five = 'personal-details:Personal-Details-Summary'

        if self.request.POST['lived_abroad'] == 'True':
            self.success_url = correct_lived_abroad
        elif (self.request.POST['lived_abroad']
              == 'False') & (moved_in_date > five_years_ago_date):
            self.success_url = incorrect_lived_abroad_within_five
        elif (self.request.POST['lived_abroad']
              == 'False') & (moved_in_date <= five_years_ago_date):
            self.success_url = incorrect_lived_abroad_outside_five
        else:
            raise ValueError(
                "Invalid response passed to the lived_abroad view from the Lived abroad question in Nanny"
            )

        url = super(PersonalDetailLivedAbroadView, self).get_success_url()

        return url
    def get_initial(self):
        initial = super().get_initial()
        app_id = app_id_finder(self.request)
        initial["id"] = app_id
        gap_id = self.request.GET.get("gap_id")

        api_response = NannyGatewayActions().read(
            "missing-address-gap", params={"missing_address_gap_id": gap_id}
        )
        if api_response.status_code == 200:
            record = api_response.record
            initial["gap_reason"] = api_response.record["gap_reason"]
            initial["moved_in_date"] = datetime.datetime(
                record["moved_in_year"],
                record["moved_in_month"],
                record["moved_in_day"],
            ).date()
            initial["moved_out_date"] = datetime.datetime(
                record["moved_out_year"],
                record["moved_out_month"],
                record["moved_out_day"],
            ).date()

        return initial
예제 #21
0
    def form_valid(self, form):
        application_id = app_id_finder(self.request)
        application_record = (NannyGatewayActions().read("application",
                                                         params={
                                                             "application_id":
                                                             application_id
                                                         }).record)
        if (application_record["personal_details_status"] != "COMPLETED"
                or application_record["personal_details_status"] != "FLAGGED"):
            application_record["personal_details_status"] = "IN_PROGRESS"
        NannyGatewayActions().put("application", params=application_record)

        if form.cleaned_data["title"] != "Other":
            title = form.cleaned_data["title"]
        else:
            title = form.cleaned_data["other_title"]

        data_dict = {
            "application_id": application_id,
            "title": title,
            "first_name": form.cleaned_data["first_name"],
            "middle_names": form.cleaned_data["middle_names"],
            "last_name": form.cleaned_data["last_name"],
        }

        existing_record = NannyGatewayActions().read(
            "applicant-personal-details",
            params={"application_id": application_id})
        if existing_record.status_code == 200:
            NannyGatewayActions().patch("applicant-personal-details",
                                        params=data_dict)
        elif existing_record.status_code == 404:
            NannyGatewayActions().create("applicant-personal-details",
                                         params=data_dict)

        return super().form_valid(form)
    def get_initial(self):
        """
        Get initial defines the initial data for the form instance that is to be rendered on the page
        :return: a dictionary mapping form field names, to values of the correct type
        """
        initial = super().get_initial()

        application_id = app_id_finder(self.request)

        response = NannyGatewayActions().read(
            'first-aid', params={'application_id': application_id})
        if response.status_code == 200:
            first_aid_record = response.record
        else:
            return initial

        initial['training_organisation'] = first_aid_record[
            'training_organisation']
        initial['course_title'] = first_aid_record['course_title']
        initial['course_date'] = datetime.datetime.strptime(
            first_aid_record['course_date'], '%Y-%m-%d')
        # If there has yet to be an entry for the model associated with the form, then no population necessary

        return initial
 def post(self, request):
     application_id = app_id_finder(request)
     NannyGatewayActions().patch('application', params={'application_id': application_id, 'dbs_status': 'IN_PROGRESS'})
     return HttpResponseRedirect(build_url(self.success_url_name, get={'id': application_id}))
예제 #24
0
 def post(self, request, *args, **kwargs):
     """
     Handle post requests to the guidance page.
     """
     app_id = app_id_finder(request)
     return HttpResponseRedirect(reverse(self.success_url_name) + "?id=" + app_id)
예제 #25
0
    def get_context_data(self):
        context = dict()
        context["table_list"] = []
        application_id = app_id_finder(self.request)

        # Accessing various records holding the necessary data dictionaries for the rows in the summary tables
        personal_details_record = (NannyGatewayActions().read(
            "applicant-personal-details",
            params={
                "application_id": application_id
            }).record)

        dbs_record = (NannyGatewayActions().read("dbs-check",
                                                 params={
                                                     "application_id":
                                                     application_id
                                                 }).record)

        address_record = (NannyGatewayActions().read("applicant-home-address",
                                                     params={
                                                         "application_id":
                                                         application_id
                                                     }).record)

        previous_address_list = NannyGatewayActions().list(
            "previous-address", params={"person_id": application_id})

        previous_names_list = NannyGatewayActions().list(
            "previous-name", params={"application_id": application_id})

        address_gaps_list = NannyGatewayActions().list(
            "missing-address-gap", params={"application_id": application_id})

        # Assigning all data to variables for the rows in the data tables
        name = (personal_details_record["first_name"] + " " +
                personal_details_record["middle_names"] + " " +
                personal_details_record["last_name"])
        if previous_names_list.status_code == 200:
            previous_names_record = previous_names_list.record
            previous_names_record.sort(key=sort_func)
            birth_name_record = previous_names_record[0]
            birth_name = (birth_name_record["first_name"] + " " +
                          birth_name_record["middle_names"] + " " +
                          birth_name_record["last_name"])
            birth_name_start_date = datetime.datetime(
                birth_name_record["start_year"],
                birth_name_record["start_month"],
                birth_name_record["start_day"],
            )
            birth_name_start_datetime = birth_name_start_date.strftime(
                "%d %B %Y")
            birth_name_end_date = datetime.datetime(
                birth_name_record["end_year"],
                birth_name_record["end_month"],
                birth_name_record["end_day"],
            )
            birth_name_end_datetime = birth_name_end_date.strftime("%d %B %Y")
        elif previous_names_list.status_code == 404:
            previous_names_record = []
        else:
            raise Exception("Unknown response for previous names data request")
        lived_abroad = dbs_record["lived_abroad"]
        date_of_birth_datetime = datetime.datetime.strptime(
            personal_details_record["date_of_birth"], "%Y-%m-%d")
        date_of_birth = date_of_birth_datetime.strftime("%d %B %Y")
        address = AddressHelper.format_address(address_record, ", ")
        name_history = len(previous_names_record) >= 1
        if previous_address_list.status_code == 200:
            previous_address_record = previous_address_list.record
        elif previous_address_list.status_code == 404:
            previous_address_record = []
        else:
            raise Exception(
                "Unknown response for previous address data request")
        if address_gaps_list.status_code == 200:
            address_gaps_record = address_gaps_list.record
        elif address_gaps_list.status_code == 404:
            address_gaps_record = []
        else:
            raise Exception("Unknown response for address gap data request")

        # Producing all rows for data tables
        """
        Parameters for the Row() function from table_util
        
        data_name: The name of the field as stored in the database
        row_name: The name of the field as rendered on the template
        value: The value of the field
        back_link: The view which, when reversed, redirects to the page where the value is defined
        change_link_description: An optional change link textual description value
        error: The error associated with the field, empty by default, only populated on table.get_errors
        """

        title_row = Row(
            "title",
            "Title",
            personal_details_record["title"],
            "personal-details:Personal-Details-Name",
            "your title",
        )
        name_row = Row(
            "name",
            "Your name",
            name,
            "personal-details:Personal-Details-Name",
            "your name",
        )
        date_of_birth_row = Row(
            "date_of_birth",
            "Date of birth",
            date_of_birth,
            "personal-details:Personal-Details-Date-Of-Birth",
            "your date of birth",
        )
        home_address_row = Row(
            "home_address",
            "Your home address",
            address,
            "personal-details:Personal-Details-Manual-Address",
            "your home address",
        )
        lived_abroad_row = Row(
            "lived_abroad",
            "Have you lived outside of the UK in the last 5 years?",
            lived_abroad,
            "personal-details:Personal-Details-Lived-Abroad",
            "have you lived abroad in the last 5 years",
        )
        previous_names_row = Row(
            "known_by_other_names",
            "Have you previously been known by any other names?",
            name_history,
            "personal-details:Personal-Details-Name-History",
            "have you been know by any previous names",
        )
        if previous_names_list.status_code == 200:
            birth_name_row = Row(
                "name_history",
                "Birth name",
                birth_name,
                "personal-details:Personal-Details-Birth-Name",
                "your birth name",
            )
            birth_name_start_date_row = Row(
                "start_date",
                "Start date",
                birth_name_start_datetime,
                "personal-details:Personal-Details-Birth-Name",
                "date birth name was used from",
            )
            birth_name_end_date_row = Row(
                "end_date",
                "End date",
                birth_name_end_datetime,
                "personal-details:Personal-Details-Birth-Name",
                "date birth name was used until",
            )

        # Your name and date of birth table
        name_and_dob_table = Table(application_id)

        name_and_dob_table.title = "Your name and date of birth"
        name_and_dob_table.row_list = [
            title_row,
            name_row,
            date_of_birth_row,
            previous_names_row,
        ]
        name_and_dob_table.get_errors("applicant-personal-details")
        context["table_list"].append(name_and_dob_table)

        # Name history table
        if previous_names_list.status_code == 200:
            name_history_table = Table(application_id)

            name_history_table.title = "Name history"

            name_history_table.row_list = [
                birth_name_row,
                birth_name_start_date_row,
                birth_name_end_date_row,
            ]

            previous_names_record.sort(key=lambda x: datetime.datetime(
                x["start_year"], x["start_month"], x["start_day"]))

            for i, name in enumerate(previous_names_record[1:]):
                count = i + 1
                previous_name = (name["first_name"] + " " +
                                 name["middle_names"] + " " +
                                 name["last_name"])
                previous_name_row = Row(
                    "previous_names",
                    "Previous name {}".format(count),
                    previous_name,
                    "personal-details:Personal-Details-Previous-Names",
                    "previous name applicant has been known by",
                )
                name_history_table.row_list.append(previous_name_row)

                previous_name_start_date = datetime.datetime(
                    name["start_year"], name["start_month"], name["start_day"])
                previous_name_start_datetime = previous_name_start_date.strftime(
                    "%d %B %Y")
                previous_name_start_date_row = Row(
                    "start_date",
                    "Start date",
                    previous_name_start_datetime,
                    "personal-details:Personal-Details-Previous-Names",
                    "date name was used from",
                )
                name_history_table.row_list.append(
                    previous_name_start_date_row)

                previous_name_end_date = datetime.datetime(
                    name["end_year"], name["end_month"], name["end_day"])
                previous_name_end_datetime = previous_name_end_date.strftime(
                    "%d %B %Y")
                previous_name_end_date_row = Row(
                    "end_date",
                    "End date",
                    previous_name_end_datetime,
                    "personal-details:Personal-Details-Previous-Names",
                    "date name was used until",
                )
                name_history_table.row_list.append(previous_name_end_date_row)
            name_history_table.get_errors(
                endpoint="applicant-personal-details")
            name_history_flagged = False
            if name_history_table.row_list[0].error:
                name_history_flagged = True
            context['name_history_flagged'] = name_history_flagged
            context["table_list"].append(name_history_table)

        # Your home and childcare address table
        home_and_childcare_address_table = Table(application_id)

        home_and_childcare_address_table.title = "Your home address"

        # Older applications won't have this - only try to do stuff if the date exists
        if personal_details_record["moved_in_date"]:
            moved_in_date_datetime = datetime.datetime.strptime(
                personal_details_record["moved_in_date"], "%Y-%m-%d").date()
            moved_in_date = moved_in_date_datetime.strftime("%d %B %Y")

            moved_in_date_row = Row(
                "moved_in_date",
                "Moved in date",
                moved_in_date,
                "personal-details:Personal-Details-Manual-Address",
                "your current address moved in date",
            )
            home_and_childcare_address_table.row_list = [
                home_address_row,
                moved_in_date_row,
                lived_abroad_row,
            ]
        else:
            home_and_childcare_address_table.row_list = [
                home_address_row,
                lived_abroad_row,
            ]

        home_and_childcare_address_table.get_errors(
            ["applicant-personal-details", "applicant-home-address"])

        context["table_list"].append(home_and_childcare_address_table)
        address_history_table = None
        # Address history table
        if previous_address_list.status_code == 200:
            address_history_table = Table(application_id)

            address_history_table.title = "Address history"

            address_history_table.row_list = []

            previous_address_record.sort(key=lambda x: x["moved_in_date"])

            for i, address in enumerate(previous_address_record):
                count = i + 1
                previous_address = (address["street_line1"] + ", " +
                                    address["street_line2"] + ", " +
                                    address["town"] + ", " +
                                    address["postcode"])
                previous_address_row = Row(
                    "address_history" if i == 0 else 'previous_address',
                    "Previous address {}".format(count),
                    previous_address,
                    "personal-details:Personal-Details-Previous-Address-Change",
                    "previous addresses applicant has lived at",
                    row_pk=address["previous_address_id"],
                )
                address_history_table.row_list.append(previous_address_row)

                previous_address_moved_in_date = datetime.datetime.strptime(
                    address["moved_in_date"], "%Y-%m-%d")
                previous_address_moved_in_datetime = (
                    previous_address_moved_in_date.strftime("%d %B %Y"))
                previous_address_moved_in_row = Row(
                    "moved_in_date",
                    "Date you moved in",
                    previous_address_moved_in_datetime,
                    "personal-details:Personal-Details-Previous-Address-Change",
                    "date address was used from",
                    row_pk=address["previous_address_id"],
                )
                address_history_table.row_list.append(
                    previous_address_moved_in_row)

                previous_address_moved_out_date = datetime.datetime.strptime(
                    address["moved_out_date"], "%Y-%m-%d")
                previous_address_moved_out_datetime = (
                    previous_address_moved_out_date.strftime("%d %B %Y"))
                previous_address_moved_out_row = Row(
                    "moved_out_date",
                    "Date you moved out",
                    previous_address_moved_out_datetime,
                    "personal-details:Personal-Details-Previous-Address-Change",
                    "date address was used until",
                    row_pk=address["previous_address_id"],
                )
                address_history_table.row_list.append(
                    previous_address_moved_out_row)

        if address_gaps_list.status_code == 200:
            if not address_history_table:
                address_history_table = Table(application_id)
                address_history_table.title = "Address history"

                address_history_table.row_list = []
            address_gaps_record.sort(key=lambda x: datetime.datetime(
                x["moved_in_year"], x["moved_in_month"], x["moved_in_day"]))

            for i, gap in enumerate(address_gaps_record):
                count = i + 1
                address_gap = gap["gap_reason"]
                address_gap_row = Row(
                    "previous_address_gap",
                    "Previous address gap {}".format(count),
                    address_gap,
                    "personal-details:Personal-Details-Address-Gap-Change",
                    "gaps in the applicants previous address history",
                    row_pk=gap["missing_address_gap_id"],
                )
                address_history_table.row_list.append(address_gap_row)

                address_gap_start_date = datetime.datetime(
                    gap["moved_in_year"], gap["moved_in_month"],
                    gap["moved_in_day"])
                address_gap_start_datetime = address_gap_start_date.strftime(
                    "%d %B %Y")
                address_gap_start_date_row = Row(
                    "gap_start_date",
                    "Start date",
                    address_gap_start_datetime,
                    "personal-details:Personal-Details-Address-Gap-Change",
                    "beginning of gap in applicant's address history",
                    row_pk=gap["missing_address_gap_id"],
                )
                address_history_table.row_list.append(
                    address_gap_start_date_row)

                address_gap_end_date = datetime.datetime(
                    gap["moved_out_year"], gap["moved_out_month"],
                    gap["moved_out_day"])
                address_gap_end_datetime = address_gap_end_date.strftime(
                    "%d %B %Y")
                address_gap_end_date_row = Row(
                    "gap_end_date",
                    "End date",
                    address_gap_end_datetime,
                    "personal-details:Personal-Details-Address-Gap-Change",
                    "end of gap in applicant's address history",
                    row_pk=gap["missing_address_gap_id"],
                )
                address_history_table.row_list.append(address_gap_end_date_row)

        if address_history_table:
            address_history_table.get_errors("applicant-personal-details")
            context["table_list"].append(address_history_table)
            context[
                'address_history_flagged'] = True if address_history_table.row_list[
                    0].error else False

        # Building the remaining context dictionary
        context["id"] = application_id
        context["application_id"] = application_id
        context["page_title"] = "Check your answers: your personal details"
        return context