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:
Jacobo Aragunde Pérez 2010-06-09 22:22:36 +02:00 committed by Javier Moran Rua
parent efe6eea20c
commit a1ba6aba49
3 changed files with 36 additions and 98 deletions

View file

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

View file

@ -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) {

View file

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