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();