ItEr60S15AnA04S11RFAdaptacionFiltradosInformes : filters by resources and shows correct messages
first and second correction: Change the interface for the selection of resources and shows correct messages.
This commit is contained in:
parent
35dd2ac6fa
commit
0c71ad7465
13 changed files with 340 additions and 96 deletions
|
|
@ -25,11 +25,11 @@ import java.util.Set;
|
|||
|
||||
import org.joda.time.LocalTime;
|
||||
import org.navalplanner.business.labels.entities.Label;
|
||||
import org.navalplanner.business.resources.entities.Worker;
|
||||
import org.navalplanner.business.resources.entities.Resource;
|
||||
import org.navalplanner.business.workreports.entities.WorkReportLine;
|
||||
import org.navalplanner.business.workreports.valueobjects.DescriptionValue;
|
||||
|
||||
public class HoursWorkedPerWorkerDTO {
|
||||
public class HoursWorkedPerResourceDTO {
|
||||
|
||||
private String workerName;
|
||||
|
||||
|
|
@ -47,11 +47,11 @@ public class HoursWorkedPerWorkerDTO {
|
|||
|
||||
private String labels;
|
||||
|
||||
public HoursWorkedPerWorkerDTO(
|
||||
Worker worker,
|
||||
public HoursWorkedPerResourceDTO(
|
||||
Resource resource,
|
||||
WorkReportLine workReportLine) {
|
||||
|
||||
this.workerName = worker.getName();
|
||||
this.workerName = resource.getName();
|
||||
this.date = workReportLine.getDate();
|
||||
this.clockStart = workReportLine.getClockStart();
|
||||
this.clockFinish = workReportLine.getClockFinish();
|
||||
|
|
@ -21,10 +21,12 @@
|
|||
package org.navalplanner.business.resources.daos;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.navalplanner.business.common.daos.IIntegrationEntityDAO;
|
||||
import org.navalplanner.business.planner.entities.Task;
|
||||
import org.navalplanner.business.reports.dtos.HoursWorkedPerResourceDTO;
|
||||
import org.navalplanner.business.resources.entities.Criterion;
|
||||
import org.navalplanner.business.resources.entities.Machine;
|
||||
import org.navalplanner.business.resources.entities.Resource;
|
||||
|
|
@ -122,4 +124,12 @@ public interface IResourceDAO extends IIntegrationEntityDAO<Resource> {
|
|||
*/
|
||||
List<Resource> getAllNonLimitingResources();
|
||||
|
||||
/**
|
||||
* Returns all {@link HoursWorkedPerResourceDTO} per {@link Resource} between
|
||||
* the specified dates.
|
||||
* @return
|
||||
*/
|
||||
public List<HoursWorkedPerResourceDTO> getWorkingHoursPerWorker(
|
||||
List<Resource> resources, Date startingDate, Date endingDate);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ import java.util.List;
|
|||
|
||||
import org.navalplanner.business.common.daos.IIntegrationEntityDAO;
|
||||
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.navalplanner.business.reports.dtos.HoursWorkedPerWorkerDTO;
|
||||
import org.navalplanner.business.resources.entities.Worker;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
|
|
@ -76,11 +75,6 @@ public interface IWorkerDAO extends IIntegrationEntityDAO<Worker> {
|
|||
@Transactional(readOnly = true)
|
||||
List<Worker> getWorkers();
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
List<HoursWorkedPerWorkerDTO> getWorkingHoursPerWorker(List<Worker> workers, Date startingDate, Date endingDate);
|
||||
|
||||
/**
|
||||
* Return list of workers with a particular firstName
|
||||
* @param name
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ package org.navalplanner.business.resources.daos;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
|
|
@ -32,6 +33,7 @@ import org.hibernate.Query;
|
|||
import org.hibernate.criterion.Restrictions;
|
||||
import org.navalplanner.business.common.daos.IntegrationEntityDAO;
|
||||
import org.navalplanner.business.planner.entities.Task;
|
||||
import org.navalplanner.business.reports.dtos.HoursWorkedPerResourceDTO;
|
||||
import org.navalplanner.business.resources.entities.Criterion;
|
||||
import org.navalplanner.business.resources.entities.LimitingResourceQueue;
|
||||
import org.navalplanner.business.resources.entities.Machine;
|
||||
|
|
@ -217,4 +219,48 @@ public class ResourceDAO extends IntegrationEntityDAO<Resource> implements
|
|||
super.save(resource);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<HoursWorkedPerResourceDTO> getWorkingHoursPerWorker(
|
||||
List<Resource> resources, 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 "
|
||||
+ "WHERE wrlresource.id = resource.id ";
|
||||
|
||||
// Set date range
|
||||
if (startingDate != null && endingDate != null) {
|
||||
strQuery += "AND wrl.date BETWEEN :startingDate AND :endingDate ";
|
||||
}
|
||||
if (startingDate != null && endingDate == null) {
|
||||
strQuery += "AND wrl.date >= :startingDate ";
|
||||
}
|
||||
if (startingDate == null && endingDate != null) {
|
||||
strQuery += "AND wrl.date <= :endingDate ";
|
||||
}
|
||||
|
||||
// Set workers
|
||||
if (resources != null && !resources.isEmpty()) {
|
||||
strQuery += "AND resource IN (:resources) ";
|
||||
}
|
||||
|
||||
// Order by
|
||||
strQuery += "ORDER BY resource.id, wrl.date";
|
||||
|
||||
// Set parameters
|
||||
Query query = getSession().createQuery(strQuery);
|
||||
if (startingDate != null) {
|
||||
query.setParameter("startingDate", startingDate);
|
||||
}
|
||||
if (endingDate != null) {
|
||||
query.setParameter("endingDate", endingDate);
|
||||
}
|
||||
if (resources != null && !resources.isEmpty()) {
|
||||
query.setParameterList("resources", resources);
|
||||
}
|
||||
|
||||
// Get result
|
||||
return query.list();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -28,7 +28,6 @@ import org.hibernate.Query;
|
|||
import org.hibernate.criterion.Restrictions;
|
||||
import org.navalplanner.business.common.daos.IntegrationEntityDAO;
|
||||
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.navalplanner.business.reports.dtos.HoursWorkedPerWorkerDTO;
|
||||
import org.navalplanner.business.resources.entities.Worker;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
|
|
@ -144,50 +143,6 @@ public class WorkerDAO extends IntegrationEntityDAO<Worker>
|
|||
return findByFirstNameSecondName(firstname, secondname);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<HoursWorkedPerWorkerDTO> getWorkingHoursPerWorker(List<Worker> workers, Date startingDate, Date endingDate) {
|
||||
String strQuery =
|
||||
"SELECT new org.navalplanner.business.reports.dtos.HoursWorkedPerWorkerDTO(worker, wrl) " +
|
||||
"FROM Worker worker, WorkReportLine wrl " +
|
||||
"LEFT OUTER JOIN wrl.resource resource " +
|
||||
"WHERE resource.id = worker.id ";
|
||||
|
||||
// Set date range
|
||||
if (startingDate != null && endingDate != null) {
|
||||
strQuery += "AND wrl.date BETWEEN :startingDate AND :endingDate ";
|
||||
}
|
||||
if (startingDate != null && endingDate == null) {
|
||||
strQuery += "AND wrl.date >= :startingDate ";
|
||||
}
|
||||
if (startingDate == null && endingDate != null) {
|
||||
strQuery += "AND wrl.date <= :endingDate ";
|
||||
}
|
||||
|
||||
// Set workers
|
||||
if (workers != null && !workers.isEmpty()) {
|
||||
strQuery += "AND worker IN (:workers) ";
|
||||
}
|
||||
|
||||
// Order by
|
||||
strQuery += "ORDER BY worker.id, wrl.date";
|
||||
|
||||
// Set parameters
|
||||
Query query = getSession().createQuery(strQuery);
|
||||
if (startingDate != null) {
|
||||
query.setParameter("startingDate", startingDate);
|
||||
}
|
||||
if (endingDate != null) {
|
||||
query.setParameter("endingDate", endingDate);
|
||||
}
|
||||
if (workers != null && !workers.isEmpty()) {
|
||||
query.setParameterList("workers", workers);
|
||||
}
|
||||
|
||||
// Get result
|
||||
return query.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<Object[]> getWorkingHoursGroupedPerWorker(
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
<style name="Detail" isDefault="false" fontName="Arial" fontSize="12"/>
|
||||
<parameter name="startingDate" class="java.util.Date"/>
|
||||
<parameter name="endingDate" class="java.util.Date"/>
|
||||
<parameter name="showNote" class="java.lang.Boolean"/>
|
||||
<field name="workerName" class="java.lang.String"/>
|
||||
<field name="date" class="java.util.Date"/>
|
||||
<field name="clockStart" class="java.util.Date"/>
|
||||
|
|
@ -228,6 +229,22 @@
|
|||
<textElement/>
|
||||
<textFieldExpression class="java.util.Date"><![CDATA[$P{endingDate}]]></textFieldExpression>
|
||||
</textField>
|
||||
<textField>
|
||||
<reportElement x="13" y="102" width="540" height="15">
|
||||
<printWhenExpression><![CDATA[$P{showNote}.equals( java.lang.Boolean.TRUE )]]></printWhenExpression>
|
||||
</reportElement>
|
||||
<textElement markup="none">
|
||||
<font isBold="true"/>
|
||||
</textElement>
|
||||
<textFieldExpression class="java.lang.String"><![CDATA[$R{note1}]]></textFieldExpression>
|
||||
</textField>
|
||||
<staticText>
|
||||
<reportElement x="5" y="102" width="8" height="15">
|
||||
<printWhenExpression><![CDATA[$P{showNote}.equals( java.lang.Boolean.TRUE )]]></printWhenExpression>
|
||||
</reportElement>
|
||||
<textElement/>
|
||||
<text><![CDATA[*]]></text>
|
||||
</staticText>
|
||||
</band>
|
||||
</title>
|
||||
<pageHeader>
|
||||
|
|
|
|||
|
|
@ -11,5 +11,6 @@ headers.column5 = Text fields
|
|||
headers.column6 = Labels
|
||||
total.day = Total hours per day:
|
||||
total.worker = Total hours per worker:
|
||||
note1 = There are not work reports for selected resources in the search range.
|
||||
page = page
|
||||
of = of
|
||||
|
|
@ -11,5 +11,6 @@ headers.column5 = Campos de texto
|
|||
headers.column6 = Etiquetas
|
||||
total.day = Horas totales por dia:
|
||||
total.worker = Horas totales por empleado:
|
||||
note1 = No hay partes de trabajo para los trabajadores seleccionados en el intervalo de búsqueda.
|
||||
page = página
|
||||
of = de
|
||||
|
|
@ -11,5 +11,6 @@ headers.column5 = Campos de texto
|
|||
headers.column6 = Etiquetas
|
||||
total.day = Horas totais por dia:
|
||||
total.worker = Horas totais por empleado:
|
||||
note1 = Non hai partes de traballo para os traballadores seleccionados no intervalo de búsqueda.
|
||||
page = páxina
|
||||
of = de
|
||||
|
|
@ -20,6 +20,8 @@
|
|||
|
||||
package org.navalplanner.web.reports;
|
||||
|
||||
import static org.navalplanner.web.I18nHelper._;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
|
|
@ -29,16 +31,28 @@ import java.util.Set;
|
|||
|
||||
import net.sf.jasperreports.engine.JRDataSource;
|
||||
|
||||
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.zkoss.zk.ui.Component;
|
||||
import org.zkoss.zk.ui.WrongValueException;
|
||||
import org.zkoss.zk.ui.event.Event;
|
||||
import org.zkoss.zk.ui.event.EventListener;
|
||||
import org.zkoss.zk.ui.event.Events;
|
||||
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>
|
||||
*/
|
||||
public class HoursWorkedPerWorkerController extends NavalplannerReportController {
|
||||
|
||||
|
|
@ -46,20 +60,24 @@ public class HoursWorkedPerWorkerController extends NavalplannerReportController
|
|||
|
||||
private IHoursWorkedPerWorkerModel hoursWorkedPerWorkerModel;
|
||||
|
||||
private Listbox lbWorkers;
|
||||
private Listbox lbResources;
|
||||
|
||||
private Datebox startingDate;
|
||||
|
||||
private Datebox endingDate;
|
||||
|
||||
private Autocomplete filterResource;
|
||||
|
||||
private ResourceListRenderer resourceListRenderer = new ResourceListRenderer();
|
||||
|
||||
@Override
|
||||
public void doAfterCompose(Component comp) throws Exception {
|
||||
super.doAfterCompose(comp);
|
||||
comp.setVariable("controller", this, true);
|
||||
}
|
||||
|
||||
public List<Worker> getWorkers() {
|
||||
return hoursWorkedPerWorkerModel.getWorkers();
|
||||
public Set<Resource> getResources() {
|
||||
return hoursWorkedPerWorkerModel.getResources();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -69,16 +87,17 @@ public class HoursWorkedPerWorkerController extends NavalplannerReportController
|
|||
|
||||
@Override
|
||||
protected JRDataSource getDataSource() {
|
||||
return hoursWorkedPerWorkerModel.getHoursWorkedPerWorkerReport(getSelectedWorkers(),
|
||||
return hoursWorkedPerWorkerModel.getHoursWorkedPerWorkerReport(
|
||||
getSelectedResources(),
|
||||
getStartingDate(), getEndingDate());
|
||||
}
|
||||
}
|
||||
|
||||
private List<Worker> getSelectedWorkers() {
|
||||
List<Worker> result = new ArrayList<Worker>();
|
||||
private List<Resource> getSelectedResources() {
|
||||
List<Resource> result = new ArrayList<Resource>();
|
||||
|
||||
final Set<Listitem> listItems = lbWorkers.getSelectedItems();
|
||||
for (Listitem each: listItems) {
|
||||
result.add((Worker) each.getValue());
|
||||
final List<Listitem> listItems = lbResources.getItems();
|
||||
for (Listitem each : listItems) {
|
||||
result.add((Resource) each.getValue());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
@ -97,8 +116,132 @@ public class HoursWorkedPerWorkerController extends NavalplannerReportController
|
|||
|
||||
result.put("startingDate", getStartingDate());
|
||||
result.put("endingDate", getEndingDate());
|
||||
|
||||
result.put("showNote", hoursWorkedPerWorkerModel.isShowReportMessage());
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
public void onAddResource() {
|
||||
Resource resource = getSelectedCurrentResource();
|
||||
if (resource != null) {
|
||||
boolean result = hoursWorkedPerWorkerModel
|
||||
.addSelectedResource(resource);
|
||||
if (!result) {
|
||||
throw new WrongValueException(filterResource,
|
||||
_("This resource has already been added."));
|
||||
} else {
|
||||
Util.reloadBindings(lbResources);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void onRemoveResource(Resource resource) {
|
||||
hoursWorkedPerWorkerModel.removeSelectedResource(resource);
|
||||
Util.reloadBindings(lbResources);
|
||||
}
|
||||
|
||||
private Resource getSelectedCurrentResource() {
|
||||
Comboitem itemSelected = filterResource.getSelectedItem();
|
||||
if ((itemSelected != null)
|
||||
&& (((Resource) itemSelected.getValue()) != null)) {
|
||||
return (Resource) itemSelected.getValue();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ResourceListRenderer getRenderer() {
|
||||
return resourceListRenderer;
|
||||
}
|
||||
|
||||
/**
|
||||
* ListitemRenderer for a @{Resource} element
|
||||
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
|
||||
*/
|
||||
public class ResourceListRenderer implements ListitemRenderer {
|
||||
|
||||
@Override
|
||||
public void render(Listitem item, Object data) throws Exception {
|
||||
final Resource resource = (Resource) data;
|
||||
item.setValue(resource);
|
||||
|
||||
appendType(item);
|
||||
appendLimiting(item);
|
||||
appendName(item);
|
||||
appendCode(item);
|
||||
appendDeleteButton(item);
|
||||
}
|
||||
}
|
||||
|
||||
private void appendType(final Listitem item) {
|
||||
Resource resource = (Resource) item.getValue();
|
||||
Label typeLabel = new Label(getType(resource));
|
||||
|
||||
Listcell typeResourceCell = new Listcell();
|
||||
typeResourceCell.appendChild(typeLabel);
|
||||
item.appendChild(typeResourceCell);
|
||||
}
|
||||
|
||||
private void appendLimiting(final Listitem item) {
|
||||
final Resource resource = (Resource) item.getValue();
|
||||
final Checkbox limitingCheckbox = new Checkbox();
|
||||
limitingCheckbox.setChecked(resource.isLimitingResource());
|
||||
limitingCheckbox.setDisabled(true);
|
||||
|
||||
Listcell limitingResourceCell = new Listcell();
|
||||
limitingResourceCell.appendChild(limitingCheckbox);
|
||||
item.appendChild(limitingResourceCell);
|
||||
}
|
||||
|
||||
private void appendName(final Listitem item) {
|
||||
Resource resource = (Resource) item.getValue();
|
||||
Label nameLabel = new Label(getName(resource));
|
||||
|
||||
Listcell nameResourceCell = new Listcell();
|
||||
nameResourceCell.appendChild(nameLabel);
|
||||
item.appendChild(nameResourceCell);
|
||||
}
|
||||
|
||||
private void appendCode(Listitem item) {
|
||||
Resource resource = (Resource) item.getValue();
|
||||
Label codeLabel = new Label(resource.getCode());
|
||||
|
||||
Listcell codeResourceCell = new Listcell();
|
||||
codeResourceCell.appendChild(codeLabel);
|
||||
item.appendChild(codeResourceCell);
|
||||
}
|
||||
|
||||
private void appendDeleteButton(final Listitem item) {
|
||||
Button delete = new Button("", "/common/img/ico_borrar1.png");
|
||||
delete.setHoverImage("/common/img/ico_borrar.png");
|
||||
delete.setSclass("icono");
|
||||
delete.setTooltiptext(_("Delete"));
|
||||
delete.addEventListener(Events.ON_CLICK, new EventListener() {
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
onRemoveResource((Resource) item.getValue());
|
||||
}
|
||||
});
|
||||
|
||||
Listcell deleteResourceCell = new Listcell();
|
||||
deleteResourceCell.appendChild(delete);
|
||||
item.appendChild(deleteResourceCell);
|
||||
}
|
||||
|
||||
private String getName(Resource resource) {
|
||||
if ((resource instanceof Worker) && (((Worker) resource).isReal())) {
|
||||
return ((Worker) resource).getShortDescription();
|
||||
}
|
||||
return resource.getName();
|
||||
}
|
||||
|
||||
private String getType(Resource resource) {
|
||||
if (resource instanceof Worker) {
|
||||
if (((Worker) resource).isReal()) {
|
||||
return _("Worker");
|
||||
} else {
|
||||
return _("Virtual worker");
|
||||
}
|
||||
}
|
||||
return "Machine";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -21,15 +21,17 @@
|
|||
package org.navalplanner.web.reports;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sf.jasperreports.engine.JRDataSource;
|
||||
import net.sf.jasperreports.engine.JREmptyDataSource;
|
||||
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
|
||||
|
||||
import org.navalplanner.business.reports.dtos.HoursWorkedPerWorkerDTO;
|
||||
import org.navalplanner.business.resources.daos.IWorkerDAO;
|
||||
import org.navalplanner.business.resources.entities.Worker;
|
||||
import org.navalplanner.business.reports.dtos.HoursWorkedPerResourceDTO;
|
||||
import org.navalplanner.business.resources.daos.IResourceDAO;
|
||||
import org.navalplanner.business.resources.entities.Resource;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
|
|
@ -37,31 +39,67 @@ import org.springframework.stereotype.Service;
|
|||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* Diego Pino Garcia <dpino@igalia.com>
|
||||
*
|
||||
* @author Diego Pino Garcia <dpino@igalia.com>
|
||||
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
|
||||
*/
|
||||
@Service
|
||||
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
|
||||
public class HoursWorkedPerWorkerModel implements IHoursWorkedPerWorkerModel {
|
||||
|
||||
@Autowired
|
||||
private IWorkerDAO workerDAO;
|
||||
private IResourceDAO resourceDAO;
|
||||
|
||||
private Set<Resource> selectedResources = new HashSet<Resource>();
|
||||
|
||||
private boolean showReportMessage = false;
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public JRDataSource getHoursWorkedPerWorkerReport(List<Worker> workers, Date startingDate, Date endingDate) {
|
||||
final List<HoursWorkedPerWorkerDTO> workingHoursPerWorkerList = workerDAO.getWorkingHoursPerWorker(workers, startingDate, endingDate);
|
||||
public JRDataSource getHoursWorkedPerWorkerReport(List<Resource> resources,
|
||||
Date startingDate, Date endingDate) {
|
||||
|
||||
final List<HoursWorkedPerResourceDTO> workingHoursPerWorkerList = resourceDAO
|
||||
.getWorkingHoursPerWorker(resources, startingDate, endingDate);
|
||||
|
||||
if (workingHoursPerWorkerList != null && !workingHoursPerWorkerList.isEmpty()) {
|
||||
setShowReportMessage(false);
|
||||
return new JRBeanCollectionDataSource(workingHoursPerWorkerList);
|
||||
} else {
|
||||
setShowReportMessage(true);
|
||||
return new JREmptyDataSource();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<Worker> getWorkers() {
|
||||
return workerDAO.getWorkers();
|
||||
public void init() {
|
||||
this.selectedResources.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Resource> getResources() {
|
||||
return this.selectedResources;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeSelectedResource(Resource resource) {
|
||||
this.selectedResources.remove(resource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addSelectedResource(Resource resource) {
|
||||
if (this.selectedResources.contains(resource)) {
|
||||
return false;
|
||||
}
|
||||
this.selectedResources.add(resource);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void setShowReportMessage(boolean showReportMessage) {
|
||||
this.showReportMessage = showReportMessage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isShowReportMessage() {
|
||||
return showReportMessage;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,10 +22,11 @@ package org.navalplanner.web.reports;
|
|||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sf.jasperreports.engine.JRDataSource;
|
||||
|
||||
import org.navalplanner.business.resources.entities.Worker;
|
||||
import org.navalplanner.business.resources.entities.Resource;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -34,8 +35,16 @@ import org.navalplanner.business.resources.entities.Worker;
|
|||
*/
|
||||
public interface IHoursWorkedPerWorkerModel {
|
||||
|
||||
JRDataSource getHoursWorkedPerWorkerReport(List<Worker> workers, Date startingDate, Date endingDate);
|
||||
JRDataSource getHoursWorkedPerWorkerReport(List<Resource> resources,
|
||||
Date startingDate, Date endingDate);
|
||||
|
||||
List<Worker> getWorkers();
|
||||
void init();
|
||||
|
||||
Set<Resource> getResources();
|
||||
|
||||
void removeSelectedResource(Resource resource);
|
||||
|
||||
boolean addSelectedResource(Resource resource);
|
||||
|
||||
boolean isShowReportMessage();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,15 @@
|
|||
class="org.navalplanner.web.common.components.ExtendedJasperreport"
|
||||
extends="jasperreport" ?>
|
||||
|
||||
<zk>
|
||||
<zk id="hoursWorkedPerWorker" xmlns:n="http://www.zkoss.org/2005/zk/native">
|
||||
|
||||
<n:script>
|
||||
var label = document.getElementById("z_sq_83");
|
||||
if(label.value != ""){
|
||||
alert('holaaaaa');
|
||||
new Label("Hi, JavaScript!").setParent(win);
|
||||
}
|
||||
</n:script>
|
||||
|
||||
<window self="@{define(content)}"
|
||||
apply="org.navalplanner.web.reports.HoursWorkedPerWorkerController"
|
||||
|
|
@ -45,7 +53,7 @@
|
|||
<panel title="${i18n:_('Dates')}" border="normal"
|
||||
style="overflow:auto">
|
||||
<panelchildren>
|
||||
<grid width="600px">
|
||||
<grid width="700px">
|
||||
<columns>
|
||||
<column width="200px" />
|
||||
<column />
|
||||
|
|
@ -69,19 +77,40 @@
|
|||
border="normal"
|
||||
style="overflow:auto">
|
||||
<panelchildren>
|
||||
<listbox id="lbWorkers"
|
||||
width="600px"
|
||||
<vbox>
|
||||
<separator spacing="5px"/>
|
||||
<hbox>
|
||||
<autocomplete id="filterResource" buttonVisible="true" width="400px"
|
||||
finder="ResourceFinder"/>
|
||||
<button label="${i18n:_('Add')}" style="margin-top: -4px"
|
||||
onClick="controller.onAddResource()"/>
|
||||
</hbox>
|
||||
<separator spacing="10px"/>
|
||||
<listbox id="lbResources"
|
||||
width="700px"
|
||||
multiple="true"
|
||||
model="@{controller.workers}">
|
||||
model="@{controller.resources}"
|
||||
itemRenderer="@{controller.renderer}">
|
||||
<listhead>
|
||||
<listheader label="${i18n:_('NIF')}" sort="auto(nif)" />
|
||||
<listheader label="${i18n:_('Name')}" sort="auto(name)" />
|
||||
<listheader label="${i18n:_('Type')}" align="center" width="40px"/>
|
||||
<listheader label="${i18n:_('Limiting')}" align="center" width="60px"/>
|
||||
<listheader label="${i18n:_('Name')}" sort="auto(name)" align="center" width="200px"/>
|
||||
<listheader label="${i18n:_('Code')}" align="center" width="220px"/>
|
||||
<listheader label="${i18n:_('Operations')}" align="center" width="70px"/>
|
||||
</listhead>
|
||||
<listitem self="@{each='worker'}" value="@{worker}">
|
||||
<listcell label="@{worker.nif}" />
|
||||
<listcell label="@{worker.name}" />
|
||||
</listitem>
|
||||
<!--<listitem self="@{each='resource'}" value="@{resource}">
|
||||
<listcell label="@{resource.nif}" />
|
||||
<listcell label="@{resource.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);">
|
||||
</button>
|
||||
</listcell>
|
||||
</listitem>-->
|
||||
</listbox>
|
||||
</vbox>
|
||||
</panelchildren>
|
||||
</panel>
|
||||
|
||||
|
|
@ -89,7 +118,7 @@
|
|||
<panel title="${i18n:_('Format')}" border="normal"
|
||||
style="overflow:auto">
|
||||
<panelchildren>
|
||||
<grid width="600px">
|
||||
<grid width="700px">
|
||||
<columns>
|
||||
<column width="200px" />
|
||||
<column />
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue