def post_household_composition(eq_id, form_type, collection_id, group_id): questionnaire_manager = get_questionnaire_manager(g.schema, g.schema_json) answer_store = get_answer_store(current_user) this_location = Location(group_id, group_instance=0, block_id='household-composition') if 'action[save_continue]' in request.form: _remove_repeating_on_household_answers(answer_store, group_id) valid = questionnaire_manager.process_incoming_answers(this_location, post_data=request.form) if 'action[add_answer]' in request.form: questionnaire_manager.add_answer(this_location, answer_store, question_id='household-composition-question') return get_block(eq_id, form_type, collection_id, group_id, group_instance=0, block_id='household-composition') elif 'action[remove_answer]' in request.form: index_to_remove = int(request.form.get('action[remove_answer]')) questionnaire_manager.remove_answer(this_location, answer_store, index_to_remove) return get_block(eq_id, form_type, collection_id, group_id, group_instance=0, block_id='household-composition') elif 'action[save_sign_out]' in request.form: return _save_sign_out(collection_id, eq_id, form_type, questionnaire_manager, this_location) if not valid: _render_schema(this_location) return _build_template(current_location=this_location, context=questionnaire_manager.block_state, template='questionnaire') path_finder = PathFinder(g.schema_json, get_answer_store(current_user), get_metadata(current_user)) next_location = path_finder.get_next_location(current_location=this_location) metadata = get_metadata(current_user) return redirect(next_location.url(metadata))
def post_block(eq_id, form_type, collection_id, group_id, group_instance, block_id): path_finder = PathFinder(g.schema_json, get_answer_store(current_user), get_metadata(current_user)) q_manager = get_questionnaire_manager(g.schema, g.schema_json) this_location = Location(group_id, group_instance, block_id) if 'action[save_sign_out]' in request.form: return _save_sign_out(collection_id, eq_id, form_type, q_manager, this_location) valid_location = this_location in path_finder.get_routing_path(group_id, group_instance) valid_data = q_manager.validate(this_location, request.form) if not valid_location or not valid_data: current_location = Location(group_id, group_instance, block_id) _render_schema(current_location) return _build_template(current_location, q_manager.block_state, template='questionnaire') else: q_manager.update_questionnaire_store(this_location) next_location = path_finder.get_next_location(current_location=this_location) if next_location is None: raise NotFound metadata = get_metadata(current_user) return redirect(next_location.url(metadata))
def submit_answers(eq_id, form_type, collection_id): q_manager = get_questionnaire_manager(g.schema, g.schema_json) # check that all the answers we have are valid before submitting the data is_valid, invalid_location = q_manager.validate_all_answers() metadata = get_metadata(current_user) if is_valid: answer_store = get_answer_store(current_user) path_finder = PathFinder(g.schema_json, answer_store, metadata) submitter = SubmitterFactory.get_submitter() message = convert_answers(metadata, g.schema, answer_store, path_finder.get_routing_path()) submitter.send_answers(message, queue=settings.EQ_RABBITMQ_QUEUE_NAME) logger.info("Responses submitted tx_id=%s", metadata["tx_id"]) return redirect(url_for('.get_thank_you', eq_id=eq_id, form_type=form_type, collection_id=collection_id)) else: return redirect(invalid_location.url(metadata))
def get_confirmation(eq_id, form_type, collection_id): # pylint: disable=unused-argument answer_store = get_answer_store(current_user) path_finder = PathFinder(g.schema_json, answer_store, get_metadata(current_user)) latest_location = path_finder.get_latest_location(get_completed_blocks(current_user)) if latest_location.block_id == 'confirmation': q_manager = get_questionnaire_manager(g.schema, g.schema_json) q_manager.build_block_state(latest_location, answer_store) _render_schema(latest_location) return _build_template(current_location=latest_location, context=q_manager.block_state) metadata = get_metadata(current_user) return redirect(latest_location.url(metadata))
def get_block(eq_id, form_type, collection_id, group_id, group_instance, block_id): # pylint: disable=unused-argument # Filter answers down to those we may need to render answer_store = get_answer_store(current_user) answers = answer_store.map(group_id=group_id, group_instance=group_instance, block_id=block_id) this_location = Location(group_id, group_instance, block_id) q_manager = get_questionnaire_manager(g.schema, g.schema_json) q_manager.build_block_state(this_location, answers) # Find block by id block = g.schema.get_item_by_id(block_id) # pylint: disable=maybe-no-member template = block.type if block and block.type else 'questionnaire' current_location = Location(group_id, group_instance, block_id) _render_schema(current_location) return _build_template(current_location, q_manager.block_state, template)
def post_interstitial(eq_id, form_type, collection_id, block_id): # pylint: disable=unused-argument path_finder = PathFinder(g.schema_json, get_answer_store(current_user), get_metadata(current_user)) q_manager = get_questionnaire_manager(g.schema, g.schema_json) this_location = Location(SchemaHelper.get_first_group_id(g.schema_json), group_instance=0, block_id=block_id) q_manager.update_questionnaire_store(this_location) # Don't care if data is valid because there isn't any for interstitial if this_location not in path_finder.get_location_path(): _render_schema(this_location) return _build_template(current_location=this_location, context=q_manager.block_state, template='questionnaire') next_location = path_finder.get_next_location(current_location=this_location) if next_location is None: raise NotFound metadata = get_metadata(current_user) logger.info("Redirecting user to next location %s with tx_id=%s", str(next_location), metadata["tx_id"]) return redirect(next_location.url(metadata))
def get_sign_out(eq_id, form_type, collection_id): # pylint: disable=unused-argument signed_out_page = _render_template(get_questionnaire_manager(g.schema, g.schema_json), block_id='signed-out') session_storage.clear() return signed_out_page