示例#1
0
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))
示例#2
0
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))
示例#3
0
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))
示例#4
0
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))
示例#5
0
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)
示例#6
0
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))
示例#7
0
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