<b:datatable> filtrado por el Agente seleccionado

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

En list.xhtml de Agente

 <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>

Se invoca el componente columnAgente

<?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>

En AgenteController.java

Método prepare(), guardarlo en el HashMap del LoginController

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>

En Vacacioncontroller.java

Agregar el atributo

//Entity
    Vacacion vacacion;
    Vacacion vacacionSelected;
    Agente agente;
    Agente agenteSelected;

Init()

  • 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>

Last updated