diff --git a/src/main/java/com/tarento/upsmf/examsAndAdmissions/controller/HallTicketController.java b/src/main/java/com/tarento/upsmf/examsAndAdmissions/controller/HallTicketController.java index dad3d39b18eacb8bf07b1853274e46ac8e41c7c4..b82a7fc8ca9c7a904292259868ff5e5a7253612f 100644 --- a/src/main/java/com/tarento/upsmf/examsAndAdmissions/controller/HallTicketController.java +++ b/src/main/java/com/tarento/upsmf/examsAndAdmissions/controller/HallTicketController.java @@ -86,6 +86,7 @@ public class HallTicketController { @PostMapping("/dataCorrection/request") public ResponseEntity<ResponseDto> requestDataCorrection( @RequestParam("studentId") Long studentId, + @RequestParam("examCycleId") Long examCycleId, @RequestParam(value = "updatedFirstName", required = false) Optional<String> updatedFirstNameOpt, @RequestParam(value = "updatedLastName", required = false) Optional<String> updatedLastNameOpt, @RequestParam(value = "updatedDOB", required = false) Optional<String> dobOpt, // Taking as string for optional handling @@ -96,7 +97,7 @@ public class HallTicketController { String updatedLastName = updatedLastNameOpt.orElse(null); LocalDate updatedDOB = dobOpt.isPresent() ? LocalDate.parse(dobOpt.get()) : null; - ResponseDto responseDto = hallTicketService.requestHallTicketDataCorrection(studentId, updatedFirstName, updatedLastName, updatedDOB, proof); + ResponseDto responseDto = hallTicketService.requestHallTicketDataCorrection(studentId,examCycleId, updatedFirstName, updatedLastName, updatedDOB, proof); return ResponseEntity.status(responseDto.getResponseCode().value()).body(responseDto); } diff --git a/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/dto/DataCorrectionRequest.java b/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/dto/DataCorrectionRequest.java index feea047a6ac81f8929287bbb912da6959f8eeba0..0eecb6a7f293e4932864fe49501f42d97b5b578d 100644 --- a/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/dto/DataCorrectionRequest.java +++ b/src/main/java/com/tarento/upsmf/examsAndAdmissions/model/dto/DataCorrectionRequest.java @@ -1,6 +1,7 @@ package com.tarento.upsmf.examsAndAdmissions.model.dto; import com.tarento.upsmf.examsAndAdmissions.model.Exam; +import com.tarento.upsmf.examsAndAdmissions.model.ExamCycle; import com.tarento.upsmf.examsAndAdmissions.model.Student; import lombok.*; @@ -20,6 +21,9 @@ public class DataCorrectionRequest { @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "student_id") private Student student; + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "exam_cycle_id") + private ExamCycle examCycle; private String requestedCorrection; private String status; private String rejectionReason; diff --git a/src/main/java/com/tarento/upsmf/examsAndAdmissions/repository/StudentExamRegistrationRepository.java b/src/main/java/com/tarento/upsmf/examsAndAdmissions/repository/StudentExamRegistrationRepository.java index be2e6ec4bf7423f33e18b55405605aac83b35bc5..d9d376fb5281eb790890cb1fd49067c99170309d 100644 --- a/src/main/java/com/tarento/upsmf/examsAndAdmissions/repository/StudentExamRegistrationRepository.java +++ b/src/main/java/com/tarento/upsmf/examsAndAdmissions/repository/StudentExamRegistrationRepository.java @@ -58,4 +58,7 @@ public interface StudentExamRegistrationRepository extends JpaRepository<Student @Query("SELECT s FROM Student s WHERE s.verificationStatus = com.tarento.upsmf.examsAndAdmissions.enums.VerificationStatus.VERIFIED AND s.institute.id = :instituteId AND NOT EXISTS (SELECT ser FROM StudentExamRegistration ser WHERE ser.student.id = s.id AND ser.examCycle.id = :examCycleId)") List<Student> findVerifiedStudentsNotRegisteredForExamCycleByInstitute(Long examCycleId, Long instituteId); + StudentExamRegistration getByStudentId(Long id); + + StudentExamRegistration getByStudentIdAndExamCycleId(Long studentId, Long examCycleId); } diff --git a/src/main/java/com/tarento/upsmf/examsAndAdmissions/repository/StudentResultRepository.java b/src/main/java/com/tarento/upsmf/examsAndAdmissions/repository/StudentResultRepository.java index deca016259a76f8367f96441a3527f53d1e59b65..0f955088eb4697bbb88e99cdb98015976faa488e 100644 --- a/src/main/java/com/tarento/upsmf/examsAndAdmissions/repository/StudentResultRepository.java +++ b/src/main/java/com/tarento/upsmf/examsAndAdmissions/repository/StudentResultRepository.java @@ -39,11 +39,12 @@ public interface StudentResultRepository extends JpaRepository<StudentResult, Lo @Transactional @Query("UPDATE StudentResult sr SET sr.externalMarks = null, sr.passingExternalMarks = null, sr.externalMarksObtained = null, sr.finalMarkFlag = false, sr.published = false WHERE sr.examCycle_name = :examCycleName AND sr.instituteId = :instituteId") int setExternalMarksToNull(@Param("examCycleName") String examCycleName, @Param("instituteId") Long instituteId); - @Query("SELECT sr FROM StudentResult sr WHERE sr.firstName = :firstName AND sr.lastName = :lastName AND sr.enrollmentNumber = :enrollmentNumber") - StudentResult findByFirstNameAndLastNameAndEnrollmentNumber( + @Query("SELECT sr FROM StudentResult sr WHERE sr.firstName = :firstName AND sr.lastName = :lastName AND sr.enrollmentNumber = :enrollmentNumber AND sr.exam_name = :examName") + StudentResult findByFirstNameAndLastNameAndEnrollmentNumberAndExamName( @Param("firstName") String firstName, @Param("lastName") String lastName, - @Param("enrollmentNumber") String enrollmentNumber + @Param("enrollmentNumber") String enrollmentNumber, + @Param("examName") String examName ); Optional<StudentResult> findByExamId(Long id); diff --git a/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/DataImporterService.java b/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/DataImporterService.java index 6544c97158f4488e4353228527147ab811560f02..34411026cbf6d109210ea0fbe0972c673f97adcb 100644 --- a/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/DataImporterService.java +++ b/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/DataImporterService.java @@ -425,7 +425,7 @@ public class DataImporterService { } } if (validationErrors.isEmpty()) { - StudentResult existingEntity = repository.findByFirstNameAndLastNameAndEnrollmentNumber(dto.getFirstName(), dto.getLastName(), dto.getEnrollmentNumber()); + StudentResult existingEntity = repository.findByFirstNameAndLastNameAndEnrollmentNumberAndExamName(dto.getFirstName(), dto.getLastName(), dto.getEnrollmentNumber(), dto.getExam_name()); List<StudentResult> marks = calculateResult(existingEntity.getInternalMarks(), existingEntity.getPassingInternalMarks(), existingEntity.getInternalMarksObtained(), existingEntity.getPracticalMarks(), existingEntity.getPassingPracticalMarks(), existingEntity.getPracticalMarksObtained(), dto.getExternalMarks(), dto.getPassingExternalMarks(), dto.getExternalMarksObtained()); @@ -483,7 +483,7 @@ public class DataImporterService { } } if (validationErrors.isEmpty()) { - StudentResult existingEntity = repository.findByFirstNameAndLastNameAndEnrollmentNumber(dto.getFirstName(), dto.getLastName(), dto.getEnrollmentNumber()); + StudentResult existingEntity = repository.findByFirstNameAndLastNameAndEnrollmentNumberAndExamName(dto.getFirstName(), dto.getLastName(), dto.getEnrollmentNumber(),dto.getExam_name()); List<StudentResult> marks = calculateResult(existingEntity.getInternalMarks(), existingEntity.getPassingInternalMarks(), existingEntity.getInternalMarksObtained(), existingEntity.getPracticalMarks(), existingEntity.getPassingPracticalMarks(), existingEntity.getPracticalMarksObtained(), dto.getExternalMarks(), dto.getPassingExternalMarks(), dto.getExternalMarksObtained()); diff --git a/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/HallTicketService.java b/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/HallTicketService.java index 52a2b73528a3968aaf4bd530e53adcb47ebabac5..0609cc938bc4741998826cb7de3316da0af3e329 100644 --- a/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/HallTicketService.java +++ b/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/HallTicketService.java @@ -51,6 +51,8 @@ public class HallTicketService { DataCorrectionRequestRepository dataCorrectionRequestRepository; @Autowired private StudentRepository studentRepository; + @Autowired + private ExamCycleRepository examCycleRepository; @Autowired private StudentExamRegistrationRepository studentExamRegistrationRepository; @@ -253,6 +255,7 @@ public class HallTicketService { } public ResponseDto requestHallTicketDataCorrection(Long studentId, + Long examCycleId, String updatedFirstName, String updatedLastName, LocalDate updatedDOB, @@ -271,6 +274,12 @@ public class HallTicketService { setErrorResponse(response, "PROOF_MISSING", "Proof attachment is required", HttpStatus.BAD_REQUEST); return response; } + Optional<ExamCycle> optionalExamCycle = examCycleRepository.findById(examCycleId); + + if (!optionalExamCycle.isPresent()) { + setErrorResponse(response, "INVALID_EXAMCYCLEID", "Invalid ExamCycle ID", HttpStatus.BAD_REQUEST); + return response; + } DataCorrectionRequest request = new DataCorrectionRequest(); request.setStudent(optionalStudent.get()); @@ -283,6 +292,7 @@ public class HallTicketService { if (updatedDOB != null) { request.setUpdatedDOB(updatedDOB); } + request.setExamCycle(optionalExamCycle.get()); request.setStatus("NEW"); String path = studentService.storeFile(proof); @@ -330,7 +340,7 @@ public class HallTicketService { formattedRequest.put("lastName", student.getSurname()); // changed from 'surName' formattedRequest.put("enrollmentNumber", student.getEnrollmentNumber()); - StudentExamRegistration registration = studentExamRegistrationRepository.findByStudent(student); + StudentExamRegistration registration = studentExamRegistrationRepository.getByStudentIdAndExamCycleId(student.getId(),request.getExamCycle().getId()); if (registration != null) { Map<String, Object> examCycleData = new HashMap<>(); ExamCycle examCycle = registration.getExamCycle(); diff --git a/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/StudentResultService.java b/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/StudentResultService.java index f41a91b25408887c22e70450da0620133008112a..45ad381e72934b35cf155ada8a53b0e384b856b0 100644 --- a/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/StudentResultService.java +++ b/src/main/java/com/tarento/upsmf/examsAndAdmissions/service/StudentResultService.java @@ -659,7 +659,7 @@ public class StudentResultService { // Handle unsupported file type return ResponseDto.setErrorResponse(response, "UNSUPPORTED_FILE_TYPE", "Unsupported file type", HttpStatus.BAD_REQUEST); } - String[] selectedColumns = { "First Name", "Last Name", "Enrolment Number","External Marks", "Passing External Marks", "External Marks Obtained" }; + String[] selectedColumns = { "First Name", "Last Name", "Enrolment Number", "Exam", "External Marks", "Passing External Marks", "External Marks Obtained" }; JSONArray filteredJsonArray = dataImporterService.filterColumns(jsonArray, selectedColumns); List<StudentResult> dtoList = dataImporterService.convertJsonToDtoList(filteredJsonArray, StudentResult.class); ValidationResultDto validationResult = dataImporterService.convertResultDtoListToEntitiesExternalMarks(dtoList, studentResultRepository); @@ -698,7 +698,7 @@ public class StudentResultService { // Handle unsupported file type return ResponseDto.setErrorResponse(response, "UNSUPPORTED_FILE_TYPE", "Unsupported file type", HttpStatus.BAD_REQUEST); } - String[] selectedColumns = { "First Name", "Last Name", "Enrolment Number","External Marks", "Passing External Marks", "External Marks Obtained" }; + String[] selectedColumns = { "First Name", "Last Name", "Enrolment Number", "Exam", "External Marks", "Passing External Marks", "External Marks Obtained" }; JSONArray filteredJsonArray = dataImporterService.filterColumns(jsonArray, selectedColumns); List<StudentResult> dtoList = dataImporterService.convertJsonToDtoList(filteredJsonArray, StudentResult.class); ValidationResultDto validationResult = dataImporterService.convertResultDtoListToEntitiesRevisedMarks(dtoList, studentResultRepository);