BP-738, fix error of calculating when start phase is between duration start and end
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlanningController.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlanningController.java
index 1af8f6c..117a79b 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlanningController.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlanningController.java
@@ -821,6 +821,40 @@
 	}

 

 	/**

+	 * Method to get a list of {@link StandbyDuration} where the time is around the

+	 * searched date. startOfDuration <= searchedDate <= endDate

+	 * 

+	 * @param group

+	 * @param date

+	 * @return null if no fitting duration is available

+	 */

+	public List<StandbyDuration> getFittingDurationsAroundDate(StandbyGroup group, Date date) {

+		int dayOfWeek = DateHelper.getDayOfWeek(date);

+		List<StandbyDuration> lsFittingDurations = new ArrayList<>();

+		List<StandbyDuration> lsDurations = standbyDurationRepository.findById(group.getId());

+		for (StandbyDuration dur : lsDurations) {

+			if (dur.getValidDayFrom() == dur.getValidDayTo() && dayOfWeek == dur.getValidDayFrom()) {

+				// start - end and current are equal

+				lsFittingDurations.add(dur);

+			} else if (dur.getValidDayFrom() <= dayOfWeek && dayOfWeek <= dur.getValidDayTo()) {

+				// start <= current <= end

+				lsFittingDurations.add(dur);

+			} else if (dur.getValidDayFrom() > dur.getValidDayTo()) {

+				// start > end

+				int calcValue = dayOfWeek;

+				if (dur.getValidDayFrom() > dayOfWeek) {

+					// AND start > current

+					calcValue = dayOfWeek + 7;

+				}

+				if (dur.getValidDayFrom() <= calcValue && calcValue <= (dur.getValidDayTo() + 7)) {

+					lsFittingDurations.add(dur);

+				}

+			}

+		}

+		return lsFittingDurations;

+	}

+

+	/**

 	 * Method to set the currentPosition to 0 if end of list is reached.

 	 * 

 	 * @param currentPosition

@@ -1313,7 +1347,7 @@
 			StandbyGroup group, Date startDate, Date currentDate) {

 		// Only at the start of a new phase the ending durations have to be used, too.

 		if (startDate.equals(currentDate)) {

-			List<StandbyDuration> lsFittingDurationsEndingAtStart = this.getFittingDurationsByValidTo(group,

+			List<StandbyDuration> lsFittingDurationsEndingAtStart = this.getFittingDurationsAroundDate(group,

 					currentDate);

 			if (lsFittingDurationsEndingAtStart != null && !lsFittingDurationsEndingAtStart.isEmpty()) {

 				for (StandbyDuration dur : lsFittingDurationsEndingAtStart) {

@@ -1325,7 +1359,7 @@
 						// only durations should be added that start at least one day before and their

 						// ending at the phase start

 						StandbyDuration tmpDuration = dur.copy();

-						tmpDuration.setValidFrom(DateHelper.getStartOfDay(dur.getValidTo()));

+						tmpDuration.setValidFrom(DateHelper.getStartOfDay(currentDate));

 						tmpDuration.setValidDayFrom(dur.getValidDayTo());

 						lsFittingDurations.add(tmpDuration);

 					}

diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/db/dao/StandbyDurationRepository.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/db/dao/StandbyDurationRepository.java
index 1ca7ac4..8d03de8 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/db/dao/StandbyDurationRepository.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/db/dao/StandbyDurationRepository.java
@@ -35,4 +35,10 @@
 			+ "ORDER BY dur.validTo ASC")
 	public List<StandbyDuration> findDurationForValidToDay(@Param("groupId") Long groupId,
 			@Param("validToDay") Integer validToDay);
+
+	@Query(value = "SELECT dur FROM StandbyDuration dur WHERE (dur.standbyGroup.id = :groupId AND "
+			+ "( (dur.validDayTo >= :validDay AND dur.validDayFrom <= :validDay) "
+			+ "OR (dur.validDayFrom >= dur.validDayTo AND :validDay <= dur.validTo AND :validDay >= dur.validFrom))) ORDER BY dur.validTo ASC")
+	public List<StandbyDuration> findDurationsAroundValidDay(@Param("groupId") Long groupId,
+			@Param("validDay") Integer validDay);
 }
\ No newline at end of file