'Return all information about the user\'s credit state inside of a given
course.
ARGS:
- user_id: The PK of the User in question
- course_key: The course ID (as string or CourseKey)
RETURNS:
NONE (user not found or is not enrolled or is not credit course)
- or -
\'enrollment_mode\': the mode that the user is enrolled in the course
\'profile_fullname\': the name that the student registered under, used for verification
\'is_credit_course\': if the course has been marked as a credit bearing course
\'credit_requirement_status\': the user\'s status in fulfilling those requirements
\'course_name\': optional display name of the course
\'course_end_date\': optional end date of the course'

def get_credit_state(self, user_id, course_key_or_id, return_course_info=False):

    from openedx.core.djangoapps.credit.api.eligibility import is_credit_course, get_credit_requirement_status
    try:
        user = User.objects.select_related('profile').get(id=user_id)
    except ObjectDoesNotExist:
        return None
    course_key = _get_course_key(course_key_or_id)
    enrollment = CourseEnrollment.get_enrollment(user, course_key)
    if ((not enrollment) or (not enrollment.is_active)):
        return None
    result = {'enrollment_mode': enrollment.mode, 'profile_fullname': user.profile.name, 'student_email': user.email, 'is_credit_course': is_credit_course(course_key), 'credit_requirement_status': get_credit_requirement_status(course_key, user.username)}
    if return_course_info:
        course = modulestore().get_course(course_key, depth=0)
        result.update({'course_name': course.display_name, 'course_end_date': course.end})
    return result
