From ce4949252337602462c14c37e3aa284ab0cd8c99 Mon Sep 17 00:00:00 2001 From: Niu BoQian Date: Sat, 8 Apr 2023 21:40:39 +0800 Subject: [PATCH] now if the user tries to add an exam to a student that clashes with the student's lessons, the exam is still added but a warning message is shown --- .../logic/commands/exam/CreateExamCommand.java | 7 ++++++- .../java/seedu/address/model/student/Student.java | 14 ++++++++++++++ .../exceptions/ConflictingExamsException.java | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/exam/CreateExamCommand.java b/src/main/java/seedu/address/logic/commands/exam/CreateExamCommand.java index e2e245af19d..d08d0c1d666 100644 --- a/src/main/java/seedu/address/logic/commands/exam/CreateExamCommand.java +++ b/src/main/java/seedu/address/logic/commands/exam/CreateExamCommand.java @@ -70,6 +70,7 @@ public CreateExamCommand(List names, NamePredicate predicate, String exa @Override public CommandResult execute(Model model) throws CommandException { + StringBuilder lessonClashMessage = new StringBuilder("\n"); requireNonNull(model); model.updateFilteredStudentList(PREDICATE_SHOW_ALL_STUDENTS); @@ -105,6 +106,10 @@ public CommandResult execute(Model model) throws CommandException { try { for (Student student : studentList) { + if (student.hasLessonAtSameTime(exam)) { + lessonClashMessage.append("*******WARNING*******\n").append(student.getName().fullName) + .append(" has a lesson at the same time as the exam\n Consider rescheduling clashing lesson"); + } student.addExam(exam); } } catch (Exception e) { @@ -118,7 +123,7 @@ public CommandResult execute(Model model) throws CommandException { } return new CommandResult( - String.format(Messages.MESSAGE_EXAM_ADDED_SUCCESS, exam, sb)); + String.format(Messages.MESSAGE_EXAM_ADDED_SUCCESS, exam, sb) + lessonClashMessage); } @Override diff --git a/src/main/java/seedu/address/model/student/Student.java b/src/main/java/seedu/address/model/student/Student.java index 5702b0fbd26..f434c9f0b57 100644 --- a/src/main/java/seedu/address/model/student/Student.java +++ b/src/main/java/seedu/address/model/student/Student.java @@ -420,6 +420,20 @@ public void addExam(Exam exam) throws DuplicateEntryException, ConflictingExamsE this.examList.add(exam); } + /** + * Returns true if the exam's time clashes with any lesson's time. + * @param exam Exam to be checked + * @return boolean + */ + public boolean hasLessonAtSameTime(Exam exam) { + for (Lesson lesson : lessonsList) { + if (exam.getStartTime().isBefore(lesson.getEndTime()) && exam.getEndTime().isAfter(lesson.getStartTime())) { + return true; + } + } + return false; + } + /** * Returns an exam from the exam list. * diff --git a/src/main/java/seedu/address/model/student/exceptions/ConflictingExamsException.java b/src/main/java/seedu/address/model/student/exceptions/ConflictingExamsException.java index 48cf79dbf9e..738309361e5 100644 --- a/src/main/java/seedu/address/model/student/exceptions/ConflictingExamsException.java +++ b/src/main/java/seedu/address/model/student/exceptions/ConflictingExamsException.java @@ -6,6 +6,6 @@ */ public class ConflictingExamsException extends RuntimeException { public ConflictingExamsException() { - super("The exam clashes with another exam"); + super("The exam clashes with another exam/lesson"); } }