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, ) 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 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, ) return section_summary_context(self.current_location) def get_next_location_url(self): if self._schema.is_hub_enabled(): return url_for(".get_questionnaire") return self._router.get_first_incomplete_location_in_survey_url() 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 get_questionnaire(schema, questionnaire_store): router = Router( schema, questionnaire_store.answer_store, questionnaire_store.list_store, questionnaire_store.progress_store, questionnaire_store.metadata, ) if not router.can_access_hub(): redirect_location_url = router.get_first_incomplete_location_in_survey_url( ) return redirect(redirect_location_url) if request.method == "POST": if router.is_survey_complete(): submission_handler = SubmissionHandler(schema, questionnaire_store, router.full_routing_path()) submission_handler.submit_questionnaire() return redirect(url_for("post_submission.get_thank_you")) return redirect(router.get_first_incomplete_location_in_survey_url()) language_code = get_session_store().session_data.language_code hub = HubContext( language=language_code, schema=schema, answer_store=questionnaire_store.answer_store, list_store=questionnaire_store.list_store, progress_store=questionnaire_store.progress_store, metadata=questionnaire_store.metadata, ) hub_context = hub.get_context(router.is_survey_complete(), router.enabled_section_ids) return render_template("hub", content=hub_context, page_title=hub_context["title"])