def validate_update_row_params(rqst_body, validated_params, rqst_errors):
    if "question" in rqst_body:
        validated_params[
            "rqst_specific_concern_question"] = clean_string_value_from_dict_object(
                rqst_body, "root", "question", rqst_errors)

    if "research_weight" in rqst_body:
        rqst_specific_concern_research_weight = clean_int_value_from_dict_object(
            rqst_body,
            "root",
            "research_weight",
            rqst_errors,
            no_key_allowed=True)
        if not rqst_specific_concern_research_weight:
            rqst_specific_concern_research_weight = ConsumerSpecificConcern.RESEARCH_WEIGHT_DEFAULT
        elif rqst_specific_concern_research_weight > 100:
            rqst_errors.append(
                "Value for 'research_weight' must be less than 100. Given value is: {}"
                .format(rqst_specific_concern_research_weight))
        validated_params[
            "rqst_specific_concern_research_weight"] = rqst_specific_concern_research_weight

    if "add_related_general_concerns" in rqst_body:
        rqst_add_related_general_concerns_names = clean_list_value_from_dict_object(
            rqst_body,
            "root",
            "add_related_general_concerns",
            rqst_errors,
        )
        add_related_general_concerns_objects = []
        if rqst_add_related_general_concerns_names:
            validate_related_gen_concern_names(
                rqst_add_related_general_concerns_names, rqst_errors)

            if not rqst_errors:
                add_related_general_concerns_objects = ConsumerGeneralConcern.retrieve_related_gen_concern_rows_by_name(
                    rqst_add_related_general_concerns_names, rqst_errors)
        validated_params[
            "add_related_general_concerns_objects"] = add_related_general_concerns_objects
    elif "remove_related_general_concerns" in rqst_body:
        rqst_remove_related_general_concerns_names = clean_list_value_from_dict_object(
            rqst_body,
            "root",
            "remove_related_general_concerns",
            rqst_errors,
        )
        remove_related_general_concerns_objects = []
        if rqst_remove_related_general_concerns_names:
            validate_related_gen_concern_names(
                rqst_remove_related_general_concerns_names, rqst_errors)

            if not rqst_errors:
                remove_related_general_concerns_objects = ConsumerGeneralConcern.retrieve_related_gen_concern_rows_by_name(
                    rqst_remove_related_general_concerns_names, rqst_errors)
        validated_params[
            "remove_related_general_concerns_objects"] = remove_related_general_concerns_objects
Пример #2
0
def validate_create_resume_row_params(resume_row_params, rqst_errors):
    validated_resume_row_params = {
        'profile_description': clean_string_value_from_dict_object(
            resume_row_params,
            "create_resume_row",
            "profile_description",
            rqst_errors,
            empty_string_allowed=True,
            none_allowed=True
        ),
    }

    if "create_education_rows" in resume_row_params:
        education_row_params = clean_list_value_from_dict_object(
            resume_row_params,
            "create_resume_row",
            "create_education_rows",
            rqst_errors,
            empty_list_allowed=True
        )

        validated_education_row_params = []
        if education_row_params:
            for education_row_index, education_row_dict in enumerate(education_row_params):
                validated_education_row_dict = validate_create_education_row_params(
                    education_row_dict,
                    education_row_index,
                    rqst_errors
                )
                validated_education_row_params.append(validated_education_row_dict)

            validated_resume_row_params['create_education_rows'] = validated_education_row_params

    if "create_job_rows" in resume_row_params:
        job_row_params = clean_list_value_from_dict_object(
            resume_row_params,
            "create_resume_row",
            "create_job_rows",
            rqst_errors,
            empty_list_allowed=True
        )

        validated_job_row_params = []
        if job_row_params:
            for job_row_index, job_row_dict in enumerate(job_row_params):
                validated_job_row_dict = validate_create_job_row_params(
                    job_row_dict,
                    job_row_index,
                    rqst_errors
                )
                validated_job_row_params.append(validated_job_row_dict)

            validated_resume_row_params['create_job_rows'] = validated_job_row_params

    return validated_resume_row_params
def validate_update_row_params(rqst_body, validated_params, rqst_errors):
    if "name" in rqst_body:
        rqst_provider_location_name = clean_string_value_from_dict_object(
            rqst_body, "root", "name", rqst_errors)
        validated_params["name"] = rqst_provider_location_name

    if 'state_province' in rqst_body:
        state_province = clean_string_value_from_dict_object(
            rqst_body,
            "root",
            "state_province",
            rqst_errors,
            none_allowed=True,
            empty_string_allowed=True)
        if not state_province:
            state_province = 'not available'
        validated_params["state_province"] = state_province

    if "provider_network_id" in rqst_body:
        rqst_provider_network_id = clean_int_value_from_dict_object(
            rqst_body,
            "root",
            "provider_network_id",
            rqst_errors,
            none_allowed=True)
        validated_params["provider_network_id"] = rqst_provider_network_id

    if "add_accepted_plans" in rqst_body:
        rqst_add_accepted_plans_ids = clean_list_value_from_dict_object(
            rqst_body,
            "root",
            "add_accepted_plans",
            rqst_errors,
        )

        if rqst_add_accepted_plans_ids:
            add_accepted_plan_objects = validate_accepted_plans_params(
                rqst_add_accepted_plans_ids, rqst_errors)
            validated_params[
                "add_accepted_plans_objects"] = add_accepted_plan_objects
    elif "remove_accepted_plans" in rqst_body:
        rqst_remove_accepted_plans_ids = clean_list_value_from_dict_object(
            rqst_body,
            "root",
            "remove_accepted_plans",
            rqst_errors,
        )

        if rqst_remove_accepted_plans_ids:
            remove_accepted_plan_objects = validate_accepted_plans_params(
                rqst_remove_accepted_plans_ids, rqst_errors)
            validated_params[
                "remove_accepted_plans_objects"] = remove_accepted_plan_objects
Пример #4
0
    def available_nav_appointments_logic(self, rqst_body, response_raw_data,
                                         rqst_errors):
        response_raw_data["Data"] = {}
        response_raw_data["Data"]["Next Available Appointments"] = []
        response_raw_data["Data"]["Preferred Appointments"] = []

        rqst_preferred_times = clean_list_value_from_dict_object(
            rqst_body,
            "root",
            "Preferred Times",
            rqst_errors,
            empty_list_allowed=True)

        valid_rqst_preferred_times_timestamps = []
        for preferred_time_iso_string in rqst_preferred_times:
            if isinstance(preferred_time_iso_string, str):
                try:
                    valid_rqst_preferred_times_timestamps.append(
                        dateutil.parser.parse(preferred_time_iso_string))
                except ValueError:
                    pass

        if valid_rqst_preferred_times_timestamps:
            response_raw_data["Data"][
                "Preferred Appointments"] = get_preferred_nav_apts(
                    rqst_preferred_times,
                    valid_rqst_preferred_times_timestamps, rqst_errors)
        else:
            response_raw_data["Data"][
                "Next Available Appointments"] = get_next_available_nav_apts(
                    rqst_errors)
def validate_update_row_params(rqst_body, validated_params, rqst_errors):
    if "name" in rqst_body:
        rqst_name = clean_string_value_from_dict_object(
            rqst_body, "root", "name", rqst_errors, empty_string_allowed=True)
        validated_params["name"] = rqst_name

    if 'add_steps' in rqst_body:
        add_cm_steps = clean_list_value_from_dict_object(
            rqst_body,
            "root",
            "add_steps",
            rqst_errors,
            empty_list_allowed=True)

        validated_cm_steps = []
        for step_id in add_cm_steps:
            if not isinstance(step_id, int):
                rqst_errors.append(
                    'Error: An step_id in \'add_steps\' is not an integer.')
                continue

            validated_cm_steps.append(step_id)

        validated_params['add_steps'] = validated_cm_steps
    elif 'remove_steps' in rqst_body:
        remove_cm_steps = clean_list_value_from_dict_object(
            rqst_body, "root", "remove_steps", rqst_errors)

        validated_cm_steps = []
        for step_id in remove_cm_steps:
            if not isinstance(step_id, int):
                rqst_errors.append(
                    'Error: An step_id in \'remove_steps\' is not an integer.')
                continue

            validated_cm_steps.append(step_id)

        validated_params['remove_steps'] = validated_cm_steps
def validate_add_staff_params(rqst_body, validated_params, rqst_errors):
    rqst_usr_email = clean_string_value_from_dict_object(
        rqst_body, "root", "email", rqst_errors)
    if rqst_usr_email and not rqst_errors:
        try:
            validate_email(rqst_usr_email)
        except forms.ValidationError:
            rqst_errors.append(
                "{!s} must be a valid email address".format(rqst_usr_email))

    rqst_usr_f_name = clean_string_value_from_dict_object(
        rqst_body, "root", "first_name", rqst_errors)
    rqst_usr_l_name = clean_string_value_from_dict_object(
        rqst_body, "root", "last_name", rqst_errors)
    rqst_county = clean_string_value_from_dict_object(rqst_body, "root",
                                                      "county", rqst_errors)
    rqst_usr_type = clean_string_value_from_dict_object(
        rqst_body, "root", "type", rqst_errors)
    rqst_base_locations = clean_list_value_from_dict_object(
        rqst_body,
        "root",
        "base_locations",
        rqst_errors,
        empty_list_allowed=True)

    base_location_objects = []
    location_errors = []
    if rqst_base_locations:
        rqst_base_locations = list(set(rqst_base_locations))
        for base_location_name in rqst_base_locations:
            try:
                base_location_object = NavMetricsLocation.objects.get(
                    name=base_location_name)
                base_location_objects.append(base_location_object)
            except NavMetricsLocation.DoesNotExist:
                location_errors.append(
                    "No Nav Hub Location Database entry found for name: {!s}".
                    format(base_location_name))
    for location_error in location_errors:
        rqst_errors.append(location_error)

    validated_params["rqst_usr_email"] = rqst_usr_email
    validated_params["rqst_usr_f_name"] = rqst_usr_f_name
    validated_params["rqst_usr_l_name"] = rqst_usr_l_name
    validated_params["rqst_county"] = rqst_county
    validated_params["rqst_usr_type"] = rqst_usr_type
    validated_params["base_location_objects"] = base_location_objects
def validate_create_row_params(rqst_body, validated_params, rqst_errors):
    rqst_provider_location_name = clean_string_value_from_dict_object(
        rqst_body, "root", "name", rqst_errors)
    validated_params["name"] = rqst_provider_location_name

    state_province = clean_string_value_from_dict_object(
        rqst_body,
        "root",
        "state_province",
        rqst_errors,
        none_allowed=True,
        empty_string_allowed=True)
    if not state_province:
        state_province = 'not available'
    validated_params["state_province"] = state_province

    rqst_provider_network_id = clean_int_value_from_dict_object(
        rqst_body,
        "root",
        "provider_network_id",
        rqst_errors,
        none_allowed=True)
    validated_params["provider_network_id"] = rqst_provider_network_id

    rqst_add_accepted_plans_ids = clean_list_value_from_dict_object(
        rqst_body,
        "root",
        "add_accepted_plans",
        rqst_errors,
        empty_list_allowed=True)

    add_accepted_plan_objects = []
    if rqst_add_accepted_plans_ids:
        add_accepted_plan_objects = validate_accepted_plans_params(
            rqst_add_accepted_plans_ids, rqst_errors)
    validated_params["add_accepted_plans_objects"] = add_accepted_plan_objects
Пример #8
0
def validate_navigator_nav_sign_up_fields(rqst_body, validated_params,
                                          rqst_errors):
    if 'add_healthcare_locations_worked' in rqst_body:
        add_healthcare_locations_worked = clean_list_value_from_dict_object(
            rqst_body,
            "root",
            "add_healthcare_locations_worked",
            rqst_errors,
            empty_list_allowed=True)

        validated_location_info = []
        for location_dict in add_healthcare_locations_worked:
            if not isinstance(location_dict, dict):
                rqst_errors.append(
                    'Error: A location object in \'add_healthcare_locations_worked\' is not a object.'
                )
            else:
                location_info = {
                    "name":
                    clean_string_value_from_dict_object(
                        location_dict, "add_location_object", 'name',
                        rqst_errors),
                    "state_province":
                    clean_string_value_from_dict_object(location_dict,
                                                        "add_location_object",
                                                        'state_province',
                                                        rqst_errors,
                                                        none_allowed=True)
                }
                if not location_info['state_province']:
                    location_info['state_province'] = 'not available'

                validated_location_info.append(location_info)

        validated_params[
            'add_healthcare_locations_worked'] = validated_location_info

    if 'add_healthcare_service_expertises' in rqst_body:
        add_healthcare_service_expertises = clean_list_value_from_dict_object(
            rqst_body,
            "root",
            "add_healthcare_service_expertises",
            rqst_errors,
            empty_list_allowed=True)

        validated_service_expertise_info = []
        for service_expertise in add_healthcare_service_expertises:
            if not isinstance(service_expertise, str):
                rqst_errors.append(
                    'Error: A service_expertise in \'add_healthcare_service_expertises\' is not a string.'
                )
                continue

            validated_service_expertise_info.append(service_expertise)

        validated_params[
            'add_healthcare_service_expertises'] = validated_service_expertise_info

    if 'add_insurance_carrier_specialties' in rqst_body:
        add_insurance_carrier_specialties = clean_list_value_from_dict_object(
            rqst_body,
            "root",
            "add_insurance_carrier_specialties",
            rqst_errors,
            empty_list_allowed=True)

        validated_insurance_carrier_info = []
        for carrier_dict in add_insurance_carrier_specialties:
            if not isinstance(carrier_dict, dict):
                rqst_errors.append(
                    'Error: An insurance_carrier object in \'add_insurance_carrier_specialties\' is not a object.'
                )
            else:
                validated_carrier_info = {
                    "name":
                    clean_string_value_from_dict_object(
                        carrier_dict,
                        "insurance_carrier_object",
                        'name',
                        rqst_errors,
                        empty_string_allowed=True),
                    "state_province":
                    clean_string_value_from_dict_object(
                        carrier_dict,
                        "insurance_carrier_object",
                        'state_province',
                        rqst_errors,
                        empty_string_allowed=True)
                }
                if not validated_carrier_info['state_province']:
                    validated_carrier_info['state_province'] = 'not available'

                validated_insurance_carrier_info.append(validated_carrier_info)

        validated_params[
            'add_insurance_carrier_specialties'] = validated_insurance_carrier_info

    if "address_line_1" in rqst_body:
        address_line_1 = clean_string_value_from_dict_object(
            rqst_body,
            "root",
            "address_line_1",
            rqst_errors,
            empty_string_allowed=True)
        validated_params["address_line_1"] = address_line_1

    if "address_line_2" in rqst_body:
        address_line_2 = clean_string_value_from_dict_object(
            rqst_body,
            "root",
            "address_line_2",
            rqst_errors,
            empty_string_allowed=True)
        if address_line_2 is None:
            address_line_2 = ''
        validated_params["address_line_2"] = address_line_2

    if "city" in rqst_body:
        city = clean_string_value_from_dict_object(rqst_body,
                                                   "root",
                                                   "city",
                                                   rqst_errors,
                                                   empty_string_allowed=True)
        validated_params["city"] = city

    if "state_province" in rqst_body:
        state_province = clean_string_value_from_dict_object(
            rqst_body,
            "root",
            "state_province",
            rqst_errors,
            empty_string_allowed=True)
        validated_params["state_province"] = state_province

    if "zipcode" in rqst_body:
        zipcode = clean_string_value_from_dict_object(
            rqst_body,
            "root",
            "zipcode",
            rqst_errors,
            empty_string_allowed=True)
        validated_params["zipcode"] = zipcode

    if "phone" in rqst_body:
        phone = clean_string_value_from_dict_object(rqst_body,
                                                    "root",
                                                    "phone",
                                                    rqst_errors,
                                                    none_allowed=True)

        validated_params["phone"] = phone

    if "reported_region" in rqst_body:
        reported_region = clean_string_value_from_dict_object(
            rqst_body,
            "root",
            "reported_region",
            rqst_errors,
            none_allowed=True)

        validated_params["reported_region"] = reported_region

    if "video_link" in rqst_body:
        video_link = clean_string_value_from_dict_object(rqst_body,
                                                         "root",
                                                         "video_link",
                                                         rqst_errors,
                                                         none_allowed=True)
        if video_link:
            validate = URLValidator()
            try:
                validate(video_link)
            except ValidationError:
                rqst_errors.append(
                    "'video_link' is not a valid url. value is: {}".format(
                        video_link))

        validated_params["video_link"] = video_link

    if "navigator_organization" in rqst_body:
        navigator_organization = clean_string_value_from_dict_object(
            rqst_body,
            "root",
            "navigator_organization",
            rqst_errors,
            none_allowed=True)

        validated_params["navigator_organization"] = navigator_organization

    validate_nav_sign_up_navigator_resume_params(rqst_body, validated_params,
                                                 rqst_errors)
Пример #9
0
def validate_nav_sign_up_create_params(rqst_body, validated_params,
                                       rqst_errors):
    email = clean_string_value_from_dict_object(rqst_body, "root", "email",
                                                rqst_errors)
    if email and not rqst_errors:
        try:
            validate_email(email)
        except forms.ValidationError:
            rqst_errors.append(
                "{!s} must be a valid email address".format(email))
    validated_params["email"] = email

    if 'mpn' in rqst_body:
        mpn = clean_string_value_from_dict_object(rqst_body,
                                                  "root",
                                                  "mpn",
                                                  rqst_errors,
                                                  empty_string_allowed=True,
                                                  none_allowed=True)
        if mpn is None:
            mpn = ''
        validated_params["mpn"] = mpn
    else:
        validated_params["mpn"] = ''

    first_name = clean_string_value_from_dict_object(rqst_body, "root",
                                                     "first_name", rqst_errors)
    validated_params["first_name"] = first_name

    last_name = clean_string_value_from_dict_object(rqst_body, "root",
                                                    "last_name", rqst_errors)
    validated_params["last_name"] = last_name

    if "county" in rqst_body:
        county = clean_string_value_from_dict_object(rqst_body, "root",
                                                     "county", rqst_errors)
        validated_params["county"] = county
    else:
        validated_params["county"] = ''

    if "type" in rqst_body:
        rqst_type = clean_string_value_from_dict_object(
            rqst_body, "root", "type", rqst_errors)
        validated_params["type"] = rqst_type
    else:
        validated_params["type"] = ''

    if 'add_base_locations' in rqst_body:
        add_base_location_names = clean_list_value_from_dict_object(
            rqst_body,
            "root",
            "add_base_locations",
            rqst_errors,
            empty_list_allowed=True)

        validated_base_location_names = []
        for base_location_name in add_base_location_names:
            if not isinstance(base_location_name, str):
                rqst_errors.append(
                    'Error: A base_location_name in \'add_base_locations\' is not a string.'
                )
                continue

            validated_base_location_names.append(base_location_name)

        validated_params['add_base_locations'] = validated_base_location_names

    validate_navigator_nav_sign_up_fields(rqst_body, validated_params,
                                          rqst_errors)
Пример #10
0
def validate_create_or_update_row_params(rqst_body, validated_params,
                                         rqst_errors):
    consumer_metrics = clean_dict_value_from_dict_object(
        rqst_body, "root", "Consumer Metrics", rqst_errors)
    if not consumer_metrics:
        consumer_metrics = {}

    rqst_no_cps_consumers = clean_int_value_from_dict_object(
        consumer_metrics,
        "Consumer Metrics",
        "no_cps_consumers",
        rqst_errors,
        no_key_allowed=True)
    if rqst_no_cps_consumers is None:
        rqst_no_cps_consumers = 0

    rqst_metrics_location = clean_string_value_from_dict_object(
        consumer_metrics, "Consumer Metrics", "Location", rqst_errors)
    location_instance = None
    try:
        location_instance = NavMetricsLocation.objects.get(
            name=rqst_metrics_location)
    except NavMetricsLocation.DoesNotExist:
        rqst_errors.append(
            "Location instance does not exist for given location name: {!s}.".
            format(rqst_metrics_location))
    except NavMetricsLocation.MultipleObjectsReturned:
        rqst_errors.append(
            "Multiple location instances exist for given location name: {!s}".
            format(rqst_metrics_location))

    metrics_date_dict = clean_dict_value_from_dict_object(
        consumer_metrics, "Consumer Metrics", "Metrics Date", rqst_errors)
    metrics_date = None
    if metrics_date_dict is not None:
        month = clean_int_value_from_dict_object(metrics_date_dict,
                                                 "Metrics Date", "Month",
                                                 rqst_errors)
        if month:
            if month < 1 or month > 12:
                rqst_errors.append("Month must be between 1 and 12 inclusive")

        day = clean_int_value_from_dict_object(metrics_date_dict,
                                               "Metrics Date", "Day",
                                               rqst_errors)
        if day:
            if day < 1 or day > 31:
                rqst_errors.append("Day must be between 1 and 31 inclusive")

        year = clean_int_value_from_dict_object(metrics_date_dict,
                                                "Metrics Date", "Year",
                                                rqst_errors)
        if year:
            if year < 1 or year > 9999:
                rqst_errors.append("Year must be between 1 and 9999 inclusive")

        if not rqst_errors:
            metrics_date = datetime.date(year, month, day)

    rqst_plan_stats = clean_list_value_from_dict_object(
        consumer_metrics,
        "Consumer Metrics",
        "Plan Stats",
        rqst_errors,
        empty_list_allowed=True)
    unsaved_plan_stat_objs = []
    if rqst_plan_stats:
        for rqst_plan_stat_dict in rqst_plan_stats:
            planstatobject = PlanStat()
            planstatobject.plan_name = clean_string_value_from_dict_object(
                rqst_plan_stat_dict, "Plans Dict", "Issuer Name", rqst_errors)
            planstatobject.premium_type = clean_string_value_from_dict_object(
                rqst_plan_stat_dict, "Plans Dict", "Premium Type", rqst_errors)
            planstatobject.metal_level = clean_string_value_from_dict_object(
                rqst_plan_stat_dict, "Plans Dict", "Metal Level", rqst_errors)
            planstatobject.enrollments = clean_int_value_from_dict_object(
                rqst_plan_stat_dict, "Plans Dict", "Enrollments", rqst_errors)

            plan_name_valid = planstatobject.check_plan_choices()
            premium_type_valid = planstatobject.check_premium_choices()
            metal_level_valid = planstatobject.check_metal_choices()
            if not plan_name_valid:
                rqst_errors.append(
                    "Plan: {!s} is not part of member plans".format(
                        planstatobject.plan_name))
            if not premium_type_valid:
                rqst_errors.append(
                    "Premium Type: {!s} is not a valid premium type".format(
                        planstatobject.premium_type))
            if not metal_level_valid:
                rqst_errors.append(
                    "Metal: {!s} is not a valid metal level".format(
                        planstatobject.metal_level))

            if plan_name_valid and premium_type_valid and metal_level_valid:
                unsaved_plan_stat_objs.append(planstatobject)

    validated_params["rqst_usr_email"] = clean_string_value_from_dict_object(
        rqst_body, "root", "Email", rqst_errors)
    validated_params[
        "rqst_no_general_assis"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_general_assis",
            rqst_errors)
    validated_params[
        "rqst_no_plan_usage_assis"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_plan_usage_assis",
            rqst_errors)
    validated_params[
        "rqst_no_locating_provider_assis"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_locating_provider_assis",
            rqst_errors)
    validated_params[
        "rqst_no_billing_assis"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_billing_assis",
            rqst_errors)
    validated_params[
        "rqst_no_enroll_apps_started"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_enroll_apps_started",
            rqst_errors)
    validated_params["rqst_no_enroll_qhp"] = clean_int_value_from_dict_object(
        consumer_metrics, "Consumer Metrics", "no_enroll_qhp", rqst_errors)
    validated_params[
        "rqst_no_enroll_abe_chip"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_enroll_abe_chip",
            rqst_errors)
    validated_params["rqst_no_enroll_shop"] = clean_int_value_from_dict_object(
        consumer_metrics, "Consumer Metrics", "no_enroll_shop", rqst_errors)
    validated_params[
        "rqst_no_referrals_agents_brokers"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics",
            "no_referrals_agents_brokers", rqst_errors)
    validated_params[
        "rqst_no_referrals_ship_medicare"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_referrals_ship_medicare",
            rqst_errors)
    validated_params[
        "rqst_no_referrals_other_assis_programs"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics",
            "no_referrals_other_assis_programs", rqst_errors)
    validated_params[
        "rqst_no_referrals_issuers"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_referrals_issuers",
            rqst_errors)
    validated_params[
        "rqst_no_referrals_doi"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_referrals_doi",
            rqst_errors)
    validated_params[
        "rqst_no_mplace_tax_form_assis"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_mplace_tax_form_assis",
            rqst_errors)
    validated_params[
        "rqst_no_mplace_exempt_assis"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_mplace_exempt_assis",
            rqst_errors)
    validated_params[
        "rqst_no_qhp_abe_appeals"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_qhp_abe_appeals",
            rqst_errors)
    validated_params[
        "rqst_no_data_matching_mplace_issues"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics",
            "no_data_matching_mplace_issues", rqst_errors)
    validated_params[
        "rqst_no_sep_eligible"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_sep_eligible",
            rqst_errors)
    validated_params[
        "rqst_no_employ_spons_cov_issues"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_employ_spons_cov_issues",
            rqst_errors)
    validated_params[
        "rqst_no_aptc_csr_assis"] = clean_int_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "no_aptc_csr_assis",
            rqst_errors)
    validated_params[
        "rqst_cmplx_cases_mplace_issues"] = clean_string_value_from_dict_object(
            consumer_metrics,
            "Consumer Metrics",
            "cmplx_cases_mplace_issues",
            rqst_errors,
            empty_string_allowed=True)
    validated_params["rqst_no_cps_consumers"] = rqst_no_cps_consumers
    validated_params[
        "rqst_metrics_county"] = clean_string_value_from_dict_object(
            consumer_metrics, "Consumer Metrics", "County", rqst_errors)
    validated_params["location_instance_for_metrics"] = location_instance
    validated_params["unsaved_plan_stat_objs"] = unsaved_plan_stat_objs
    validated_params["metrics_date"] = metrics_date
Пример #11
0
def retrieve_related_spec_concern_objs_from_list_of_gen_concern_names(
        rqst_data, rqst_errors):
    list_of_related_specific_concern_qsets = []
    no_of_unique_rel_spec_concerns = 0

    # In python 2.X, the nonlocal keyword is not available to enable binding to non local variables in nested functions,
    # need to use this 'hack' to enable rebinding of a non local variable name.
    # More info here: https://stackoverflow.com/questions/2609518/python-nested-function-scopes
    unique_related_spec_concerns_qset = [None]

    rqst_ranked_general_concern_names = clean_list_value_from_dict_object(
        rqst_data, "root", "ranked_general_concerns", rqst_errors)
    if not rqst_errors:
        no_of_ranked_gen_concerns = len(rqst_ranked_general_concern_names)

        if no_of_ranked_gen_concerns <= MAX_NO_OF_GEN_CONCERNS_GIVEN:

            def check_that_gen_concerns_are_strings():
                for indx, general_concern_name in enumerate(
                        rqst_ranked_general_concern_names):
                    if not isinstance(general_concern_name, str):
                        rqst_errors.append(
                            "All ranked general concerns must be strings, ranked general concern is not an string for 'related_general_concerns' field at index: {}"
                            .format(indx))

            check_that_gen_concerns_are_strings()

            def check_for_duplicates_in_gen_concerns():
                ranked_general_concerns_names_set = set(
                    rqst_ranked_general_concern_names)
                if len(ranked_general_concerns_names_set) != len(
                        rqst_ranked_general_concern_names):
                    rqst_errors.append(
                        "There are duplicates in the 'ranked_general_concerns' list. No duplicates allowed"
                    )

            check_for_duplicates_in_gen_concerns()

            if not rqst_errors:
                ranked_general_concerns_errors = []

                def get_related_specific_concerns_from_gen_concern_names():
                    for ranked_general_concerns_name in rqst_ranked_general_concern_names:
                        try:
                            ranked_general_concerns_object = ConsumerGeneralConcern.objects.get(
                                name__iexact=ranked_general_concerns_name)

                            related_spec_concerns_qset = ranked_general_concerns_object.related_specific_concerns.all(
                            ).order_by("-research_weight")
                            if unique_related_spec_concerns_qset[0]:
                                unique_related_spec_concerns_qset[
                                    0] = unique_related_spec_concerns_qset[
                                        0] | related_spec_concerns_qset
                            else:
                                unique_related_spec_concerns_qset[
                                    0] = related_spec_concerns_qset

                            list_of_related_specific_concern_qsets.append(
                                related_spec_concerns_qset)
                        except ConsumerGeneralConcern.DoesNotExist:
                            ranked_general_concerns_errors.append(
                                "No ConsumerGeneralConcern database entry found for name: {}"
                                .format(ranked_general_concerns_name))

                get_related_specific_concerns_from_gen_concern_names()

                def count_unique_related_specific_concerns():
                    return unique_related_spec_concerns_qset[0].distinct(
                    ).count()

                if unique_related_spec_concerns_qset[0]:
                    no_of_unique_rel_spec_concerns = count_unique_related_specific_concerns(
                    )

                def add_general_concern_errors_to_request_errors():
                    for ranked_general_concerns_error in ranked_general_concerns_errors:
                        rqst_errors.append(ranked_general_concerns_error)

                add_general_concern_errors_to_request_errors()
        else:
            rqst_errors.append(
                "Maximum number of ranked_general_concerns is {}, the number given is: {}"
                .format(MAX_NO_OF_GEN_CONCERNS_GIVEN,
                        no_of_ranked_gen_concerns))

    return list_of_related_specific_concern_qsets, no_of_unique_rel_spec_concerns
def validate_modify_staff_params(rqst_body, validated_params, rqst_errors):
    if "email" in rqst_body:
        rqst_usr_email = clean_string_value_from_dict_object(
            rqst_body, "root", "email", rqst_errors)
        if rqst_usr_email and not rqst_errors:
            try:
                validate_email(rqst_usr_email)
                validated_params["rqst_usr_email"] = rqst_usr_email
            except forms.ValidationError:
                rqst_errors.append("{!s} must be a valid email address".format(
                    rqst_usr_email))

    if "first_name" in rqst_body:
        rqst_usr_f_name = clean_string_value_from_dict_object(
            rqst_body, "root", "first_name", rqst_errors)
        validated_params["rqst_usr_f_name"] = rqst_usr_f_name

    if "last_name" in rqst_body:
        rqst_usr_l_name = clean_string_value_from_dict_object(
            rqst_body, "root", "last_name", rqst_errors)
        validated_params["rqst_usr_l_name"] = rqst_usr_l_name

    if "county" in rqst_body:
        rqst_county = clean_string_value_from_dict_object(
            rqst_body, "root", "county", rqst_errors)
        validated_params["rqst_county"] = rqst_county

    if "type" in rqst_body:
        rqst_usr_type = clean_string_value_from_dict_object(
            rqst_body, "root", "type", rqst_errors)
        validated_params["rqst_usr_type"] = rqst_usr_type

    if "base_locations" in rqst_body:
        rqst_base_locations = clean_list_value_from_dict_object(
            rqst_body,
            "root",
            "base_locations",
            rqst_errors,
            empty_list_allowed=True)

        rqst_base_locations = list(set(rqst_base_locations))
        base_location_objects = []
        location_errors = []
        if rqst_base_locations:
            for base_location_name in rqst_base_locations:
                try:
                    base_location_object = NavMetricsLocation.objects.get(
                        name=base_location_name)
                    base_location_objects.append(base_location_object)
                except NavMetricsLocation.DoesNotExist:
                    location_errors.append(
                        "No Nav Hub Location Database entry found for name: {!s}"
                        .format(base_location_name))
        for location_error in location_errors:
            rqst_errors.append(location_error)

        validated_params["base_location_objects"] = base_location_objects

    if len(validated_params.keys()) < 2:
        rqst_errors.append(
            'Not enough given parameters to modify staff instance.')
Пример #13
0
def validate_create_row_params(rqst_body, validated_params, rqst_errors):
    email = clean_string_value_from_dict_object(rqst_body, "root", "email", rqst_errors)
    if email and not rqst_errors:
        try:
            validate_email(email)
        except forms.ValidationError:
            rqst_errors.append("{!s} must be a valid email address".format(email))
    validated_params["email"] = email

    mpn = clean_string_value_from_dict_object(
        rqst_body,
        "root",
        "mpn",
        rqst_errors,
        empty_string_allowed=True,
        none_allowed=True
    )
    if mpn is None:
        mpn = ''
    validated_params["mpn"] = mpn

    first_name = clean_string_value_from_dict_object(rqst_body, "root", "first_name", rqst_errors)
    validated_params["first_name"] = first_name

    last_name = clean_string_value_from_dict_object(rqst_body, "root", "last_name", rqst_errors)
    validated_params["last_name"] = last_name

    county = clean_string_value_from_dict_object(rqst_body, "root", "county", rqst_errors)
    validated_params["county"] = county

    type = clean_string_value_from_dict_object(rqst_body, "root", "type", rqst_errors)
    validated_params["type"] = type

    if 'add_base_locations' in rqst_body:
        add_base_location_names = clean_list_value_from_dict_object(
            rqst_body,
            "root",
            "add_base_locations",
            rqst_errors,
            empty_list_allowed=True
        )

        validated_base_location_names = []
        for base_location_name in add_base_location_names:
            if not isinstance(base_location_name, str):
                rqst_errors.append('Error: A base_location_name in \'add_base_locations\' is not a string.')
                continue

            validated_base_location_names.append(base_location_name)

        validated_params['add_base_locations'] = validated_base_location_names

    if 'add_approved_clients_for_case_management' in rqst_body:
        add_approved_clients_for_case_management = clean_list_value_from_dict_object(
            rqst_body,
            "root",
            "add_approved_clients_for_case_management",
            rqst_errors,
            empty_list_allowed=True
        )

        validated_approved_clients_for_case_management = []
        for approved_client_for_case_management in add_approved_clients_for_case_management:
            if not isinstance(approved_client_for_case_management, int):
                rqst_errors.append('Error: An approved_client_for_case_management in \'add_approved_clients_for_case_management\' is not an integer.')
                continue

            validated_approved_clients_for_case_management.append(approved_client_for_case_management)

        validated_params['add_approved_clients_for_case_management'] = validated_approved_clients_for_case_management

    validate_nav_signup_params(rqst_body, validated_params, rqst_errors)
def validate_cps_info_params_for_modify_instance_rqst(
        rqst_cps_info_params, consumer_instance, rqst_consumer_met_nav_at,
        rqst_consumer_household_size, rqst_nav_instance, rqst_errors):
    validated_params = {}

    if not rqst_consumer_met_nav_at:
        rqst_consumer_met_nav_at = consumer_instance.met_nav_at
    if not rqst_consumer_household_size:
        rqst_consumer_household_size = consumer_instance.household_size
    if not rqst_nav_instance:
        rqst_nav_instance = consumer_instance.navigator

    if "primary_dependent" in rqst_cps_info_params:
        rqst_primary_dependent_dict = clean_dict_value_from_dict_object(
            rqst_cps_info_params, "cps_info", "primary_dependent", rqst_errors)
        primary_dependent_object = None
        if not rqst_errors:
            rqst_primary_dependent_database_id = clean_int_value_from_dict_object(
                rqst_primary_dependent_dict,
                "primary_dependent",
                "Consumer Database ID",
                rqst_errors,
                no_key_allowed=True)
            if not rqst_primary_dependent_database_id:
                found_primary_dependent_PICConsumer_entries = check_consumer_db_entries_for_dependent_info(
                    rqst_primary_dependent_dict, rqst_errors)
                rqst_force_create_consumer = clean_bool_value_from_dict_object(
                    rqst_primary_dependent_dict,
                    "root",
                    "force_create_consumer",
                    rqst_errors,
                    no_key_allowed=True)

                if found_primary_dependent_PICConsumer_entries and not rqst_force_create_consumer:
                    rqst_errors.append(
                        "The following PICConsumer object id(s) were found for given primary_dependent: {}. If you want to create a new consumer anyway, set cps_info['primary_dependent']['force_create_consumer'] to True."
                        .format(
                            json.dumps(
                                found_primary_dependent_PICConsumer_entries)))
                else:
                    try:
                        primary_dependent_object = PICConsumer(
                            first_name=rqst_primary_dependent_dict[
                                "first_name"],
                            last_name=rqst_primary_dependent_dict["last_name"],
                            met_nav_at=rqst_consumer_met_nav_at,
                            household_size=rqst_consumer_household_size,
                            navigator=rqst_nav_instance)
                    except IntegrityError:
                        rqst_errors.append(
                            "Error creating primary_dependent database entry for params: {!s}"
                            .format(json.dumps(rqst_primary_dependent_dict)))
            else:
                try:
                    primary_dependent_object = PICConsumer.objects.get(
                        id=rqst_primary_dependent_database_id)
                except PICConsumer.DoesNotExist:
                    rqst_errors.append(
                        "PICConsumer object does not exist for primary_dependent Database ID: {!s}"
                        .format(str(rqst_primary_dependent_database_id)))

        validated_params["primary_dependent_object"] = primary_dependent_object
    if "secondary_dependents" in rqst_cps_info_params:
        rqst_secondary_dependents = clean_list_value_from_dict_object(
            rqst_cps_info_params,
            "cps_info",
            "secondary_dependents",
            rqst_errors,
            no_key_allowed=True,
            empty_list_allowed=True)
        validated_params[
            "secondary_dependents_list"] = rqst_secondary_dependents

        secondary_dependents_list = []
        if rqst_secondary_dependents:
            for dependent_index, rqst_secondary_dependent_dict in enumerate(
                    rqst_secondary_dependents):
                secondary_dependent_object = None
                if not rqst_errors:
                    rqst_secondary_dependent_database_id = clean_int_value_from_dict_object(
                        rqst_secondary_dependent_dict,
                        "secondary_dependent",
                        "Consumer Database ID",
                        rqst_errors,
                        no_key_allowed=True)
                    if not rqst_secondary_dependent_database_id:
                        found_secondary_dependent_PICConsumer_entries = check_consumer_db_entries_for_dependent_info(
                            rqst_secondary_dependent_dict, rqst_errors)
                        rqst_force_create_consumer = clean_bool_value_from_dict_object(
                            rqst_secondary_dependent_dict,
                            "root",
                            "force_create_consumer",
                            rqst_errors,
                            no_key_allowed=True)

                        if found_secondary_dependent_PICConsumer_entries and not rqst_force_create_consumer:
                            rqst_errors.append(
                                "The following PICConsumer object id(s) were found for the secondary_dependent at index {}: {}. If you want to create a new consumer anyway, set cps_info['secondary_dependents'][index]['force_create_consumer'] to True."
                                .format(
                                    dependent_index,
                                    json.dumps(
                                        found_secondary_dependent_PICConsumer_entries
                                    )))
                        else:
                            try:
                                secondary_dependent_object = PICConsumer(
                                    first_name=rqst_secondary_dependent_dict[
                                        "first_name"],
                                    last_name=rqst_secondary_dependent_dict[
                                        "last_name"],
                                    met_nav_at=rqst_consumer_met_nav_at,
                                    household_size=rqst_consumer_household_size,
                                    navigator=rqst_nav_instance)
                            except IntegrityError:
                                rqst_errors.append(
                                    "Error creating secondary_dependent database entry for params: {!s}"
                                    .format(
                                        json.dumps(
                                            rqst_secondary_dependent_dict)))
                    else:
                        try:
                            secondary_dependent_object = PICConsumer.objects.get(
                                id=rqst_secondary_dependent_database_id)
                        except PICConsumer.DoesNotExist:
                            rqst_errors.append(
                                "PICConsumer object does not exist for secondary_dependent with index({!s}) and Database ID: {!s}"
                                .format(
                                    str(dependent_index),
                                    str(rqst_secondary_dependent_database_id)))

                secondary_dependents_list.append(secondary_dependent_object)

            validated_params[
                "secondary_dependents_list"] = secondary_dependents_list
    if "cps_location" in rqst_cps_info_params:
        rqst_cps_location = clean_string_value_from_dict_object(
            rqst_cps_info_params, "cps_info", "cps_location", rqst_errors)

        validated_params["rqst_cps_location"] = rqst_cps_location
    if "apt_date" in rqst_cps_info_params:
        apt_date_dict = clean_dict_value_from_dict_object(
            rqst_cps_info_params, "cps_info", "apt_date", rqst_errors)
        rqst_apt_date = None
        if apt_date_dict is not None:
            month = clean_int_value_from_dict_object(apt_date_dict,
                                                     "date_met_nav", "Month",
                                                     rqst_errors)
            if month:
                if month < 1 or month > 12:
                    rqst_errors.append(
                        "Month must be between 1 and 12 inclusive")

            day = clean_int_value_from_dict_object(apt_date_dict,
                                                   "date_met_nav", "Day",
                                                   rqst_errors)
            if day:
                if day < 1 or day > 31:
                    rqst_errors.append(
                        "Day must be between 1 and 31 inclusive")

            year = clean_int_value_from_dict_object(apt_date_dict,
                                                    "date_met_nav", "Year",
                                                    rqst_errors)
            if year:
                if year < 1 or year > 9999:
                    rqst_errors.append(
                        "Year must be between 1 and 9999 inclusive")

            if not rqst_errors:
                rqst_apt_date = datetime.date(year, month, day)

        validated_params["rqst_apt_date"] = rqst_apt_date
    if "target_list" in rqst_cps_info_params:
        rqst_target_list = clean_bool_value_from_dict_object(
            rqst_cps_info_params, "cps_info", "target_list", rqst_errors)

        validated_params["rqst_target_list"] = rqst_target_list
    if "phone_apt" in rqst_cps_info_params:
        rqst_phone_apt = clean_bool_value_from_dict_object(
            rqst_cps_info_params, "cps_info", "phone_apt", rqst_errors)

        validated_params["rqst_phone_apt"] = rqst_phone_apt
    if "case_mgmt_type" in rqst_cps_info_params:
        rqst_case_mgmt_type = clean_string_value_from_dict_object(
            rqst_cps_info_params, "cps_info", "case_mgmt_type", rqst_errors)

        validated_params["rqst_case_mgmt_type"] = rqst_case_mgmt_type
    if "case_mgmt_status" in rqst_cps_info_params:
        rqst_case_mgmt_status = clean_string_value_from_dict_object(
            rqst_cps_info_params, "cps_info", "case_mgmt_status", rqst_errors)

        validated_params["rqst_case_mgmt_status"] = rqst_case_mgmt_status
    if "app_type" in rqst_cps_info_params:
        rqst_app_type = clean_string_value_from_dict_object(
            rqst_cps_info_params, "cps_info", "app_type", rqst_errors)

        validated_params["rqst_app_type"] = rqst_app_type
    if "app_status" in rqst_cps_info_params:
        rqst_app_status = clean_string_value_from_dict_object(
            rqst_cps_info_params, "cps_info", "app_status", rqst_errors)

        validated_params["rqst_app_status"] = rqst_app_status
    if "point_of_origin" in rqst_cps_info_params:
        rqst_point_of_origin = clean_string_value_from_dict_object(
            rqst_cps_info_params, "cps_info", "point_of_origin", rqst_errors)

        validated_params["rqst_point_of_origin"] = rqst_point_of_origin

    return validated_params
def validate_modify_instance_rqst_params(rqst_params, rqst_errors):
    validated_params = {}

    consumer_instance = None
    rqst_consumer_id = clean_int_value_from_dict_object(
        rqst_params, "root", "Consumer Database ID", rqst_errors)
    validated_params['rqst_consumer_id'] = rqst_consumer_id
    if not rqst_errors:
        try:
            consumer_instance = PICConsumer.objects.get(id=rqst_consumer_id)
        except PICConsumer.DoesNotExist:
            rqst_errors.append(
                'Consumer database entry does not exist for the id: {}'.format(
                    rqst_consumer_id))
    validated_params['consumer_instance'] = consumer_instance

    if "Email" in rqst_params:
        rqst_consumer_email = clean_string_value_from_dict_object(
            rqst_params,
            "root",
            "Email",
            rqst_errors,
            empty_string_allowed=True)
        if rqst_consumer_email:
            try:
                validate_email(rqst_consumer_email)
            except forms.ValidationError:
                rqst_errors.append("{!s} must be a valid email address".format(
                    rqst_consumer_email))

        validated_params["rqst_consumer_email"] = rqst_consumer_email
    if "First Name" in rqst_params:
        rqst_consumer_f_name = clean_string_value_from_dict_object(
            rqst_params, "root", "First Name", rqst_errors)

        validated_params["rqst_consumer_f_name"] = rqst_consumer_f_name
    if "Middle Name" in rqst_params:
        rqst_consumer_m_name = clean_string_value_from_dict_object(
            rqst_params,
            "root",
            "Middle Name",
            rqst_errors,
            empty_string_allowed=True)

        validated_params["rqst_consumer_m_name"] = rqst_consumer_m_name
    if "Last Name" in rqst_params:
        rqst_consumer_l_name = clean_string_value_from_dict_object(
            rqst_params, "root", "Last Name", rqst_errors)

        validated_params["rqst_consumer_l_name"] = rqst_consumer_l_name
    if "Plan" in rqst_params:
        rqst_consumer_plan = clean_string_value_from_dict_object(
            rqst_params,
            "root",
            "Plan",
            rqst_errors,
            empty_string_allowed=True)

        validated_params["rqst_consumer_plan"] = rqst_consumer_plan
    rqst_consumer_met_nav_at = None
    if "Met Navigator At" in rqst_params:
        rqst_consumer_met_nav_at = clean_string_value_from_dict_object(
            rqst_params, "root", "Met Navigator At", rqst_errors)

        validated_params["rqst_consumer_met_nav_at"] = rqst_consumer_met_nav_at
    rqst_consumer_household_size = None
    if "Household Size" in rqst_params:
        rqst_consumer_household_size = clean_int_value_from_dict_object(
            rqst_params, "root", "Household Size", rqst_errors)

        validated_params[
            "rqst_consumer_household_size"] = rqst_consumer_household_size
    if "Phone Number" in rqst_params:
        rqst_consumer_phone = clean_string_value_from_dict_object(
            rqst_params,
            "root",
            "Phone Number",
            rqst_errors,
            empty_string_allowed=True)

        validated_params["rqst_consumer_phone"] = rqst_consumer_phone
    if "Preferred Language" in rqst_params:
        rqst_consumer_pref_lang = clean_string_value_from_dict_object(
            rqst_params,
            "root",
            "Preferred Language",
            rqst_errors,
            empty_string_allowed=True)
        validated_params["rqst_consumer_pref_lang"] = rqst_consumer_pref_lang
    if "Navigator Notes" in rqst_params:
        rqst_navigator_notes = clean_list_value_from_dict_object(
            rqst_params,
            "root",
            "Navigator Notes",
            rqst_errors,
            empty_list_allowed=True)

        validated_params["rqst_navigator_notes"] = rqst_navigator_notes
    if "Address Line 1" in rqst_params:
        rqst_address_line_1 = clean_string_value_from_dict_object(
            rqst_params,
            "root",
            "Address Line 1",
            rqst_errors,
            empty_string_allowed=True)

        validated_params["rqst_address_line_1"] = rqst_address_line_1
    if "Address Line 2" in rqst_params:
        rqst_address_line_2 = clean_string_value_from_dict_object(
            rqst_params,
            "root",
            "Address Line 2",
            rqst_errors,
            empty_string_allowed=True)
        if rqst_address_line_2 is None:
            rqst_address_line_2 = ''

        validated_params["rqst_address_line_2"] = rqst_address_line_2
    if "City" in rqst_params:
        rqst_city = clean_string_value_from_dict_object(
            rqst_params,
            "root",
            "City",
            rqst_errors,
            empty_string_allowed=True)

        validated_params["rqst_city"] = rqst_city
    if "State" in rqst_params:
        rqst_state = clean_string_value_from_dict_object(
            rqst_params,
            "root",
            "State",
            rqst_errors,
            empty_string_allowed=True)

        validated_params["rqst_state"] = rqst_state
    if "Zipcode" in rqst_params:
        rqst_zipcode = clean_string_value_from_dict_object(
            rqst_params,
            "root",
            "Zipcode",
            rqst_errors,
            empty_string_allowed=True)

        validated_params["rqst_zipcode"] = rqst_zipcode
    nav_instance = None
    if "Navigator Database ID" in rqst_params:
        rqst_nav_id = clean_int_value_from_dict_object(
            rqst_params, "root", "Navigator Database ID", rqst_errors)
        if rqst_nav_id and not rqst_errors:
            try:
                nav_instance = Navigators.objects.get(id=rqst_nav_id)
            except Navigators.DoesNotExist:
                rqst_errors.append(
                    'Staff database entry does not exist for the navigator id: {}'
                    .format(rqst_nav_id))

        validated_params["rqst_nav_id"] = rqst_nav_id
        validated_params["nav_instance"] = nav_instance
    rqst_date_met_nav = None
    if "date_met_nav" in rqst_params:
        date_met_nav_dict = clean_dict_value_from_dict_object(
            rqst_params,
            "root",
            "date_met_nav",
            rqst_errors,
            none_allowed=True)
        if date_met_nav_dict is not None:
            month = clean_int_value_from_dict_object(date_met_nav_dict,
                                                     "date_met_nav", "Month",
                                                     rqst_errors)
            if month:
                if month < 1 or month > 12:
                    rqst_errors.append(
                        "Month must be between 1 and 12 inclusive")

            day = clean_int_value_from_dict_object(date_met_nav_dict,
                                                   "date_met_nav", "Day",
                                                   rqst_errors)
            if day:
                if day < 1 or day > 31:
                    rqst_errors.append(
                        "Day must be between 1 and 31 inclusive")

            year = clean_int_value_from_dict_object(date_met_nav_dict,
                                                    "date_met_nav", "Year",
                                                    rqst_errors)
            if year:
                if year < 1 or year > 9999:
                    rqst_errors.append(
                        "Year must be between 1 and 9999 inclusive")

            if not rqst_errors:
                rqst_date_met_nav = datetime.date(year, month, day)

        validated_params["rqst_date_met_nav"] = rqst_date_met_nav
    if "cps_consumer" in rqst_params:
        rqst_cps_consumer = clean_bool_value_from_dict_object(
            rqst_params,
            "root",
            "cps_consumer",
            rqst_errors,
            no_key_allowed=True)

        validated_params["rqst_cps_consumer"] = rqst_cps_consumer
    if "cps_info" in rqst_params:
        rqst_cps_info_dict = clean_dict_value_from_dict_object(
            rqst_params, "root", "cps_info", rqst_errors, none_allowed=True)
        validated_cps_info_dict = None
        if consumer_instance and rqst_cps_info_dict:
            validated_cps_info_dict = validate_cps_info_params_for_modify_instance_rqst(
                rqst_cps_info_dict, consumer_instance,
                rqst_consumer_met_nav_at, rqst_consumer_household_size,
                nav_instance, rqst_errors)

        validated_params["rqst_cps_info_dict"] = rqst_cps_info_dict
        validated_params["validated_cps_info_dict"] = validated_cps_info_dict
    if "create_backup" in rqst_params:
        validated_params[
            'rqst_create_backup'] = clean_bool_value_from_dict_object(
                rqst_params,
                "root",
                "create_backup",
                rqst_errors,
                no_key_allowed=True)
    if len(validated_params) < 3:
        rqst_errors.append("No parameters to modify are given.")

    return validated_params
def validate_add_instance_rqst_params(post_data, post_errors):
    rqst_consumer_email = clean_string_value_from_dict_object(
        post_data, "root", "Email", post_errors, empty_string_allowed=True)
    if rqst_consumer_email and not post_errors:
        try:
            validate_email(rqst_consumer_email)
        except forms.ValidationError:
            post_errors.append("{!s} must be a valid email address".format(
                rqst_consumer_email))
    rqst_consumer_f_name = clean_string_value_from_dict_object(
        post_data, "root", "First Name", post_errors)
    rqst_consumer_m_name = clean_string_value_from_dict_object(
        post_data,
        "root",
        "Middle Name",
        post_errors,
        empty_string_allowed=True)
    rqst_consumer_l_name = clean_string_value_from_dict_object(
        post_data, "root", "Last Name", post_errors)
    rqst_consumer_plan = clean_string_value_from_dict_object(
        post_data, "root", "Plan", post_errors, empty_string_allowed=True)
    rqst_consumer_met_nav_at = clean_string_value_from_dict_object(
        post_data, "root", "Met Navigator At", post_errors)
    rqst_consumer_household_size = clean_int_value_from_dict_object(
        post_data, "root", "Household Size", post_errors)
    rqst_consumer_phone = clean_string_value_from_dict_object(
        post_data,
        "root",
        "Phone Number",
        post_errors,
        empty_string_allowed=True)
    rqst_consumer_pref_lang = clean_string_value_from_dict_object(
        post_data,
        "root",
        "Preferred Language",
        post_errors,
        empty_string_allowed=True)
    rqst_navigator_notes = clean_list_value_from_dict_object(
        post_data,
        "root",
        "Navigator Notes",
        post_errors,
        empty_list_allowed=True)

    rqst_address_line_1 = clean_string_value_from_dict_object(
        post_data,
        "root",
        "Address Line 1",
        post_errors,
        empty_string_allowed=True)
    rqst_address_line_2 = clean_string_value_from_dict_object(
        post_data,
        "root",
        "Address Line 2",
        post_errors,
        empty_string_allowed=True)
    if rqst_address_line_2 is None:
        rqst_address_line_2 = ''
    rqst_city = clean_string_value_from_dict_object(post_data,
                                                    "root",
                                                    "City",
                                                    post_errors,
                                                    empty_string_allowed=True)
    rqst_state = clean_string_value_from_dict_object(post_data,
                                                     "root",
                                                     "State",
                                                     post_errors,
                                                     empty_string_allowed=True)
    rqst_zipcode = clean_string_value_from_dict_object(
        post_data, "root", "Zipcode", post_errors, empty_string_allowed=True)

    date_met_nav_dict = clean_dict_value_from_dict_object(post_data,
                                                          "root",
                                                          "date_met_nav",
                                                          post_errors,
                                                          none_allowed=True)
    rqst_date_met_nav = None
    if date_met_nav_dict is not None:
        month = clean_int_value_from_dict_object(date_met_nav_dict,
                                                 "date_met_nav", "Month",
                                                 post_errors)
        if month:
            if month < 1 or month > 12:
                post_errors.append("Month must be between 1 and 12 inclusive")

        day = clean_int_value_from_dict_object(date_met_nav_dict,
                                               "date_met_nav", "Day",
                                               post_errors)
        if day:
            if day < 1 or day > 31:
                post_errors.append("Day must be between 1 and 31 inclusive")

        year = clean_int_value_from_dict_object(date_met_nav_dict,
                                                "date_met_nav", "Year",
                                                post_errors)
        if year:
            if year < 1 or year > 9999:
                post_errors.append("Year must be between 1 and 9999 inclusive")

        if not post_errors:
            rqst_date_met_nav = datetime.date(year, month, day)

    rqst_nav_id = clean_int_value_from_dict_object(post_data, "root",
                                                   "Navigator Database ID",
                                                   post_errors)
    nav_instance = None
    if rqst_nav_id and not post_errors:
        try:
            nav_instance = Navigators.objects.get(id=rqst_nav_id)
        except Navigators.DoesNotExist:
            post_errors.append(
                'Staff database entry does not exist for the navigator id: {}'.
                format(rqst_nav_id))

    rqst_cps_consumer = clean_bool_value_from_dict_object(post_data,
                                                          "root",
                                                          "cps_consumer",
                                                          post_errors,
                                                          no_key_allowed=True)
    rqst_cps_info_dict = clean_dict_value_from_dict_object(post_data,
                                                           "root",
                                                           "cps_info",
                                                           post_errors,
                                                           no_key_allowed=True,
                                                           none_allowed=True)
    if rqst_cps_consumer and not rqst_cps_info_dict:
        post_errors.append(
            "cps_info key must be present and a non empty dictionary in order to set cps_consumer to True."
        )

    validated_cps_info_dict = None
    if rqst_cps_info_dict:
        if rqst_cps_consumer:
            validated_cps_info_dict = validate_cps_info_params_for_add_instance_rqst(
                rqst_cps_info_dict, rqst_consumer_met_nav_at,
                rqst_consumer_household_size, nav_instance, post_errors)
        else:
            post_errors.append(
                "cps_consumer key must be True in order to add consumer with cps_info."
            )

    rqst_create_backup = clean_bool_value_from_dict_object(post_data,
                                                           "root",
                                                           "create_backup",
                                                           post_errors,
                                                           no_key_allowed=True)

    rqst_hospital_info_dict = clean_dict_value_from_dict_object(
        post_data,
        "root",
        "consumer_hospital_info",
        post_errors,
        no_key_allowed=True,
        none_allowed=True)
    validated_hospital_info_dict = None
    if rqst_hospital_info_dict:
        validated_hospital_info_dict = validate_hospital_info_params(
            rqst_hospital_info_dict, post_errors)

    return {
        "rqst_consumer_email": rqst_consumer_email,
        "rqst_consumer_f_name": rqst_consumer_f_name,
        "rqst_consumer_m_name": rqst_consumer_m_name,
        "rqst_consumer_l_name": rqst_consumer_l_name,
        "rqst_consumer_plan": rqst_consumer_plan,
        "rqst_consumer_met_nav_at": rqst_consumer_met_nav_at,
        "rqst_consumer_household_size": rqst_consumer_household_size,
        "rqst_consumer_phone": rqst_consumer_phone,
        "rqst_consumer_pref_lang": rqst_consumer_pref_lang,
        "rqst_navigator_notes": rqst_navigator_notes,
        "rqst_nav_id": rqst_nav_id,
        "nav_instance": nav_instance,
        "rqst_address_line_1": rqst_address_line_1,
        "rqst_address_line_2": rqst_address_line_2,
        "rqst_city": rqst_city,
        "rqst_state": rqst_state,
        "rqst_zipcode": rqst_zipcode,
        "rqst_date_met_nav": rqst_date_met_nav,
        "rqst_cps_consumer": rqst_cps_consumer,
        "rqst_cps_info_dict": rqst_cps_info_dict,
        "validated_cps_info_dict": validated_cps_info_dict,
        "validated_hospital_info_dict": validated_hospital_info_dict,
        "rqst_create_backup": rqst_create_backup
    }