fix : wrong calculation for pre-draw holiday if ending is already set from schedule body before
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 d128e0e..8b3f979 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
@@ -574,7 +574,17 @@
// no last duration for the day has been found. Therefore the start of day has
// been used for current entry
if (DateHelper.isDateBefore(DateHelper.getStartOfDay(date), stbyBody.getValidFrom())) {
- stbyBody.setValidFrom(DateHelper.getDateWithTime(date, DateHelper.getStartOfDay(date)));
+ //before setting the start of the day it has to be checked if a former time is ending at this day.
+ //for example if a holiday is following on another holiday
+ List<StandbyScheduleBody> lsEarlierBodiesThatDay = standbyScheduleBodyRepository.findByGroupAndStatusHittingDateInterval(group.getId(), DateHelper.getStartOfDay(date), stbyBody.getValidFrom(), stbyBody.getStatus().getId());
+ if(lsEarlierBodiesThatDay == null || lsEarlierBodiesThatDay.isEmpty()) {
+ //set start of day
+ stbyBody.setValidFrom(DateHelper.getDateWithTime(date, DateHelper.getStartOfDay(date)));
+ }else {
+ //set start to the end of former schedule body
+ Date endingFormerBody = lsEarlierBodiesThatDay.get(lsEarlierBodiesThatDay.size()-1).getValidTo();
+ stbyBody.setValidFrom(endingFormerBody);
+ }
this.createMsgExtendHoliday(stbyBody, date, false);
stbyBody.setModifiedCause(TXT_AUTOMATIC_PLANNING_HOLIDAY);
}
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 8c578e5..ae1f270 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
@@ -1168,6 +1168,10 @@
stbyBody = this.getStandbyScheduleBody();
Mockito.doReturn(lsStandbyDurationsNull).when(planningController)
.getFittingDurationsByValidTo(Mockito.any(StandbyGroup.class), Mockito.any(Date.class));
+ List<StandbyScheduleBody> lsBodies = new ArrayList<>();
+ lsBodies.add(stbyBody);
+ Mockito.doReturn(lsBodies).when(standbyScheduleBodyRepository).findByGroupAndStatusHittingDateInterval(
+ Mockito.any(Long.class), Mockito.any(Date.class), Mockito.any(Date.class), Mockito.any(Long.class));
result = planningController.calculateHolidayPreDraw(group, date, stbyBody);
assertNotNull(result);
@@ -1200,6 +1204,10 @@
user.setFirstname("J.");
user.setLastname("Unit");
stbyBody.setUser(user);
+ StandbyStatus status = new StandbyStatus();
+ status.setId(1L);
+ status.setTitle("Test");
+ stbyBody.setStatus(status);
return stbyBody;
}
}