diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/daos/ISumChargedEffortDAO.java b/libreplan-business/src/main/java/org/libreplan/business/orders/daos/ISumChargedEffortDAO.java
index 19d0fc17c..c17004896 100644
--- a/libreplan-business/src/main/java/org/libreplan/business/orders/daos/ISumChargedEffortDAO.java
+++ b/libreplan-business/src/main/java/org/libreplan/business/orders/daos/ISumChargedEffortDAO.java
@@ -81,7 +81,7 @@ public interface ISumChargedEffortDAO extends
*
* Usually you call this method to get the set before saving the work
* report. After saving the work report you call
- * {@link ISumChargedEffortDAO#recalculateTimesheetDates(Set)} with the
+ * {@link ISumChargedEffortDAO#recalculateTimesheetData(Set)} with the
* result of this method.
*
* You can pass null as param if you only have one of the sets.
@@ -94,6 +94,6 @@ public interface ISumChargedEffortDAO extends
* Recalulates the first and last timesheets dates for each
* {@link OrderElement} in the {@link Set}.
*/
- void recalculateTimesheetDates(Set orderElements);
+ void recalculateTimesheetData(Set orderElements);
}
diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/daos/SumChargedEffortDAO.java b/libreplan-business/src/main/java/org/libreplan/business/orders/daos/SumChargedEffortDAO.java
index 907ce3bb9..44bb46163 100644
--- a/libreplan-business/src/main/java/org/libreplan/business/orders/daos/SumChargedEffortDAO.java
+++ b/libreplan-business/src/main/java/org/libreplan/business/orders/daos/SumChargedEffortDAO.java
@@ -256,7 +256,7 @@ public class SumChargedEffortDAO extends
resetMapSumChargedEfforts();
resetSumChargedEffort(order);
calculateDirectChargedEffort(order);
- calculateTimesheetDates(order);
+ calculateTimesheetData(order);
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}
@@ -284,7 +284,12 @@ public class SumChargedEffortDAO extends
addDirectChargedEffort(orderElement, effort);
}
- private Pair calculateTimesheetDates(
+ private void calculateTimesheetData(OrderElement orderElement) {
+ calculateTimesheetDatesAndChildren(orderElement);
+ calculateFinishedTimesheetsAndChildren(orderElement);
+ }
+
+ private Pair calculateTimesheetDatesAndChildren(
OrderElement orderElement) {
Pair minMax = workReportLineDAO
.findMinAndMaxDatesByOrderElement(orderElement);
@@ -296,7 +301,7 @@ public class SumChargedEffortDAO extends
addIfNotNull(maxDates, minMax.getSecond());
for (OrderElement child : orderElement.getChildren()) {
- Pair minMaxChild = calculateTimesheetDates(child);
+ Pair minMaxChild = calculateTimesheetDatesAndChildren(child);
addIfNotNull(minDates, minMaxChild.getFirst());
addIfNotNull(maxDates, minMaxChild.getSecond());
}
@@ -319,6 +324,22 @@ public class SumChargedEffortDAO extends
}
}
+ private void calculateFinishedTimesheetsAndChildren(
+ OrderElement orderElement) {
+ calculateFinishedTimesheets(orderElement);
+
+ for (OrderElement child : orderElement.getChildren()) {
+ calculateFinishedTimesheetsAndChildren(child);
+ }
+ }
+
+ private void calculateFinishedTimesheets(OrderElement orderElement) {
+ SumChargedEffort sumChargedEffort = getByOrderElement(orderElement);
+ sumChargedEffort.setFinishedTimesheets(workReportLineDAO
+ .isFinished(orderElement));
+ save(sumChargedEffort);
+ }
+
@Override
@Transactional(readOnly = true)
public Set getOrderElementsToRecalculateTimsheetDates(
@@ -371,11 +392,13 @@ public class SumChargedEffortDAO extends
@Override
@Transactional
- public void recalculateTimesheetDates(Set orderElements) {
+ public void recalculateTimesheetData(Set orderElements) {
try {
for (OrderElement orderElement : orderElements) {
saveTimesheetDatesRecursively(orderElementDAO.find(orderElement
.getId()));
+ calculateFinishedTimesheets(orderElementDAO.find(orderElement
+ .getId()));
}
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
diff --git a/libreplan-business/src/main/java/org/libreplan/business/workreports/daos/IWorkReportLineDAO.java b/libreplan-business/src/main/java/org/libreplan/business/workreports/daos/IWorkReportLineDAO.java
index 9e22fcab8..5dda01659 100644
--- a/libreplan-business/src/main/java/org/libreplan/business/workreports/daos/IWorkReportLineDAO.java
+++ b/libreplan-business/src/main/java/org/libreplan/business/workreports/daos/IWorkReportLineDAO.java
@@ -72,4 +72,6 @@ public interface IWorkReportLineDAO extends
List findByOrderElementNotInWorkReportAnotherTransaction(
OrderElement orderElement, WorkReport workReport);
+ Boolean isFinished(OrderElement orderElement);
+
}
diff --git a/libreplan-business/src/main/java/org/libreplan/business/workreports/daos/WorkReportLineDAO.java b/libreplan-business/src/main/java/org/libreplan/business/workreports/daos/WorkReportLineDAO.java
index ebafb9ee2..f9a354007 100644
--- a/libreplan-business/src/main/java/org/libreplan/business/workreports/daos/WorkReportLineDAO.java
+++ b/libreplan-business/src/main/java/org/libreplan/business/workreports/daos/WorkReportLineDAO.java
@@ -189,4 +189,14 @@ public class WorkReportLineDAO extends IntegrationEntityDAO
return (List) criteria.list();
}
+ @Override
+ public Boolean isFinished(OrderElement orderElement) {
+ Criteria criteria = getSession().createCriteria(WorkReportLine.class);
+
+ criteria.add(Restrictions.eq("orderElement", orderElement));
+ criteria.add(Restrictions.eq("finished", true));
+
+ return criteria.uniqueResult() != null;
+ }
+
}
diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/PersonalTimesheetModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/PersonalTimesheetModel.java
index 95dd7796f..81ed6ef82 100644
--- a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/PersonalTimesheetModel.java
+++ b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/PersonalTimesheetModel.java
@@ -440,7 +440,7 @@ public class PersonalTimesheetModel implements IPersonalTimesheetModel {
workReport.generateWorkReportLineCodes(entitySequenceDAO
.getNumberOfDigitsCode(EntityNameEnum.WORK_REPORT));
workReportDAO.save(workReport);
- sumChargedEffortDAO.recalculateTimesheetDates(orderElements);
+ sumChargedEffortDAO.recalculateTimesheetData(orderElements);
}
resetModifiedFields();
diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/workreports/WorkReportModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/workreports/WorkReportModel.java
index 048762e67..5cf147a77 100644
--- a/libreplan-webapp/src/main/java/org/libreplan/web/workreports/WorkReportModel.java
+++ b/libreplan-webapp/src/main/java/org/libreplan/web/workreports/WorkReportModel.java
@@ -289,7 +289,7 @@ public class WorkReportModel extends IntegrationEntityModel implements
.getWorkReportLines());
workReportDAO.save(workReport);
- sumChargedEffortDAO.recalculateTimesheetDates(orderElements);
+ sumChargedEffortDAO.recalculateTimesheetData(orderElements);
}
@Override
@@ -429,7 +429,7 @@ public class WorkReportModel extends IntegrationEntityModel implements
.updateRelatedSumChargedEffortWithDeletedWorkReportLineSet(workReport
.getWorkReportLines());
workReportDAO.remove(workReport.getId());
- sumChargedEffortDAO.recalculateTimesheetDates(orderElements);
+ sumChargedEffortDAO.recalculateTimesheetData(orderElements);
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}
diff --git a/libreplan-webapp/src/main/java/org/libreplan/ws/workreports/impl/WorkReportServiceREST.java b/libreplan-webapp/src/main/java/org/libreplan/ws/workreports/impl/WorkReportServiceREST.java
index 8a389afc5..1b5043beb 100644
--- a/libreplan-webapp/src/main/java/org/libreplan/ws/workreports/impl/WorkReportServiceREST.java
+++ b/libreplan-webapp/src/main/java/org/libreplan/ws/workreports/impl/WorkReportServiceREST.java
@@ -131,7 +131,7 @@ public class WorkReportServiceREST extends
@Override
protected void afterSaving(WorkReport entity) {
- sumChargedEffortDAO.recalculateTimesheetDates(orderElements);
+ sumChargedEffortDAO.recalculateTimesheetData(orderElements);
}
@Override
@@ -156,7 +156,7 @@ public class WorkReportServiceREST extends
.updateRelatedSumChargedEffortWithDeletedWorkReportLineSet(workReport
.getWorkReportLines());
workReportDAO.remove(workReport.getId());
- sumChargedEffortDAO.recalculateTimesheetDates(orderElements);
+ sumChargedEffortDAO.recalculateTimesheetData(orderElements);
return Response.ok().build();
} catch (InstanceNotFoundException e) {
return Response.status(Status.NOT_FOUND).build();
@@ -177,7 +177,7 @@ public class WorkReportServiceREST extends
.updateRelatedSumChargedEffortWithDeletedWorkReportLineSet(new HashSet(
Arrays.asList(workReportLine)));
workReportLineDAO.remove(workReportLine.getId());
- sumChargedEffortDAO.recalculateTimesheetDates(orderElements);
+ sumChargedEffortDAO.recalculateTimesheetData(orderElements);
return Response.ok().build();
} catch (InstanceNotFoundException e) {
return Response.status(Status.NOT_FOUND).build();