From e55195561447cfbb2c7ed4082418cc375a0b2288 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Wed, 25 Nov 2009 21:43:02 +0100 Subject: [PATCH] ItEr36S07ValidacionEProbasFuncionaisItEr35S08: [Bug #101] Fixing bug. The problem was that the resource calendar was detached. --- .../web/planner/allocation/AllocationDTO.java | 3 +++ .../allocation/GenericAllocationDTO.java | 5 ++++ .../allocation/ResourceAllocationModel.java | 24 ++++++++++++++----- .../ResourceAllocationsBeingEdited.java | 8 +++++++ .../allocation/SpecificAllocationDTO.java | 6 +++++ 5 files changed, 40 insertions(+), 6 deletions(-) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationDTO.java index 8b038a45d..11ade5a08 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationDTO.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationDTO.java @@ -28,6 +28,7 @@ import org.navalplanner.business.planner.entities.ResourceAllocation; import org.navalplanner.business.planner.entities.ResourcesPerDay; import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.planner.entities.allocationalgorithms.AllocationBeingModified; +import org.navalplanner.business.resources.entities.Resource; /** * The information that must be introduced to create a @@ -104,4 +105,6 @@ public abstract class AllocationDTO { return getResourcesPerDay().isZero(); } + public abstract List getAssociatedResources(); + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationDTO.java index f6e767d4c..1fb0b59f7 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationDTO.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationDTO.java @@ -102,4 +102,9 @@ public class GenericAllocationDTO extends AllocationDTO { public boolean hasSameCriterions(Set criterions) { return this.criterions.equals(criterions); } + + @Override + public List getAssociatedResources() { + return resources; + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationModel.java index cb232fe28..fa5b1f191 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationModel.java @@ -28,7 +28,7 @@ import java.util.List; import java.util.Set; import org.hibernate.Hibernate; -import org.joda.time.LocalDate; +import org.navalplanner.business.calendars.daos.IBaseCalendarDAO; import org.navalplanner.business.orders.daos.IHoursGroupDAO; import org.navalplanner.business.orders.entities.AggregatedHoursGroup; import org.navalplanner.business.orders.entities.HoursGroup; @@ -76,6 +76,9 @@ public class ResourceAllocationModel implements IResourceAllocationModel { private org.zkoss.ganttz.data.Task ganttTask; + @Autowired + private IBaseCalendarDAO calendarDAO; + private PlanningState planningState; private ResourceAllocationsBeingEdited resourceAllocationsBeingEdited; @@ -146,12 +149,23 @@ public class ResourceAllocationModel implements IResourceAllocationModel { @Transactional(readOnly = true) public T onAllocationContext( IResourceAllocationContext resourceAllocationContext) { - reassociateResourcesWithSession(); + ensureResourcesAreReadyForDoingAllocation(); return resourceAllocationContext.doInsideTransaction(); } + private void ensureResourcesAreReadyForDoingAllocation() { + Set resources = resourceAllocationsBeingEdited + .getAllocationResources(); + for (Resource each : resources) { + reattachResource(each); + } + } + private void stepsBeforeDoingAllocation() { - reassociateResourcesWithSession(); + ensureResourcesAreReadyForDoingAllocation(); + if (task.getCalendar() != null) { + calendarDAO.reattachUnmodifiedEntity(task.getCalendar()); + } removeDeletedAllocations(); } @@ -249,9 +263,7 @@ public class ResourceAllocationModel implements IResourceAllocationModel { private void reattachResource(Resource resource) { resourceDAO.reattach(resource); reattachCriterionSatisfactions(resource.getCriterionSatisfactions()); - if (resource.getCalendar() != null) { - resource.getCalendar().getWorkableHours(new LocalDate()); - } + calendarDAO.reattachUnmodifiedEntity(resource.getCalendar()); for (DayAssignment dayAssignment : resource.getAssignments()) { Hibernate.initialize(dayAssignment); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationsBeingEdited.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationsBeingEdited.java index 3e3ad108e..a42b315e6 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationsBeingEdited.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationsBeingEdited.java @@ -276,4 +276,12 @@ public class ResourceAllocationsBeingEdited { return daysDuration; } + public Set getAllocationResources() { + Set result = new HashSet(); + for (AllocationDTO each : currentAllocations) { + result.addAll(each.getAssociatedResources()); + } + return result; + } + } \ No newline at end of file diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/SpecificAllocationDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/SpecificAllocationDTO.java index 01415c762..56d56b929 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/SpecificAllocationDTO.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/SpecificAllocationDTO.java @@ -22,6 +22,7 @@ package org.navalplanner.web.planner.allocation; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import org.navalplanner.business.planner.entities.ResourceAllocation; @@ -119,4 +120,9 @@ public class SpecificAllocationDTO extends AllocationDTO { return false; } + @Override + public List getAssociatedResources() { + return Collections.singletonList(resource); + } + }