diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/limiting/entities/LimitingResourceQueueElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/limiting/entities/LimitingResourceQueueElement.java
index 3f81d2c58..b46826beb 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/limiting/entities/LimitingResourceQueueElement.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/limiting/entities/LimitingResourceQueueElement.java
@@ -24,11 +24,13 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import org.apache.commons.lang.Validate;
import org.joda.time.LocalDate;
import org.navalplanner.business.common.BaseEntity;
+import org.navalplanner.business.planner.entities.DayAssignment;
import org.navalplanner.business.planner.entities.Dependency;
import org.navalplanner.business.planner.entities.GenericResourceAllocation;
import org.navalplanner.business.planner.entities.ResourceAllocation;
@@ -284,4 +286,13 @@ public class LimitingResourceQueueElement extends BaseEntity {
}
return result;
}
+
+ public boolean hasDayAssignments() {
+ return !getResourceAllocation().getAssignments().isEmpty();
+ }
+
+ public List extends DayAssignment> getDayAssignments() {
+ return resourceAllocation.getAssignments();
+ }
+
}
diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/Tasks.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/Tasks.hbm.xml
index aa1486a2b..aab329a96 100644
--- a/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/Tasks.hbm.xml
+++ b/navalplanner-business/src/main/resources/org/navalplanner/business/planner/entities/Tasks.hbm.xml
@@ -14,7 +14,7 @@
-
+
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueueComponent.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueueComponent.java
index e1b142001..d9882c268 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueueComponent.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/limitingresources/QueueComponent.java
@@ -23,6 +23,7 @@ package org.navalplanner.web.limitingresources;
import static org.navalplanner.web.I18nHelper._;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -30,10 +31,12 @@ import java.util.SortedSet;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.orders.entities.OrderElement;
+import org.navalplanner.business.planner.entities.DayAssignment;
import org.navalplanner.business.planner.entities.GenericResourceAllocation;
import org.navalplanner.business.planner.entities.ResourceAllocation;
import org.navalplanner.business.planner.entities.SpecificResourceAllocation;
import org.navalplanner.business.planner.entities.Task;
+import org.navalplanner.business.planner.limiting.entities.DateAndHour;
import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueueDependency;
import org.navalplanner.business.planner.limiting.entities.LimitingResourceQueueElement;
import org.navalplanner.business.resources.entities.Criterion;
@@ -173,20 +176,49 @@ public class QueueComponent extends XulElement implements
final OrderElement order = getRootOrder(task);
StringBuilder result = new StringBuilder();
- result.append(_("Order: {0}", order.getName()) + " ");
- result.append(_("Task: {0}", task.getName()) + " ");
+ result.append(_("Order: {0} ", order.getName()));
+ result.append(_("Task: {0} ", task.getName()));
+ result.append(_("Completed: {0} ", getAdvancementEndDate(element)));
final ResourceAllocation> resourceAllocation = element.getResourceAllocation();
if (resourceAllocation instanceof SpecificResourceAllocation) {
final SpecificResourceAllocation specific = (SpecificResourceAllocation) resourceAllocation;
- result.append(_("Resource: {0}", specific.getResource().getName()) + " ");
+ result.append(_("Resource: {0} ", specific.getResource().getName()));
} else if (resourceAllocation instanceof GenericResourceAllocation) {
final GenericResourceAllocation generic = (GenericResourceAllocation) resourceAllocation;
- result.append(_("Criteria: {0}", Criterion.getNames(generic.getCriterions())) + " ");
+ result.append(_("Criteria: {0} ", Criterion.getNames(generic.getCriterions())));
}
return result.toString();
}
+ private static DateAndHour getAdvancementEndDate(LimitingResourceQueueElement element) {
+ final Task task = element.getResourceAllocation().getTask();
+
+ int hoursWorked = 0;
+ final List extends DayAssignment> dayAssignments = element.getDayAssignments();
+ if (element.hasDayAssignments()) {
+ final int estimatedWorkedHours = estimatedWorkedHours(element.getIntentedTotalHours(), task.getAdvancePercentage());
+
+ for (DayAssignment each: dayAssignments) {
+ hoursWorked += each.getHours();
+ if (hoursWorked >= estimatedWorkedHours) {
+ int hourSlot = each.getHours() - (hoursWorked - estimatedWorkedHours);
+ return new DateAndHour(each.getDay(), hourSlot);
+ }
+ }
+ }
+ if (hoursWorked != 0) {
+ DayAssignment lastDayAssignment = dayAssignments.get(dayAssignments.size() - 1);
+ return new DateAndHour(lastDayAssignment.getDay(), lastDayAssignment.getHours());
+ }
+ return null;
+ }
+
+ private static int estimatedWorkedHours(Integer totalHours, BigDecimal percentageWorked) {
+ return (totalHours != null && percentageWorked != null) ? percentageWorked.multiply(
+ new BigDecimal(totalHours)).intValue() : 0;
+ }
+
private static QueueTask createDivForElement(IDatesMapper datesMapper,
LimitingResourceQueueElement queueElement) {