BP-833 fix building planning phase with changing users for one day durations
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 ca603a7..345f45d 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
@@ -136,7 +136,8 @@
 					LOGGER.debug("Start Plannig for phase " + entry.getKey());

 					PlanningPhaseDto dto = entry.getValue();

 					this.createMsgStartOfPhase(entry.getKey(), dto);

-					this.calculatePlanForPhase(dto, lastStartUserId, username, entry.getKey(), lastCalcDate);

+					lastStartUserId = this.calculatePlanForPhase(dto, lastStartUserId, username, entry.getKey(),

+							lastCalcDate);

 					this.createMsgEndOfPhase(entry.getKey());

 					LOGGER.debug("End Plannig for phase " + entry.getKey());

 				}

@@ -206,14 +207,26 @@
 				if (lsDur != null && !lsDur.isEmpty()) {

 					duration = lsDur.get(lsDur.size() - 1);

 

-					differenceOfDays = DateHelper.calculateDifferenceOfDays(DateHelper.getDayOfWeek(tmpDate),

-							duration.getValidDayTo(), tmpDate, duration.getValidTo());

-					//

+					// get days between duration start and end

+					int differenceOfDurationDays = DateHelper.calculateDifferenceOfDays(duration.getValidDayFrom(),

+							duration.getValidDayTo(), duration.getValidFrom(), duration.getValidTo());

+

+					Date endDurDate = DateHelper.addDaysToDate(tmpDate, differenceOfDurationDays);

+					endDurDate = DateHelper.getDateWithTime(endDurDate, duration.getValidTo());

+

+					if (differenceOfDurationDays == 0) {

+						differenceOfDays = DateHelper.calculateDifferenceOfDays(DateHelper.getDayOfWeek(tmpDate),

+								duration.getValidDayTo(), tmpDate, duration.getValidTo());

+					} else {

+						differenceOfDays = DateHelper.calculateDifferenceOfDays(DateHelper.getDayOfWeek(tmpDate),

+								DateHelper.getDayOfWeek(endDurDate), tmpDate, endDurDate);

+					}

+

 					Date startOfDuration = DateHelper.getDateWithTime(tmpDate, duration.getValidFrom());

 					Date endOfDuration = DateHelper.addDaysToDate(tmpDate, differenceOfDays);

 					endOfDuration = DateHelper.getDateWithTime(endOfDuration, duration.getValidTo());

 

-					if (duration.getNextUserInNextDuration() == false) {

+					if (!duration.getNextUserInNextDuration()) {

 						// find next duration with a changing user allowed

 						StandbyDuration tmpDur = this.getNextDurationWithMaChange(group, endOfDuration);

 						if (tmpDur != null) {

@@ -349,7 +362,7 @@
 

 	}

 

-	public void calculatePlanForPhase(PlanningPhaseDto dto, Long lastStartUserId, String username, int phaseNumber,

+	public Long calculatePlanForPhase(PlanningPhaseDto dto, Long lastStartUserId, String username, int phaseNumber,

 			Date lastCalcDate) throws SpException {

 		try {

 			List<UserInStandbyGroup> lsUserInGroup = dto.getLsUsers();

@@ -375,6 +388,7 @@
 				lastStartUserId = planningBodyResultDto.getLastStartUserId();

 				this.addMessagesToList(planningBodyResultDto.getLsMsg());

 			}

+			return lastStartUserId;

 		} catch (Exception e) {

 			LOGGER.error(e, e);

 			SpErrorEntry ee = SpExceptionEnum.DEFAULT_EXCEPTION.getEntry();

diff --git a/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/planning/PlanningControllerTest.java b/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/planning/PlanningControllerTest.java
index 2137acf..f8fee86 100644
--- a/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/planning/PlanningControllerTest.java
+++ b/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/planning/PlanningControllerTest.java
@@ -148,14 +148,14 @@
 			Mockito.doReturn(stbyGroup).when(standbyGroupRepository).findOne(Mockito.any());

 			Mockito.doReturn(true).when(planningController).validateInputForPlanCalculation(standbyBlueprintDto);

 			Mockito.doReturn(planningPhaseMap).when(planningController).calculatePlanningPhaseMap(standbyBlueprintDto);

-			Mockito.doNothing().when(planningController).calculatePlanForPhase(Mockito.any(), Mockito.any(),

+			Mockito.doReturn(1L).when(planningController).calculatePlanForPhase(Mockito.any(), Mockito.any(),

 					Mockito.any(), Mockito.anyInt(), Mockito.any());

 			planningController.startPlanning(standbyBlueprintDto, username);

 

 			// success test 02 - invalidInput

 			Mockito.doReturn(false).when(planningController).validateInputForPlanCalculation(standbyBlueprintDto);

 			Mockito.doReturn(planningPhaseMap).when(planningController).calculatePlanningPhaseMap(standbyBlueprintDto);

-			Mockito.doNothing().when(planningController).calculatePlanForPhase(Mockito.any(), Mockito.any(),

+			Mockito.doReturn(1L).when(planningController).calculatePlanForPhase(Mockito.any(), Mockito.any(),

 					Mockito.any(), Mockito.anyInt(), Mockito.any());

 			planningController.startPlanning(standbyBlueprintDto, username);

 		} catch (SpException e) {