package pt.utl.ist.scripts.runOnce.executionCourse; import java.util.Calendar; import net.sourceforge.fenixedu.domain.ExecutionDegree; import net.sourceforge.fenixedu.domain.ExecutionSemester; import net.sourceforge.fenixedu.domain.ExecutionYear; import net.sourceforge.fenixedu.domain.Lesson; import net.sourceforge.fenixedu.domain.OccupationPeriod; import net.sourceforge.fenixedu.domain.SchoolClass; import net.sourceforge.fenixedu.domain.Shift; import org.joda.time.DateTime; import org.joda.time.YearMonthDay; import pt.utl.ist.scripts.commons.AtomicScript; public class FixExecutionDegreeLessonPeriods extends AtomicScript { static final String[] COURSES = new String[] { "MCR", "MEEst" }; private String course; public FixExecutionDegreeLessonPeriods(String course) { this.course = course; } @Override protected void run() throws Exception { System.out.println("Running for course: " + course); final ExecutionYear currExecutionYear = ExecutionYear.readCurrentExecutionYear(); final ExecutionSemester currExecutionSemester = ExecutionSemester.readActualExecutionSemester(); final ExecutionDegree executionDegree = currExecutionYear.getExecutionDegreeByAcronym(course); final YearMonthDay start = new YearMonthDay(2011, 02, 14); final YearMonthDay end = new YearMonthDay(2011, 04, 20); final YearMonthDay startPart2 = new YearMonthDay(2011, 04, 28); final YearMonthDay endPart2 = new YearMonthDay(2011, 05, 27); for (SchoolClass schoolClass : executionDegree.getSchoolClasses()) { if (schoolClass.getExecutionPeriod().equals(currExecutionSemester)) { for (Shift shift : schoolClass.getAssociatedShifts()) { for (Lesson lesson : shift.getAssociatedLessons()) { final OccupationPeriod period = lesson.getPeriod(); if (period == null) { System.out.println("Period is null"); /*final DateTime startPeriod = lesson.getLastLessonInstance().getEndDateTime().plusDays(1); OccupationPeriod newLessonPeriod = OccupationPeriod.getEqualOccupationPeriod(startPeriod.toYearMonthDay(), end, startPart2, endPart2); lesson.setPeriod(newLessonPeriod);*/ } else { /*OccupationPeriod newPeriodLessonSecondSemester = OccupationPeriod.getEqualOccupationPeriod(start, end, startPart2, endPart2); if (!period.isEqualTo(newPeriodLessonSecondSemester)) { lesson.setPeriod(newPeriodLessonSecondSemester); period.delete(); } else { System.out.println("nothing changed"); }*/ if (period.getStartDate() != null && lesson.getLastLessonInstance() != null) { final Calendar startDate = period.getStartDate(); final DateTime endDateTime = lesson.getLastLessonInstance().getEndDateTime(); final YearMonthDay fromCalendarFields = YearMonthDay.fromCalendarFields(startDate); if (fromCalendarFields.compareTo(endDateTime.toYearMonthDay()) < 0) { System.out.println("period start date : " + fromCalendarFields); System.out.println("lesson last instance end date:" + endDateTime); final DateTime startPeriod = endDateTime.plusDays(1); OccupationPeriod newLessonPeriod = OccupationPeriod.getEqualOccupationPeriod(startPeriod.toYearMonthDay(), end, startPart2, endPart2); lesson.setPeriod(newLessonPeriod); } } } // System.out.println(lesson.getPeriod().asString()); // System.out.println(lesson.getPeriod().getNextPeriod().asString()); // System.out.println("---"); } } } } } public static void main(String[] args) { logger.info("Starting the process..."); for (String course : COURSES) { processWriteTransaction(new FixExecutionDegreeLessonPeriods(course)); } logger.info("Process finalized"); System.exit(0); } }