diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java index 5ad161473..17f584633 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java @@ -1211,40 +1211,15 @@ public abstract class ResourceAllocation extends private void updateAssignments(AllocationInterval interval, List assignmentsCreated) { - /* - * removes assignments except those that are consolidated - */ removingAssignments(withoutConsolidated(interval .getAssignmentsOnInterval())); - /* - * add the assignments except those that already are consolidated. At - * this moment all the assignments in the interval are consolidated. So - * that it removes the created assignments that have got same date and - * therefore are already added. - */ - addingAssignments(subtractAssignmentsWithSameDate(assignmentsCreated, - interval.getAssignmentsOnInterval())); + addingAssignments(assignmentsCreated); updateConsolidatedAssignments(interval); updateOriginalTotalAssigment(); updateResourcesPerDay(); } - private Collection subtractAssignmentsWithSameDate( - List assignmentsCreated, - List assignmentsOnInterval) { - List toRemove = new ArrayList(); - for (DayAssignment each : assignmentsOnInterval) { - for (T assignment : assignmentsCreated) { - if (each.getDay().compareTo(assignment.getDay()) == 0) { - toRemove.add(assignment); - } - } - } - assignmentsCreated.removeAll(toRemove); - return assignmentsCreated; - } - private void updateConsolidatedAssignments(AllocationInterval interval) { for (DayAssignment day : interval.getAssignmentsOnInterval()) { day.setConsolidated(false); @@ -1284,7 +1259,30 @@ public abstract class ResourceAllocation extends } protected final void addingAssignments(Collection assignments) { - getDayAssignmentsState().addingAssignments(assignments); + getDayAssignmentsState().addingAssignments( + withoutAlreadyPresent(assignments)); + } + + private List withoutAlreadyPresent( + Collection assignments) { + if(assignments.isEmpty()){ + return Collections.emptyList(); + } + + LocalDate min = Collections.min(assignments, + DayAssignment.byDayComparator()).getDay(); + LocalDate max = Collections.max(assignments, + DayAssignment.byDayComparator()).getDay(); + Set daysPresent = DayAssignment.byDay( + getAssignments(min, max.plusDays(1))).keySet(); + + List result = new ArrayList(); + for (T each : assignments) { + if (!daysPresent.contains(each.getDay())) { + result.add(each); + } + } + return result; } public void removeLimitingDayAssignments() {