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 23809732c..63ca5c168 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 @@ -24,6 +24,9 @@ import static org.libreplan.web.I18nHelper._; import java.text.MessageFormat; import java.util.List; +import javax.annotation.Resource; + +import org.joda.time.LocalDate; import org.libreplan.business.advance.entities.AdvanceMeasurement; import org.libreplan.business.advance.entities.DirectAdvanceAssignment; import org.libreplan.business.orders.entities.OrderElement; @@ -32,7 +35,10 @@ import org.libreplan.business.planner.entities.Task; import org.libreplan.business.workingday.EffortDuration; import org.libreplan.web.common.Util; import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.util.GenericForwardComposer; +import org.zkoss.zul.Button; import org.zkoss.zul.Row; import org.zkoss.zul.RowRenderer; @@ -46,6 +52,9 @@ public class MyTasksAreaController extends GenericForwardComposer { private IMyTasksAreaModel myTasksAreaModel; + @Resource + private IMonthlyTimesheetController monthlyTimesheetController; + private RowRenderer tasksRenderer = new RowRenderer() { @Override @@ -65,6 +74,8 @@ public class MyTasksAreaController extends GenericForwardComposer { Util.appendLabel(row, getProgress(orderElement)); Util.appendLabel(row, getEffort(orderElement)); + + appendTimeTrackingButton(row, task); } private String getEffort(OrderElement orderElement) { @@ -96,6 +107,60 @@ public class MyTasksAreaController extends GenericForwardComposer { .getLastAdvanceMeasurement(); } + private void appendTimeTrackingButton(Row row, final Task task) { + Button button = Util.createEditButton(new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + monthlyTimesheetController + .goToCreateOrEditForm(getMonthlyTimesheetDateForTask(task)); + } + + private LocalDate getMonthlyTimesheetDateForTask(Task task) { + LocalDate start = task.getStartAsLocalDate(); + LocalDate end = task.getEndAsLocalDate(); + + LocalDate currentDate = new LocalDate(); + LocalDate min = currentDate.dayOfMonth().withMinimumValue(); + LocalDate max = currentDate.dayOfMonth().withMaximumValue(); + + if (dateBetween(start, min, max)) { + return start; + } + + if (dateBetween(end, min, max)) { + return end; + } + + if (dateBetween(currentDate, start, end)) { + return currentDate; + } + + if (end.compareTo(min) < 0) { + return end; + } + + if (start.compareTo(max) > 0) { + return start; + } + + return currentDate; + } + + private boolean dateBetween(LocalDate date, LocalDate start, + LocalDate end) { + if ((date.compareTo(start) >= 0) + && (date.compareTo(end) <= 0)) { + return true; + } + return false; + } + }); + + button.setTooltiptext(_("Track time")); + + row.appendChild(button); + } + }; @Override diff --git a/libreplan-webapp/src/main/webapp/myaccount/_myTasksArea.zul b/libreplan-webapp/src/main/webapp/myaccount/_myTasksArea.zul index ef6ad584f..8f72bcc0f 100644 --- a/libreplan-webapp/src/main/webapp/myaccount/_myTasksArea.zul +++ b/libreplan-webapp/src/main/webapp/myaccount/_myTasksArea.zul @@ -38,6 +38,7 @@ sort="auto(orderElement.advancePercentage)" /> +