diff --git a/api/src/main/java/ca/bc/gov/educ/grad/report/dao/GradDataConvertionBean.java b/api/src/main/java/ca/bc/gov/educ/grad/report/dao/GradDataConvertionBean.java index 88284e80..81a0daeb 100644 --- a/api/src/main/java/ca/bc/gov/educ/grad/report/dao/GradDataConvertionBean.java +++ b/api/src/main/java/ca/bc/gov/educ/grad/report/dao/GradDataConvertionBean.java @@ -80,7 +80,7 @@ public StudentInfo getStudentInfo(ReportData reportData) { student.getMiddleName(),// String middleName, student.getLastName(),// String lastName, student.getBirthdate() != null ? student.getBirthdate() : null,// Long birthdate, - student.getLocalId(),// String localId, + student.getPen().getEntityId(),// String localId, student.getGender(),// Character studGender, student.getCitizenship(), //citizenship school.getMinistryCode(),// String mincode, @@ -146,7 +146,7 @@ public Student getStudent(ReportData reportData) { } StudentImpl student = new StudentImpl(); BeanUtils.copyProperties(reportData.getStudent(), student); - student.setPen(new PersonalEducationNumberObject(reportData.getStudent().getPen().getPen())); + student.setPen(new PersonalEducationNumberObject(reportData.getStudent().getPen().getPen(), reportData.getStudent().getPen().getEntityID())); PostalAddressImpl address = new PostalAddressImpl(); if (reportData.getStudent().getAddress() != null) { BeanUtils.copyProperties(reportData.getStudent().getAddress(), address); @@ -478,8 +478,7 @@ public Pair, TotalCounts> getStudents(ReportData reportData) { } StudentImpl student = new StudentImpl(); BeanUtils.copyProperties(st, student); - PersonalEducationNumberObject pen = new PersonalEducationNumberObject(st.getPen().getPen()); - pen.setEntityId(st.getPen().getEntityID()); + PersonalEducationNumberObject pen = new PersonalEducationNumberObject(st.getPen().getPen(), st.getPen().getEntityID()); student.setPen(pen); if(result.add(student)) { diff --git a/api/src/main/java/ca/bc/gov/educ/grad/report/dao/StudentTranscriptRepository.java b/api/src/main/java/ca/bc/gov/educ/grad/report/dao/StudentTranscriptRepository.java index 5d52a4cd..62c476ac 100644 --- a/api/src/main/java/ca/bc/gov/educ/grad/report/dao/StudentTranscriptRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/grad/report/dao/StudentTranscriptRepository.java @@ -5,7 +5,9 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import java.util.Date; import java.util.List; +import java.util.Optional; import java.util.UUID; public interface StudentTranscriptRepository extends JpaRepository { @@ -15,4 +17,7 @@ public interface StudentTranscriptRepository extends JpaRepository getStudentTranscriptTypes(UUID graduationStudentRecordId); + + @Query("select max(c.updateDate) as updateDate from StudentTranscriptEntity c where c.graduationStudentRecordId=:graduationStudentRecordId") + Optional getTranscriptLastUpdateDate(UUID graduationStudentRecordId); } \ No newline at end of file diff --git a/api/src/main/java/ca/bc/gov/educ/grad/report/dto/impl/PersonalEducationNumberObject.java b/api/src/main/java/ca/bc/gov/educ/grad/report/dto/impl/PersonalEducationNumberObject.java index 0ddf7328..ef7df0af 100644 --- a/api/src/main/java/ca/bc/gov/educ/grad/report/dto/impl/PersonalEducationNumberObject.java +++ b/api/src/main/java/ca/bc/gov/educ/grad/report/dto/impl/PersonalEducationNumberObject.java @@ -35,6 +35,11 @@ public PersonalEducationNumberObject(String pen) { this.pen = pen; } + public PersonalEducationNumberObject(String pen, String entityId) { + this.pen = pen; + this.entityId = entityId; + } + @Override public String getValue() { return pen; diff --git a/api/src/main/java/ca/bc/gov/educ/grad/report/model/student/PersonalEducationNumber.java b/api/src/main/java/ca/bc/gov/educ/grad/report/model/student/PersonalEducationNumber.java index bfe75739..9251575d 100644 --- a/api/src/main/java/ca/bc/gov/educ/grad/report/model/student/PersonalEducationNumber.java +++ b/api/src/main/java/ca/bc/gov/educ/grad/report/model/student/PersonalEducationNumber.java @@ -25,7 +25,7 @@ public interface PersonalEducationNumber { - public static final PersonalEducationNumber NULL = new PersonalEducationNumberObject(""); + public static final PersonalEducationNumber NULL = new PersonalEducationNumberObject("", ""); String getValue(); diff --git a/api/src/main/java/ca/bc/gov/educ/grad/report/service/impl/GradReportServiceImpl.java b/api/src/main/java/ca/bc/gov/educ/grad/report/service/impl/GradReportServiceImpl.java index 64904d86..a2b9dc13 100644 --- a/api/src/main/java/ca/bc/gov/educ/grad/report/service/impl/GradReportServiceImpl.java +++ b/api/src/main/java/ca/bc/gov/educ/grad/report/service/impl/GradReportServiceImpl.java @@ -33,7 +33,6 @@ import java.io.IOException; import java.io.InputStream; -import java.io.Serializable; import java.net.URL; import java.text.SimpleDateFormat; import java.util.*; @@ -47,7 +46,7 @@ import static java.lang.Integer.parseInt; import static java.util.Locale.CANADA; -public abstract class GradReportServiceImpl implements Serializable { +public abstract class GradReportServiceImpl { private static final long serialVersionUID = 5L; @@ -67,9 +66,9 @@ public abstract class GradReportServiceImpl implements Serializable { @Autowired JsonTransformer jsonTransformer; @Autowired - transient WebClient webClient; + WebClient webClient; @Autowired - transient EducGradReportApiConstants constants; + EducGradReportApiConstants constants; @RolesAllowed({FULFILLMENT_SERVICES_USER}) public Parameters createParameters() { @@ -143,7 +142,7 @@ Certificate getCertificate(ReportData reportData) { InputStream openImageResource(final String resource) throws IOException { - //final URL url = getReportResource(resource); + /** final URL url = getReportResource(resource); **/ URL url = this.getClass().getResource(DIR_IMAGE_BASE + resource); assert url != null; return url.openStream(); diff --git a/api/src/main/java/ca/bc/gov/educ/grad/report/service/impl/StudentTranscriptServiceImpl.java b/api/src/main/java/ca/bc/gov/educ/grad/report/service/impl/StudentTranscriptServiceImpl.java index 02300c95..2673e612 100644 --- a/api/src/main/java/ca/bc/gov/educ/grad/report/service/impl/StudentTranscriptServiceImpl.java +++ b/api/src/main/java/ca/bc/gov/educ/grad/report/service/impl/StudentTranscriptServiceImpl.java @@ -18,8 +18,8 @@ package ca.bc.gov.educ.grad.report.service.impl; import ca.bc.gov.educ.grad.report.api.client.ReportData; -import ca.bc.gov.educ.grad.report.dao.GradDataConvertionBean; import ca.bc.gov.educ.grad.report.dao.ProgramCertificateTranscriptRepository; +import ca.bc.gov.educ.grad.report.dao.StudentTranscriptRepository; import ca.bc.gov.educ.grad.report.dto.impl.*; import ca.bc.gov.educ.grad.report.entity.ProgramCertificateTranscriptEntity; import ca.bc.gov.educ.grad.report.exception.EntityNotFoundException; @@ -108,14 +108,15 @@ public class StudentTranscriptServiceImpl extends GradReportServiceImpl implemen */ private static final String SORT_ASSESSMENT = "100"; - @Autowired - private ReportService reportService; + private final ProgramCertificateTranscriptRepository programCertificateTranscriptRepository; - @Autowired - private GradDataConvertionBean gradDataConvertionBean; + private final StudentTranscriptRepository studentTranscriptRepository; @Autowired - private ProgramCertificateTranscriptRepository programCertificateTranscriptRepository; + public StudentTranscriptServiceImpl(ProgramCertificateTranscriptRepository programCertificateTranscriptRepository, StudentTranscriptRepository studentTranscriptRepository) { + this.programCertificateTranscriptRepository = programCertificateTranscriptRepository; + this.studentTranscriptRepository = studentTranscriptRepository; + } /** * Creates the student's official transcript as a PDF (no other formats are @@ -618,6 +619,17 @@ private StudentTranscriptReport getStudentTranscriptReport( final String gradMessage = studentInfo.getGradMessage(); final List nonGradReasons = adaptReasons(studentInfo); + Date issueDate = transcript.getIssueDate(); + + if(preview && StringUtils.isNotBlank(personalEducationNumber.getEntityId())) { + LOG.log(Level.FINE, "Preview transcript get Last Update Date"); + UUID graduationStudentRecordId = UUID.fromString(personalEducationNumber.getEntityId()); + Optional transcriptLastUpdateDate = studentTranscriptRepository.getTranscriptLastUpdateDate(graduationStudentRecordId); + if(transcriptLastUpdateDate.isPresent()) { + issueDate = transcriptLastUpdateDate.get(); + } + } + final StudentTranscriptReport report = createReport( format, preview, @@ -628,7 +640,7 @@ private StudentTranscriptReport getStudentTranscriptReport( program, nonGradReasons, gradMessage, - transcript.getIssueDate(), + issueDate, parameters, graduationData ); diff --git a/api/src/main/resources/reports/Transcript_BC1950-IND.jrxml b/api/src/main/resources/reports/Transcript_BC1950-IND.jrxml index 8c2f4c9c..6b10666f 100644 --- a/api/src/main/resources/reports/Transcript_BC1950-IND.jrxml +++ b/api/src/main/resources/reports/Transcript_BC1950-IND.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC1950-PUB.jrxml b/api/src/main/resources/reports/Transcript_BC1950-PUB.jrxml index 8c2f4c9c..6b10666f 100644 --- a/api/src/main/resources/reports/Transcript_BC1950-PUB.jrxml +++ b/api/src/main/resources/reports/Transcript_BC1950-PUB.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC1986-IND.jrxml b/api/src/main/resources/reports/Transcript_BC1986-IND.jrxml index cde99a90..3cfc3584 100644 --- a/api/src/main/resources/reports/Transcript_BC1986-IND.jrxml +++ b/api/src/main/resources/reports/Transcript_BC1986-IND.jrxml @@ -141,6 +141,9 @@ + + + @@ -280,7 +283,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC1986-PUB.jrxml b/api/src/main/resources/reports/Transcript_BC1986-PUB.jrxml index cde99a90..3cfc3584 100644 --- a/api/src/main/resources/reports/Transcript_BC1986-PUB.jrxml +++ b/api/src/main/resources/reports/Transcript_BC1986-PUB.jrxml @@ -141,6 +141,9 @@ + + + @@ -280,7 +283,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC1996-IND.jrxml b/api/src/main/resources/reports/Transcript_BC1996-IND.jrxml index a25cfbf8..a42699ab 100644 --- a/api/src/main/resources/reports/Transcript_BC1996-IND.jrxml +++ b/api/src/main/resources/reports/Transcript_BC1996-IND.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC1996-PUB.jrxml b/api/src/main/resources/reports/Transcript_BC1996-PUB.jrxml index 87f0edc3..50a4d243 100644 --- a/api/src/main/resources/reports/Transcript_BC1996-PUB.jrxml +++ b/api/src/main/resources/reports/Transcript_BC1996-PUB.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC2004-IND.jrxml b/api/src/main/resources/reports/Transcript_BC2004-IND.jrxml index 6cbb5d7f..9c989b2e 100644 --- a/api/src/main/resources/reports/Transcript_BC2004-IND.jrxml +++ b/api/src/main/resources/reports/Transcript_BC2004-IND.jrxml @@ -66,7 +66,7 @@ - + @@ -144,6 +144,9 @@ + + + @@ -299,7 +302,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC2004-PUB.jrxml b/api/src/main/resources/reports/Transcript_BC2004-PUB.jrxml index 6cbb5d7f..9c989b2e 100644 --- a/api/src/main/resources/reports/Transcript_BC2004-PUB.jrxml +++ b/api/src/main/resources/reports/Transcript_BC2004-PUB.jrxml @@ -66,7 +66,7 @@ - + @@ -144,6 +144,9 @@ + + + @@ -299,7 +302,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC2018-IND.jrxml b/api/src/main/resources/reports/Transcript_BC2018-IND.jrxml index a25cfbf8..a42699ab 100644 --- a/api/src/main/resources/reports/Transcript_BC2018-IND.jrxml +++ b/api/src/main/resources/reports/Transcript_BC2018-IND.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC2018-OFF.jrxml b/api/src/main/resources/reports/Transcript_BC2018-OFF.jrxml index 87f0edc3..50a4d243 100644 --- a/api/src/main/resources/reports/Transcript_BC2018-OFF.jrxml +++ b/api/src/main/resources/reports/Transcript_BC2018-OFF.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC2018-PF.jrxml b/api/src/main/resources/reports/Transcript_BC2018-PF.jrxml index db78e2d1..90abfcde 100644 --- a/api/src/main/resources/reports/Transcript_BC2018-PF.jrxml +++ b/api/src/main/resources/reports/Transcript_BC2018-PF.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC2018-PUB.jrxml b/api/src/main/resources/reports/Transcript_BC2018-PUB.jrxml index 87f0edc3..50a4d243 100644 --- a/api/src/main/resources/reports/Transcript_BC2018-PUB.jrxml +++ b/api/src/main/resources/reports/Transcript_BC2018-PUB.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC2023-IND.jrxml b/api/src/main/resources/reports/Transcript_BC2023-IND.jrxml index a25cfbf8..a42699ab 100644 --- a/api/src/main/resources/reports/Transcript_BC2023-IND.jrxml +++ b/api/src/main/resources/reports/Transcript_BC2023-IND.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC2023-OFF.jrxml b/api/src/main/resources/reports/Transcript_BC2023-OFF.jrxml index 87f0edc3..50a4d243 100644 --- a/api/src/main/resources/reports/Transcript_BC2023-OFF.jrxml +++ b/api/src/main/resources/reports/Transcript_BC2023-OFF.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC2023-PF.jrxml b/api/src/main/resources/reports/Transcript_BC2023-PF.jrxml index db78e2d1..90abfcde 100644 --- a/api/src/main/resources/reports/Transcript_BC2023-PF.jrxml +++ b/api/src/main/resources/reports/Transcript_BC2023-PF.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_BC2023-PUB.jrxml b/api/src/main/resources/reports/Transcript_BC2023-PUB.jrxml index 87f0edc3..50a4d243 100644 --- a/api/src/main/resources/reports/Transcript_BC2023-PUB.jrxml +++ b/api/src/main/resources/reports/Transcript_BC2023-PUB.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_NOPROG.jrxml b/api/src/main/resources/reports/Transcript_NOPROG.jrxml index dd4a12bc..16141f24 100644 --- a/api/src/main/resources/reports/Transcript_NOPROG.jrxml +++ b/api/src/main/resources/reports/Transcript_NOPROG.jrxml @@ -144,6 +144,9 @@ + + + @@ -299,7 +302,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_SCCP-EN.jrxml b/api/src/main/resources/reports/Transcript_SCCP-EN.jrxml index a25cfbf8..a42699ab 100644 --- a/api/src/main/resources/reports/Transcript_SCCP-EN.jrxml +++ b/api/src/main/resources/reports/Transcript_SCCP-EN.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_SCCP-FR.jrxml b/api/src/main/resources/reports/Transcript_SCCP-FR.jrxml index 87f0edc3..50a4d243 100644 --- a/api/src/main/resources/reports/Transcript_SCCP-FR.jrxml +++ b/api/src/main/resources/reports/Transcript_SCCP-FR.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_YU1950-PUB.jrxml b/api/src/main/resources/reports/Transcript_YU1950-PUB.jrxml index a25cfbf8..a42699ab 100644 --- a/api/src/main/resources/reports/Transcript_YU1950-PUB.jrxml +++ b/api/src/main/resources/reports/Transcript_YU1950-PUB.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_YU1986-PUB.jrxml b/api/src/main/resources/reports/Transcript_YU1986-PUB.jrxml index cde99a90..3cfc3584 100644 --- a/api/src/main/resources/reports/Transcript_YU1986-PUB.jrxml +++ b/api/src/main/resources/reports/Transcript_YU1986-PUB.jrxml @@ -141,6 +141,9 @@ + + + @@ -280,7 +283,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + diff --git a/api/src/main/resources/reports/Transcript_YU1996-PUB.jrxml b/api/src/main/resources/reports/Transcript_YU1996-PUB.jrxml index 7d43ab85..50a4d243 100644 --- a/api/src/main/resources/reports/Transcript_YU1996-PUB.jrxml +++ b/api/src/main/resources/reports/Transcript_YU1996-PUB.jrxml @@ -141,6 +141,9 @@ + + + @@ -230,6 +233,9 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC + + + @@ -293,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + @@ -386,6 +392,9 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC + + + diff --git a/api/src/main/resources/reports/Transcript_YU2004-PUB.jrxml b/api/src/main/resources/reports/Transcript_YU2004-PUB.jrxml index 5d8f1020..1d097d1c 100644 --- a/api/src/main/resources/reports/Transcript_YU2004-PUB.jrxml +++ b/api/src/main/resources/reports/Transcript_YU2004-PUB.jrxml @@ -144,6 +144,9 @@ + + + @@ -299,7 +302,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + @@ -392,6 +395,9 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC + + + diff --git a/api/src/main/resources/reports/Transcript_YU2018-PUB.jrxml b/api/src/main/resources/reports/Transcript_YU2018-PUB.jrxml index 19313c49..50a4d243 100644 --- a/api/src/main/resources/reports/Transcript_YU2018-PUB.jrxml +++ b/api/src/main/resources/reports/Transcript_YU2018-PUB.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + @@ -389,6 +392,9 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC + + + diff --git a/api/src/main/resources/reports/Transcript_YU2023-PUB.jrxml b/api/src/main/resources/reports/Transcript_YU2023-PUB.jrxml index 19313c49..50a4d243 100644 --- a/api/src/main/resources/reports/Transcript_YU2023-PUB.jrxml +++ b/api/src/main/resources/reports/Transcript_YU2023-PUB.jrxml @@ -141,6 +141,9 @@ + + + @@ -296,7 +299,7 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC - + @@ -389,6 +392,9 @@ $V{V_SCHOOL_ADDRESS_POSTAL_CODE_NO_WHITESPACE}.substring( 0, 3 ) + " " + $V{V_SC + + + diff --git a/api/src/test/java/ca/bc/gov/educ/grad/report/api/test/GradReportBaseTest.java b/api/src/test/java/ca/bc/gov/educ/grad/report/api/test/GradReportBaseTest.java index cbc470d5..47170d60 100644 --- a/api/src/test/java/ca/bc/gov/educ/grad/report/api/test/GradReportBaseTest.java +++ b/api/src/test/java/ca/bc/gov/educ/grad/report/api/test/GradReportBaseTest.java @@ -10,6 +10,7 @@ import ca.bc.gov.educ.grad.report.entity.StudentTranscriptEntity; import ca.bc.gov.educ.grad.report.model.district.District; import ca.bc.gov.educ.grad.report.utils.EducGradReportApiConstants; +import org.apache.commons.lang3.StringUtils; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; @@ -184,15 +185,20 @@ protected GraduationStudentRecord mockGraduationStudentRecord(String pen, String when(this.studentTranscriptRepository.findByGraduationStudentRecordId(graduationStudentRecord.getStudentID())).thenReturn(studentTranscriptEntity); when(this.studentCertificateRepository.getCertificateDistributionDate(graduationStudentRecord.getStudentID())).thenReturn(Optional.of(new Date())); + when(this.studentTranscriptRepository.getTranscriptLastUpdateDate(graduationStudentRecord.getStudentID())).thenReturn(Optional.of(new Date())); when(this.studentReportRepository.getReportUpdatedTimestamp(graduationStudentRecord.getStudentID())).thenReturn(Optional.of(new Date())); return graduationStudentRecord; } - protected GradSearchStudent mockGradSearchStudent(String pen) { + protected GradSearchStudent mockGradSearchStudent(String pen, String entityId) { GradSearchStudent gradSearchStudent = new GradSearchStudent(); gradSearchStudent.setPen(pen); - gradSearchStudent.setStudentID(UUID.randomUUID().toString()); + if(StringUtils.isNotBlank(entityId)) { + gradSearchStudent.setStudentID(entityId); + } else { + gradSearchStudent.setStudentID(UUID.randomUUID().toString()); + } final ParameterizedTypeReference> gradSearchStudentResponseType = new ParameterizedTypeReference<>() { }; diff --git a/api/src/test/java/ca/bc/gov/educ/grad/report/api/test/service/GradReportApiPackingSlipServiceTests.java b/api/src/test/java/ca/bc/gov/educ/grad/report/api/test/service/GradReportApiPackingSlipServiceTests.java index c2f43568..a0dc0e5c 100644 --- a/api/src/test/java/ca/bc/gov/educ/grad/report/api/test/service/GradReportApiPackingSlipServiceTests.java +++ b/api/src/test/java/ca/bc/gov/educ/grad/report/api/test/service/GradReportApiPackingSlipServiceTests.java @@ -70,9 +70,10 @@ public void testPackingSlipReport() throws Exception { achievementReportRequest.getOptions().setReportFile("Student Achievement Report (New).pdf"); String pen = achievementReportRequest.getData().getStudent().getPen().getPen(); + String entityId = achievementReportRequest.getData().getStudent().getPen().getEntityID(); achievementReportRequest.getOptions().setReportFile(String.format(achievementReportRequest.getOptions().getReportFile(), pen)); - GraduationStudentRecord graduationStudentRecord = mockGraduationStudentRecord(pen, mockGradSearchStudent(pen).getStudentID()); + GraduationStudentRecord graduationStudentRecord = mockGraduationStudentRecord(pen, mockGradSearchStudent(pen, entityId).getStudentID()); assertNotNull(graduationStudentRecord); assertNotNull(graduationStudentRecord.getLastUpdateDate()); diff --git a/api/src/test/java/ca/bc/gov/educ/grad/report/api/test/service/GradReportApiTranscriptServiceTests.java b/api/src/test/java/ca/bc/gov/educ/grad/report/api/test/service/GradReportApiTranscriptServiceTests.java index e020e313..828089b0 100644 --- a/api/src/test/java/ca/bc/gov/educ/grad/report/api/test/service/GradReportApiTranscriptServiceTests.java +++ b/api/src/test/java/ca/bc/gov/educ/grad/report/api/test/service/GradReportApiTranscriptServiceTests.java @@ -64,9 +64,10 @@ public void createStudentAchievementReport() throws Exception { ReportRequestDataThreadLocal.setReportData(reportRequest.getData()); String pen = reportRequest.getData().getStudent().getPen().getPen(); + String entityId = reportRequest.getData().getStudent().getPen().getEntityID(); reportRequest.getOptions().setReportFile(String.format(reportRequest.getOptions().getReportFile(), pen)); - GraduationStudentRecord graduationStudentRecord = mockGraduationStudentRecord(pen, mockGradSearchStudent(pen).getStudentID()); + GraduationStudentRecord graduationStudentRecord = mockGraduationStudentRecord(pen, mockGradSearchStudent(pen, entityId).getStudentID()); assertNotNull(graduationStudentRecord); assertNotNull(graduationStudentRecord.getLastUpdateDate()); @@ -112,7 +113,9 @@ public void createStudentAchievementReportError() throws Exception { mockTraxSchool(adaptTraxSchool(getReportDataSchool(reportRequest.getData()))); reportRequest.getOptions().setReportFile(String.format(reportRequest.getOptions().getReportFile(), pen)); - GraduationStudentRecord graduationStudentRecord = mockGraduationStudentRecord(pen, mockGradSearchStudent(pen).getStudentID()); + String entityId = reportRequest.getData().getStudent().getPen().getEntityID(); + + GraduationStudentRecord graduationStudentRecord = mockGraduationStudentRecord(pen, mockGradSearchStudent(pen, entityId).getStudentID()); assertNotNull(graduationStudentRecord); assertNotNull(graduationStudentRecord.getLastUpdateDate()); @@ -243,6 +246,11 @@ public void createTranscriptReport_YU2023_PUB() throws Exception { createTranscriptReport("createTranscriptReport_YU2023_PUB", "json/studentTranscriptReportRequest-YU2023-PUB.json"); } + @Test + public void createTranscriptReport_YU2023_PUB_PREVIEW() throws Exception { + createTranscriptReport("createTranscriptReport_YU2023_PUB_PREVIEW", "json/studentTranscriptReportRequest-YU2023-PUB-PREVIEW.json"); + } + @Test public void createTranscriptReport_BC2023_IND() throws Exception { createTranscriptReport("createTranscriptReport_BC2023_IND", "json/studentTranscriptReportRequest-BC2023-IND.json"); @@ -359,9 +367,10 @@ void createTranscriptReport(String methodName, String jsonPath, GraduationProgra ReportRequestDataThreadLocal.setReportData(reportRequest.getData()); String pen = reportRequest.getData().getStudent().getPen().getPen(); + String entityId = reportRequest.getData().getStudent().getPen().getEntityID(); reportRequest.getOptions().setReportFile(String.format(reportRequest.getOptions().getReportFile(), pen)); - GraduationStudentRecord graduationStudentRecord = mockGraduationStudentRecord(pen, mockGradSearchStudent(pen).getStudentID()); + GraduationStudentRecord graduationStudentRecord = mockGraduationStudentRecord(pen, mockGradSearchStudent(pen, entityId).getStudentID()); assertNotNull(graduationStudentRecord); assertNotNull(graduationStudentRecord.getLastUpdateDate()); @@ -397,9 +406,10 @@ public void createTranscriptReport_NOTELIG_NOPROG() throws Exception { ReportRequestDataThreadLocal.setReportData(reportRequest.getData()); String pen = reportRequest.getData().getStudent().getPen().getPen(); + String entityId = reportRequest.getData().getStudent().getPen().getEntityID(); reportRequest.getOptions().setReportFile(String.format(reportRequest.getOptions().getReportFile(), pen)); - GraduationStudentRecord graduationStudentRecord = mockGraduationStudentRecord(pen, mockGradSearchStudent(pen).getStudentID()); + GraduationStudentRecord graduationStudentRecord = mockGraduationStudentRecord(pen, mockGradSearchStudent(pen, entityId).getStudentID()); assertNotNull(graduationStudentRecord); assertNotNull(graduationStudentRecord.getLastUpdateDate()); @@ -423,9 +433,10 @@ public void createXmlTranscriptReport() throws Exception { ReportRequestDataThreadLocal.setXmlReportData(reportRequest.getData()); String pen = reportRequest.getData().getPen().getPen(); + String entityId = reportRequest.getData().getPen().getEntityID(); reportRequest.getOptions().setReportFile(String.format(reportRequest.getOptions().getReportFile(), pen)); - GraduationStudentRecord graduationStudentRecord = mockGraduationStudentRecord(pen, mockGradSearchStudent(pen).getStudentID()); + GraduationStudentRecord graduationStudentRecord = mockGraduationStudentRecord(pen, mockGradSearchStudent(pen, entityId).getStudentID()); assertNotNull(graduationStudentRecord); assertNotNull(graduationStudentRecord.getLastUpdateDate()); diff --git a/api/src/test/resources/json/studentTranscriptReportRequest-BC2018-IND-PREVIEW.json b/api/src/test/resources/json/studentTranscriptReportRequest-BC2018-IND-PREVIEW.json index 8348fb08..9e3272b4 100644 --- a/api/src/test/resources/json/studentTranscriptReportRequest-BC2018-IND-PREVIEW.json +++ b/api/src/test/resources/json/studentTranscriptReportRequest-BC2018-IND-PREVIEW.json @@ -9,8 +9,8 @@ "data": { "student": { "pen": { - "pen": "11111111", - "entityId": null + "pen": "147395586", + "entityID": "0a614e84-7e27-1815-817f-095c58d42de1" }, "firstName": "TCHAKA MAGUMU NORA", "middleName": "WEBDY HILDA ROSE", diff --git a/api/src/test/resources/json/studentTranscriptReportRequest-YU2023-PUB-PREVIEW.json b/api/src/test/resources/json/studentTranscriptReportRequest-YU2023-PUB-PREVIEW.json new file mode 100644 index 00000000..d8a402a7 --- /dev/null +++ b/api/src/test/resources/json/studentTranscriptReportRequest-YU2023-PUB-PREVIEW.json @@ -0,0 +1,850 @@ +{ + "options": { + "cacheReport": false, + "convertTo": "pdf", + "overwrite": false, + "preview": true, + "reportName": "transcript", + "reportFile": "Transcript Report YU2023-PUB-PREVIEW.pdf" + }, + "data": { + "student": { + "pen": { + "pen": "11111111", + "entityId": null + }, + "firstName": "JOHN", + "middleName": "PIRATE", + "lastName": "SILVER", + "gender": "M", + "birthdate": "2002-08-05", + "address": { + "streetLine1": "HISPANIOLA", + "streetLine2": "", + "city": "SHOONER", + "region": "BOAT", + "country": "VESSEL", + "code": "PAC SEA" + }, + "grade": "12", + "studStatus": "CUR", + "sccDate": "", + "mincodeGrad": "03939008", + "englishCert": "E", + "frenchCert": "F" + }, + "school": { + "mincode": "03939008", + "name": "LORD BYNG SECONDARY", + "typeIndicator": "", + "typeBanner": "", + "signatureCode": "039", + "distno": "039", + "schlno": "03939008", + "schoolCategoryCode": "", + "address": { + "streetLine1": "3939 16TH AVENUE W", + "streetLine2": "", + "city": "VANCOUVER", + "region": "BC", + "country": "", + "code": "V6R3C9" + } + }, + "logo": "YU", + "nonGradReasons" : [ + { + "code": "101", + "description" : "No Language Arts 10" + }, + { + "code": "107", + "description" : "No Mathematics 11 or 12" + } + ], + "transcript": { + "interim": true, + "issueDate": "2021-04-26", + "code": { + "code": "YU2023-PUB", + "description": "2023 Public School Transcript Yukon" + }, + "results": [ + { + "course": { + "name": "ENGLISH 10", + "code": "EN", + "level": "10", + "credits": "4", + "sessionDate": "201806", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "52", + "finalLetterGrade": "C-", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "1", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "FOUNDATIONS OF MATH AND PRE-CALCULUS 10", + "code": "FMP", + "level": "10", + "credits": "4", + "sessionDate": "201806", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "50", + "finalLetterGrade": "C-", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "6", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "JAPANESE 10", + "code": "JA", + "level": "10", + "credits": "4", + "sessionDate": "201806", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "62", + "finalLetterGrade": "C", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "MUSIC 10", + "code": "MCB", + "level": "10", + "credits": "4", + "sessionDate": "201806", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "79", + "finalLetterGrade": "B", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "11", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "PHYSICAL EDUCATION 10 ", + "code": "PE", + "level": "10", + "credits": "4", + "sessionDate": "201806", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "78", + "finalLetterGrade": "B", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "10", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "PLANNING 10", + "code": "PLAN", + "level": "10", + "credits": "4", + "sessionDate": "201806", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "50", + "finalLetterGrade": "C-", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "12", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "SCIENCE 10", + "code": "SC", + "level": "10", + "credits": "4", + "sessionDate": "201806", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "53", + "finalLetterGrade": "C-", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "8", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "SOCIAL STUDIES 10", + "code": "SS", + "level": "10", + "credits": "4", + "sessionDate": "201806", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "61", + "finalLetterGrade": "C", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "4", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "BIOLOGY 11", + "code": "BI", + "level": "11", + "credits": "4", + "sessionDate": "201906", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "65", + "finalLetterGrade": "C", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "9", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "ENGLISH 11", + "code": "EN", + "level": "11", + "credits": "4", + "sessionDate": "201906", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "51", + "finalLetterGrade": "C-", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "2", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "FOUNDATIONS OF MATHEMATICS 11", + "code": "FOM", + "level": "11", + "credits": "4", + "sessionDate": "202009", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "50", + "finalLetterGrade": "C-", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "7", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "PHYSICAL EDUCATION 11", + "code": "PE", + "level": "11", + "credits": "4", + "sessionDate": "201906", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "82", + "finalLetterGrade": "B", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "MARINE RADIO", + "code": "MR", + "level": "11", + "credits": "6", + "sessionDate": "202005", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "90", + "finalLetterGrade": "A", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "FIRST AID", + "code": "FAID", + "level": "12", + "credits": "3", + "sessionDate": "202005", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "85", + "finalLetterGrade": "A", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "MARINE NAVIGATION", + "code": "MN", + "level": "11", + "credits": "6", + "sessionDate": "202005", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "90", + "finalLetterGrade": "A", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "ADVANCE FIREFIGHTING", + "code": "ADVFIRE", + "level": "11", + "credits": "6", + "sessionDate": "202005", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "90", + "finalLetterGrade": "A", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "SHIP COOK ASSESSMENT", + "code": "SCA", + "level": "11", + "credits": "6", + "sessionDate": "202005", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "90", + "finalLetterGrade": "A", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "MARINE ENGINES", + "code": "MENG", + "level": "11", + "credits": "6", + "sessionDate": "202005", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "90", + "finalLetterGrade": "A", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "YACHTMASTER OFFSHORE", + "code": "YMO", + "level": "12", + "credits": "4", + "sessionDate": "202005", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "76", + "finalLetterGrade": "B", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "YACHTMASTER OCEAN", + "code": "YMO", + "level": "11", + "credits": "4", + "sessionDate": "202005", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "76", + "finalLetterGrade": "B", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "ACTIVE LIVING 12 ", + "code": "ACLV", + "level": "12", + "credits": "4", + "sessionDate": "202005", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "50", + "finalLetterGrade": "C-", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "ANATOMY AND PHYSIOLOGY 12", + "code": "ATPH", + "level": "12", + "credits": "4", + "sessionDate": "202004", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "50", + "finalLetterGrade": "C-", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "COMPARATIVE CULTURES 12", + "code": "CMCL", + "level": "12", + "credits": "4", + "sessionDate": "202005", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "76", + "finalLetterGrade": "B", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "ENGLISH FIRST PEOPLES 12", + "code": "ENFP", + "level": "12", + "credits": "4", + "sessionDate": "202005", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "73", + "finalLetterGrade": "B", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "3", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "GEOGRAPHY 12", + "code": "GEO", + "level": "12", + "credits": "4", + "sessionDate": "201906", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "79", + "finalLetterGrade": "B", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "5", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "20TH CENTURY WORLD HISTORY 12", + "code": "WH", + "level": "12", + "credits": "4", + "sessionDate": "202005", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "60", + "finalLetterGrade": "C", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "GRADUATION TRANSITIONS", + "code": "GT", + "level": "", + "credits": "4", + "sessionDate": "201906", + "type": "2", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "", + "finalLetterGrade": "RM", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "13", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "LITERACY ASSESSMENT 10", + "code": "LTE10", + "level": "", + "credits": "4", + "sessionDate": "201906", + "type": "3", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "XMT", + "finalLetterGrade": "NA", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "15", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "LITERACY ASSESSMENT 12", + "code": "LTE12", + "level": "", + "credits": "4", + "sessionDate": "202106", + "type": "3", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "XMT", + "finalLetterGrade": "NA", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "18", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "NUMERACY ASSESSMENT 10", + "code": "NME", + "level": "", + "credits": "4", + "sessionDate": "201806", + "type": "3", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "3", + "finalLetterGrade": "NA", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "16", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + }, + { + "course": { + "name": "NUMERACY ASSESSMENT 11", + "code": "NME", + "level": "", + "credits": "4", + "sessionDate": "201806", + "type": "3", + "relatedCourse": "", + "relatedLevel": "" + }, + "mark": { + "schoolPercent": "", + "examPercent": "", + "finalPercent": "3", + "finalLetterGrade": "NA", + "interimPercent": "", + "interimLetterGrade": "" + }, + "requirement": "16", + "requirementName": "", + "equivalency": "", + "usedForGrad": "" + } + ] + }, + "gradProgram": { + "description": null, + "code": { + "code": "2023-EN", + "description": "Graduation Program 2023", + "credits": 80 + } + }, + "graduationData": { + "graduationDate": "2020-09-01", + "honorsFlag": false, + "dogwoodFlag": false, + "programCodes": [ + "", + "", + "", + "", + "" + ], + "programNames": [ + "", + "", + "", + "", + "" + ], + "totalCreditsUsedForGrad": "0" + }, + "gradMessage": "Based on the information provided by the school, this student has graduated in the Graduation Program 1995. Graduation date: September 2020.", + "updateDate": "2021-04-26" + } +} \ No newline at end of file