ItEr58S16RFAdaptacionInformesItEr55S14: Adapted the report 'Working progress per task'.
Now it's implemented in the XXModel. The DAO operation has been removed.
This commit is contained in:
parent
efe6eea20c
commit
a1ba6aba49
3 changed files with 36 additions and 98 deletions
|
|
@ -23,12 +23,9 @@ package org.navalplanner.business.planner.daos;
|
|||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.joda.time.LocalDate;
|
||||
import org.navalplanner.business.common.daos.IGenericDAO;
|
||||
import org.navalplanner.business.orders.entities.Order;
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.navalplanner.business.planner.entities.TaskGroup;
|
||||
import org.navalplanner.business.reports.dtos.WorkingProgressPerTaskDTO;
|
||||
|
||||
/**
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
|
|
@ -37,9 +34,6 @@ public interface ITaskElementDAO extends IGenericDAO<TaskElement, Long> {
|
|||
|
||||
List<TaskElement> findChildrenOf(TaskGroup each);
|
||||
|
||||
List<WorkingProgressPerTaskDTO> getWorkingProgressPerTaskReport(
|
||||
Order order, LocalDate deadline);
|
||||
|
||||
List<TaskElement> listFilteredByDate(Date start, Date end);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,27 +20,19 @@
|
|||
|
||||
package org.navalplanner.business.planner.daos;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.hibernate.Criteria;
|
||||
import org.hibernate.Query;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.navalplanner.business.common.daos.GenericDAOHibernate;
|
||||
import org.navalplanner.business.orders.entities.Order;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
import org.navalplanner.business.planner.entities.GenericDayAssignment;
|
||||
import org.navalplanner.business.planner.entities.SpecificDayAssignment;
|
||||
import org.navalplanner.business.planner.entities.Task;
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.navalplanner.business.planner.entities.TaskGroup;
|
||||
import org.navalplanner.business.reports.dtos.WorkingProgressPerTaskDTO;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
|
|
@ -69,77 +61,6 @@ public class TaskElementDAO extends GenericDAOHibernate<TaskElement, Long>
|
|||
Restrictions.eq("parent", each)).list();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of dtos with calculations for Working progress per task report
|
||||
*
|
||||
* @param orders filter by orders
|
||||
* @param deadline deadline for task
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<WorkingProgressPerTaskDTO> getWorkingProgressPerTaskReport(
|
||||
Order order, LocalDate deadline) {
|
||||
|
||||
List<WorkingProgressPerTaskDTO> result = new ArrayList<WorkingProgressPerTaskDTO>();
|
||||
|
||||
final List<Task> tasks = getTasksByOrderAndDate(order, deadline);
|
||||
final List<Task> sortTasks = sortTasks(order, tasks);
|
||||
for (Task task : sortTasks) {
|
||||
result.add(new WorkingProgressPerTaskDTO(task, deadline));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private List<Task> sortTasks(Order order, List<Task> tasks) {
|
||||
List<Task> sortTasks = new ArrayList<Task>();
|
||||
final List<OrderElement> orderElements = order.getAllChildren();
|
||||
for (OrderElement orderElement : orderElements) {
|
||||
Task task = findOrderElementInTasks(orderElement, tasks);
|
||||
if (task != null) {
|
||||
sortTasks.add(task);
|
||||
}
|
||||
}
|
||||
return sortTasks;
|
||||
}
|
||||
|
||||
private Task findOrderElementInTasks(OrderElement orderElement,
|
||||
List<Task> tasks) {
|
||||
for (Task task : tasks) {
|
||||
if (task.getOrderElement().getId().equals(orderElement.getId())) {
|
||||
return task;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private List<Task> getTasksByOrderAndDate(Order order, LocalDate deadline) {
|
||||
|
||||
final List<OrderElement> orders = (order != null) ? order
|
||||
.getAllOrderElements() : new ArrayList<OrderElement>();
|
||||
|
||||
// Prepare query
|
||||
String strQuery =
|
||||
"SELECT task "
|
||||
+ "FROM TaskSource taskSource "
|
||||
+ "LEFT OUTER JOIN taskSource.task task "
|
||||
+ "LEFT OUTER JOIN taskSource.schedulingData schedulingData "
|
||||
+ "LEFT OUTER JOIN schedulingData.orderElement orderElement "
|
||||
+ "WHERE task IN (SELECT task FROM Task task) ";
|
||||
|
||||
if (orders != null && !orders.isEmpty()) {
|
||||
strQuery += "AND orderElement IN (:orders) ";
|
||||
}
|
||||
|
||||
// Execute query
|
||||
Query query = getSession().createQuery(strQuery);
|
||||
if (orders != null && !orders.isEmpty()) {
|
||||
query.setParameterList("orders", orders);
|
||||
}
|
||||
|
||||
return query.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<TaskElement> listFilteredByDate(Date start, Date end) {
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
package org.navalplanner.web.reports;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -32,6 +33,8 @@ import org.navalplanner.business.orders.daos.IOrderDAO;
|
|||
import org.navalplanner.business.orders.entities.Order;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
import org.navalplanner.business.planner.daos.ITaskElementDAO;
|
||||
import org.navalplanner.business.planner.entities.Task;
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.navalplanner.business.reports.dtos.WorkingProgressPerTaskDTO;
|
||||
import org.navalplanner.business.scenarios.IScenarioManager;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
|
@ -65,32 +68,52 @@ public class WorkingProgressPerTaskModel implements IWorkingProgressPerTaskModel
|
|||
return result;
|
||||
}
|
||||
|
||||
private void initializeOrderElements(List<OrderElement> orderElements) {
|
||||
for (OrderElement each: orderElements) {
|
||||
initializeOrderElement(each);
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeOrderElement(OrderElement orderElement) {
|
||||
orderElement.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public JRDataSource getWorkingProgressPerTaskReport(Order order,
|
||||
Date referenceDate) {
|
||||
|
||||
orderDAO.reattachUnmodifiedEntity(order);
|
||||
initializeOrderElements(order.getAllChildren());
|
||||
order.useSchedulingDataFor(scenarioManager.getCurrent());
|
||||
LocalDate referenceLocalDate = new LocalDate(referenceDate);
|
||||
|
||||
final List<WorkingProgressPerTaskDTO> workingHoursPerWorkerList =
|
||||
taskDAO.getWorkingProgressPerTaskReport(order, new LocalDate(referenceDate));
|
||||
new ArrayList<WorkingProgressPerTaskDTO>();
|
||||
|
||||
if (workingHoursPerWorkerList != null && !workingHoursPerWorkerList.isEmpty()) {
|
||||
final List<TaskElement> tasks = order.getAllChildrenAssociatedTaskElements();
|
||||
final List<TaskElement> sortTasks = sortTasks(order, tasks);
|
||||
for (TaskElement task : sortTasks) {
|
||||
if(task instanceof Task) {
|
||||
workingHoursPerWorkerList.add(
|
||||
new WorkingProgressPerTaskDTO((Task) task, referenceLocalDate));
|
||||
}
|
||||
}
|
||||
if (!workingHoursPerWorkerList.isEmpty()) {
|
||||
return new JRBeanCollectionDataSource(workingHoursPerWorkerList);
|
||||
} else {
|
||||
return new JREmptyDataSource();
|
||||
}
|
||||
}
|
||||
|
||||
private List<TaskElement> sortTasks(Order order, List<TaskElement> tasks) {
|
||||
List<TaskElement> sortTasks = new ArrayList<TaskElement>();
|
||||
final List<OrderElement> orderElements = order.getAllChildren();
|
||||
for (OrderElement orderElement : orderElements) {
|
||||
TaskElement task = findOrderElementInTasks(orderElement, tasks);
|
||||
if (task != null) {
|
||||
sortTasks.add(task);
|
||||
}
|
||||
}
|
||||
return sortTasks;
|
||||
}
|
||||
|
||||
private TaskElement findOrderElementInTasks(OrderElement orderElement,
|
||||
List<TaskElement> tasks) {
|
||||
for (TaskElement task : tasks) {
|
||||
if (task != null && task.getOrderElement().getId().equals(orderElement.getId())) {
|
||||
return task;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue