<b:datatable> filtrado por el Agente seleccionado
Last updated
Was this helpful?
Last updated
Was this helpful?
A veces necesitamos mostrar una lista filtrada en base a un usuario logueado o una seleccion de un entity realizada.
al seleccionar el registro de EL Castillo
queremos mostrar solo sus vacaciones en otro list
<b:dataTableColumn label="">
<e:columnAgente
rendered="#{applicationMenu.agente.edit}"
vacacion="#{agenteController.prepare('govacacion',item)}"
permiso="#{agenteController.prepare('gopermiso',item)}"
tiempoextra="#{agenteController.prepare('gotiempoextra',item)}"
/>
</b:dataTableColumn>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:p="http://primefaces.org/ui"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:b="http://bootsfaces.net/ui">
<composite:interface >
<composite:attribute name="rendered" />
<composite:attribute name="vacacion"
method-signature="java.lang.String action()" />
<composite:attribute name="permiso"
method-signature="java.lang.String action()" />
<composite:attribute name="tiempoextra"
method-signature="java.lang.String action()" />
</composite:interface>
<composite:implementation>
<p:panelGrid columns="2" styleClass="form-group ui-panelgrid-blank" layout="grid">
<p:row>
<p:column>
<b:commandButton
style="margin-bottom:8px;"
iconAwesome="fa-bath "
title="#{msg['button.vacaciones']}"
action="#{cc.attrs.vacacion}">
</b:commandButton>
</p:column>
</p:row>
<p:row>
<p:column>
<b:commandButton
style="margin-bottom:8px;"
iconAwesome="fa-handshake-o "
title="#{msg['button.permiso']}"
action="#{cc.attrs.permiso}">
</b:commandButton>
</p:column>
</p:row>
<p:row>
<p:column>
<b:commandButton
style="margin-bottom:8px;"
iconAwesome="fa-balance-scale "
title="#{msg['button.tiempoextra']}"
action="#{cc.attrs.tiempoextra}">
</b:commandButton>
</p:column>
</p:row>
</p:panelGrid>
</composite:implementation>
</html>
case "govacacion":
agenteSelected = item;
agente = agenteSelected;
loginController.put("idagente", agente.getIdagente());
url = "/pages/vacacion/list.xhtml";
break;
public String prepare(String action, Agente item) {
String url = "";
try {
loginController.put("pageagente", page.toString());
loginController.put("agente", action);
switch (action) {
case "new":
agente = new Agente();
agenteSelected = new Agente();
writable = false;
break;
case "view":
agenteSelected = item;
agente = agenteSelected;
loginController.put("idagente", agente.getIdagente());
url = "/pages/agente/view.xhtml";
break;
case "golist":
url = "/pages/agente/list.xhtml";
break;
case "gonew":
agente = new Agente();
agenteSelected = new Agente();
writable = false;
url = "/pages/agente/new.xhtml";
break;
case "govacacion":
agenteSelected = item;
agente = agenteSelected;
loginController.put("idagente", agente.getIdagente());
url = "/pages/vacacion/list.xhtml";
break;
case "gopermiso":
agenteSelected = item;
agente = agenteSelected;
loginController.put("idagente", agente.getIdagente());
url = "/pages/permiso/list.xhtml";
break;
case "gotiempoextra":
agenteSelected = item;
agente = agenteSelected;
loginController.put("idagente", agente.getIdagente());
url = "/pages/tiempoextra/list.xhtml";
break;
}
} catch (Exception e) {
JsfUtil.errorMessage("prepare() " + e.getLocalizedMessage());
}
return url;
}// </editor-fold>
Agregar el atributo
//Entity
Vacacion vacacion;
Vacacion vacacionSelected;
Agente agente;
Agente agenteSelected;
Buscar por agente que se indico anteriormente
Obtener el idagente del HashMap del LoginController
String idagente = loginController.get("idagente");
@PostConstruct
public void init() {
try {
//Vacacion
String action = loginController.get("vacacion");
String idvacacion = loginController.get("idvacacion");
String pageSession = loginController.get("pagevacacion");
//El agente seleccionado
String idagente = loginController.get("idagente");
//buscar el agente
localIdagente = idagente;
//Search
loginController.put("searchvacacion", "_init");
writable = false;
vacacionList = new ArrayList<>();
vacacionFiltered = new ArrayList<>();
vacacion = new Vacacion();
vacacionDataModel = new VacacionDataModel(vacacionList);
agente = new Agente();
agenteSelected = new Agente();
if (idagente != null) {
Optional<Agente> optionalAgente = agenteRepository.find("idagente", idagente);
if (optionalAgente.isPresent()) {
agente = optionalAgente.get();
agenteSelected = agente;
writable = true;
vacacion.setAgente(agente);
}
}
if (idvacacion != null) {
Optional<Vacacion> optional = vacacionRepository.find("idvacacion", Integer.parseInt(idvacacion));
if (optional.isPresent()) {
vacacion = optional.get();
vacacionSelected = vacacion;
writable = true;
}
}
if (action != null && action.equals("gonew")) {
vacacion = new Vacacion();
vacacion.setAgente(agente);
vacacionSelected = vacacion;
writable = true;
}
if (pageSession != null) {
page = Integer.parseInt(pageSession);
}
Integer c = agenteRepository.sizeOfPage(rowPage);
page = page > c ? c : page;
move();
} catch (Exception e) {
JsfUtil.errorMessage("init() " + e.getLocalizedMessage());
}
}// </editor-fold>
Método move() filtramos por el agente y por las otras condiciones
@Override
public void move() {
try {
Document doc;
switch (loginController.get("searchvacacion")) {
case "_init":
vacacionList = vacacionRepository.findPagination(new Document("agente.idagente", localIdagente), page, rowPage, new Document("idvacacion", -1));
break;
case "_autocomplete":
//no se realiza ninguna accion
break;
case "_betweendates":
vacacionList = vacacionRepository.filterBetweenDatePagination("agente.idagente", agente.getIdagente(), "fechainicio", lookupSeguridadejbServices.getFechaDesde(), "fechafin", lookupSeguridadejbServices.getFechaHasta(), page, rowPage, new Document("idvacacion", -1));
break;
case "idagente":
vacacionList = vacacionRepository.findPagination(new Document("agente.idagente", localIdagente), page, rowPage, new Document("idvacacion", -1));
break;
case "idvacacion":
doc = new Document("idvacacion", lookupSeguridadejbServices.getIdvacacion()).append("agente.idagente", agente.getIdagente());
vacacionList = vacacionRepository.findPagination(doc, page, rowPage, new Document("idvacacion", -1));
break;
case "fechainicio":
vacacionList = vacacionRepository.filterDayWithoutHourPagination("agente.idagente", agente.getIdagente(), "fechainicio", lookupSeguridadejbServices.getFechaincio(), page, rowPage, new Document("idvacacion", -1));
break;
case "fechafin":
vacacionList = vacacionRepository.filterDayWithoutHourPagination("agente.idagente", agente.getIdagente(), "fechafin", lookupSeguridadejbServices.getFechafin(), page, rowPage, new Document("idvacacion", -1));
break;
default:
vacacionList = vacacionRepository.findPagination(new Document("agente.idagente", localIdagente), page, rowPage, new Document("idvacacion", -1));
break;
}
vacacionFiltered = vacacionList;
vacacionDataModel = new VacacionDataModel(vacacionList);
} catch (Exception e) {
JsfUtil.errorMessage("move() " + e.getLocalizedMessage());
}
}// </editor-fold>