trucosjakartaee
  • Introduction
  • Creditos
  • Jar to Exe
  • Primefaces security
  • Primefaces Responsive
  • Leer archivos en una linea de codigo
  • Logger Crear archivo JSOn
  • Cifrar Archivos y Licencias
    • Cifrar Archivos y Encriptar Textos
    • Licencias
  • JSON-P Leer arhivos
  • Apache Derby
  • Migrar a Java 11
  • jmoordbjsf
    • 1. Controller
      • 1.1 Definicion
      • 1.2 before/after()
      • 1.3 Parametros internos
      • 1.2 init()
        • 1.2.1 Obtener el action en el init()
        • 1.2.3 Asignar el search en el init()
      • 1.3 searchBy()
      • 1.4 <jmoordbjsf:search>
      • 1.5<jmoordbjsf:searchBetweenDate> Busquedas entre fechas.
        • 1.5.1 <jmoordbjsf:searchBetweenDates con <jmoordbjsf:autocomplete>
      • 1.6 handleSelect de autocomplete en list.xhtml
      • 1.7 <p:selectOneMenu> eventos en list.xhtml
      • 1.8 move()
    • 2. Componentes
      • 2.1 <jmoordbjsf:ccstimeline>
      • 2.2 <jmoordbjsf:paginator>
        • 2.2.1 paginator con impresion
    • 3. Historial de revisión
  • Reportes
    • OpenPDF
      • Enlaces
      • Introduccion
      • Reportes con ReportUtils.java
      • Reporte con ReportUtils y <jmoordbjsf:paginator>
      • Turoriales
      • Informe con 6 columnas
      • Tamaño de pagina
      • Centrar en el reporte
      • Margenes
      • Fuentes en las celdas
      • Formatear Fechas
      • Imagenes
      • grupos
      • subreportes
      • firmar pdf
      • Agregar autor al pdf
      • Reporte simple
    • iReport
    • Imprimir condicional
    • DynamicReports
    • iText
    • PDFBox
    • JaspertReport from code
    • Nerval Reports
    • DynamicJasper
    • Eclipse birt
  • Overview
    • jmoordb web
      • Autoincrementable
        • Autoincrementable
        • Generar autoincrementable para múltiples tiendas relacionadas sin @Referenced
        • Login
          • Login simple
          • Login con Multiples roles
          • Obtener el Ip del cliente
          • Generar el UUID
          • Session Expirada redirigir automaticamente
        • Password
          • Cambiar password
          • Encriptar password
        • Usuario
          • Usuario con un solo Rol
          • Usuario con multiples roles
    • JavaEE
      • Java Security EE
        • Validar paginas
      • Email
        • Enviar emails formateados
        • CompletableFuture para envio de emails
        • Emails con copias cc, bcc
      • JPA
        • <p:autocomplete> con JPA
        • <p:autocomplete> JPA con eventos
        • <p:autocomplete> JPA con Integer
        • <p:autocomplete> JPA con scroll
        • <p:autocomplete> con Converter
    • Java Server Faces
      • eliminar bordes de <p:fieldSet>
      • reset
      • commandButton verdes
      • JsfUtil.updateJSFComponent(componente)
      • <p:growl> Centrado
      • <p:fieldSet>
      • Actualizar componente primefaces desde codigo Java
      • Codigo barra/QR
        • codigosbarra
        • Generar/Leer Codigo QR
        • Scanner un codigo QR con primefaces
      • Barra de progreso y bloqueo para procesos muy largos
      • Dialogo
        • Centrar Dialog
        • Cerrar dialogo desde código
        • Invocar dialogo desde codigo
        • dialogconfirm
        • Cambiar los colores del Dialog
        • Modal
        • Dialogo con <p:schedule>
      • Menu
        • <b:navCommandLink/>
        • Eventos de menu
        • CommandLink con parametros en menu
        • Usar <b:flyOutMenu>
        • Menus dinámicos mediante <p:repeat
        • Filtrar desde el menu dinamico
      • Message
        • Cerrar automaticamente messages
      • inputText
        • inputTextArea Scroll
        • Bloquear tecla Enter inputText
        • Validar rangos
        • Convertir a mayusculas
        • eventos en el inputText
      • outputLabel
        • Mostrar un icono en un outputLabel
      • selectOneMenu
        • <b:selectOneMenu String
        • <b:selectOneMenu> eventos Ajax
        • <p:selectOneMenu eventos
        • <b:selectOneMenu sin converter
        • concatenar String
        • <f:selectItem>
        • <b:selectOneMenu relacionados
        • <b:selectOneMenu> simple
        • <b:selectOneMenu> formulario view.xhtml
        • mesSelectOneMenu
        • Ajustar el tamaño
      • Datatable
        • DataTable Agrupados y rowExpansion
        • Saber que columna se edita
        • tamaño de columnas
        • Marcar como vistos
        • <p:datatable> con <p:autocomplete>
        • <p:repeat> con dataTable
        • <p:repeat> en un componente
        • <p:datatable> con exporter
        • Mostrar un datatable dentro de un dialogo
        • Filas coloreadas
        • Reflexion para contar valores en un datatable
        • Datatable con paginacion
        • <p:datatable> expandableRowGroups
        • <p:datatable> columnas agrupadas
        • color columna
        • <b:datatable> con dialogs
        • Busquedas
        • <b:datatable> con colores en las filas
        • <b:datatable> filtrado por el Agente seleccionado
        • <b:datatable> Filtrado por el usuario logueado
        • <b:dataTable con repeat para atributos List<>
      • Autocomplete
        • autocomplete insertar nuevos valores
        • Componente autocomplete
        • Autocomplete con findRegex() Expresiones Regulares
        • <p:autocomplete> multiple
        • Autocomplete con findText
        • Autocomplete relacionados
        • <p:autocomplete> con Integer y String
        • Autocomplete con dropdwon
        • Autocomplete con minQueryLength=
        • Autocomplete Relacionados con dropdown (Provincia- distrito)
        • Cambiar color <p:autocomplete>
        • <p:autocomplete> Multiples relacionados
        • <p:autocomplete Usuarios por multiples Roles
        • <p:autocomplete> Multiples dropdown="true" relacionados con
        • <p:autocomplete> con lambda stream
        • Autocomplete
        • Con Rangos de fechas
          • Autocomplete con rangos de fechas excluyendo el registro actual
      • Iconos e imagenes
        • <p:commandLink> con imagenes
        • <p:commandButton> con imagenes
        • <h:graphicImage>
      • Paso de parametros
        • Desde un <p:commandLink>
        • Desde un <p:button>
      • Ajax
        • Eventos
        • Eventos al cargar pagina
      • Datagrid
        • Quitar bordes con poseidon
        • <p:datagrid>
      • Tabs
        • Diseñar tabs
      • Notificaciones
        • Notificaciones
        • Notificaciones en la barra
      • Graficas
        • <p:chart> pie
        • <p:char> pie por varios atributos
      • Ommifaces
        • Untitled
        • Ejecutar Comando
    • Formatos y Fechas
      • Formatear fechas y horas en un String para un datatable
      • Formatear decimales
      • Formatear fecha
      • Formateo de fechas y horas por separado
      • outputLabel formateado
    • Fechas
      • Primer/Ultimo dia en fechas del mes
      • Insertar horas minutos y segundos a una fecha
      • validarRangoFechas
      • Determinar el numero de meses entre fechas
      • Descomponener una fecha
      • Obtener el nombre del dia
      • Calcular dias entre fechas
      • Operaciones con fechas
      • Filtrar por dias Atrasados
      • Fecha actual
      • Primer dia y ultimo dia del mes de la fecha actual
      • Sumar mes a fecha actual
      • Fechas null
      • Conocer si alguien esta de vacaciones
      • Formatear una fecha
      • Si cumple años
      • Filtrar cumpleaños en JPA
      • <a:searchBetweenDate> Filtrar entre Fechas
      • Mostrar los que estan de vacaciones en un mes
      • Calcular numero de días de vacaciones del mes
      • Comparar Fechas
      • Mostrar fecha y hora en un datatable
      • Validar que la Hora no sea cero
      • F iltrar entre fechas de un List<Entity>
      • Búsquedas por Día filterDayWithoutHour()
      • Validar fechas y horas
      • Validar meses superiores en Cierre
      • Primera y ultima fecha del Mes
      • <p:calendar>
        • eventos-en-el-pcalendar
        • Eventos en el <p:calendar> /EntreFechas
        • Eventos en el <p:calendar> entre fechas
      • HoraMinutos formato AM/PM de una fecha
        • Google Calendar
    • Rangos de Fechas
      • Encontrar si esta disponible entre dos fechas en rangos de fechas inicial y final con filtro adicion
      • Buscar una fecha y hora en un rango
      • Actualizar las fechas en rango de dos fechas y validar los disponibles excluyendo el entity actual
      • filterBetweenDatePaginationWithoutHour()Buscar en rangos de fechas excluyendo la hora con paginacion
    • Generales
      • Habilitar Empty
    • Mongodb
      • Combinar bases de datos
      • Referencias en bases datos distintas
      • Crear bases de datos en tiempo de ejecucion
      • Agregar campos autoincrementables, renombrar campos
      • Transacciones
    • Controller
      • Filtrar desde el list.xhtml
      • ChoferController.java
      • ReservadoController.java
      • OrdenController.java
      • ModeloController.java
      • Validar null
    • Formularios
      • Relaciones con atributos no Referenciados
      • Maestro-Detalle Orden de Proveedor a Bodega
      • Dos campos como campo llave
      • Crear registros de entitys diferentes en el mismo formulario
      • Formulario con llave secundaria sin mostrar autoincrementable
      • Cambiar numero de cedula
      • Formulario referenciado (Grupoarticulo->Modelo)
      • Usuario
      • Facturas
        • Factura codigo xhtml
        • FacturaController.java
      • Maestro-Detalle Factura
      • Formulario sin componente new
      • Solo formulario new.xhtml no usar list.xhtml ni el view.xhtml
    • JmoordbLanguages
    • JmoordbResourcesFiles
      • Pasarlos a un services
    • list.xtml
      • Filtrar por un entity Referenciado
      • Formularios con Ordenacion
      • Filtrar por atributos referenciados
      • <a:searchYesNo>
    • Entity
    • Services
    • Blogs
      • Java
      • Mongodb
    • Glassfish
    • PDF
      • Download
    • Links
    • Ubuntu
      • Minimizar aplicaciones en Ubuntu con un solo clic
      • Maven
      • Reiniciar GnomeShell
    • Databases
      • Ranking
    • Tutoriales JavaEE 8
    • Busquedas en List<> Embebidos y Referenciados
      • Buscar en un List<> en cualquier posicion usando and y or
      • Buscar elemento en un List<> Embebido/Referenciado
      • Limpiar autocomplete y otros filtros
      • Filtrar embebidos referenciados de forma inversa
      • Buscar en un List<Viaje> dentro de Solicitud
    • Search
    • Eventos
      • Escuchar eventos
      • Eventos
    • Microservicios
      • Microservicios con Java EE Jakarta
    • Java
      • Copiar Beans
      • List
        • Ordenar una List Java 8
        • Filtrar un List<> con Stream
        • Encontrar un elemento en un List con Lambda/Stream
      • List<Object>
      • Método retorna List<Object>
      • Mock
        • Disenos online
      • Brownies Collections
      • Batch
      • Maven
        • Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.3:exploded (default-cli) on proje
      • NetBeans
        • Colapsar codigo
      • Formatear String
      • Lambda/Stream
      • Filtrar de varias listas
      • stream
      • lambda /stream
      • Patrones de Diseño
        • Builder Desing Pattern
    • Primefaces
      • PhotoCam
        • Tomar foto
      • Schedule
        • <p:scheduler> con paginacion
        • <p:schedule> LazyScheduleModel
        • <p:schedule> con filtros autocomplete
        • <p:schedule> con GMT-5 para Panama
        • <p:schedule> con dialogos
        • Colores en <p:schedule>
        • <p:schedule> con dialogos diferentes en el mismo evento
        • <p:schedule con <p:ajax event="viewChange">
        • <p:schedule> imprimir
      • Dashboard
        • Dashboard basico <p:knob
          • <p:knob>
          • Dashboard con link <p:knob
        • Dashboard <p:knob> <b:bagde>
        • Dashboard con Paneles
      • <p:chips>
        • <p:chips> simple
      • <p:dataGrid
    • Entity Configuración
    • Arquitectura
      • Project ejb
      • Proyecto Web
      • Pasos al crear un entity
      • list.xhtml
      • new.xhtml
      • view.xhtml
    • BitBucket/NetBeans
      • Crear Ramas desde Bitbucket
      • Crear rama desde NetBeans
      • Cambiar ramas desde NetBeans
      • Push a una rama
      • Permisos a una rama
      • Clonar una rama
      • Crear un pull request bitbucket
      • Recuperar una revisión git desde Bitbucket
    • Controller
      • Atributos
      • set/get
      • constructor
      • init
      • preRenderView
      • reset
      • prepare
      • showAll
      • isNew
      • save
      • edit
      • delete
      • deleteAll
      • print
      • printAll
      • handleSelect
      • handleAutocompleteOfListXhtml
      • last
      • first
      • next
      • back
      • skip
      • move
      • clear
      • searchBy(String string)
    • Componentes
      • JsfUtil.updateJsfComponent()
    • Genericos implementar en un Controller
    • LambdaMetaFactory
    • Patrones
    • @Producer Reducir Repository
  • Cierre Mensual
    • Cierre mensual
  • fontAwesome Local
    • fontAwesome Local
  • Componentes
    • Componentes JSF
      • <a:paginatorReport>
      • Distribuir componentes Java Server Faces
      • Crear composite distribuible con Maven
      • Clases como parámetros y métodos en el composite
      • Agregar css
  • LambdaMetaFactory
    • LambdaMetaFactory
      • <jmoordbjsf:Ajax Status>
      • Invocar metodos desde un controller
  • Patrones de Diseño
    • Patrones de Diseño
    • Builder
  • @Producer Reducir Repository
    • @Producer Reducir Repository
    • Validar en el inicio del controller con nuevo esquema
    • AdminFaces
      • include
      • template
      • resources
      • web.xml
    • Cargar archivo propiedades
    • Maven Crear arquetipo en base a un proyecto
      • Configurar path maven
      • archivo settings.xml
      • Crear arquetipo desde NetBeans
      • Crear el arquetipo desde consola
      • Crear el proyecto en base al arquetipo
      • Clonar adminfaces archetype
    • PayaraMicro
    • Archivos de propiedades con adminfaces
  • Web Socket
    • WebSocket
      • Web Socket
        • dependencias
        • web.xml
        • Archivos de configuracion
        • Pushsocket
        • index.xhtml
        • reciver.xhtml
        • Ejecutarlo
      • WebSocket en menu con <:remoteCommand>
        • top.xhtml
        • template.xhtml
        • web.xml
        • Clases
        • ConfigurationContoller.java
        • PushSocket.java
        • Mensajes.java
      • WebSocket con Notificaciones en bases de datos
        • pom.xml
        • web.xml
        • template.xthml
        • top.xhtml
        • index.xhtml
        • LoginController.java
        • PushSocket.java
        • JmoordbNotificationsController.java
        • list.xhtml
        • Enviar notificaciones todos los usuarios
    • Pagina de Inicio en Java EE
    • Control de Viajes
      • Generar pasajeros por viajes
        • validarRangoFechas
    • Vehiculos recomendados
  • DBUtils
  • Archivos Properties
  • MICROSERVICES
    • MICROSERVICES
      • Archivos properties con Producer
      • Archivos Properties con @Inject
Powered by GitBook
On this page
  • formulario
  • CONTROLLER

Was this helpful?

  1. jmoordbjsf
  2. 1. Controller
  3. 1.5<jmoordbjsf:searchBetweenDate> Busquedas entre fechas.

1.5.1 <jmoordbjsf:searchBetweenDates con <jmoordbjsf:autocomplete>

Previous1.5<jmoordbjsf:searchBetweenDate> Busquedas entre fechas.Next1.6 handleSelect de autocomplete en list.xhtml

Last updated 5 years ago

Was this helpful?

Cuando deseamos filtrar por los datos de un autocomplete con un <jmoordbjsf:betweenDateSearch>

formulario

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<ui:composition template="/layout/template.xhtml" 
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:b="http://bootsfaces.net/ui"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:p="http://primefaces.org/ui"
                xmlns:jmoordbjsf="http://jmoordbjsf.com/taglib"
                xmlns:e="http://xmlns.jcp.org/jsf/composite/extensions"
                >
    <ui:define name="content">


        <style>
            .thumbnail { max-width: 100%; }
            img.thumbnail:hover, img.thumbnail:focus {
                border: 1px solid;
                border-color: #428BCA;
            } 
        </style>

        <b:form id="form"  prependId="false"  rendered="#{p:ifAnyGranted('ADMINISTRADOR,  SECRETARIO ADMINISTRATIVO')}" onkeypress="if (event.keyCode == 13) {
                    return false;
                }">

            <b:growl  id="msgs"/>

            <b:panel collapsible="false" title="#{msg['titlelist.solicitudesporusuarios']}" id="content"   look="primary" > 
                <!--<b:panelGrid colSpans="2,10" size="xs">--> 

                <b:row>
                    <b:column medium-screen="25" >
                        <p:outputLabel  value="#{msg['field.usuario']}" />

                        <jmoordbjsf:autocomplete converter="#{usuarioConverter}"
                                                 completeMethod="#{solicitudesPorUsuariosController.usuarioServices.complete}"
                                                 labeltip1="#{msg['field.username']} #{p.username}"
                                                 labeltip2="#{msg['field.nombre']} #{p.nombre}"  
                                                 listener="#{solicitudesPorUsuariosController.handleAutocompleteOfListXhtml}"
                                                 value="#{solicitudesPorUsuariosController.usuarioSearch}"
                                                 itemLabel=" #{p.nombre}"
                                                 field="nombre"
                                                 dropdown="true"
                                                 minQueryLength="0"
                                                 disabled="false"
                                                 update=" :form:dataTable"
                                                 />

                    </b:column>


                    <b:column medium-screen="25" >


                        <jmoordbjsf:searchBetweenDate 
                            renderedMove="true"
                            labelDesde="#{msg['field.fechainicio']}"
                            valueDesde="#{solicitudesPorUsuariosController.fechaDesde}"
                            labelHasta="#{msg['field.fechafin']}"
                            valueHasta="#{solicitudesPorUsuariosController.fechaHasta}"
                            renderedList="true"  
                            search="#{solicitudesPorUsuariosController.searchBy('_betweendates',solicitudesPorUsuariosController.solicitud)}"
                            update=":form:dataTable "
                            />
                    </b:column>

                </b:row>


            </b:panel>
            <b:panel collapsible="false" id="dataTable" look="primary">

                <jmoordbjsf:paginator
                    controller="#{solicitudesPorUsuariosController}"                        
                    rowPage="#{solicitudesPorUsuariosController.rowPage}"                   
                    page="#{solicitudesPorUsuariosController.page}"
                    pages="#{solicitudesPorUsuariosController.pages}"
                    renderedPrint="#{solicitudesPorUsuariosController.availablePrint()}"                   
                    renderedNew="false"                 
                    renderedClear ="false"
                    skip="ajax:solicitudesPorUsuariosController.skip()" 
                    url = "/pages/viaje/new.xhtml"
                    />

                <p:dataTable value="#{solicitudesPorUsuariosController.solicitudDataModel}"
                             var="item"
                             id="dataTable2"
                             >

                    <f:facet name="header">
                        <p:outputLabel value="#{msg['titlelist.solicitudes']}"/>
                    </f:facet>
                    <p:column style="width:16px">
                        <p:rowToggler />
                    </p:column>

                    <p:column headerText="#{msg['field.idsolicitud']}" style="width:75px">
                        <h:outputText value="#{item.idsolicitud}"    />
                    </p:column>

                    <p:column headerText="#{msg['field.fechapartida']}" style="width:150px">
                        <h:outputText value="#{solicitudController.showDate(item.fechahorapartida)} #{solicitudController.showHour(item.fechahorapartida)}"    />
                    </p:column>
                    <p:column headerText="#{msg['field.fecharegreso']}" style="width:150px">
                        <h:outputText value="#{solicitudController.showDate(item.fechahoraregreso)} #{solicitudController.showHour(item.fechahoraregreso)}"    />
                    </p:column>
                    <p:column headerText="#{msg['field.solicita']}" style="width:150px">
                        <h:outputText value="#{item.usuario.get(0).nombre}"    />
                    </p:column>


                    <p:column headerText="#{msg['field.vistobueno']}"  >
                        <p:outputLabel value="#{secretarioAdministrativoController.columnNameVistoBuenoSecretarioAdministrativo(item.vistoBuenoSecretarioAdministrativo)}" 
                                       />
                    </p:column>
                    <p:column headerText="#{msg['field.estatus']}"  >
                        <p:outputLabel  value="#{item.estatus.idestatus}"    />
                    </p:column>





                    <p:rowExpansion>

                        <b:panelGrid id="panel" colSpans="2,10" size="sm" > 

                            <p:outputLabel value="#{msg['field.fecharegreso']}" />
                            <p:outputLabel value="#{solicitudesPorUsuariosController.showDate(item.fechahoraregreso)}"  />

                            <p:outputLabel value="#{msg['field.horaregreso']}" />
                            <p:outputLabel value="#{solicitudesPorUsuariosController.showHour(item.fechahoraregreso)}"  />

                            <p:outputLabel  value="#{msg['field.solicitadopor']}" />
                            <p:outputLabel  value="#{item.usuario.get(0).nombre}" id="solicitadopor"   />

                            <p:outputLabel  value="#{msg['field.responsable']}" />
                            <p:outputLabel  value="#{item.usuario.get(1).nombre}" id="responsable"   />



                            <p:outputLabel value="#{msg['field.objetivo']}"  />
                            <p:outputLabel value="#{item.objetivo}"   />
                            <p:outputLabel value="#{msg['field.lugares']}"/>
                            <p:outputLabel value="#{item.lugares}"    />




                            <p:outputLabel  value="#{msg['field.facultad']}" />
                            <p:repeat value="#{item.facultad}" var="car">
                                <p:outputLabel value="#{car.descripcion}"/>
                            </p:repeat>

                            <p:outputLabel  value="#{msg['field.carrera']}" />
                            <p:repeat value="#{item.carrera}" var="car">
                                <p:outputLabel value="#{car.descripcion}"/>
                            </p:repeat>
                            <p:outputLabel  value="#{msg['field.numerogrupos']}" />
                            <p:outputLabel  value="#{item.numerogrupo}" />



                            <p:outputLabel  value="#{msg['field.numerodevehiculos']}" />

                            <p:outputLabel  value="#{item.numerodevehiculos}"  />

                            <p:outputLabel  value="#{msg['field.pasajeros']}" >
                                <i class="pi pi-users"></i>
                            </p:outputLabel>
                            <p:outputLabel value="#{item.pasajeros}"   />

                            <p:outputLabel  value="#{msg['field.lugarpartida']}" />
                            <p:outputLabel value="#{item.lugarpartida}"  />
                            <p:outputLabel  value="#{msg['field.lugarllegada']}" >
                                <i class="pi pi-home"></i>
                            </p:outputLabel>
                            <p:outputLabel value="#{item.lugarllegada}" />


                            <p:outputLabel  value="#{msg['field.coordinador']}"  />
                            <p:outputLabel value="#{solicitudesPorUsuariosController.columnNameVistoBueno(item.vistoBueno)}"      />


                            <p:outputLabel  value="#{msg['field.secadministrativo']}" />
                            <p:outputLabel value="#{secretarioAdministrativoController.columnNameVistoBuenoSecretarioAdministrativo(item.vistoBuenoSecretarioAdministrativo)}"      />



                            <p:outputLabel value="#{msg['field.tiposolicitud']}" />
                            <p:outputLabel  value="#{item.tiposolicitud.idtiposolicitud}"    />

                            <p:outputLabel value="#{msg['field.estatus']}" />
                            <p:outputLabel  value="#{item.estatus.idestatus}"    />

                        </b:panelGrid>
                    </p:rowExpansion>
                </p:dataTable>
            </b:panel>

        </b:form>

        <jmoordbjsf:denegado renderedcondition="#{!p:ifAnyGranted('ADMINISTRADOR,  SECRETARIO ADMINISTRATIVO')}" />
    </ui:define>
</ui:composition>

CONTROLLER

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.avbravo.transporte.reportes;

// <editor-fold defaultstate="collapsed" desc="imports">
import com.avbravo.jmoordb.configuration.JmoordbContext;
import com.avbravo.jmoordb.configuration.JmoordbControllerEnvironment;
import com.avbravo.jmoordb.interfaces.IController;
import com.avbravo.jmoordbutils.printer.Printer;
import com.avbravo.jmoordb.mongodb.history.services.AutoincrementableServices;
import com.avbravo.jmoordb.mongodb.history.services.ErrorInfoServices;
import com.avbravo.jmoordbutils.DateUtil;
import com.avbravo.jmoordbutils.JmoordbResourcesFiles;

import com.avbravo.jmoordbutils.ReportUtils;
import com.avbravo.transporteejb.datamodel.SolicitudDataModel;
import com.avbravo.transporteejb.datamodel.ViajeDataModel;
import com.avbravo.transporteejb.entity.Solicitud;
import com.avbravo.transporteejb.entity.Usuario;
import com.avbravo.transporteejb.entity.VistoBueno;
import com.avbravo.transporteejb.repository.SolicitudRepository;
import com.avbravo.transporteejb.services.EstatusServices;
import com.avbravo.transporteejb.services.SolicitudServices;
import com.avbravo.transporteejb.services.UsuarioServices;
import com.avbravo.transporteejb.services.VistoBuenoServices;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.PageSize;
import com.mongodb.client.model.Filters;

import java.io.ByteArrayOutputStream;

import java.util.ArrayList;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import lombok.Getter;
import lombok.Setter;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.primefaces.event.SelectEvent;
// </editor-fold>

/**
 *
 * @authoravbravo
 */
@Named
@ViewScoped
@Getter
@Setter
public class SolicitudesPorUsuariosController implements Serializable, IController {

// <editor-fold defaultstate="collapsed" desc="fields">  
    private static final long serialVersionUID = 1L;

    private Boolean writable = false;
    private Date fechaDesde;
    private Date fechaHasta;
    //DataModel
    private ViajeDataModel viajeDataModel;
    private SolicitudDataModel solicitudDataModel;

    Integer page = 1;
    Integer rowPage = 35;
    List<Integer> pages = new ArrayList<>();

    //Entity
    Usuario usuarioSearch= new Usuario();
    Solicitud solicitudSearch = new Solicitud();
    Solicitud solicitud = new Solicitud();

    //List
    List<Solicitud> solicitudList = new ArrayList<>();

    // </editor-fold>
    // <editor-fold defaultstate="collapsed" desc="repository">
    //Repository
    @Inject
    SolicitudRepository solicitudRepository;

    // </editor-fold>  
    // <editor-fold defaultstate="collapsed" desc="services">
    //Services
    @Inject
    AutoincrementableServices autoincrementableServices;
    @Inject
    EstatusServices estatusServices;
    @Inject
    ErrorInfoServices errorServices;
    @Inject
    VistoBuenoServices vistoBuenoServices;
    @Inject
    SolicitudServices solicitudServices;
    @Inject
    UsuarioServices usuarioServices;
    @Inject
    JmoordbResourcesFiles rf;
    @Inject
    Printer printer;
    // </editor-fold>  

    // </editor-fold>
// <editor-fold defaultstate="collapsed" desc="getter/setter">
    public List<Integer> getPages() {

        return solicitudRepository.listOfPage(rowPage);
    }

    // </editor-fold>
// <editor-fold defaultstate="collapsed" desc="constructor">
    public SolicitudesPorUsuariosController() {
    }

    // </editor-fold>
// <editor-fold defaultstate="collapsed" desc="init">
    @PostConstruct
    public void init() {
        try {
            fechaDesde = DateUtil.primerDiaDelMesEnFecha(DateUtil.anioActual(), DateUtil.mesActual());
            fechaHasta = DateUtil.ultimoDiaDelMesEnFecha(DateUtil.anioActual(), DateUtil.mesActual());
            /*
            configurar el ambiente del controller
             */
            HashMap parameters = new HashMap();
            Usuario jmoordb_user = (Usuario) JmoordbContext.get("jmoordb_user");
            //    parameters.put("P_EMPRESA", jmoordb_user.getEmpresa().getDescripcion());

            JmoordbControllerEnvironment jmc = new JmoordbControllerEnvironment.Builder()
                    .withController(this)
                    .withRepository(solicitudRepository)
                    .withEntity(solicitud)
                    .withService(solicitudServices)
                    .withNameFieldOfPage("page")
                    .withNameFieldOfRowPage("rowPage")
                    .withTypeKey("primary")
                    .withSearchLowerCase(false)
                    .withPathReportDetail("/resources/reportes/programacionvehicular/details.jasper")
                    .withPathReportAll("/resources/reportes/programacionvehicular/all.jasper")
                    .withparameters(parameters)
                    .withResetInSave(true)
                    .withAction("golist")
                    .build();

            start();

//            String action = "gonew";
//            if (getAction() != null) {
//                action = getAction();
//            }
//
//            if (action == null || action.equals("gonew") || action.equals("new") || action.equals("golist")) {
//                //inicializar
//
//            }
//            if (action.equals("view")) {
//                //view
//            }
            setSearchAndValue("searchViajesSinConductorController", "_betweendates");
        } catch (Exception e) {
            errorServices.errorMessage(nameOfClass(), nameOfMethod(), e.getLocalizedMessage());
        }
    }// </editor-fold>

// <editor-fold defaultstate="collapsed" desc="handleSelect">
    public void handleSelect(SelectEvent event) {
        try {
        } catch (Exception e) {
            errorServices.errorMessage(nameOfClass(), nameOfMethod(), e.getLocalizedMessage());
        }
    }// </editor-fold>

// <editor-fold defaultstate="collapsed" desc="move(Integer page)">
    @Override
    public void move(Integer page) {
        try {

            solicitudList = new ArrayList<>();
            this.page = page;
            solicitudDataModel = new SolicitudDataModel(solicitudList);
            Document doc;
            System.out.println("Usuario====> "+usuarioSearch.getUsername());
         Bson filter = Filters.eq("usuario.username", usuarioSearch.getUsername());
          solicitudList = solicitudRepository.filterBetweenDateWithoutHours(filter,
                    "fechahorapartida", fechaDesde,
                    "fechahoraregreso", fechaHasta,
                    new Document("fechahorapartida", -1));

           

            solicitudDataModel = new SolicitudDataModel(solicitudList);

        } catch (Exception e) {
            errorServices.errorMessage(nameOfClass(), nameOfMethod(), e.getLocalizedMessage());

        }

    }// </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="String showDate(Date date)">
    public String showDate(Date date) {
        return solicitudServices.showDate(date);
    }// </editor-fold>
    // <editor-fold defaultstate="collapsed" desc="String showHour(Date date)">

    public String showHour(Date date) {
        return solicitudServices.showHour(date);

    }// </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="String printAll()">
    @Override
    public String printAll() {

        com.lowagie.text.Document document = new com.lowagie.text.Document(PageSize.LETTER);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            PdfWriter.getInstance(document, baos);
            //METADATA

            document.open();
            document.add(ReportUtils.paragraph("SOLICITUDES APROBADAS", FontFactory.getFont("arial", 12, Font.BOLD), Element.ALIGN_CENTER));

            String texto = "Desde " + DateUtil.showDate(fechaDesde) + "  Hasta: " + DateUtil.showDate(fechaHasta);
            document.add(ReportUtils.paragraph(texto, FontFactory.getFont("arial", 12, Font.BOLD), Element.ALIGN_CENTER));

            Date currentDate = new Date();
            String date = DateUtil.showDate(currentDate) + " " + DateUtil.showHour(currentDate);

            document.add(ReportUtils.paragraph("Fecha: " + date, FontFactory.getFont("arial", 8, Font.BOLD), Element.ALIGN_RIGHT));
            document.add(new Paragraph("\n"));

            //Numero de columnas
            PdfPTable table = new PdfPTable(5);

//Aqui indicamos el tamaño de cada columna
            table.setTotalWidth(new float[]{62, 75, 75, 90,90});

            table.setLockedWidth(true);

            table.addCell(ReportUtils.PdfCell("#", FontFactory.getFont("arial", 11, Font.BOLD), Element.ALIGN_CENTER));
            table.addCell(ReportUtils.PdfCell("Fecha Partida", FontFactory.getFont("arial", 11, Font.BOLD), Element.ALIGN_CENTER));
            table.addCell(ReportUtils.PdfCell("Fecha Regreso", FontFactory.getFont("arial", 11, Font.BOLD), Element.ALIGN_CENTER));
            table.addCell(ReportUtils.PdfCell("Solicita", FontFactory.getFont("arial", 11, Font.BOLD), Element.ALIGN_CENTER));
            table.addCell(ReportUtils.PdfCell("Responsable", FontFactory.getFont("arial", 11, Font.BOLD), Element.ALIGN_CENTER));

            for (Solicitud s : solicitudList) {

                String fechaPartida = DateUtil.showDate(s.getFechahorapartida()) + "             " + DateUtil.showHour(s.getFechahorapartida());
                String fechaRegreso = DateUtil.showDate(s.getFechahoraregreso()) + "             " + DateUtil.showHour(s.getFechahoraregreso());
                String fechaSolicitado = DateUtil.showDate(s.getFecha()) + "             " + DateUtil.showHour(s.getFecha());

                table.addCell(ReportUtils.PdfCell(s.getIdsolicitud().toString(), FontFactory.getFont("arial", 10, Font.NORMAL)));
                table.addCell(ReportUtils.PdfCell(fechaPartida, FontFactory.getFont("arial", 10, Font.NORMAL)));
                table.addCell(ReportUtils.PdfCell(fechaRegreso, FontFactory.getFont("arial", 10, Font.NORMAL)));
                table.addCell(ReportUtils.PdfCell(s.getUsuario().get(0).getNombre(), FontFactory.getFont("arial", 9, Font.NORMAL)));
                table.addCell(ReportUtils.PdfCell(s.getUsuario().get(1).getNombre(), FontFactory.getFont("arial", 9, Font.NORMAL)));

            }
            document.add(table);
        } catch (Exception ex) {
            System.out.println("Error " + ex.getMessage());
        }
        document.close();

        ReportUtils.printPDF(baos);
        return "";
    }
    // </editor-fold>  

    // <editor-fold defaultstate="collapsed" desc="Boolean availablePrint()">
    public Boolean availablePrint() {
        return !solicitudList.isEmpty();
    }
    // </editor-fold>  

    // <editor-fold defaultstate="collapsed" desc="String columnNameVistoBueno(VistoBueno vistoBueno) ">
    public String columnNameVistoBueno(VistoBueno vistoBueno) {
        return vistoBuenoServices.columnNameVistoBueno(vistoBueno);
    }
// </editor-fold>
}