From 8ca6f442918ca49b72166bc8a20765815be07fff Mon Sep 17 00:00:00 2001 From: mvanmiddelkoop Date: Sat, 28 Feb 2015 11:56:21 +0100 Subject: [PATCH] Enhance Tasklist in User Personal Dashboard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - task-code (technical, often auto-generated) + Total budgeted hours for task + Notes (usable for detailed task description) + Procentual Progression + Filtering: only active tasks (progress < 100%) + Filtering: only tasks starting from the last X months to the next Y months. X and Y are user settings for “ResourcesLoadFilterSince/From”. + Tasks sorted by date ascending - seems much more logical than descending. Check on task != null before forceLoading a task. --- .../dashboard/MyTasksAreaController.java | 18 ++++-- .../web/users/dashboard/MyTasksAreaModel.java | 55 +++++++++++++++++-- 2 files changed, 62 insertions(+), 11 deletions(-) diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MyTasksAreaController.java b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MyTasksAreaController.java index d72d1402a..58084e19c 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MyTasksAreaController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MyTasksAreaController.java @@ -58,22 +58,28 @@ public class MyTasksAreaController extends GenericForwardComposer { @Override public void render(Row row, Object data) throws Exception { + // MvanMiddelkoop feb 2015 - changed columns: added total budgeted + // hours for resource, added Notes, removed Code (not of any use, + // technical code) + Task task = (Task) data; row.setValue(task); - Util.appendLabel(row, task.getName()); - OrderElement orderElement = task.getOrderElement(); - Util.appendLabel(row, orderElement.getCode()); + Util.appendLabel(row, orderElement.getOrder().getName()); + Util.appendLabel(row, task.getName()); + Util.appendLabel(row, orderElement.getDescription()); Util.appendLabel(row, task.getStartAsLocalDate().toString()); Util.appendLabel(row, task.getEndAsLocalDate().toString()); - Util.appendLabel(row, getProgress(orderElement)); - + Util.appendLabel( + row, + _("{0} h", task.getSumOfAssignedEffort() + .toHoursAsDecimalWithScale(0).toString())); Util.appendLabel(row, _("{0} h", orderElement.getEffortAsString())); - + Util.appendLabel(row, getProgress(orderElement)); appendTimeTrackingButton(row, task); } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MyTasksAreaModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MyTasksAreaModel.java index 5b6675d78..cf0015982 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MyTasksAreaModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MyTasksAreaModel.java @@ -24,6 +24,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; +import org.joda.time.LocalDate; import org.libreplan.business.advance.entities.AdvanceMeasurement; import org.libreplan.business.advance.entities.DirectAdvanceAssignment; import org.libreplan.business.common.daos.IConfigurationDAO; @@ -39,6 +40,7 @@ import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +/* mvanmiddelkoop jan 2015 - to use from and to date in tasks */ /** * Model for for "My tasks" area in the user dashboard window @@ -66,23 +68,61 @@ public class MyTasksAreaModel implements IMyTasksAreaModel { return new ArrayList(); } + /* + * mvanmiddelkoop jan 2015 - Tasks from months ago to + * month ahead + */ + + LocalDate myTodayDate = LocalDate.now(); + int since = 1; + if (user.getResourcesLoadFilterPeriodSince() != null) { + since = user.getResourcesLoadFilterPeriodSince(); + } + int to = 3; + if (user.getResourcesLoadFilterPeriodTo() != null) { + to = user.getResourcesLoadFilterPeriodTo(); + } + List resourceAllocations = resourceAllocationDAO .findSpecificAllocationsRelatedTo(scenarioManager.getCurrent(), - UserDashboardUtil.getBoundResourceAsList(user), null, - null); + UserDashboardUtil.getBoundResourceAsList(user), + myTodayDate.minusMonths(since), + myTodayDate.plusMonths(to)); List tasks = new ArrayList(); for (SpecificResourceAllocation each : resourceAllocations) { Task task = each.getTask(); - forceLoad(task); - tasks.add(task); + if (task != null) { + forceLoad(task); + + /* mvanmiddelkoop jan 2015 - show only unfinished tasks */ + if (task.getAdvancePercentage().intValue() < 1) { + tasks.add(task); + } + } } - sortTasksDescendingByStartDate(tasks); + /* + * mvanmiddelkoop jan 2015 - Sort Ascending instead of Descending + * sortTasksDescendingByStartDate(tasks); + */ + sortTasksAscendingByStartDate(tasks); return tasks; } + /* mvanmiddelkoop jan 2015 - Sort Ascending instead of Descending */ + private void sortTasksAscendingByStartDate(List tasks) { + Collections.sort(tasks, new Comparator() { + + @Override + public int compare(Task o1, Task o2) { + return o1.getIntraDayStartDate().compareTo( + o2.getIntraDayStartDate()); + } + }); + } + private void sortTasksDescendingByStartDate(List tasks) { Collections.sort(tasks, new Comparator() { @@ -106,6 +146,11 @@ public class MyTasksAreaModel implements IMyTasksAreaModel { advanceMeasurement.getValue(); } } + + // MvanMiddelkoop feb 2015 - to show the budgeted hours, prevent + // LazyLoad errors + task.getSumOfAssignedEffort(); + task.getOrderElement().getDescription(); } @Override