ItEr60S15AnA04S11RFAdaptacionFiltradosInformes : filters by labels in the HoursWorkedPerWorker report.

This commit is contained in:
Susana Montes Pedreira 2010-07-16 14:22:06 +02:00 committed by Javier Moran Rua
parent 457a89bf68
commit 3abf511159
6 changed files with 141 additions and 15 deletions

View file

@ -25,6 +25,7 @@ import java.util.Date;
import java.util.List;
import org.navalplanner.business.common.daos.IIntegrationEntityDAO;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.reports.dtos.HoursWorkedPerResourceDTO;
import org.navalplanner.business.resources.entities.Criterion;
@ -130,6 +131,7 @@ public interface IResourceDAO extends IIntegrationEntityDAO<Resource> {
* @return
*/
public List<HoursWorkedPerResourceDTO> getWorkingHoursPerWorker(
List<Resource> resources, Date startingDate, Date endingDate);
List<Resource> resources, List<Label> labels, Date startingDate,
Date endingDate);
}

View file

@ -32,6 +32,7 @@ import org.apache.commons.lang.Validate;
import org.hibernate.Query;
import org.hibernate.criterion.Restrictions;
import org.navalplanner.business.common.daos.IntegrationEntityDAO;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.reports.dtos.HoursWorkedPerResourceDTO;
import org.navalplanner.business.resources.entities.Criterion;
@ -222,7 +223,9 @@ public class ResourceDAO extends IntegrationEntityDAO<Resource> implements
@Override
@Transactional(readOnly = true)
public List<HoursWorkedPerResourceDTO> getWorkingHoursPerWorker(
List<Resource> resources, Date startingDate, Date endingDate) {
List<Resource> resources, List<Label> labels, Date startingDate,
Date endingDate) {
String strQuery = "SELECT new org.navalplanner.business.reports.dtos.HoursWorkedPerResourceDTO(resource, wrl) "
+ "FROM Resource resource, WorkReportLine wrl "
+ "LEFT OUTER JOIN wrl.resource wrlresource "
@ -244,6 +247,12 @@ public class ResourceDAO extends IntegrationEntityDAO<Resource> implements
strQuery += "AND resource IN (:resources) ";
}
// Set labels
if (labels != null && !labels.isEmpty()) {
strQuery += " AND ( EXISTS (FROM wrl.labels as etq WHERE etq IN (:labels)) "
+ "OR EXISTS (FROM wrl.workReport.labels as etqwr WHERE etqwr IN (:labels))) ";
}
// Order by
strQuery += "ORDER BY resource.id, wrl.date";
@ -258,6 +267,9 @@ public class ResourceDAO extends IntegrationEntityDAO<Resource> implements
if (resources != null && !resources.isEmpty()) {
query.setParameterList("resources", resources);
}
if (labels != null && !labels.isEmpty()) {
query.setParameterList("labels", labels);
}
// Get result
return query.list();

View file

@ -31,10 +31,12 @@ import java.util.Set;
import net.sf.jasperreports.engine.JRDataSource;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.entities.Worker;
import org.navalplanner.web.common.Util;
import org.navalplanner.web.common.components.Autocomplete;
import org.navalplanner.web.common.components.bandboxsearch.BandboxSearch;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zk.ui.event.Event;
@ -44,12 +46,10 @@ import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
/**
* @author Diego Pino Garcia <dpino@igalia.com>
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
@ -62,12 +62,16 @@ public class HoursWorkedPerWorkerController extends NavalplannerReportController
private Listbox lbResources;
private Listbox lbLabels;
private Datebox startingDate;
private Datebox endingDate;
private Autocomplete filterResource;
private BandboxSearch bdLabels;
private ResourceListRenderer resourceListRenderer = new ResourceListRenderer();
@Override
@ -88,7 +92,7 @@ public class HoursWorkedPerWorkerController extends NavalplannerReportController
@Override
protected JRDataSource getDataSource() {
return hoursWorkedPerWorkerModel.getHoursWorkedPerWorkerReport(
getSelectedResources(),
getSelectedResources(), getSelectedLabels(),
getStartingDate(), getEndingDate());
}
@ -173,7 +177,8 @@ public class HoursWorkedPerWorkerController extends NavalplannerReportController
private void appendType(final Listitem item) {
Resource resource = (Resource) item.getValue();
Label typeLabel = new Label(getType(resource));
org.zkoss.zul.Label typeLabel = new org.zkoss.zul.Label(
getType(resource));
Listcell typeResourceCell = new Listcell();
typeResourceCell.appendChild(typeLabel);
@ -193,7 +198,8 @@ public class HoursWorkedPerWorkerController extends NavalplannerReportController
private void appendName(final Listitem item) {
Resource resource = (Resource) item.getValue();
Label nameLabel = new Label(getName(resource));
org.zkoss.zul.Label nameLabel = new org.zkoss.zul.Label(
getName(resource));
Listcell nameResourceCell = new Listcell();
nameResourceCell.appendChild(nameLabel);
@ -202,7 +208,8 @@ public class HoursWorkedPerWorkerController extends NavalplannerReportController
private void appendCode(Listitem item) {
Resource resource = (Resource) item.getValue();
Label codeLabel = new Label(resource.getCode());
org.zkoss.zul.Label codeLabel = new org.zkoss.zul.Label(resource
.getCode());
Listcell codeResourceCell = new Listcell();
codeResourceCell.appendChild(codeLabel);
@ -244,4 +251,31 @@ public class HoursWorkedPerWorkerController extends NavalplannerReportController
return "Machine";
}
public List<Label> getAllLabels() {
return hoursWorkedPerWorkerModel.getAllLabels();
}
public void onSelectLabel() {
Label label = (Label) bdLabels.getSelectedElement();
if (label == null) {
throw new WrongValueException(bdLabels, _("please, select a label"));
}
boolean result = hoursWorkedPerWorkerModel.addSelectedLabel(label);
if (!result) {
throw new WrongValueException(bdLabels,
_("This label has already been added."));
} else {
Util.reloadBindings(lbLabels);
}
bdLabels.clear();
}
public void onRemoveLabel(Label label) {
hoursWorkedPerWorkerModel.removeSelectedLabel(label);
Util.reloadBindings(lbLabels);
}
public List<Label> getSelectedLabels() {
return hoursWorkedPerWorkerModel.getSelectedLabels();
}
}

View file

@ -20,6 +20,7 @@
package org.navalplanner.web.reports;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
@ -29,6 +30,8 @@ import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.navalplanner.business.labels.daos.ILabelDAO;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.reports.dtos.HoursWorkedPerResourceDTO;
import org.navalplanner.business.resources.daos.IResourceDAO;
import org.navalplanner.business.resources.entities.Resource;
@ -49,16 +52,23 @@ public class HoursWorkedPerWorkerModel implements IHoursWorkedPerWorkerModel {
@Autowired
private IResourceDAO resourceDAO;
@Autowired
private ILabelDAO labelDAO;
private Set<Resource> selectedResources = new HashSet<Resource>();
private List<Label> selectedLabels = new ArrayList<Label>();
private boolean showReportMessage = false;
@Transactional(readOnly = true)
public JRDataSource getHoursWorkedPerWorkerReport(List<Resource> resources,
List<Label> labels,
Date startingDate, Date endingDate) {
final List<HoursWorkedPerResourceDTO> workingHoursPerWorkerList = resourceDAO
.getWorkingHoursPerWorker(resources, startingDate, endingDate);
.getWorkingHoursPerWorker(resources, labels, startingDate,
endingDate);
if (workingHoursPerWorkerList != null && !workingHoursPerWorkerList.isEmpty()) {
setShowReportMessage(false);
@ -102,4 +112,33 @@ public class HoursWorkedPerWorkerModel implements IHoursWorkedPerWorkerModel {
return showReportMessage;
}
@Override
@Transactional(readOnly = true)
public List<Label> getAllLabels(){
List<Label> allLabels = labelDAO.getAll();
// initialize the labels
for (Label label : allLabels) {
label.getType().getName();
}
return allLabels;
}
@Override
public void removeSelectedLabel(Label label) {
this.selectedLabels.remove(label);
}
@Override
public boolean addSelectedLabel(Label label) {
if (this.selectedLabels.contains(label)) {
return false;
}
this.selectedLabels.add(label);
return true;
}
@Override
public List<Label> getSelectedLabels() {
return selectedLabels;
}
}

View file

@ -26,6 +26,7 @@ import java.util.Set;
import net.sf.jasperreports.engine.JRDataSource;
import org.navalplanner.business.labels.entities.Label;
import org.navalplanner.business.resources.entities.Resource;
/**
@ -36,15 +37,25 @@ import org.navalplanner.business.resources.entities.Resource;
public interface IHoursWorkedPerWorkerModel {
JRDataSource getHoursWorkedPerWorkerReport(List<Resource> resources,
List<Label> labels,
Date startingDate, Date endingDate);
void init();
Set<Resource> getResources();
List<Label> getSelectedLabels();
void removeSelectedResource(Resource resource);
boolean addSelectedResource(Resource resource);
void removeSelectedLabel(Label label);
boolean addSelectedLabel(Label label);
boolean isShowReportMessage();
List<Label> getAllLabels();
}

View file

@ -98,19 +98,47 @@
<listheader label="${i18n:_('Code')}" align="center" width="220px"/>
<listheader label="${i18n:_('Operations')}" align="center" width="70px"/>
</listhead>
<!--<listitem self="@{each='resource'}" value="@{resource}">
<listcell label="@{resource.nif}" />
<listcell label="@{resource.name}" />
</listbox>
</vbox>
</panelchildren>
</panel>
<!-- Assign label -->
<panel title="${i18n:_('Filter by labels')}" border="normal"
style="overflow:auto">
<panelchildren>
<vbox>
<separator spacing="5px"/>
<hbox>
<bandboxSearch id="bdLabels" finder="LabelBandboxFinder"
model="@{controller.allLabels}" />
<button label="${i18n:_('Assign')}"
onClick="controller.onSelectLabel()"
style="margin-top: -4px" />
</hbox>
</vbox>
<separator spacing="10px"/>
<listbox id="lbLabels"
width="700px"
multiple="true"
model="@{controller.selectedLabels}">
<listhead>
<listheader label="${i18n:_('Type')}" align="center" />
<listheader label="${i18n:_('Name')}" align="center" />
<listheader label="${i18n:_('Operations')}" align="center" width="100px"/>
</listhead>
<listitem self="@{each='label'}" value="@{label}">
<listcell label="@{label.type.name}" />
<listcell label="@{label.name}" />
<listcell>
<button sclass="icono" image="/common/img/ico_borrar1.png"
hoverImage="/common/img/ico_borrar.png"
tooltiptext="${i18n:_('Delete')}"
onClick="controller.onRemoveResource(self.parent.parent.value);">
onClick="controller.onRemoveLabel(self.parent.parent.value);">
</button>
</listcell>
</listitem>-->
</listitem>
</listbox>
</vbox>
</panelchildren>
</panel>