[Bug #1187] Add filter by resources in TaskGroup filter in company Gantt view

FEA: ItEr75S04BugFixing
This commit is contained in:
Manuel Rego Casasnovas 2011-10-11 12:56:05 +02:00
parent 94edf7fd42
commit 628e065542
3 changed files with 77 additions and 2 deletions

View file

@ -29,7 +29,7 @@ public enum TaskGroupFilterEnum implements IFilterEnum {
Criterion(_("Criterion")), Label(_("Label")), ExternalCompany(_("Customer")), State(
_("State")), Code(_("Code")), CustomerReference(
_("Customer Reference"));
_("Customer Reference")), Resource(_("Resource"));
/**
* Forces to mark the string as needing translation
*/

View file

@ -33,6 +33,7 @@ import org.navalplanner.business.orders.entities.OrderStatusEnum;
import org.navalplanner.business.planner.entities.TaskGroup;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.entities.Resource;
import org.springframework.beans.factory.annotation.Autowired;
@ -59,6 +60,7 @@ public class TaskGroupsMultipleFiltersFinder extends MultipleFiltersFinder {
fillWithFirstTenFiltersState();
fillWihtFirstTenFiltersCodes();
fillWihtFirstTenFiltersCustomerReferences();
fillWithFirstTenFiltersResources();
addNoneFilter();
return getListMatching();
}
@ -152,6 +154,7 @@ public class TaskGroupsMultipleFiltersFinder extends MultipleFiltersFinder {
searchInLabelTypes(filter);
searchInExternalCompanies(filter);
searchInOrderStatus(filter);
searchInResources(filter);
}
}
@ -334,4 +337,43 @@ public class TaskGroupsMultipleFiltersFinder extends MultipleFiltersFinder {
reference, reference));
}
private List<FilterPair> fillWithFirstTenFiltersResources() {
Map<Class<?>, List<Resource>> mapResources = databaseSnapshots
.snapshotMapResources();
Iterator<Class<?>> iteratorClass = mapResources.keySet().iterator();
while (iteratorClass.hasNext() && getListMatching().size() < 10) {
Class<?> className = iteratorClass.next();
for (int i = 0; getListMatching().size() < 10
&& i < mapResources.get(className).size(); i++) {
Resource resource = mapResources.get(className).get(i);
addResource(className, resource);
}
}
return getListMatching();
}
private void searchInResources(String filter) {
Map<Class<?>, List<Resource>> mapResources = databaseSnapshots
.snapshotMapResources();
for (Class<?> className : mapResources.keySet()) {
for (Resource resource : mapResources.get(className)) {
String name = StringUtils.deleteWhitespace(resource.getName()
.toLowerCase());
if (name.contains(filter)) {
addResource(className, resource);
if ((filter.length() < 3) && (getListMatching().size() > 9)) {
return;
}
}
}
}
}
private void addResource(Class className, Resource resource) {
String pattern = resource.getName();
getListMatching().add(
new FilterPair(TaskGroupFilterEnum.Resource, className
.getSimpleName(), pattern, resource));
}
}

View file

@ -29,9 +29,11 @@ import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.orders.entities.OrderStatusEnum;
import org.navalplanner.business.planner.entities.GenericResourceAllocation;
import org.navalplanner.business.planner.entities.ResourceAllocation;
import org.navalplanner.business.planner.entities.SpecificResourceAllocation;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.planner.entities.TaskGroup;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.web.common.components.finders.FilterPair;
import org.navalplanner.web.common.components.finders.TaskGroupFilterEnum;
import org.zkoss.ganttz.IPredicate;
@ -102,6 +104,8 @@ public class TaskGroupPredicate implements IPredicate {
return acceptCode(filter, taskGroup);
case CustomerReference:
return acceptCustomerReference(filter, taskGroup);
case Resource:
return acceptResource(filter, taskGroup);
}
return false;
}
@ -249,4 +253,33 @@ public class TaskGroupPredicate implements IPredicate {
return false;
}
}
private boolean acceptResource(FilterPair filter, TaskElement taskElement) {
Resource filterResource = (Resource) filter.getValue();
return existResourceInTaskElementResourceAllocations(filterResource,
taskElement);
}
private boolean existResourceInTaskElementResourceAllocations(
Resource filterResource, TaskElement taskElement) {
for (ResourceAllocation<?> each : taskElement
.getAllResourceAllocations()) {
if (acceptsResourceInResourceAllocation(filterResource, each)) {
return true;
}
}
return false;
}
private boolean acceptsResourceInResourceAllocation(
Resource filterResource, ResourceAllocation<?> resourceAllocation) {
if (resourceAllocation instanceof SpecificResourceAllocation) {
Resource resource = ((SpecificResourceAllocation) resourceAllocation)
.getResource();
if (resource.getId().equals(filterResource.getId())) {
return true;
}
}
return false;
}
}