From ef19628690f9b88c09efdcffe6e8ecd9d279f402 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Tue, 5 Jun 2012 17:32:52 +0200 Subject: [PATCH] Fix problem in constraint only one work report line per day and task It was checking only one work report line per day, but it should allow to have several work report lines in the same day if they are for different tasks. FEA: ItEr76S28UserDashboard --- .../workreports/entities/WorkReport.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/workreports/entities/WorkReport.java b/libreplan-business/src/main/java/org/libreplan/business/workreports/entities/WorkReport.java index 62ec7e656..5594ea902 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/workreports/entities/WorkReport.java +++ b/libreplan-business/src/main/java/org/libreplan/business/workreports/entities/WorkReport.java @@ -23,7 +23,9 @@ package org.libreplan.business.workreports.entities; import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; @@ -468,19 +470,24 @@ public class WorkReport extends IntegrationEntity implements return result; } - @AssertTrue(message = "only one work report line per day is allowed in monthly timesheets") - public boolean checkConstraintOnlyOneWorkReportLinePerDayInMonthlyTimesheet() { + @AssertTrue(message = "only one work report line per day and task is allowed in monthly timesheets") + public boolean checkConstraintOnlyOneWorkReportLinePerDayAndOrderElementInMonthlyTimesheet() { if (!getWorkReportType().isMonthlyTimesheetsType()) { return true; } - Set days = new HashSet(); + Map> map = new HashMap>(); for (WorkReportLine line : workReportLines) { + OrderElement orderElement = line.getOrderElement(); + if (map.get(orderElement) == null) { + map.put(orderElement, new HashSet()); + } + LocalDate date = LocalDate.fromDateFields(line.getDate()); - if (days.contains(date)) { + if (map.get(orderElement).contains(date)) { return false; } - days.add(date); + map.get(orderElement).add(date); } return true; }