def build_collection_exercise_details(short_name, period): survey = survey_controllers.get_survey_by_shortname(short_name) survey_id = survey["id"] exercises = collection_exercise_controllers.get_collection_exercises_by_survey(survey_id) exercise = get_collection_exercise_by_period(exercises, period) if not exercise: logger.error("Failed to find collection exercise by period", short_name=short_name, period=period) abort(404) collection_exercise_id = exercise["id"] survey["shortName"] = format_short_name(survey["shortName"]) full_exercise = collection_exercise_controllers.get_collection_exercise_by_id(collection_exercise_id) exercise_events = collection_exercise_controllers.get_collection_exercise_events_by_id(collection_exercise_id) collection_instruments = collection_instrument_controllers.get_collection_instruments_by_classifier( collection_exercise_id=collection_exercise_id, survey_id=survey_id ) eq_ci_selectors = collection_instrument_controllers.get_collection_instruments_by_classifier( ci_type="EQ", survey_id=survey_id ) summary_id = collection_exercise_controllers.get_linked_sample_summary_id(collection_exercise_id) sample_summary = sample_controllers.get_sample_summary(summary_id) if summary_id else None ci_classifiers = survey_controllers.get_survey_ci_classifier(survey_id) return { "survey": survey, "collection_exercise": full_exercise, "events": convert_events_to_new_format(exercise_events), "collection_instruments": collection_instruments, "eq_ci_selectors": eq_ci_selectors, "sample_summary": _format_sample_summary(sample_summary), "ci_classifiers": ci_classifiers, }
def get_response_statuses(ru_ref, error=None): logger.info("Retrieving response statuses", ru_ref=ru_ref) short_name = request.args.get("survey") period = request.args.get("period") completed_respondent = "" survey = survey_controllers.get_survey_by_shortname(short_name) exercises = collection_exercise_controllers.get_collection_exercises_by_survey( survey["id"]) exercise = collection_exercise_controllers.get_collection_exercise_from_list( exercises, period) reporting_unit = party_controller.get_business_by_ru_ref(ru_ref) statuses = case_controller.get_available_case_group_statuses_direct( exercise["id"], ru_ref) available_statuses = { event: map_ce_response_status(status) for event, status in statuses.items() if case_controller.is_allowed_status(status) } case_groups = case_controller.get_case_groups_by_business_party_id( reporting_unit["id"]) case_group = case_controller.get_case_group_by_collection_exercise( case_groups, exercise["id"]) case_group_status = case_group["caseGroupStatus"] case_id = get_case_by_case_group_id(case_group["id"]).get("id") is_complete = case_group_status in COMPLETE_STATE completed_timestamp = get_timestamp_for_completed_case_event( case_id) if is_complete else None case_events = get_case_events_by_case_id(case_id=case_id) if case_group_status == "COMPLETE": case_event = get_case_event_for_seft_or_eq(case_events) completed_respondent = get_user_from_case_events(case_event) return render_template( "response-status.html", ru_ref=ru_ref, ru_name=reporting_unit["name"], trading_as=reporting_unit["trading_as"], survey_short_name=format_short_name(survey["shortName"]), survey_ref=survey["surveyRef"], ce_period=period, statuses=available_statuses, case_group_status=map_ce_response_status(case_group_status), case_group_id=case_group["id"], error=error, is_complete=is_complete, completed_timestamp=completed_timestamp, completed_respondent=completed_respondent, )
def get_survey(short_name): survey = get_survey_by_shortname(short_name) logger.info('Getting survey details', short_name=short_name, survey_id=survey['id']) # Format survey shortName survey['shortName'] = format_short_name(survey['shortName']) logger.info('Successfully retrieved survey details', short_name=short_name, survey_id=survey['id']) return survey
def get_survey(short_name: str) -> dict: survey = get_survey_by_shortname(short_name) logger.info("Getting survey details", short_name=short_name, survey_id=survey["id"]) # Format survey shortName survey["shortName"] = format_short_name(survey["shortName"]) logger.info("Successfully retrieved survey details", short_name=short_name, survey_id=survey["id"]) return survey
def get_surveys_list(): logger.info('Retrieving surveys list') url = f'{app.config["SURVEY_URL"]}/surveys/surveytype/Business' response = requests.get(url, auth=app.config['SURVEY_AUTH']) if response.status_code == 204: logger.info('No surveys found in survey service') return [] try: response.raise_for_status() except HTTPError: logger.error('Error retrieving the survey list') raise ApiError(response) logger.info('Successfully retrieved surveys list') survey_list = response.json() # Format survey shortName for survey in survey_list: survey['shortName'] = format_short_name(survey['shortName']) # Order List by surveyRef return sorted(survey_list, key=lambda k: k['surveyRef'])
def view_selected_survey(selected_survey): # noqa: C901 displayed_short_name = format_short_name(selected_survey) session['messages_survey_selection'] = selected_survey breadcrumbs = [{"text": displayed_short_name + " Messages"}] try: if selected_survey == 'FDI': survey_id = _get_FDI_survey_id() elif selected_survey == 'Vacancies': survey_id = _get_vacancies_survey_ids() else: survey_id = _get_survey_id(selected_survey) page = request.args.get('page', default=1, type=int) limit = request.args.get('limit', default=10, type=int) flash_message = request.args.get('flash_message', default="", type=str) conversation_tab = request.args.get('conversation_tab', default='open') ru_ref_filter = request.args.get('ru_ref_filter', default='') business_id_filter = request.args.get('business_id_filter', default='') form = SecureMessageRuFilterForm() if form.validate_on_submit(): new_ru_ref = form.ru_ref_filter.data if new_ru_ref and new_ru_ref != ru_ref_filter: business_id_filter, ru_resolution_error = _try_get_party_id_from_filter_ru( new_ru_ref) if business_id_filter: ru_ref_filter = new_ru_ref else: ru_ref_filter = '' flash_message = ru_resolution_error form.ru_ref_filter.data = ru_ref_filter tab_counts = _get_tab_counts(business_id_filter, conversation_tab, ru_ref_filter, survey_id) recalculated_page = _calculate_page(page, limit, tab_counts['current']) if recalculated_page != page: return redirect( url_for("messages_bp.view_selected_survey", conversation_tab=conversation_tab, selected_survey=selected_survey, page=recalculated_page, ru_ref_filter=ru_ref_filter, business_id_filter=business_id_filter)) messages = [ _refine(message) for message in message_controllers.get_thread_list( survey_id, business_id_filter, conversation_tab, page, limit) ] pagination = Pagination(page=page, per_page=limit, total=tab_counts['current'], record_name='messages', prev_label='Previous', next_label='Next', outer_window=0, format_total=True, format_number=True, show_single_page=False) if flash_message: flash(flash_message) return render_template("messages.html", form=form, page=page, breadcrumbs=breadcrumbs, messages=messages, selected_survey=selected_survey, displayed_short_name=displayed_short_name, pagination=pagination, change_survey=True, conversation_tab=conversation_tab, business_id_filter=business_id_filter, ru_ref_filter=ru_ref_filter, tab_titles=_get_tab_titles( tab_counts, ru_ref_filter)) except TypeError: logger.error("Failed to retrieve survey id", exc_info=True) return render_template("messages.html", form=form, breadcrumbs=breadcrumbs, selected_survey=selected_survey, displayed_short_name=displayed_short_name, response_error=True, tab_titles=_get_tab_titles()) except NoMessagesError: logger.error("Failed to retrieve messages", exc_info=True) return render_template("messages.html", form=form, breadcrumbs=breadcrumbs, response_error=True, selected_survey=selected_survey, displayed_short_name=displayed_short_name, tab_titles=_get_tab_titles())
def test_format_shortname(self): from response_operations_ui.common.mappers import format_short_name self.assertEqual(format_short_name('QBS'), 'QBS') self.assertEqual(format_short_name('Sand&Gravel'), 'Sand & Gravel')
def view_selected_survey(selected_survey): # noqa: C901 displayed_short_name = format_short_name(selected_survey) session["messages_survey_selection"] = selected_survey breadcrumbs = [{"text": displayed_short_name + " Messages"}] page = request.args.get("page", default=1, type=int) limit = request.args.get("limit", default=10, type=int) conversation_tab = request.args.get("conversation_tab", default="open") ru_ref_filter = request.args.get("ru_ref_filter", default="") business_id_filter = request.args.get("business_id_filter", default="") category = "SURVEY" try: if selected_survey == "FDI": survey_id = _get_FDI_survey_id() elif selected_survey == "Vacancies": survey_id = _get_vacancies_survey_ids() else: survey_id = _get_survey_id(selected_survey) form = SecureMessageRuFilterForm() if form.validate_on_submit(): new_ru_ref = form.ru_ref_filter.data if new_ru_ref and new_ru_ref != ru_ref_filter: business_id_filter, ru_resolution_error = _try_get_party_id_from_filter_ru(new_ru_ref) if business_id_filter: ru_ref_filter = new_ru_ref else: ru_ref_filter = "" flash(ru_resolution_error) form.ru_ref_filter.data = ru_ref_filter tab_counts = _get_tab_counts(business_id_filter, conversation_tab, ru_ref_filter, survey_id, category) # If the page is higher then possible, redirect users to the highest possible page. recalculated_page = _verify_requested_page_is_within_bounds(page, limit, tab_counts["current"]) if recalculated_page != page: return redirect( url_for( "messages_bp.view_selected_survey", conversation_tab=conversation_tab, selected_survey=selected_survey, page=recalculated_page, ru_ref_filter=ru_ref_filter, business_id_filter=business_id_filter, ) ) messages = [ _refine(message) for message in message_controllers.get_thread_list( survey_id, business_id_filter, conversation_tab, page, limit, category ) ] pagination = _get_pagination_object(page, limit, tab_counts) return render_template( "messages.html", form=form, page=page, breadcrumbs=breadcrumbs, messages=messages, selected_survey=selected_survey, displayed_short_name=displayed_short_name, pagination=pagination, change_survey=True, conversation_tab=conversation_tab, business_id_filter=business_id_filter, ru_ref_filter=ru_ref_filter, tab_titles=_get_tab_titles(tab_counts, ru_ref_filter), ) except (TypeError, KeyError): logger.error("Failed to retrieve messages", exc_info=True) return render_template( "messages.html", form=form, breadcrumbs=breadcrumbs, selected_survey=selected_survey, displayed_short_name=displayed_short_name, response_error=True, tab_titles=_get_tab_titles(), )
def test_format_shortname(self): from response_operations_ui.common.mappers import format_short_name self.assertEqual(format_short_name("QBS"), "QBS") self.assertEqual(format_short_name("Sand&Gravel"), "Sand & Gravel")