def validate_create_row_params(rqst_body, validated_params, rqst_errors): rqst_location_name = clean_string_value_from_dict_object(rqst_body, "root", "Location Name", rqst_errors) rqst_address_line_1 = clean_string_value_from_dict_object(rqst_body, "root", "Address Line 1", rqst_errors) rqst_address_line_2 = clean_string_value_from_dict_object(rqst_body, "root", "Address Line 2", rqst_errors, empty_string_allowed=True) if rqst_address_line_2 is None: rqst_address_line_2 = '' rqst_city = clean_string_value_from_dict_object(rqst_body, "root", "City", rqst_errors) rqst_state = clean_string_value_from_dict_object(rqst_body, "root", "State", rqst_errors) rqst_zipcode = clean_string_value_from_dict_object(rqst_body, "root", "Zipcode", rqst_errors) rqst_cps_location = clean_bool_value_from_dict_object(rqst_body, "root", "cps_location", rqst_errors, no_key_allowed=True) if not rqst_cps_location: rqst_cps_location = False rqst_country = clean_string_value_from_dict_object(rqst_body, "root", "Country", rqst_errors) country_row = None if rqst_country: try: country_row = Country.objects.get(name__iexact=rqst_country) except Country.DoesNotExist: rqst_errors.append('Row does not exist in database for the country name: {!s}'.format(str(rqst_country))) validated_params["rqst_location_name"] = rqst_location_name validated_params["rqst_address_line_1"] = rqst_address_line_1 validated_params["rqst_address_line_2"] = rqst_address_line_2 validated_params["rqst_city"] = rqst_city validated_params["rqst_state"] = rqst_state validated_params["rqst_zipcode"] = rqst_zipcode validated_params["country_row"] = country_row validated_params["rqst_cps_location"] = rqst_cps_location
def validate_rqst_params_and_delete_instance(post_data, post_errors): """ This function takes dictionary populated with PIC consumer info, parses for errors, and deletes the consumer instance if there are none. :param response_raw_data: (type: dictionary) dictionary that contains response data :param post_data: (type: dictionary) dictionary with PIC consumer info :param post_errors: (type: list) list of error messages :return: (type: dictionary) dictionary that contains response data """ rqst_consumer_id = clean_int_value_from_dict_object( post_data, "root", "Consumer Database ID", post_errors) rqst_create_backup = clean_bool_value_from_dict_object(post_data, "root", "create_backup", post_errors, no_key_allowed=True) backup_consumer_obj = None if not post_errors: backup_consumer_obj = delete_row_w_validated_params( rqst_consumer_id, rqst_create_backup, post_errors) return backup_consumer_obj
def validate_rqst_params_and_add_instance(rqst_consumer_info, rqst_errors): add_consumer_params = validate_add_instance_rqst_params( rqst_consumer_info, rqst_errors) if not add_consumer_params['rqst_cps_consumer']: add_consumer_params['rqst_cps_consumer'] = False add_consumer_params[ 'force_create_consumer'] = clean_bool_value_from_dict_object( rqst_consumer_info, "root", "force_create_consumer", rqst_errors, no_key_allowed=True) matching_consumer_instances = None consumer_instance = None backup_consumer_obj = None if not rqst_errors: matching_consumer_instances, consumer_instance, backup_consumer_obj = create_row_w_validated_params( add_consumer_params, rqst_errors) return matching_consumer_instances, consumer_instance, backup_consumer_obj
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 }