From 1e2add05a2498c8a4a1f74d82884207da0c7c9a0 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Tue, 6 Oct 2009 16:02:59 +0200 Subject: [PATCH] ItEr29S13CUVistaRecursosTempoEmpresa: Showing the chart with real data. --- .../business/orders/entities/Order.java | 26 ++++++ .../orders/entities/OrderElement.java | 10 +++ .../web/planner/OrderPlanningModel.java | 90 +++++++++++-------- 3 files changed, 87 insertions(+), 39 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java index 040078cde..fa8e972de 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/Order.java @@ -23,6 +23,7 @@ package org.navalplanner.business.orders.entities; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Set; import org.hibernate.validator.NotEmpty; import org.hibernate.validator.NotNull; @@ -30,6 +31,8 @@ import org.hibernate.validator.Valid; import org.navalplanner.business.common.BaseEntity; import org.navalplanner.business.common.IValidable; import org.navalplanner.business.common.exceptions.ValidationException; +import org.navalplanner.business.planner.entities.DayAssignment; +import org.navalplanner.business.planner.entities.ResourceAllocation; import org.navalplanner.business.planner.entities.TaskElement; /** @@ -192,4 +195,27 @@ public class Order extends BaseEntity implements IOrderLineGroup, IValidable { } } + public List getDayAssignments() { + List dayAssignments = new ArrayList(); + for (OrderElement orderElement : getAllOrderElements()) { + Set taskElements = orderElement.getTaskElements(); + for (TaskElement taskElement : taskElements) { + Set> resourceAllocations = taskElement.getResourceAllocations(); + for (ResourceAllocation resourceAllocation : resourceAllocations) { + dayAssignments.addAll(resourceAllocation.getAssignments()); + } + } + } + return dayAssignments; + } + + private List getAllOrderElements() { + List result = new ArrayList( + this.orderElements); + for (OrderElement orderElement : this.orderElements) { + result.addAll(orderElement.getAllChildren()); + } + return result; + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java index 342ec4dd0..c598413d8 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderElement.java @@ -21,6 +21,7 @@ package org.navalplanner.business.orders.entities; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashSet; @@ -314,4 +315,13 @@ public abstract class OrderElement extends BaseEntity { public abstract BigDecimal getAdvancePercentage(LocalDate date); + public List getAllChildren() { + List children = getChildren(); + List result = new ArrayList(children); + for (OrderElement orderElement : children) { + result.addAll(orderElement.getAllChildren()); + } + return result; + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java index c0ca24d28..e74095b18 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/OrderPlanningModel.java @@ -24,13 +24,19 @@ import static org.navalplanner.web.I18nHelper._; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.SortedMap; +import java.util.TreeMap; +import org.joda.time.LocalDate; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.orders.daos.IOrderDAO; import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.planner.entities.DayAssignment; import org.navalplanner.business.planner.entities.TaskElement; import org.navalplanner.business.resources.daos.IResourceDAO; import org.navalplanner.business.resources.entities.Resource; @@ -43,9 +49,9 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.zkoss.ganttz.adapters.IStructureNavigator; import org.zkoss.ganttz.adapters.PlannerConfiguration; -import org.zkoss.zul.CategoryModel; import org.zkoss.zul.Chart; -import org.zkoss.zul.SimpleCategoryModel; +import org.zkoss.zul.SimpleXYModel; +import org.zkoss.zul.XYModel; /** * @author Óscar González Fernández @@ -124,7 +130,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { .setCalendarAllocationController(calendarAllocationController); configuration.addCommandOnTask(calendarAllocationCommand); - configuration.setChartComponent(getChartComponent()); + configuration.setChartComponent(getChartComponent(orderReloaded)); onTransaction.use(configuration); } @@ -218,49 +224,55 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel { } } - private Chart getChartComponent() { - CategoryModel catmodel = new SimpleCategoryModel(); - catmodel.setValue("2008", "Q1 2008", new Integer(20)); - catmodel.setValue("2008", "Q2 2008", new Integer(35)); - catmodel.setValue("2008", "Q3 2008", new Integer(40)); - catmodel.setValue("2008", "Q4 2008", new Integer(55)); - catmodel.setValue("2009", "Q1 2008", new Integer(40)); - catmodel.setValue("2009", "Q2 2008", new Integer(60)); - catmodel.setValue("2009", "Q3 2008", new Integer(70)); - catmodel.setValue("2009", "Q4 2008", new Integer(90)); - catmodel.setValue("2010", "Q1 2008", new Integer(20)); - catmodel.setValue("2010", "Q2 2008", new Integer(35)); - catmodel.setValue("2010", "Q3 2008", new Integer(40)); - catmodel.setValue("2010", "Q4 2008", new Integer(55)); - catmodel.setValue("2011", "Q1 2008", new Integer(40)); - catmodel.setValue("2011", "Q2 2008", new Integer(60)); - catmodel.setValue("2011", "Q3 2008", new Integer(70)); - catmodel.setValue("2011", "Q4 2008", new Integer(90)); + private Chart getChartComponent(Order order) { + SortedMap mapDayAssignments = calculateHoursAdditionByDay(order); - catmodel.setValue("2008", "Q1 2009", new Integer(20)); - catmodel.setValue("2008", "Q2 2009", new Integer(35)); - catmodel.setValue("2008", "Q3 2009", new Integer(40)); - catmodel.setValue("2008", "Q4 2009", new Integer(55)); - catmodel.setValue("2009", "Q1 2009", new Integer(40)); - catmodel.setValue("2009", "Q2 2009", new Integer(60)); - catmodel.setValue("2009", "Q3 2009", new Integer(70)); - catmodel.setValue("2009", "Q4 2009", new Integer(90)); - catmodel.setValue("2010", "Q1 2009", new Integer(20)); - catmodel.setValue("2010", "Q2 2009", new Integer(35)); - catmodel.setValue("2010", "Q3 2009", new Integer(40)); - catmodel.setValue("2010", "Q4 2009", new Integer(55)); - catmodel.setValue("2011", "Q1 2009", new Integer(40)); - catmodel.setValue("2011", "Q2 2009", new Integer(60)); - catmodel.setValue("2011", "Q3 2009", new Integer(70)); - catmodel.setValue("2011", "Q4 2009", new Integer(90)); + XYModel xymodel = new SimpleXYModel(); + for (LocalDate day : mapDayAssignments.keySet()) { + Integer hours = mapDayAssignments.get(day); + xymodel.addValue("", new Long(day.toDateTimeAtStartOfDay() + .getMillis()), hours); + } Chart chart = new Chart(); - chart.setType("stacked_area"); + chart.setType("time_series"); chart.setWidth("1600px"); chart.setHeight("175px"); - chart.setModel(catmodel); + chart.setModel(xymodel); return chart; } + private SortedMap calculateHoursAdditionByDay( + Order order) { + SortedMap map = new TreeMap(); + + List dayAssignments = order.getDayAssignments(); + if (dayAssignments.isEmpty()) { + return map; + } + + Collections.sort(dayAssignments, new Comparator() { + + @Override + public int compare(DayAssignment o1, DayAssignment o2) { + return o1.getDay().compareTo(o2.getDay()); + } + + }); + + for (DayAssignment dayAssignment : dayAssignments) { + LocalDate day = dayAssignment.getDay(); + Integer hours = dayAssignment.getHours(); + + if (map.get(day) == null) { + map.put(day, hours); + } else { + map.put(day, map.get(day) + hours); + } + } + + return map; + } + }