Dialogo con <p:schedule>

Dialogo con <p:schedule>

  • Deseamos que desde un formulario mostrar un dialogo que contenga un <p:schedule>

  • Definimos un commandButton que invocara un método que cargara los datos del <p:schedule> y mediante el oncomplete() se despliega el dialogo.

Formulario

new.xhtml

  • Definir el commandButton

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

  <p:fieldset >
    <extensionviaje:calendar   pattern="dd/MM/yyyy HH:mm a" 
                               value="#{viajeController.viaje.fechahorainicioreserva}"   
                               label="#{msg['field.fechahorainicioreserva']}" />

    <p:spacer width="25"/>
    <b:commandButton  look="success"
                      title="#{msg['label.solicitudpendiente']}"
                      immediate="true"
                      iconAwesome="fa-calendar" 
                      update="solicitudDetails"
                      action="#{viajeController.prepareScheduleSolicitud()}"
                      oncomplete="PF('solicitudDialog').show();" />


  </p:fieldset>
  • Definir el dialogo

<p:dialog widgetVar="solicitudDialog" header="#{msg['dialogo.viajesolicitud']}" 
                      width="850" height="450"
                      styleClass="customDialog"

                      responsive="true"

                      showEffect="clip" hideEffect="clip">
                <b:panelGrid id="solicitudDetails" colSpans="12" size="xs" > 
                    <p:schedule id="solicitudSchedule"       
                                rightHeaderTemplate="month,agendaWeek,agendaDay,basicDay"
                                value="#{viajeController.solicitudScheduleModel}" widgetVar="solicitudSchedule" timeZone="GMT-5" locale="es">


                    </p:schedule>
                    <b:commandButton value="#{app['button.close']}"
                                     iconAwesome="fa-close"
                                     oncomplete="PF('solicitudDialog').hide();"/>

                </b:panelGrid>
            </p:dialog>

Controller

  • Definir un objeto de tipo ScheduleModel

  • private ScheduleModel solicitudScheduleModel;
  • Metodo prepareScheduleSolicitud(), carga el schedule con los datos

public String prepareScheduleSolicitud() {
        try {
            Document doc;
            Document docViajes = new Document("activo", "si").append("estatus.idestatus", "SOLICITADO");
            doc = new Document("activo", "si");
            List<Solicitud> list = solicitudRepository.findBy(docViajes, new Document("fecha", 1));
           // String tema = "schedule-orange";
            solicitudScheduleModel = new DefaultScheduleModel();

            if (!list.isEmpty()) {
                list.forEach((a) -> {
                    String tipovehiculo = "";
                    tipovehiculo = a.getTipovehiculo().stream().map((tv) -> tv.getIdtipovehiculo()).reduce(tipovehiculo, String::concat);
String tema="";
                    if (a.getTiposolicitud().getIdtiposolicitud().equals("DOCENTE")) {
                        tema = "schedule-green";
                    } else {
                        tema = "schedule-orange";
                    }
                    solicitudScheduleModel.addEvent(
                            new DefaultScheduleEvent(a.getUsuario().get(0).getNombre() + " " + a.getUsuario().get(0).getCedula()
                                    + "Tipo vehiculo " + tipovehiculo
                                    + "Solicitud " + a.getTiposolicitud().getIdtiposolicitud()
                                    + " Destino " + a.getLugarllegada(),
                                    a.getFechahorapartida(), a.getFechahoraregreso(), tema)
                    );
                });
            }

        } catch (Exception e) {
            errorServices.errorDialog(nameOfClass(), nameOfMethod(), nameOfMethod(), e.getLocalizedMessage());
        }
        return "";
    }

Last updated