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) {