Add implementation to calculate if a task is finished according to timesheets

It has been modified the calculation of SumChargedEffort to include the new
field finishedTimesheets.

FEA: ItEr77S12AdaptPlanningAccordingTimesheets
This commit is contained in:
Manuel Rego Casasnovas 2012-11-02 13:20:20 +01:00
parent 33d43babf7
commit 58928b208b
7 changed files with 47 additions and 12 deletions

View file

@ -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 <code>null</code> 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<OrderElement> orderElements);
void recalculateTimesheetData(Set<OrderElement> orderElements);
}

View file

@ -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<Date, Date> calculateTimesheetDates(
private void calculateTimesheetData(OrderElement orderElement) {
calculateTimesheetDatesAndChildren(orderElement);
calculateFinishedTimesheetsAndChildren(orderElement);
}
private Pair<Date, Date> calculateTimesheetDatesAndChildren(
OrderElement orderElement) {
Pair<Date, Date> minMax = workReportLineDAO
.findMinAndMaxDatesByOrderElement(orderElement);
@ -296,7 +301,7 @@ public class SumChargedEffortDAO extends
addIfNotNull(maxDates, minMax.getSecond());
for (OrderElement child : orderElement.getChildren()) {
Pair<Date, Date> minMaxChild = calculateTimesheetDates(child);
Pair<Date, Date> 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<OrderElement> getOrderElementsToRecalculateTimsheetDates(
@ -371,11 +392,13 @@ public class SumChargedEffortDAO extends
@Override
@Transactional
public void recalculateTimesheetDates(Set<OrderElement> orderElements) {
public void recalculateTimesheetData(Set<OrderElement> orderElements) {
try {
for (OrderElement orderElement : orderElements) {
saveTimesheetDatesRecursively(orderElementDAO.find(orderElement
.getId()));
calculateFinishedTimesheets(orderElementDAO.find(orderElement
.getId()));
}
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);

View file

@ -72,4 +72,6 @@ public interface IWorkReportLineDAO extends
List<WorkReportLine> findByOrderElementNotInWorkReportAnotherTransaction(
OrderElement orderElement, WorkReport workReport);
Boolean isFinished(OrderElement orderElement);
}

View file

@ -189,4 +189,14 @@ public class WorkReportLineDAO extends IntegrationEntityDAO<WorkReportLine>
return (List<WorkReportLine>) 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;
}
}

View file

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

View file

@ -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);
}

View file

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