Exemple #1
0
def get_section(schema, questionnaire_store, section_id, list_item_id=None):
    router = Router(
        schema,
        questionnaire_store.answer_store,
        questionnaire_store.list_store,
        questionnaire_store.progress_store,
        questionnaire_store.metadata,
    )

    if not schema.is_hub_enabled():
        redirect_location = router.get_first_incomplete_location_in_survey()
        return redirect(redirect_location.url())

    if section_id not in router.enabled_section_ids:
        return redirect(url_for(".get_questionnaire"))

    routing_path = router.routing_path(section_id=section_id,
                                       list_item_id=list_item_id)
    section_status = questionnaire_store.progress_store.get_section_status(
        section_id=section_id, list_item_id=list_item_id)

    if section_status == CompletionStatus.COMPLETED:
        return redirect(
            router.get_section_return_location_when_section_complete(
                routing_path).url())

    if section_status == CompletionStatus.NOT_STARTED:
        return redirect(
            router.get_first_incomplete_location_for_section(
                routing_path).url())

    return redirect(
        router.get_first_incomplete_location_for_section(
            routing_path=routing_path).url())
class SectionHandler:
    def __init__(self, schema, questionnaire_store, section_id, list_item_id, language):
        self._schema = schema
        self._questionnaire_store = questionnaire_store
        self._section_id = section_id
        self._list_item_id = list_item_id
        self._language = language
        self._router = Router(
            schema,
            questionnaire_store.answer_store,
            questionnaire_store.list_store,
            questionnaire_store.progress_store,
            questionnaire_store.metadata,
            questionnaire_store.response_metadata,
        )
        if not self._is_valid_location():
            raise InvalidLocationException(f"location {self._section_id} is not valid")

        self.current_location = Location(
            section_id=self._section_id,
            list_name=self._schema.get_repeating_list_for_section(self._section_id),
            list_item_id=self._list_item_id,
        )

        self._routing_path = self._router.routing_path(
            section_id=self._section_id, list_item_id=self._list_item_id
        )

    def get_context(self):
        section_summary_context = SectionSummaryContext(
            self._language,
            self._schema,
            self._questionnaire_store.answer_store,
            self._questionnaire_store.list_store,
            self._questionnaire_store.progress_store,
            self._questionnaire_store.metadata,
            self._questionnaire_store.response_metadata,
            self._routing_path,
            self.current_location,
        )
        return section_summary_context()

    def get_next_location_url(self):
        return self._router.get_next_location_url_for_end_of_section()

    def get_previous_location_url(self):
        return self._router.get_last_location_in_section(self._routing_path).url()

    def get_resume_url(self):
        return self._router.get_section_resume_url(self._routing_path)

    def can_display_summary(self):
        return self._router.can_display_section_summary(
            self._section_id, self._list_item_id
        )

    def _is_valid_location(self):
        return self._section_id in self._router.enabled_section_ids
    def test_is_path_not_complete(self):
        schema = load_schema_from_name("test_textfield")

        router = Router(
            schema,
            self.answer_store,
            self.list_store,
            self.progress_store,
            self.metadata,
        )

        routing_path = router.routing_path(section_id="default-section")

        is_path_complete = router.is_path_complete(routing_path)

        self.assertFalse(is_path_complete)
    def test_is_path_complete(self):
        schema = load_schema_from_name("test_textfield")
        progress_store = ProgressStore([{
            "section_id": "default-section",
            "list_item_id": None,
            "status": CompletionStatus.IN_PROGRESS,
            "block_ids": ["name-block"],
        }])

        router = Router(schema, self.answer_store, self.list_store,
                        progress_store, self.metadata)

        routing_path = router.routing_path(section_id="default-section")

        is_path_complete = router.is_path_complete(routing_path)

        self.assertTrue(is_path_complete)