Calculate first/last timesheet dates when recalculating a SumChargedEffortDAO
FEA: ItEr77S12AdaptPlanningAccordingTimesheets
This commit is contained in:
parent
ba2ce0371d
commit
460896ee8b
4 changed files with 72 additions and 9 deletions
|
|
@ -19,7 +19,11 @@
|
|||
|
||||
package org.libreplan.business.orders.daos;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
|
|
@ -149,9 +153,6 @@ public class SumChargedEffortDAO extends
|
|||
private void addDirectChargedEffort(OrderElement orderElement,
|
||||
EffortDuration effort) {
|
||||
SumChargedEffort sumChargedEffort = getByOrderElement(orderElement);
|
||||
if (sumChargedEffort == null) {
|
||||
sumChargedEffort = SumChargedEffort.create(orderElement);
|
||||
}
|
||||
|
||||
sumChargedEffort.addDirectChargedEffort(effort);
|
||||
save(sumChargedEffort);
|
||||
|
|
@ -163,9 +164,6 @@ public class SumChargedEffortDAO extends
|
|||
EffortDuration effort) {
|
||||
if (orderElement != null) {
|
||||
SumChargedEffort sumChargedEffort = getByOrderElement(orderElement);
|
||||
if (sumChargedEffort == null) {
|
||||
sumChargedEffort = SumChargedEffort.create(orderElement);
|
||||
}
|
||||
|
||||
sumChargedEffort.addIndirectChargedEffort(effort);
|
||||
save(sumChargedEffort);
|
||||
|
|
@ -231,6 +229,9 @@ public class SumChargedEffortDAO extends
|
|||
.get(orderElement);
|
||||
if (sumChargedEffort == null) {
|
||||
sumChargedEffort = findByOrderElement(orderElement);
|
||||
if (sumChargedEffort == null) {
|
||||
sumChargedEffort = SumChargedEffort.create(orderElement);
|
||||
}
|
||||
mapSumChargedEfforts.put(orderElement, sumChargedEffort);
|
||||
}
|
||||
return sumChargedEffort;
|
||||
|
|
@ -251,6 +252,7 @@ public class SumChargedEffortDAO extends
|
|||
resetMapSumChargedEfforts();
|
||||
resetSumChargedEffort(order);
|
||||
calculateDirectChargedEffort(order);
|
||||
calculateFirstAndLastTimesheetDates(order);
|
||||
} catch (InstanceNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
|
@ -258,9 +260,6 @@ public class SumChargedEffortDAO extends
|
|||
|
||||
private void resetSumChargedEffort(OrderElement orderElement) {
|
||||
SumChargedEffort sumChargedEffort = getByOrderElement(orderElement);
|
||||
if (sumChargedEffort == null) {
|
||||
sumChargedEffort = SumChargedEffort.create(orderElement);
|
||||
}
|
||||
sumChargedEffort.reset();
|
||||
|
||||
for (OrderElement each : orderElement.getChildren()) {
|
||||
|
|
@ -281,4 +280,36 @@ public class SumChargedEffortDAO extends
|
|||
addDirectChargedEffort(orderElement, effort);
|
||||
}
|
||||
|
||||
private Pair<Date, Date> calculateFirstAndLastTimesheetDates(
|
||||
OrderElement orderElement) {
|
||||
Pair<Date, Date> minMax = workReportLineDAO
|
||||
.findMinAndMaxDatesByOrderElement(orderElement);
|
||||
|
||||
Set<Date> minDates = new HashSet<Date>();
|
||||
Set<Date> maxDates = new HashSet<Date>();
|
||||
|
||||
addIfNotNull(minDates, minMax.getFirst());
|
||||
addIfNotNull(maxDates, minMax.getSecond());
|
||||
|
||||
for (OrderElement child : orderElement.getChildren()) {
|
||||
Pair<Date, Date> minMaxChild = calculateFirstAndLastTimesheetDates(child);
|
||||
addIfNotNull(minDates, minMaxChild.getFirst());
|
||||
addIfNotNull(maxDates, minMaxChild.getSecond());
|
||||
}
|
||||
|
||||
SumChargedEffort sumChargedEffort = getByOrderElement(orderElement);
|
||||
sumChargedEffort.setTimesheetDates(minMax.getFirst(),
|
||||
minMax.getSecond());
|
||||
|
||||
return Pair.create(
|
||||
minDates.isEmpty() ? null : Collections.min(minDates),
|
||||
maxDates.isEmpty() ? null : Collections.max(maxDates));
|
||||
}
|
||||
|
||||
private void addIfNotNull(Collection<Date> list, Date date) {
|
||||
if (date != null) {
|
||||
list.add(date);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,4 +119,10 @@ public class SumChargedEffort extends BaseEntity {
|
|||
this.lastTimesheetDate = lastTimesheetDate;
|
||||
}
|
||||
|
||||
public void setTimesheetDates(Date firstTimesheetDate,
|
||||
Date lastTimesheetDate) {
|
||||
setFirstTimesheetDate(firstTimesheetDate);
|
||||
setLastTimesheetDate(lastTimesheetDate);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import org.libreplan.business.common.daos.IIntegrationEntityDAO;
|
|||
import org.libreplan.business.orders.entities.OrderElement;
|
||||
import org.libreplan.business.reports.dtos.WorkReportLineDTO;
|
||||
import org.libreplan.business.resources.entities.Resource;
|
||||
import org.libreplan.business.util.Pair;
|
||||
import org.libreplan.business.workreports.entities.WorkReport;
|
||||
import org.libreplan.business.workreports.entities.WorkReportLine;
|
||||
|
||||
|
|
@ -65,4 +66,7 @@ public interface IWorkReportLineDAO extends
|
|||
List<WorkReportLine> findByResourceFilteredByDateNotInWorkReport(
|
||||
Resource resource, Date start, Date end, WorkReport workReport);
|
||||
|
||||
Pair<Date, Date> findMinAndMaxDatesByOrderElement(
|
||||
OrderElement orderElement);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ import org.libreplan.business.common.daos.IntegrationEntityDAO;
|
|||
import org.libreplan.business.orders.entities.OrderElement;
|
||||
import org.libreplan.business.reports.dtos.WorkReportLineDTO;
|
||||
import org.libreplan.business.resources.entities.Resource;
|
||||
import org.libreplan.business.util.Pair;
|
||||
import org.libreplan.business.workreports.entities.WorkReport;
|
||||
import org.libreplan.business.workreports.entities.WorkReportLine;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
|
|
@ -146,4 +147,25 @@ public class WorkReportLineDAO extends IntegrationEntityDAO<WorkReportLine>
|
|||
return criteria.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<Date, Date> findMinAndMaxDatesByOrderElement(
|
||||
OrderElement orderElement) {
|
||||
|
||||
String strQuery = "SELECT MIN(date) AS min, MAX(date) AS max "
|
||||
+ "FROM WorkReportLine " + "WHERE orderElement = :orderElement";
|
||||
|
||||
Query query = getSession().createQuery(strQuery);
|
||||
query.setParameter("orderElement", orderElement);
|
||||
|
||||
Object[] result = (Object[]) query.uniqueResult();
|
||||
|
||||
Date min = null;
|
||||
Date max = null;
|
||||
if (result != null) {
|
||||
min = (Date) result[0];
|
||||
max = (Date) result[1];
|
||||
}
|
||||
return Pair.create(min, max);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue