def edit_contact_details(respondent_id): edit_contact_details_form = EditContactDetailsForm(form=request.form) if not edit_contact_details_form.validate(): contact_details = party_controller.get_respondent_by_party_id( respondent_id) return render_template('edit-contact-details.html', form=edit_contact_details_form, tab='respondents', respondent_id=respondent_id, errors=edit_contact_details_form.errors, respondent_details=contact_details) logger.info('Updating respondent details', respondent_id=respondent_id) form = request.form contact_details_changed = party_controller.update_contact_details( respondent_id, form) if 'emailAddress' in contact_details_changed: flash( f'Contact details changed and verification email sent to {form.get("email")}' ) elif len(contact_details_changed) > 0: flash('Contact details changed') else: flash('No updates were necessary') return redirect( url_for('respondent_bp.respondent_details', respondent_id=respondent_id, message_key='details_changed'))
def edit_contact_details(ru_ref, respondent_id): edit_contact_details_form = EditContactDetailsForm(form=request.form) if not edit_contact_details_form.validate(): contact_details = party_controller.get_respondent_by_party_id(respondent_id) return render_template( "edit-contact-details.html", form=edit_contact_details_form, tab="reporting_units", ru_ref=ru_ref, respondent_id=respondent_id, errors=edit_contact_details_form.errors, respondent_details=contact_details, ) logger.info("Updating respondent details", ru_ref=ru_ref, respondent_id=respondent_id) form = request.form contact_details_changed = party_controller.update_contact_details(respondent_id, form, ru_ref) if "emailAddress" in contact_details_changed: flash(f'Contact details changed and verification email sent to {form.get("email")}') elif len(contact_details_changed) > 0: flash("Contact details changed") else: flash("No updates were necessary") return redirect(url_for("reporting_unit_bp.view_reporting_unit", ru_ref=ru_ref))
def undo_delete_respondent(respondent_id): respondent = party_controller.get_respondent_by_party_id(respondent_id) if request.method == 'POST': respondent_controllers.undo_delete_respondent_account_by_username( respondent['emailAddress']) flash('The respondent’s account has been reactivated.', 'success') return redirect( url_for( 'respondent_bp.respondent_details', respondent_id=respondent_id, )) breadcrumbs = [{ "url": '/respondents', "text": 'Respondents' }, { "text": f"{respondent['emailAddress']}", "url": f"/respondents/respondent-details/{respondent_id}" }, { "text": 'Cancel Delete' }, {}] return render_template('delete-respondent.html', respondent_details=respondent, delete=False, breadcrumbs=breadcrumbs)
def respondent_details(respondent_id): respondent = party_controller.get_respondent_by_party_id(respondent_id) enrolments = party_controller.get_respondent_enrolments(respondent) breadcrumbs = [{ "text": "Respondents", "url": "/respondents" }, { "text": f"{respondent['emailAddress']}" }] respondent['status'] = respondent['status'].title() info = request.args.get('info') if request.args.get('enrolment_changed'): flash('Enrolment status changed', 'information') if request.args.get('account_status_changed'): flash('Account status changed', 'information') elif info: flash(info, 'information') return render_template('respondent.html', respondent=respondent, enrolments=enrolments, breadcrumbs=breadcrumbs)
def get_respondent_enrolments_from_thread(thread: dict) -> list[dict]: if thread["messages"][0]["from_internal"]: party_id = thread["messages"][0]["msg_to"][0] else: party_id = thread["messages"][0]["msg_from"] respondent = party_controller.get_respondent_by_party_id(party_id) enrolments = party_controller.get_respondent_enrolments(respondent) reporting_units = [enrolment["business"] for enrolment in enrolments] return reporting_units
def confirm_change_respondent_status(party_id): respondent = party_controller.get_respondent_by_party_id(party_id) return render_template('confirm-respondent-status-change.html', respondent_id=respondent['id'], first_name=respondent['firstName'], last_name=respondent['lastName'], email_address=respondent['emailAddress'], change_flag=request.args['change_flag'], tab='respondents')
def confirm_change_respondent_status(ru_ref): respondent = get_respondent_by_party_id(request.args['party_id']) return render_template('confirm-respondent-status-change.html', ru_ref=ru_ref, respondent_id=respondent['id'], first_name=respondent['firstName'], last_name=respondent['lastName'], email_address=respondent['emailAddress'], change_flag=request.args['change_flag'], tab=request.args['tab'])
def get_user_from_case_events(case_events): first_case_event = len(case_events) - 1 if case_events[first_case_event]['metadata']: try: respondent = get_respondent_by_party_id(case_events[first_case_event]['metadata']['partyId']) except KeyError: logger.info('There was no partyId in case event', case_event=case_events[first_case_event]) return '' respondent_name = respondent.get('firstName') + ' ' + respondent.get('lastName') return respondent_name else: return ''
def confirm_change_respondent_status(ru_ref): respondent = party_controller.get_respondent_by_party_id(request.args["party_id"]) return render_template( "confirm-respondent-status-change.html", ru_ref=ru_ref, respondent_id=respondent["id"], first_name=respondent["firstName"], last_name=respondent["lastName"], email_address=respondent["emailAddress"], change_flag=request.args["change_flag"], tab=request.args["tab"], )
def view_contact_details(ru_ref, respondent_id): respondent_details = party_controller.get_respondent_by_party_id(respondent_id) form = EditContactDetailsForm(form=request.form, default_values=respondent_details) return render_template( "edit-contact-details.html", ru_ref=ru_ref, respondent_details=respondent_details, form=form, tab="reporting_units", )
def view_resend_verification(respondent_id): logger.info("Re-send verification email requested", respondent_id=respondent_id) respondent = party_controller.get_respondent_by_party_id(respondent_id) email = respondent[ 'pendingEmailAddress'] if 'pendingEmailAddress' in respondent else respondent[ 'emailAddress'] return render_template('re-send-verification-email.html', respondent_id=respondent_id, email=email, tab='respondents')
def view_contact_details(respondent_id): respondent_details = party_controller.get_respondent_by_party_id( respondent_id) form = EditContactDetailsForm(form=request.form, default_values=respondent_details) return render_template('edit-contact-details.html', respondent_details=respondent_details, form=form, tab='respondents', respondent_id=respondent_id)
def get_user_from_case_events(case_events): first_case_event = len(case_events) - 1 if case_events[first_case_event]['metadata']: try: respondent = get_respondent_by_party_id( case_events[first_case_event]['metadata']['partyId']) except KeyError: logger.info('There was no partyId in case event', case_event=case_events[first_case_event]) return '' if not respondent: return 'Respondent does not exists in the system. This may be due to the GDPR retention policy.' return respondent.get('firstName') + ' ' + respondent.get('lastName') else: return ''
def get_user_from_case_events(case_events): first_case_event = len(case_events) - 1 if case_events[first_case_event]["metadata"]: try: respondent = get_respondent_by_party_id( case_events[first_case_event]["metadata"]["partyId"]) except KeyError: logger.info("There was no partyId in case event", case_event=case_events[first_case_event]) return "" if not respondent: return "Respondent does not exists in the system. This may be due to the GDPR retention policy." return respondent.get("firstName") + " " + respondent.get("lastName") else: return ""
def delete_respondent(respondent_id): respondent = party_controller.get_respondent_by_party_id(respondent_id) if request.method == 'POST': respondent_controllers.delete_respondent_account_by_username( respondent['emailAddress']) return redirect( url_for('respondent_bp.respondent_home', success_panel='The account is pending deletion ' 'and will be deleted by the end the day.')) breadcrumbs = [{ "url": '/respondents', "text": 'Respondents' }, { "text": f"{respondent['emailAddress']}", "url": f"/respondents/respondent-details/{respondent_id}" }, { "text": 'Delete' }, {}] return render_template('delete-respondent.html', respondent_details=respondent, delete=True, breadcrumbs=breadcrumbs)
def view_reporting_unit(ru_ref): logger.info("Gathering data to view reporting unit", ru_ref=ru_ref) # Make some initial calls to retrieve some data we'll need reporting_unit = party_controller.get_party_by_ru_ref(ru_ref) cases = case_controller.get_cases_by_business_party_id( reporting_unit['id']) case_groups = case_controller.get_case_groups_by_business_party_id( reporting_unit['id']) # Get all collection exercises for retrieved case groups collection_exercise_ids = { case_group['collectionExerciseId'] for case_group in case_groups } collection_exercises = [ get_collection_exercise_by_id(ce_id) for ce_id in collection_exercise_ids ] # Add extra collection exercise details and filter by live date now = datetime.now(timezone.utc) live_collection_exercises = [ add_collection_exercise_details(ce, reporting_unit, case_groups) for ce in collection_exercises if parse_date(ce['scheduledStartDateTime']) < now ] # Get all related surveys for gathered collection exercises survey_ids = { collection_exercise['surveyId'] for collection_exercise in live_collection_exercises } surveys = [get_survey_by_id(survey_id) for survey_id in survey_ids] # Get all respondents for the given ru respondents = [ party_controller.get_respondent_by_party_id(respondent['partyId']) for respondent in reporting_unit.get('associations') ] # Link collection exercises and respondents to appropriate surveys linked_surveys = [ survey_with_respondents_and_exercises(survey, respondents, live_collection_exercises, ru_ref) for survey in surveys ] sorted_linked_surveys = sorted(linked_surveys, key=lambda survey: survey['surveyRef']) # Add latest active iac code to surveys surveys_with_latest_case = [{ **survey, "case": get_latest_case_with_ce(cases, survey['collection_exercises']) } for survey in sorted_linked_surveys] # Generate appropriate info message is necessary # TODO Standardise how the info messages are generated survey_arg = request.args.get('survey') period_arg = request.args.get('period') if survey_arg and period_arg: survey = next( filter(lambda s: s['shortName'] == survey_arg, sorted_linked_surveys)) collection_exercise = next( filter(lambda s: s['exerciseRef'] == period_arg, survey['collection_exercises'])) new_status = collection_exercise['responseStatus'] flash( f'Response status for {survey["surveyRef"]} {survey["shortName"]}' f' period {period_arg} changed to {new_status}') info = request.args.get('info') if request.args.get('enrolment_changed'): flash('Enrolment status changed', 'information') if request.args.get('account_status_changed'): flash('Account status changed', 'information') elif info: flash(info, 'information') breadcrumbs = [{ "text": "Reporting units", "url": "/reporting-units" }, { "text": f"{ru_ref}" }] logger.info("Successfully gathered data to view reporting unit", ru_ref=ru_ref) return render_template('reporting-unit.html', ru_ref=ru_ref, ru=reporting_unit, surveys=surveys_with_latest_case, breadcrumbs=breadcrumbs)
def view_resend_verification(ru_ref, party_id): logger.info("Re-send verification email requested", ru_ref=ru_ref, party_id=party_id) respondent = party_controller.get_respondent_by_party_id(party_id) email = respondent["pendingEmailAddress"] if "pendingEmailAddress" in respondent else respondent["emailAddress"] return render_template("re-send-verification-email.html", ru_ref=ru_ref, email=email, tab="reporting_units")