FORMULARIO INFORMACIÓN ADICIONAL Y CATEGORÍA

En el siguiente artículo se explicará como fue implementado el código del caso CATEGORÍA DEMO de la funcionalidad Formulario Para la implementación de esta funcionalidad se usó JavaEE con Prime Faces 6.0, además se usa el método GET para el envío de datos entre la plataforma web Verifíquese Cédula Almacén y la plataforma móvil Verifíquese Cédula Premium, antes de comenzar se debe descargar la base de datos y montarla en un motor de MySQL.

El siguiente código pertenece al formulario:

<?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:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:p="http://primefaces.org/ui">

    <ui:composition template="/template2.xhtml">
        <ui:define name="title" >
        </ui:define>
        <ui:define name="body" >
            <f:metadata>
                <f:event type="preRenderView" listener="#{formularioSearchController.loadparameters()}"/>
            </f:metadata>
            <h:form>
                <br/>
                <p:panelGrid columns="2">
                    <f:facet name="header">
                        <h:outputText style="font-size: 20px" value="Categoría" />
                    </f:facet>
                    <p:column style="width: 50%">
                        <h:outputText style="font-size: 20px" value="Categoría" /> 
                    </p:column>
                    <p:column style="width: 50%">
                        <h:outputText style="width: 50%; font-size: 20px" value="#{formularioSearchController.category.nameCategory}" />
                    </p:column>
                    <p:column style="width: 50%">
                        <h:outputText style="font-size: 20px" value="Extra" /> 
                    </p:column>
                    <p:column style="width: 50%">
                        <h:outputText style="width: 50%; font-size: 20px" value="#{formularioSearchController.category.extra}" />
                    </p:column>
                </p:panelGrid>
                <br/>
                <h:outputLabel value="Color" />
                <p:colorPicker value="#{formularioSearchController.color}" />
                <h:panelGrid columns="2">
                <h:outputLabel value="Primer Nombre" />
                <h:inputText value="#{formularioSearchController.firstName}"/>
                <h:outputLabel value="Segundo Nombre" />
                <h:inputText value="#{formularioSearchController.secondName}"/>
                <h:outputLabel value="Primer Apellido" />
                <h:inputText value="#{formularioSearchController.firstSurname}"/>
                <h:outputLabel value="Segundo Apellido" />
                <h:inputText value="#{formularioSearchController.secondSurname}"/>
                <h:outputLabel value="Número Documento" />
                <h:inputText value="#{formularioSearchController.citizenID}"/>
                <h:outputLabel value="Tipo Documento" />
                <h:inputText value="#{formularioSearchController.documentType}"/>
                <h:outputLabel value="País" />
                <h:inputText value="#{formularioSearchController.country}"/>
                <h:outputLabel value="Fecha Lectura" />
                <h:inputText value="#{formularioSearchController.readingDate}"/>
                <h:outputLabel value="Latitud" />
                <h:inputText value="#{formularioSearchController.latitud}"/>
                <h:outputLabel value="Longitud" />
                <h:inputText value="#{formularioSearchController.longitud}"/>
                <h:outputLabel value="combo"/>
                <p:selectOneMenu id="console" value="#{formularioSearchController.combo}" style="width:125px">
                    <f:selectItem itemLabel="Seleccione" itemValue="" />
                    <f:selectItem itemLabel="Valor 1" itemValue="valor1" />
                    <f:selectItem itemLabel="Valor 2" itemValue="Valor2" />
                    <f:selectItem itemLabel="Valor 3" itemValue="valor3" />
                </p:selectOneMenu>
                <h:outputLabel value="Información Extra" />
                <p:inputText value="#{formularioSearchController.extra_data}"/>
                <h:outputLabel value="Adicional 1" />
                <h:inputText value="#{formularioSearchController.adicional1}"/>
                <h:outputLabel value="Adicional 2" />
                <h:inputText value="#{formularioSearchController.adicional2}"/>
                <h:outputLabel value="Adicional 3" />
                <h:inputText value="#{formularioSearchController.adicional3}"/>
                <h:outputLabel value="Adicional 4" />
                <h:inputText value="#{formularioSearchController.adicional4}"/>
                <h:outputLabel value="Adicional 5" />
                <h:inputText value="#{formularioSearchController.adicional5}"/>
                <h:outputText value="Fecha" />
                <p:calendar id="button" value="#{formularioSearchController.fecha}"  showOn="button" />
                </h:panelGrid>
                <br/>
                <h:commandButton  type="submit" styleClass="apply" title="Aceptar" action="#{formularioSearchController.redirect('FormularioSearch')}" style="width:auto; height:auto" value="Aceptar" >
                    <f:param name="xlq" value="#{formularioSearchController.extra_data}" />
                </h:commandButton>
            </h:form>
        </ui:define>
    </ui:composition>

</html>


En este formulario se muestra la información escaneada del documento y además se busca a cual categoría hace parte el documento para realizar esta trabajo se usa el siguiente fragmento de código en el controlador:

        public void loadparameters() throws UnsupportedEncodingException {
        //Este método se encargar de tomar la información del documento escaneado
        ExternalContext context=FacesContext.getCurrentInstance().getExternalContext();
        context.setResponseCharacterEncoding("UTF-8");
        Map<String, String> params = context.getRequestParameterMap();
        firstName = params.get("orh");
        secondName = params.get("bdh");
        firstSurname = params.get("wso");
        secondSurname = params.get("pur");
        citizenID = params.get("gel");
        birthDate = params.get("poe");
        country = params.get("wad");
        documentType = params.get("qwe");
        readingDate = params.get("tyu");
        latitud = params.get("klz");
        longitud = params.get("sde");
        extra_data = params.get("xlq");
        c = this.documentcategoryFacade.findCategory(country, documentType, citizenID);
        if(c == null){
            this.c = new Categories();
            this.c.setNameCategory("No tiene categoría");
            this.c.setExtra("No tiene categoría");
        }
         
    }

En el Facade se usa el siguiente método para buscar la información de la categoría a la que pertenece el documento.

    public Categories findCategory(String country, String documentType, String documentNumber){
        //Este método se encarga de buscar la información de la categoría a la que pertenece el documento 
       Categories c = null;
        Query q = getEntityManager().createQuery("SELECT d FROM Documentcategory d WHERE d.country = :country AND d.documentType = :documentType AND d.citizenId = :documentNumber");
        q.setParameter("country", country);
        q.setParameter("documentType", documentType);
        q.setParameter("documentNumber", documentNumber);
        List<Documentcategory> result=q.getResultList();
        if (result != null) {
                if (result.size() > 0) {
                    c = result.get(0).getCategory();
                }
            }
        return c;
    }

Luego de suministrados los datos adicionales y editados lo datos escaneados del documento en caso de a ver sido necesario se envían los datos del formulario junto con la categoría a la que pertenece el documento a la aplicación móvil Verifíquese Cédula Premium usando el método GET, para esto se usa el siguiente fragmento de código en el controlador:

    public String redirect(String page) throws UnsupportedEncodingException {
        String url = page + "?faces-redirect=true";
        if(firstName != null && !firstName.equals("")){
            url += "&orh="+firstName;
        }
        if(secondName != null && !secondName.equals("")){
            url +="&bdh="+secondName;
        }
        if(firstSurname != null&& !firstSurname.equals("")){
            url += "&wso="+firstSurname;
        }
        if(secondSurname != null && !secondSurname.equals("")){
            url += "&pur="+secondSurname;
        }
        if(citizenID != null && !citizenID.equals("")){
            url += "&gel="+citizenID;
        }
        if(birthDate != null && !birthDate.equals("")){
            url += "&poe="+birthDate;
        }
        if(country != null && !country.equals("")){
            url += "&wad="+country;
        }
        if(documentType != null && !documentType.equals("")){
            url += "&qwe="+documentType;
        }
        if(readingDate != null && !readingDate.equals("")){
            url += "&tyu="+readingDate;
        }
        if(latitud != null && !latitud.equals("")){
            url += "&klz="+latitud;
        }
        if(longitud != null && !longitud.equals("")){
            url += "&sde="+longitud;
        }
        if(adicional1 != null && !adicional1.equals("")){
            url += "&adicionaluno="+adicional1;
        }
        if(adicional2 != null && !adicional2.equals("")){
            url += "&adicionaldos="+adicional2;
        }
        if(adicional3 != null && !adicional3.equals("")){
            url += "&adicionaltres="+adicional3;
        }
        if(adicional4 != null && !adicional4.equals("")){
            url += "&adicionalcuatro="+adicional4;
        }
        if(adicional5 != null && !adicional5.equals("")){
            url += "&adicionalcinco="+adicional5;
        }
        if(color != null && !color.equals("")){
            url += "&color="+color;
        }
        if(fecha != null && !fecha.equals("")){
            url += "&fecha="+fecha;
        }
        if(extra_data != null && !extra_data.equals("")){
            url += "&xlq="+URLEncoder.encode(extra_data, "UTF-8");
        }
        if(combo != null && !combo.equals("")){
            url += "&combo="+combo;
        }
        if(c.getNameCategory() != null && !c.getNameCategory().equals("")){
            url += "&category="+c.getNameCategory();
        }
        if(c.getExtra() != null && !c.getExtra().equals("")){
            url += "&extraCategory="+c.getExtra();
        }
        return url;
    }

El siguiente es el código completo que pertenece al controlador de la vista.

/*
* 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 co.venko.almacen.controller;

import co.venko.almacen.entities.Categories;
import co.venko.almacen.entities.Documentcategory;
import co.venko.almacen.session.DocumentcategoryFacade;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Date;
import java.util.Map;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

/**
*
* @author carlo
*/
@ManagedBean(name = "formularioSearchController")
@SessionScoped
public class FormularioSearchController {
    @EJB
    private DocumentcategoryFacade documentcategoryFacade;
   
    private Documentcategory documentcategory;
    private String adicional1 = "";
    private String adicional2 = "";
    private String adicional3 = "";
    private String adicional4 = "";
    private String adicional5 = "";
    private String color = "";
    private Date fecha;
    private String extraResponse = "";
    private String firstName = "";
    private String secondName = "";
    private String firstSurname = "";
    private String secondSurname = "";
    private String citizenID = "";
    private String birthDate = "";
    private String bloodType = "";
    private String bloodRH = "";
    private String country = "";
    private String documentType = "";
    private String readingDate = "";
    private String latitud = "";
    private String longitud = "";
    private String extra_data;
    private String combo;
    private Categories c = null;
    /**
     * Creates a new instance of FormularioController
     */
    public FormularioSearchController() {
    }
   
    public Categories getCategory(){
        if(this.c == null){
            this.c = new Categories();
        }
        return c;
    }
   
    public void loadparameters() throws UnsupportedEncodingException {
        //Este método se encargar de tomar la información del documento escaneado
        ExternalContext context=FacesContext.getCurrentInstance().getExternalContext();
        context.setResponseCharacterEncoding("UTF-8");
        Map<String, String> params = context.getRequestParameterMap();
        firstName = params.get("orh");
        secondName = params.get("bdh");
        firstSurname = params.get("wso");
        secondSurname = params.get("pur");
        citizenID = params.get("gel");
        birthDate = params.get("poe");
        country = params.get("wad");
        documentType = params.get("qwe");
        readingDate = params.get("tyu");
        latitud = params.get("klz");
        longitud = params.get("sde");
        extra_data = params.get("xlq");
        c = this.documentcategoryFacade.findCategory(country, documentType, citizenID);
        if(c == null){
            this.c = new Categories();
            this.c.setNameCategory("No tiene categoría");
            this.c.setExtra("No tiene categoría");
        }
         
    }

    public String redirect(String page) throws UnsupportedEncodingException {
        String url = page + "?faces-redirect=true";
        if(firstName != null && !firstName.equals("")){
            url += "&orh="+firstName;
        }
        if(secondName != null && !secondName.equals("")){
            url +="&bdh="+secondName;
        }
        if(firstSurname != null&& !firstSurname.equals("")){
            url += "&wso="+firstSurname;
        }
        if(secondSurname != null && !secondSurname.equals("")){
            url += "&pur="+secondSurname;
        }
        if(citizenID != null && !citizenID.equals("")){
            url += "&gel="+citizenID;
        }
        if(birthDate != null && !birthDate.equals("")){
            url += "&poe="+birthDate;
        }
        if(country != null && !country.equals("")){
            url += "&wad="+country;
        }
        if(documentType != null && !documentType.equals("")){
            url += "&qwe="+documentType;
        }
        if(readingDate != null && !readingDate.equals("")){
            url += "&tyu="+readingDate;
        }
        if(latitud != null && !latitud.equals("")){
            url += "&klz="+latitud;
        }
        if(longitud != null && !longitud.equals("")){
            url += "&sde="+longitud;
        }
        if(adicional1 != null && !adicional1.equals("")){
            url += "&adicionaluno="+adicional1;
        }
        if(adicional2 != null && !adicional2.equals("")){
            url += "&adicionaldos="+adicional2;
        }
        if(adicional3 != null && !adicional3.equals("")){
            url += "&adicionaltres="+adicional3;
        }
        if(adicional4 != null && !adicional4.equals("")){
            url += "&adicionalcuatro="+adicional4;
        }
        if(adicional5 != null && !adicional5.equals("")){
            url += "&adicionalcinco="+adicional5;
        }
        if(color != null && !color.equals("")){
            url += "&color="+color;
        }
        if(fecha != null && !fecha.equals("")){
            url += "&fecha="+fecha;
        }
        if(extra_data != null && !extra_data.equals("")){
            url += "&xlq="+URLEncoder.encode(extra_data, "UTF-8");
        }
        if(combo != null && !combo.equals("")){
            url += "&combo="+combo;
        }
        if(c.getNameCategory() != null && !c.getNameCategory().equals("")){
            url += "&category="+c.getNameCategory();
        }
        if(c.getExtra() != null && !c.getExtra().equals("")){
            url += "&extraCategory="+c.getExtra();
        }
        return url;
    }

    public String getCombo() {
        return combo;
    }

    public void setCombo(String combo) {
        this.combo = combo;
    }   

    public String getExtraResponse() {
        return extraResponse;
    }

    public void setExtraResponse(String extraResponse) {
        this.extraResponse = extraResponse;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getSecondName() {
        return secondName;
    }

    public void setSecondName(String secondName) {
        this.secondName = secondName;
    }

    public String getFirstSurname() {
        return firstSurname;
    }

    public void setFirstSurname(String firstSurname) {
        this.firstSurname = firstSurname;
    }

    public String getSecondSurname() {
        return secondSurname;
    }

    public void setSecondSurname(String secondSurname) {
        this.secondSurname = secondSurname;
    }

    public String getCitizenID() {
        return citizenID;
    }

    public void setCitizenID(String citizenID) {
        this.citizenID = citizenID;
    }

    public String getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(String birthDate) {
        this.birthDate = birthDate;
    }

    public String getBloodType() {
        return bloodType;
    }

    public void setBloodType(String bloodType) {
        this.bloodType = bloodType;
    }

    public String getBloodRH() {
        return bloodRH;
    }

    public void setBloodRH(String bloodRH) {
        this.bloodRH = bloodRH;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getDocumentType() {
        return documentType;
    }

    public void setDocumentType(String documentType) {
        this.documentType = documentType;
    }

    public String getReadingDate() {
        return readingDate;
    }

    public void setReadingDate(String readingDate) {
        this.readingDate = readingDate;
    }

    public String getAdicional1() {
        return adicional1;
    }

    public void setAdicional1(String adicional1) {
        this.adicional1 = adicional1;
    }

    public String getAdicional2() {
        return adicional2;
    }

    public void setAdicional2(String adicional2) {
        this.adicional2 = adicional2;
    }

    public String getAdicional3() {
        return adicional3;
    }

    public void setAdicional3(String adicional3) {
        this.adicional3 = adicional3;
    }

    public String getAdicional4() {
        return adicional4;
    }

    public void setAdicional4(String adicional4) {
        this.adicional4 = adicional4;
    }

    public String getAdicional5() {
        return adicional5;
    }

    public void setAdicional5(String adicional5) {
        this.adicional5 = adicional5;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }
   
    public String getLatitud() {
        return latitud;
    }

    public void setLatitud(String latitud) {
        this.latitud = latitud;
    }

    public String getLongitud() {
        return longitud;
    }

    public void setLongitud(String longitud) {
        this.longitud = longitud;
    }

    public String getExtra_data() {
        return extra_data;
    }

    public void setExtra_data(String extra_data) {
        this.extra_data = extra_data;
    }
   
   
}