BP-833, add correct order of users even after a phase has ended
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 345f45d..9bed8fd 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,8 +136,9 @@
LOGGER.debug("Start Plannig for phase " + entry.getKey());
PlanningPhaseDto dto = entry.getValue();
this.createMsgStartOfPhase(entry.getKey(), dto);
- lastStartUserId = this.calculatePlanForPhase(dto, lastStartUserId, username, entry.getKey(),
- lastCalcDate);
+ PlanningBodyResultDto planningBodyResultDto = this.calculatePlanForPhase(dto, lastStartUserId,
+ username, entry.getKey(), lastCalcDate);
+ lastStartUserId = planningBodyResultDto.getLastUserId();
this.createMsgEndOfPhase(entry.getKey());
LOGGER.debug("End Plannig for phase " + entry.getKey());
}
@@ -362,10 +363,11 @@
}
- public Long calculatePlanForPhase(PlanningPhaseDto dto, Long lastStartUserId, String username, int phaseNumber,
- Date lastCalcDate) throws SpException {
+ public PlanningBodyResultDto calculatePlanForPhase(PlanningPhaseDto dto, Long lastStartUserId, String username,
+ int phaseNumber, Date lastCalcDate) throws SpException {
try {
List<UserInStandbyGroup> lsUserInGroup = dto.getLsUsers();
+ Long lastTurnUserId = lastStartUserId;
Collections.sort(lsUserInGroup,
(UserInStandbyGroup o1, UserInStandbyGroup o2) -> o1.getPosition().compareTo(o2.getPosition()));
@@ -377,18 +379,21 @@
}
Date tmpDate = dto.getStartDate();
+ PlanningBodyResultDto planningBodyResultDto = null;
while (tmpDate.getTime() < dto.getEndDate().getTime()) {
// reset position if end of list has been reached
- PlanningBodyResultDto planningBodyResultDto = this.calculateScheduleBodyEntries(lsUserInGroup,
- dto.getStartDate(), tmpDate, lastCalcDate, currentPosition, username, lastStartUserId,
- phaseNumber);
+ planningBodyResultDto = this.calculateScheduleBodyEntries(lsUserInGroup, dto.getStartDate(), tmpDate,
+ lastCalcDate, lastTurnUserId, username, lastStartUserId, phaseNumber);
tmpDate = planningBodyResultDto.getTempDate();
currentPosition = planningBodyResultDto.getNewPosition();
lastStartUserId = planningBodyResultDto.getLastStartUserId();
+ lastTurnUserId = planningBodyResultDto.getLastUserId();
+
this.addMessagesToList(planningBodyResultDto.getLsMsg());
}
- return lastStartUserId;
+ planningBodyResultDto.setLastUserId(lastTurnUserId);
+ return planningBodyResultDto;
} catch (Exception e) {
LOGGER.error(e, e);
SpErrorEntry ee = SpExceptionEnum.DEFAULT_EXCEPTION.getEntry();
@@ -580,12 +585,14 @@
}
public PlanningBodyResultDto calculateScheduleBodyEntries(List<UserInStandbyGroup> lsUserInGroup, Date startDate,
- Date currentDate, Date lastDate, int currentPosition, String username, Long lastStartUserId,
+ Date currentDate, Date lastDate, Long lastTurnUserId, String username, Long lastStartUserId,
int phaseNumber) {
StandbyGroup group = lsUserInGroup.get(0).getStandbyGroup();
+ int currentPosition = this.getIndexOfLastPlannedUser(lastTurnUserId, lsUserInGroup);
PlanningBodyResultDto resultObj = new PlanningBodyResultDto();
resultObj.setLastStartUserId(lastStartUserId);
resultObj.setNewPosition(currentPosition);
+ resultObj.setLastUserId(lsUserInGroup.get(currentPosition).getUser().getId());
// read fitting duration for the current phase.
List<StandbyDuration> lsFittingDurations = new ArrayList<>();
@@ -598,7 +605,6 @@
if (!lsFittingDurations.isEmpty()) {
for (StandbyDuration fittingDuration : lsFittingDurations) {
- // int startWeekDayInt = fittingDuration.getValidDayFrom();
int startWeekDayInt = DateHelper.getDayOfWeek(currentDate);
int endWeekDayInt = fittingDuration.getValidDayTo();
int coveredDays = DateHelper.calculateDifferenceOfDays(startWeekDayInt, endWeekDayInt,
@@ -628,6 +634,7 @@
}
resultObj.setNewPosition(currentPosition);
resultObj.setTempDate(DateHelper.addDaysToDate(currentDate, 1));
+ resultObj.setLastUserId(lsUserInGroup.get(currentPosition).getUser().getId());
} else {
resultObj.setTempDate(DateHelper.addDaysToDate(currentDate, 1));
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/planning/PlanningBodyResultDto.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/planning/PlanningBodyResultDto.java
index 11ed82b..dead5ba 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/planning/PlanningBodyResultDto.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/dto/planning/PlanningBodyResultDto.java
@@ -18,11 +18,12 @@
import javax.xml.bind.annotation.XmlRootElement;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
import org.eclipse.openk.sp.abstracts.AbstractDto;
import org.eclipse.openk.sp.db.model.StandbyDuration;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+
/**
* The "Address" Data Transfer Object (DTO)
*/
@@ -36,14 +37,16 @@
private static final long serialVersionUID = 1L;
private Integer newPosition = 0;
-
+
private Long lastStartUserId = 0L;
+ private Long lastUserId = 0L;
+
private Date tempDate = null;
private List<PlanningMsgDto> lsMsg = new ArrayList<>();
-
- private StandbyDuration currentDuration;
+
+ private StandbyDuration currentDuration;
/**
* @return the newPosition
@@ -98,7 +101,8 @@
}
/**
- * @param lastStartUserId the lastStartUserId to set
+ * @param lastStartUserId
+ * the lastStartUserId to set
*/
public void setLastStartUserId(Long lastStartUserId) {
this.lastStartUserId = lastStartUserId;
@@ -112,9 +116,25 @@
}
/**
- * @param currentDuration the currentDuration to set
+ * @param currentDuration
+ * the currentDuration to set
*/
public void setCurrentDuration(StandbyDuration currentDuration) {
this.currentDuration = currentDuration;
}
+
+ /**
+ * @return the lastUserId
+ */
+ public Long getLastUserId() {
+ return lastUserId;
+ }
+
+ /**
+ * @param lastUserId
+ * the lastUserId to set
+ */
+ public void setLastUserId(Long lastUserId) {
+ this.lastUserId = lastUserId;
+ }
}
\ No newline at end of file
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 f8fee86..0712458 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,15 +148,15 @@
Mockito.doReturn(stbyGroup).when(standbyGroupRepository).findOne(Mockito.any());
Mockito.doReturn(true).when(planningController).validateInputForPlanCalculation(standbyBlueprintDto);
Mockito.doReturn(planningPhaseMap).when(planningController).calculatePlanningPhaseMap(standbyBlueprintDto);
- Mockito.doReturn(1L).when(planningController).calculatePlanForPhase(Mockito.any(), Mockito.any(),
- Mockito.any(), Mockito.anyInt(), Mockito.any());
+ Mockito.doReturn(new PlanningBodyResultDto()).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.doReturn(1L).when(planningController).calculatePlanForPhase(Mockito.any(), Mockito.any(),
- Mockito.any(), Mockito.anyInt(), Mockito.any());
+ Mockito.doReturn(new PlanningBodyResultDto()).when(planningController).calculatePlanForPhase(Mockito.any(),
+ Mockito.any(), Mockito.any(), Mockito.anyInt(), Mockito.any());
planningController.startPlanning(standbyBlueprintDto, username);
} catch (SpException e) {
assertNull(e);
@@ -260,7 +260,6 @@
Date startDate = new Date();
Date currentDate = new Date();
Date lastDate = new Date();
- int currentPosition = 0;
String username = "JUnit";
Long lastUserId = 1L;
List<UserInStandbyGroup> lsUserInStandbyGroup = this.getTestDataForUserInStandbyGroups();
@@ -283,7 +282,7 @@
// covered days = 1
try {
PlanningBodyResultDto dto = planningController.calculateScheduleBodyEntries(lsUserInStandbyGroup, startDate,
- currentDate, lastDate, currentPosition, username, lastUserId, 1);
+ currentDate, lastDate, lastUserId, username, lastUserId, 1);
assertNotNull(dto);
} catch (Exception e) {
assertNotNull(e);
@@ -294,7 +293,7 @@
lastDate = DateHelper.addDaysToDate(new Date(), 5);
try {
PlanningBodyResultDto dto = planningController.calculateScheduleBodyEntries(lsUserInStandbyGroup, startDate,
- currentDate, lastDate, currentPosition, username, lastUserId, 1);
+ currentDate, lastDate, lastUserId, username, lastUserId, 1);
assertNotNull(dto);
} catch (Exception e) {
assertNotNull(e);
@@ -305,7 +304,7 @@
currentDate = DateHelper.addDaysToDate(new Date(), 1);
lastDate = DateHelper.addDaysToDate(new Date(), 1);
PlanningBodyResultDto dto = planningController.calculateScheduleBodyEntries(lsUserInStandbyGroup, startDate,
- currentDate, lastDate, currentPosition, username, lastUserId, 1);
+ currentDate, lastDate, lastUserId, username, lastUserId, 1);
assertNotNull(dto);
} catch (Exception e) {
assertNotNull(e);
@@ -315,7 +314,7 @@
when(standbyDurationRepository.findDurationForValidFromDay(Mockito.any(), Mockito.any())).thenReturn(null);
try {
PlanningBodyResultDto dto = planningController.calculateScheduleBodyEntries(lsUserInStandbyGroup, startDate,
- currentDate, lastDate, currentPosition, username, lastUserId, 1);
+ currentDate, lastDate, lastUserId, username, lastUserId, 1);
assertNotNull(dto);
assertTrue(
dto.getLsMsg().get(0).getMsg().contains("wurde kein aktiver Zeitraum für folgenden Tag gefunden"));