@RequestMapping(value = "/transcript/full", method = RequestMethod.GET)
  @PreAuthorize(Permission.SECURITY_PERSON_READ)
  public @ResponseBody ExternalStudentRecordsTO loadFullStudentRecords(final @PathVariable UUID id)
      throws ObjectNotFoundException {
    String schoolId = getStudentId(id);

    final ExternalStudentRecords record = new ExternalStudentRecords();

    record.setPrograms(
        externalStudentAcademicProgramService.getAcademicProgramsBySchoolId(schoolId));
    record.setGPA(externalStudentTranscriptService.getRecordsBySchoolId(schoolId));
    record.setFinancialAid(
        externalStudentFinancialAidService.getStudentFinancialAidBySchoolId(schoolId));
    record.setTerms(externalStudentTranscriptCourseService.getTranscriptsBySchoolId(schoolId));
    record.setFinancialAidAcceptedTerms(
        externalStudentFinancialAidAwardTermService.getStudentFinancialAidAwardsBySchoolId(
            schoolId));
    record.setFinancialAidFiles(
        externalStudentFinancialAidFileService.getStudentFinancialAidFilesBySchoolId(schoolId));
    record.setNonCourseEntities(
        externalStudentTranscriptNonCourseEntityService.getNonCourseTranscriptsBySchoolId(
            schoolId));
    ExternalStudentRecordsTO recordTO =
        new ExternalStudentRecordsTO(record, getBalancedOwed(id, schoolId));

    // update the course faculty names
    updateFactultyNames(recordTO);

    return recordTO;
  }
  @RequestMapping(value = "/transcript/currentcourses", method = RequestMethod.GET)
  @PreAuthorize(Permission.SECURITY_PERSON_READ)
  public @ResponseBody List<ExternalStudentTranscriptCourseTO> loadCurrentCourses(
      final @PathVariable UUID id) throws ObjectNotFoundException {
    String schoolId = getStudentId(id);

    Term currentTerm;
    try {
      currentTerm = termService.getCurrentTerm();
    } catch (ObjectNotFoundException e) {
      currentTerm = new Term();
      LOGGER.error(
          "CURRENT TERM NOT SET, org.jasig.ssp.web.api.external.ExternalStudentRecordsController.loadCurrentCourses(UUID) is being called but will not function properly");
    }
    List<ExternalStudentTranscriptCourseTO> courses =
        externalStudentTranscriptCourseFactory.asTOList(
            externalStudentTranscriptCourseService.getTranscriptsBySchoolIdAndTermCode(
                schoolId, currentTerm.getCode()));
    Collection<EnrollmentStatus> mappings = statusCodeMappings();

    String defaultStatusCode = getDefaultStatusCode(mappings);

    for (ExternalStudentTranscriptCourseTO course : courses) {
      try {
        Person person =
            !StringUtils.isNotBlank(course.getFacultySchoolId())
                ? null
                : personService.getInternalOrExternalPersonBySchoolId(
                    course.getFacultySchoolId(),
                    false); // TODO: getInternalOrExternalPersonBySchoolId is slow refactor?
        if (person != null) {
          course.setFacultyName(person.getFullName());
        }
      } catch (ObjectNotFoundException e) {
        course.setFacultyName("None Listed");
        LOGGER.debug(
            "FACULTY SCHOOL ID WAS NOT RESOLVED WHILE LOADING TRANSCRIPT RECORD.  Factulty School_id: "
                + course.getFacultySchoolId()
                + " Student ID: "
                + course.getSchoolId()
                + " Course: "
                + course.getFormattedCourse());
      }

      if (StringUtils.isBlank(course.getStatusCode())) {
        course.setStatusCode(defaultStatusCode);
      } else if (mappings != null && !mappings.isEmpty()) {
        for (EnrollmentStatus enrollmentStatus : mappings) {
          if (enrollmentStatus.getCode().equals(course.getStatusCode())) {
            course.setStatusCode(enrollmentStatus.getName());
          }
        }
      }
    }
    return courses;
  }