Está en la página 1de 84

Tema

MANUAL DE SOFTWARE
SALTOS MONSTER
Nombres:
Clavón Ricardo
Ponce John
Taday Kevin
Tutor
Ing. Eduardo Mauricio Campaña Ortega
MIS.MDU.CCNA.CCIA.
PhD. (c) Ingeniería de Software
PhD. (c) Seguridad Información

Fecha
15/09/2020
1 MANUAL DE USUARIO SOFTWARE SALTOS
MONSTER
CASO DE ESTUDIO........................................................................................................................4
1. Introducción.........................................................................................................................4
2. Propósito..............................................................................................................................4
3. Diseño del diagrama de Componentes.................................................................................5
2 Agregar Servidor...................................................................................................................8
4. Conexión desde Servidor Payara con la base de datos creada...........................................10
5. Creación del proyecto........................................................................................................13
6. Creación de la Persistencia.................................................................................................20
7. Creación de controlador.....................................................................................................25
8. Configuración de la capa de la vista...................................................................................30
9. Ejecución del Proyecto.......................................................................................................82
9.1. Módulo de Seguridad................................................................................................82
9.2. Módulo de Personal..................................................................................................84
9.3. Módulo de Saltos.......................................................................................................86
9.4. Módulo de Finanzas...................................................................................................87
8. Conclusiones y Recomendaciones......................................................................................90
2.1 9.1 Conclusiones............................................................................................................90
2.2 9.2 Recomendaciones...................................................................................................90
2.3 9.3 Referencias bibliográficas........................................................................................90

ÍNDICE DE ILUSTRACIONE

1
Ilustración 1Vista Principal Power Designer....................................................................5
Ilustración 2Seleccion de Proyecto...................................................................................5
Ilustración 3 Estructuras Básicas.......................................................................................5
Ilustración 4Interfaz Grafica..............................................................................................6
Ilustración 5 Capa de Negocios.........................................................................................6
Ilustración 6 Capa de datos................................................................................................7
Ilustración 7Diagrama Final..............................................................................................7
Ilustración 8Añadir Servidor.............................................................................................8
Ilustración 9 Instancia de Payara Server...........................................................................8
Ilustración 10 Lugar de instancia......................................................................................9
Ilustración 11Locación de Dominio..................................................................................9
Ilustración 12 Comenzar Servidor...................................................................................10
Ilustración 13 Interfaz Payara..........................................................................................10
Ilustración 14 Pools de conección...................................................................................11
Ilustración 15 Ingreso Datos Pool...................................................................................11
Ilustración 16 Propiedades de conexión..........................................................................11
Ilustración 17 Ping Conexión..........................................................................................12
Ilustración 18 Recursos Payara.......................................................................................12
Ilustración 19 Datos llenos JDBC...................................................................................12
Ilustración 20 Nuevo Proyecto........................................................................................13
Ilustración 21Selección de proyecto................................................................................13
Ilustración 22 Locación del Proyecto..............................................................................14
Ilustración 23 Selección de servidor................................................................................14
Ilustración 24 Selección de Frameworks.........................................................................15
Ilustración 25 Asignacion de JARS.................................................................................15
Ilustración 26 Configuracion de hibernate......................................................................16
Ilustración 27 Creación de Hibernate Reverse Engineering Wizzard.............................16
Ilustración 28Selección del nombre de HREW...............................................................16
Ilustración 29 Selección de las tablas de la base de datos...............................................17
Ilustración 30 Creación de un paquete nuevo..................................................................17
Ilustración 31 Creación de Mapeo de Hibernate.............................................................18
Ilustración 32 Configuración de mapeo..........................................................................18
Ilustración 33 Creación de archivos POJOs....................................................................19
Ilustración 34 Creación de persistencia...........................................................................20
Ilustración 35Estructura archivos persistencia................................................................23
Ilustración 36 Creación de Hibernate Util.......................................................................25
Ilustración 37 Selección de nombre HibernateUtil.........................................................25
Ilustración 38 Estructura de los paquetes........................................................................25
Ilustración 39 Estructura de los archivos Bean...............................................................26
Ilustración 40 Archivo de Configuración XML..............................................................31
Ilustración 41Creación de paquete App..........................................................................33
Ilustración 42 Creación del template...............................................................................33
Ilustración 43Vista Gestionar Opciones..........................................................................82
Ilustración 44 Vista Gestionar Usuarios..........................................................................82
Ilustración 45Vista Administración de Perfiles...............................................................82
Ilustración 46 Vista agregar Usuarios.............................................................................83
2
Ilustración 47Vista Asignar Permisos a Perfil.................................................................83
Ilustración 48 Vista Asignar Perfiles a Usuarios.............................................................84
Ilustración 49 Vista Visor de Permisos...........................................................................84
Ilustración 50 Vista Usuarios por Perfil..........................................................................84
Ilustración 51 Vista Administración de Personas............................................................84
Ilustración 52 Vista Administración de paracaidistas.....................................................85
Ilustración 53 Vista Administración de la Formación de paracaidistas..........................85
Ilustración 54 Vista Administración de Cursos...............................................................85
Ilustración 55 Vista Agregar Personas............................................................................86
Ilustración 56 Vista Agregar Paracaidistas......................................................................86
Ilustración 57Vista Administración de Saltos.................................................................86
Ilustración 58 Vista Administración de Servicios Adicionales.......................................87
Ilustración 59 Vista administración de Vuelos................................................................87
Ilustración 60 Vista Administración de aeronaves..........................................................87
Ilustración 61 Vista administración de la Empresa.........................................................88
Ilustración 62 Vista Administración de Forma de Pago..................................................88
Ilustración 63 VIsta Adminsitración de Descuentos.......................................................88
Ilustración 64 Vista Agregar Facturas.............................................................................89
Ilustración 65 Vista Ver Facturas....................................................................................89
Ilustración 66 Vista Administración de Pedidos.............................................................89

ÍNDICE DE TABLAS
Tabla 1 Codificación DAO Genérico..............................................................................20
Tabla 2 Codificación DAOSalto.....................................................................................24
Tabla 3 Codificación Bean de controlador de aeronave..................................................26
Tabla 4 Codificación web.xml........................................................................................31
Tabla 5 Codificación template.xhtml..............................................................................34
Tabla 6 Codificación Vista Factura.................................................................................35
Tabla 7 Codificación Agregar Persona............................................................................36
Tabla 8 Codificación de Asignar permisos.....................................................................47
Tabla 9 Codificación Administrar Perfiles......................................................................51
Tabla 10 Codificación Agregar Factura..........................................................................56

3
CASO DE ESTUDIO
La empresa de paracaidismo Monster necesita una aplicación o programa que almacene los
datos de los paracaidistas tanto en modalidad tándem como en modalidad libre que son los
dos tipos de servicio de salto que se ofrece. Para esto la empresa cuenta con una avioneta
cesnna 206 la cual tiene una capacidad de 5 personas sin incluir al piloto. Las operaciones se
las realiza los fines de semana en horario de 10am hasta la caída del sol.

Salto tándem es una modalidad de salto en paracaídas en el cual el un instructor lleva anclado
a su cuerpo mediante arnés a una persona o cliente la cual disfruta completamente del salto el
instructor es el que realiza todo el procedimiento

Salto libre solo es una modalidad de paracaidismo en la cual una persona salta de una
aeronave en movimiento de forma sola es decir realiza el procedimiento de apertura y
aterrizaje de su paracaídas de manera individual.

Como servicios adicionales se cuenta con camarógrafos externos o extras que saltan del avión
con los tándems y graban todo el salto. (Puede ser considerado como)

Los costos y las ubicaciones se detallan a continuación: tándem 308 *varia en caso de
promociones o descuentos, paracaidistas solos depende el salto en el que se suban 60, 50, 40
adicional el camarógrafo externo cuesta 70, la renta del equipo para los paracaidistas solos 30.

En cada salto puede ir:

 Dos tándems (cuatro personas, dos instructores y dos clientes) y un paracaidista total
5, en este caso precio tándem valor 308 y paracaidista solo 40
 Un tándem (dos personas un instructor y un cliente) y tres paracaidistas totales 5, en
este caso precio tándem valor 308 y paracaidistas solos 50
 Cinco paracaidistas solos en este caso precio paracaidista solo 60

1. Introducción
Este documento contiene indicaciones generales que un usuario debe tener para poder
manejar el software Saltos Monster.

2. Propósito
El propósito principal del presente documento es que el usuario tenga una documento que
guíe los procedimientos necesarios para poder usar el software Saltos Monster , este
documento está construido tomando en cuenta todos las situaciones que un usuario puede
tener para manejar dicho sistema

4
3. Diseño del diagrama de Componentes
1. Abrimos el programa Power Designer.

Ilustración 1Vista Principal Power Designer

2. Escogemos la opción Enterprise Architecture Model y seleccionamos el diagrama


Aplication diagrama architecture y colocamos el nombre del modelo.

Ilustración 2Seleccion de Proyecto

3. Con el mouse seleccionamos los símbolos disponibles para elaborar nuestro


diagrama, comenzando por las estructuras básicas como son las capas: de
presentación, negocio y de datos.

Ilustración 3 Estructuras Básicas

4. En la capa de presentación seleccionamos la interfaz gráfica.

5
Ilustración 4Interfaz Grafica

5. En la capa de negocio

Ilustración 5 Capa de Negocios

6
6. En la capa de datos

Ilustración 6 Capa de datos

7. Dando como resultado el siguiente diagrama

Ilustración 7Diagrama Final

7
2 Agregar Servidor.
Dentro de la ventana “Services” de Netbeans, debe seleccionar “Servers”, click derecho “Add
Server”.

Ilustración 8Añadir Servidor

En este caso, se va a trabajar con un servidor Payara, así que se debe seleccionar y presionar
en “Next”.

Ilustración 9 Instancia de Payara Server

8
A continuación, se debe colocar la dirección en la cual se encuentran todos los archivos del
servidor, y va a funcionar en “Local Domain”, después presionar “Next”.

Ilustración 10 Lugar de instancia

En la siguiente ventana, debe verificar que funcione con domain1 y el resto de los campos se
deben dejar en blanco de preferencia, presionar “Finish”.

Ilustración 11Locación de Dominio

9
De esta manera, el servidor ya se encuentra listo para funcionar y ahora debe arrancar. Click
derecho sobre el servidor de Payara y presionar “Start”.

Ilustración 12 Comenzar Servidor

4. Conexión desde Servidor Payara con la base de


datos creada.
Este paso es fundamental ya que garantiza el acceso de manera correcta a la capa de
persistencia. Se debe abrir en un navegador la interfaz de web de configuración del servidor.
La dirección es “localhost:4848” y esperamos que arranque.

Ilustración 13 Interfaz Payara

Presionar la opción de “Resources”-> “JDBC” -> “JDBC Connection Pools”

10
Ilustración 14 Pools de conección

Presionar New, esto permite crear un nuevo hilo de conexión mediante JDBC, después
presionar “Next”. Asignar un nombre a la conexión. En este caso será “Camiones” y en
Resource Type; se debe seleccionar javax.sql.DataSource. En Database Driver Vendor;
seleccionar MySql que es el gestor de base de datos que usaremos para el presente proyecto.

Ilustración 15 Ingreso Datos Pool

En la siguiente ventana colocar los 4 parámetros que se muestran en la imagen. Y llenar los
campos según las credenciales de la base de datos. Presionar Save.

Ilustración 16 Propiedades de conexión

Para verificar si la conexión es exitosa, se debe abrir el pool que se acabo de crear y hacer ping
a la base de datos.

11
Ilustración 17 Ping Conexión

Ahora, se debe crear un recurso de JDBC, nos dirigimos a JDBC RESOURCES y presionamos
new.

Ilustración 18 Recursos Payara

Le damos un nombre y seleccionamos el pool de conexión antes creado, esto facilita las cosas
ya que la conexión con la base será mucho mas transparente que al realizarla desde Netbeans.
Presionamos Save.

Ilustración 19 Datos llenos JDBC

12
5. Creación del proyecto.
Seleccionamos File->New Project

Ilustración 20 Nuevo Proyecto

Seleccionamos Java Web -> Web Application. Presionamos Next.

Ilustración 21Selección de proyecto

13
Le asignamos un nombre, en este caso WebAppSaltos.

Ilustración 22 Locación del Proyecto

Seleccionamos el servidor con el cual la aplicación funcionara. En este caso Payara y


presionamos Finish.

Ilustración 23 Selección de servidor

Escogemos los frameworks a utilizar en este caso JavaServer Faces e Hibernate 4.3.1 y
terminamos la creación.

14
Ilustración 24 Selección de Frameworks

Se acoplan los JARS a utilizar que fueron Primefaces 8.0 y mysql jdb 8.0 con el tema Nova-light

Ilustración 25 Asignacion de JARS

Creamos el archivo de configuración para hibernate con las propiedades de la base de datos
como se presenta en la ilustracion 26

15
Ilustración 26 Configuracion de hibernate

Creamos el archivo hibernate reveng para extraer los nombres de las tablas de la BBDD

Ilustración 27 Creación de Hibernate Reverse Engineering Wizzard

Ilustración 28Selección del nombre de HREW

16
Añadimos las tablas al reveng a mapearse

Ilustración 29 Selección de las tablas de la base de datos

Ilustración 30 Creación de un paquete nuevo

17
Creamos los archivos POJOS en los cuales se creara los archivos .hbm y .java de cada tabla de la
base de datos.

Ilustración 31 Creación de Mapeo de Hibernate

Seleccionamos el lenguaje JDK 5 para utizar sintaxis de conexión a la base de datos.

Ilustración 32 Configuración de mapeo

Se crean los siguientes archivos

18
Ilustración 33 Creación de archivos POJOs

19
6. Creación de la Persistencia.

Creamos un nuevo paquete Persistencia

Ilustración 34 Creación de persistencia

Creamos una clase abstracta para manejar sintaxis DML de la base de datos en la cual
llamaremos DAO genérico

A continuación se muestra la creación de un DAO genérico que nos servirá como plantilla para
crear los demás.

Tabla 1 Codificación DAO Genérico

Public abstract class DAOGenerico<T, ID extends Serializable> {

//private static final Logger LOG = Logger.getLogger(DAOGenerico.class.getName());

Session session;

private Transaction tx;

private final Class<T> clase;

public DAOGenerico(Class<T> clase) {


this.clase = clase;
}

protected boolean save(T entidad) {


boolean guardado = false;
Session sesion = null;

try {
20
sesion = HibernateUtil.getSessionFactory().openSession();
sesion.beginTransaction();
sesion.save(entidad);
sesion.getTransaction().commit();
guardado=true;
} catch (Exception e) {
System.out.println(e.getMessage());
sesion.getTransaction().rollback();
} finally {
if (sesion != null) {
sesion.close();
}
}

return guardado;
}

protected boolean update(T entidad) {

boolean guardado = false;

Session sesion = null;


try {
sesion = HibernateUtil.getSessionFactory().openSession();
sesion.beginTransaction();
sesion.update(entidad);
sesion.getTransaction().commit();
guardado = true;
} catch (Exception e) {
System.out.println(e.getMessage());
sesion.getTransaction().rollback();
} finally {
if (sesion != null) {
sesion.close();
}
}
return guardado;
}

protected boolean delete(T entidad) {


boolean borrado = false;

Session sesion = null;


try {
sesion = HibernateUtil.getSessionFactory().openSession();
sesion.beginTransaction();
sesion.delete(entidad);
sesion.getTransaction().commit();
borrado = true;
} catch (Exception e) {
System.out.println(e.getMessage());
sesion.getTransaction().rollback();
21
} finally {
if (sesion != null) {
sesion.close();
}
}
return borrado;
}

protected T find(ID _id) {


T entidad = null;
Session sesion = null;
Transaction t=null;
try {
sesion = HibernateUtil.getSessionFactory().openSession();
t = sesion.beginTransaction();
String hql = "FROM "+clase.getName()+ " where id="+_id;
entidad = (T)sesion.createQuery(hql).uniqueResult();
t.commit();
}catch(Exception e) {
t.rollback();
}finally{
if (sesion != null) {
sesion.close();
}
}
return entidad;
}

protected List<T> findAll() {


List<T> lista = null;
Session sesion = null;
Transaction t=null;

try {
sesion = HibernateUtil.getSessionFactory().openSession();
t = sesion.beginTransaction();
String hql = "FROM "+clase.getName();
lista = sesion.createQuery(hql).list();
t.commit();
}catch(Exception e) {
t.rollback();
}finally{
if (sesion != null) {
sesion.close();
}
}
return lista;
}

protected boolean saveLotes(List<T> entidad) {

Boolean result = false;

22
return result;
}

protected List<T> findRange(int minimo, int maximo) {

List<T> lista = null;

return lista;
}

protected boolean deleteLotes(List<T> entidad) {

Boolean result = false;

return result;
}

protected void startOperation() throws HibernateException {

Creaamos los archivos DAO para cada una de las entidades

Ilustración 35Estructura archivos persistencia

23
A continuación se muestra la creación de un DAO que extendera de DAO Generico en este
caso sera de la entidad salto y asi mismo se debe realizar con las demas entidades.

Tabla 2 Codificación DAOSalto

package ec.edu.saltos.persistencia;

import ec.edu.saltos.modelo.Salto;
import java.util.List;
public class DAOSalto extends DAOGenerico<Salto, Integer>{

public DAOSalto() {
super(Salto.class);
}

public List<Salto> obtenerTodos() {


return super.findAll();
}

public Boolean guardar(Salto _salto){


return super.save(_salto);
}

public Salto obtenerPorId(Integer _id) {


return super.find(_id);
}

public Boolean editar(Salto _salto) {


return super.update(_salto);
}

public Boolean eliminar(Salto _salto){


return super.delete(_salto);
}
}

24
Creamos el archivo para manejar las sesion de hibernate que se llamara hibernate util.java y
que se genera de la siguiente manera:

Ilustración 36 Creación de Hibernate Util

Le damos en finish

Ilustración 37 Selección de nombre HibernateUtil

7. Creación de controlador
Creamos los paquetes de controlador para cada subsistema

Ilustración 38 Estructura de los paquetes

25
Manejo de la aplicación con sus controladores

Ilustración 39 Estructura de los archivos Bean

A continuación se muestra un ejemplo del Managed Bean de aeronave que de igual manera se
configuraran para las demás clases.

Tabla 3 Codificación Bean de controlador de aeronave

/*
* 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 ec.edu.saltos.controlador.app;

import ec.edu.saltos.controlador.seguridad.*;
import ec.edu.saltos.config.EstadosConfig;
import ec.edu.saltos.controlador.FiltroAcceso;
import ec.edu.saltos.modelo.Aeronave;
import ec.edu.saltos.modelo.Persona;
import ec.edu.saltos.persistencia.DAOAeronave;
import ec.edu.saltos.persistencia.DAOPersona;
import ec.edu.saltos.util.FechaUtil;
import ec.edu.saltos.util.PrimeUtiles;
import ec.edu.saltos.validaciones.Cedula;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Logger;
import java.util.logging.Level;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

26
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

/**
*
* @author kalex
*/
@ManagedBean
@ViewScoped
public class BeanAeronave extends FiltroAcceso implements Serializable{

private static final Logger LOG = Logger.getLogger(BeanAeronave.class.getName());

private List<Aeronave> listaAeronave;

private Aeronave aeronaveSeleccionada;


//private boolean permiteAsignarPerfil;

private String formatoFecha;

private boolean estatus;

/**
* Creates a new instance of BeanPersona
*/
public BeanAeronave() {
super(FacesContext.getCurrentInstance().getExternalContext());
}

@PostConstruct
public void init(){
formatoFecha="si";
obtenerAeronaves();
}

public void obtenerAeronaves(){


DAOAeronave dao=new DAOAeronave();
try{
listaAeronave=dao.obtenerTodos();
}catch(Exception e){
LOG.log(Level.INFO, "Excepcion al obtener a todos: {0}",e);
}
}

public void agregarAeronave() {


DAOAeronave dao=new DAOAeronave();
//aeronaveSeleccionada.setPerDireccion(ciudad+","+sector+","+calle+","+numCasa);
27
aeronaveSeleccionada.setAerFechaCreacion(FechaUtil.ahoraSinFormato());
aeronaveSeleccionada.setAerFechaMod(FechaUtil.ahoraSinFormato());
try{
if(dao.guardar(aeronaveSeleccionada)){
PrimeUtiles.mostrarMensaje(FacesMessage.SEVERITY_INFO, "Info:", "Se registro
correctamente.");
limpiarAeronave();
}else{
PrimeUtiles.mostrarMensaje(FacesMessage.SEVERITY_ERROR, "Error: ","Hubo un
error al registrar");
}
}catch(Exception e){
LOG.log(Level.INFO, "Excepcion al agregar: {0}",e);
}finally{
PrimeUtiles.primeExecute("PF('wv-crear').hide();");
}
}

public void modificarAeronave() {


DAOAeronave dao=new DAOAeronave();
aeronaveSeleccionada.setAerFechaMod(FechaUtil.ahoraSinFormato());
try{
if(dao.editar(aeronaveSeleccionada)){
limpiarAeronave();
PrimeUtiles.mostrarMensaje(FacesMessage.SEVERITY_INFO, "Info: ","Se actualizo
correctamente");
}else{
PrimeUtiles.mostrarMensaje(FacesMessage.SEVERITY_ERROR, "Error: ","Hubo un
error al actualizar");
}
}catch(Exception e){
LOG.log(Level.INFO, "Excepcion al modificar: {0}",e);
}finally{
PrimeUtiles.primeExecute("PF('wv-actualizar').hide();");
}
}

public void eliminarAeronave() {


DAOAeronave dao=new DAOAeronave();

try{
if(dao.eliminar(aeronaveSeleccionada)){
limpiarAeronave();
PrimeUtiles.mostrarMensaje(FacesMessage.SEVERITY_INFO, "Info: ", "Se elimino
correctamente");

LOG.log(Level.INFO, "Persona Eliminada Correctamente");


}else{
PrimeUtiles.mostrarMensaje(FacesMessage.SEVERITY_ERROR, "Error: ", "Hubo un
error al eliminar");
28
LOG.log(Level.INFO, "No se pudo eliminar la persona");
}
}catch(Exception e){
LOG.log(Level.INFO, "Excepcion al eliminar: {0}",e);
}finally{
PrimeUtiles.primeExecute("PF('wv-eliminar').hide();");
}

public Aeronave onRowSelect(SelectEvent event) {


setAeronaveSeleccionada((Aeronave) event.getObject());
LOG.log(Level.INFO, "Persona {0} listo para usar a: ",
aeronaveSeleccionada.getAerNombre());
return aeronaveSeleccionada;
}

public void onRowUnselect(UnselectEvent event) {


}

public Aeronave preparaCrear() {


LOG.log(Level.INFO, "Preparando nueva aeronave");

aeronaveSeleccionada = new Aeronave();


PrimeUtiles.primeExecute("PF('wv-crear').show();");
return aeronaveSeleccionada;

public Aeronave preparaActualizar() {


LOG.log(Level.INFO, "Persona {0} lista para actualizar.",
aeronaveSeleccionada.getAerNombre());

PrimeUtiles.primeExecute("PF('wv-actualizar').show();");
return aeronaveSeleccionada;
}

public void preparaArchivar() {


LOG.log(Level.INFO, "Persona {0} lista para archivar.",
aeronaveSeleccionada.getAerNombre());

PrimeUtiles.primeExecute("PF('wv-archivar').show();");
}

public void preparaEliminar() {

LOG.log(Level.INFO, "Persona {0} lista para eliminar.",


aeronaveSeleccionada.getAerNombre());
PrimeUtiles.primeExecute("PF('wv-eliminar').show();");
}

29
public void limpiarAeronave() {
aeronaveSeleccionada = new Aeronave();

public boolean isEstatus() {


return estatus;
}

public void setEstatus(boolean estatus) {


this.estatus = estatus;
}

public String getFormatoFecha() {


return formatoFecha;
}

public void setFormatoFecha(String formatoFecha) {


this.formatoFecha = formatoFecha;
}

public Aeronave getAeronaveSeleccionada() {


return aeronaveSeleccionada;
}

public void setAeronaveSeleccionada(Aeronave aeronaveSeleccionada) {


this.aeronaveSeleccionada = aeronaveSeleccionada;
}

public List<Aeronave> getListaAeronave() {


obtenerAeronaves();
return listaAeronave;
}

public void setListaAeronave(List<Aeronave> listaAeronave) {


this.listaAeronave = listaAeronave;
}

8. Configuración de la capa de la vista.

Entramos en web pages web-inf y configuramos los parámetros

30
Ilustración 40 Archivo de Configuración XML

Los archivos necesarios para usar la plantilla de las vistas son:

1. Face-config.xml
2. Beans.xml
3. Footer.xhtml
4. Menú.xhtml
5. Template.xhtml
6. Topbar.xhtml

A continuación, se muestra el código de nuestro archivo de configuración XML

Tabla 4 Codificación web.xml

<?xml version="1.0" encoding="UTF-8"?>


<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
31
30
</session-timeout>
</session-config>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<welcome-file-list>
<welcome-file>login.xhtml</welcome-file>
</welcome-file-list>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>nova-light</param-value>
</context-param>
<context-param>
<param-name>primefaces.FONT_AWESOME</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/primefaces-paradise.taglib.xml</param-value>
</context-param>

<!--Filtro de Páginas-->
<error-page>
<error-code>404</error-code>
<location>/AppExceptionHandler</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/AppExceptionHandler</location>
</error-page>
<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/AppExceptionHandler</location>

32
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/publico/error.xhtml</location>
</error-page>
<error-page>
<exception-type>javax.faces.FacesException</exception-type>
<location>/publico/error.xhtml</location>
</error-page>
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/publico/vista-caducada.xhtml</location>
</error-page>
</web-app>

Dar clic en web Pages y creamos las carpetas para las vistas

Ilustración 41Creación de paquete App

Creamos las plantillas template, top bar, menú

Ilustración 42 Creación del template

33
Tabla 5 Codificación template.xhtml

<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:pv="http://primefaces.org/paradise">

<div class="layout-menu-wrapper #{preferencias.darkMenu ? 'layout-menu-dark' : null}">


<div class="over-entity" >

<div class="contenedor-logo" >


<p:graphicImage class="logo-entidad" name="images/garrapateros.png"
library="paradise-layout" />
<!--<h:graphicImage class="logo-entidad" value="data:image/jpg;base64,
{beanMenu.pathLogoEntidad}" />-->
<!--<div class="text-logo">{beanMenu.unaEntidad.entidadNombre}</div>-->
</div>

<div class="over-color-negro"/>
<!--<div class="over-color-azul"/>-->
</div>
<div class="nano">

<div class="nano-content sidebar-scroll-content">


<div class="layout-menu-container">
<h:form id="menuform">
<div class="mobile-search">
<i class="fa fa-fw fa-search topbar-search-icon"></i>
<input type="text" class="topbar-search" placeholder="Buscar..."/>
</div>

<pv:menu id="sm_leftmenu" model="#{beanMenu.model}" />

<!--<p:menu class="nano-content sidebar-scroll-content" toggleable="true"


id="sm_leftmenu"
model="{beanMenu.model}" style="width: 100%"/>
-->
</h:form>
</div>
</div>
</div>
</div>

</ui:composition>

34
Cada vista es controlada por un Bean, la vista se crea de acuerdo a los requerimientos del
diseño.

Tabla 6 Codificación Vista Factura

<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:pv="http://primefaces.org/paradise">

<div class="layout-menu-wrapper #{preferencias.darkMenu ? 'layout-menu-dark' : null}">


<div class="over-entity" >

<div class="contenedor-logo" >


<p:graphicImage class="logo-entidad" name="images/garrapateros.png"
library="paradise-layout" />
<!--<h:graphicImage class="logo-entidad" value="data:image/jpg;base64,
{beanMenu.pathLogoEntidad}" />-->
<!--<div class="text-logo">{beanMenu.unaEntidad.entidadNombre}</div>-->
</div>

<div class="over-color-negro"/>
<!--<div class="over-color-azul"/>-->
</div>
<div class="nano">

<div class="nano-content sidebar-scroll-content">


<div class="layout-menu-container">
<h:form id="menuform">
<div class="mobile-search">
<i class="fa fa-fw fa-search topbar-search-icon"></i>
<input type="text" class="topbar-search" placeholder="Buscar..."/>
</div>

<pv:menu id="sm_leftmenu" model="#{beanMenu.model}" />

<!--<p:menu class="nano-content sidebar-scroll-content" toggleable="true"


id="sm_leftmenu"
model="{beanMenu.model}" style="width: 100%"/>
-->
</h:form>
</div>
</div>
</div>
</div>

</ui:composition>

35
Codificación de agregar persona

Tabla 7 Codificación Agregar Persona

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/WEB-INF/template.xhtml"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">

<ui:define name="title">Administración de Personas</ui:define>

<ui:define name="content">

<div class="ui-g ui-fluid">


<div class="ui-g-8 titulo-app">
<span>
<i class="fa fa-star icono-tamano"></i> <h:outputText value="Agregar
Personas" />
</span>

</div>
<div class="ui-g-4" style="text-align: right !important" >
<p:clock pattern="HH:mm:ss dd-MM-yyyy" />
</div>
</div>

<div class="ui-g dashboard">

<p:growl id="pg-notificacion" showDetail="true" life="3000" />


<div class="ui-g-12 ">
36
Codificación de Asignar permisos(Opciones por perfil)

Tabla 8 Codificación de Asignar permisos

37
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/WEB-INF/template.xhtml"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">

<ui:define name="title">Administración de Perfiles</ui:define>

<ui:define name="content">

<div class="ui-g ui-fluid">


<div class="ui-g-8 titulo-app">
<span>
<i class="fa fa-star icono-tamano"></i> <h:outputText value="ASIGNAR PERFILES
A USUARIOS" />
</span>

</div>
<div class="ui-g-4" style="text-align: right !important" >
<p:clock pattern="HH:mm:ss dd-MM-yyyy" />
</div>
</div>

<div class="ui-g dashboard">

<p:growl id="pg-notificacion" showDetail="true" life="3000" escape="false"/>

<div class="ui-g-12 ui-lg-4 ui-fluid contact-form">


<h:form id="f-perfiles">
<p:panel header="Perfiles" style="min-height:100px">
<div class="ui-g">
<div class="ui-g-12">
<!—Asignamos el perfil seleccionado al Bean -->
<p:selectOneMenu id="som-perfil"
value="#{beanAsignarPerfiles.perfilSeleccionado}"
converter="perfilConverter" immediate="true"
autoWidth="false" required="true" effect="fade">
<f:selectItem noSelectionOption="true" itemLabel="Seleccionar
Perfil ..." itemValue="#{null}" />
<!—Recorremos la lista de perfiles y agregamos al selector perfiles-->
<f:selectItems value="#{beanAsignarPerfiles.listaPerfiles}" var="perfil"
itemLabel="#{perfil.perfilNombre}" itemValue="#{perfil}"/>
<p:ajax event="itemSelect"
listener="#{beanAsignarPerfiles.actualizarPermisosPerfil}" update="som-perfil :form-
asignar:PojoPickList" />
</p:selectOneMenu>
</div>
</div>
38
</p:panel>

</h:form>
</div>

<div class="ui-g-12 ui-lg-4 ui-fluid contact-form">


<h:form id="f-asignar">
<p:panel header="Asignar Perfiles" style="min-height:100px">
<div class="ui-g">
<div class="ui-g-12">
<p:commandButton
actionListener="#{beanAsignarPerfiles.preparaAsignarPerfil()}"
icon="fa fa fw fa-check-circle" update="d-asignar-perfil-usuario"
disabled="#{empty beanAsignarPerfiles.usuariosGlobal.target}"
value="Asignar Perfil" />
</div>
<div class="ui-g-12">
<p:commandButton
actionListener="#{beanAsignarPerfiles.preparaRetirarPerfil()}"
icon="fa fa-trash-o" styleClass="red-light-btn"
disabled="#{empty beanAsignarPerfiles.usuariosGlobal.target}"
value="Retirar Perfil" update="pd-eliminar-entidad" />
</div>

</div>
</p:panel>
</h:form>
</div>

<div class="ui-g-12 ui-lg-12">


<div class="border-material">
<p:panel header="Asignar Perfiles" style="min-height:100px">
<h:form id="form-asignar">
<p:pickList id="PojoPickList" value="#{beanAsignarPerfiles.usuariosGlobal}"
var="usuario" effect="bounce"
itemValue="#{usuario}" itemLabel="#{usuario.usrAccesoNombre}"
showSourceControls="true" showTargetControls="true" showCheckbox="true"
showSourceFilter="true" showTargetFilter="true"
filterMatchMode="contains" converter="usuarioConverter" responsive="true"
addLabel="Añadir" addAllLabel="Añadir Todos"
removeLabel="Remover" removeAllLabel="Remover Todos">

<f:facet name="sourceCaption">Usuarios</f:facet>
<f:facet name="targetCaption">Perfil:
#{beanAsignarPerfiles.perfilSeleccionado.perfilNombre}</f:facet>

<p:ajax event="transfer" listener="#{beanAsignarPerfiles.onTransfer}"


update=":f-asignar pg-notificacion" />
<p:ajax event="select" listener="#{beanAsignarPerfiles.onSelect}"
update="pg-notificacion"/>
<p:ajax event="unselect" listener="#{beanAsignarPerfiles.onUnselect}"
update="pg-notificacion"/>
39
<p:ajax event="reorder" listener="#{beanAsignarPerfiles.onReorder}"
update="pg-notificacion"/>

<p:column style="width:15%">
<!--<h:graphicImage
name="showcase/images/themeswitcher/themeswitcher-{usuario.idUsuarioAcceso}.png"
alt="{usuario.usrAccesoNombre}" styleClass="ui-theme"/>-->
<p:graphicImage name="images/avatar.png" library="paradise-layout"
style="width: 85%"/>
</p:column>

<p:column style="width:85%;">
<h:outputText value="#{usuario.usrAccesoNombre}" />
</p:column>
</p:pickList>
</h:form>
</p:panel>
</div>
</div>
</div>

<!--dialogs-->

<p:dialog modal="true" showEffect="fade" hideEffect="fade" widgetVar="wv-usr-


perfiles">
<h:form id="f-asignacion" style="text-align:center;">
<h:panelGrid id="panelUsrPerfil" columns="2">
<h:outputText value="De: " style="font-weight:bold" />
<ui:repeat value="#{beanAsignarPerfiles.usuariosGlobal.source}" var="usuario">
<h:outputText value="#{usuario.usrAccesoNombre}" style="margin-
right:5px" />
</ui:repeat>

<h:outputText value="A: " style="font-weight:bold" />


<ui:repeat value="#{beanAsignarPerfiles.usuariosGlobal.target}" var="usuario">
<h:outputText value="#{usuario.usrAccesoNombre}" style="margin-
right:5px" />
</ui:repeat>
</h:panelGrid>
</h:form>
</p:dialog>

<p:dialog id="d-asignar-perfil-usuario" header="Asignar Perfil" widgetVar="wv-


asignarPerfil" modal="true"
showEffect="slide" width="450" hideEffect="slide">
<h:form id="f-asignar-perfil">
<div class="ui-g-6 textAlRight">
<h2><h:outputText value="Asignar el Perfil: "/></h2>
<h3><h:outputText value="A los usuarios: "/></h3>
</div>
<div class="ui-g-6 TexAlLeft">
<h2><h:outputText
value="#{beanAsignarPerfiles.perfilSeleccionado.perfilNombre}"/></h2>
40
<h3><h:outputText value="#{beanAsignarPerfiles.builder}"
escape="false"/></h3>
</div>

<div class="ui-g-12 textAlCenter">


<p:commandButton actionListener="#{beanAsignarPerfiles.asignarPerfil()}"
icon="fa fa fw fa-check-circle" value="Asignar Perfil" update=":form-
asignar:PojoPickList :f-asignar pg-notificacion"/>
</div>
</h:form>
</p:dialog>

<p:dialog id="pd-eliminar-entidad" header="Retirar perfil de los usuarios"


widgetVar="wv-retirarPerfil" modal="true" showEffect="fade" hideEffect="fade">
<h:form id="f-dlg-retirar">
<div class="ui-g-12 textAlCenter">
<h:outputText value="Está seguro de RETIRAR EL PERFIL A LOS USUARIOS:
#{beanAsignarPerfiles.builder}" escape="false"/>
</div>
<div class="ui-g-12 textAlCenter">
<p:commandButton value="RETIRAR EL PERFIL"
actionListener="#{beanAsignarPerfiles.retirarPerfil()}"
icon="fa fa-trash-o" update=":form-asignar:PojoPickList :f-asignar pg-
notificacion" />
</div>
</h:form>
</p:dialog>

</ui:define>

</ui:composition>

41
Codificación de administrar Perfiles

Tabla 9 Codificación Administrar Perfiles

42
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/WEB-INF/template.xhtml"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">

<ui:define name="title">Administración de Perfiles</ui:define>

<ui:define name="content">

<div class="ui-g ui-fluid">


<div class="ui-g-8 titulo-app">
<span>
<i class="fa fa-star icono-tamano"></i> <h:outputText value="ASIGNAR PERFILES
A USUARIOS" />
</span>

</div>
<div class="ui-g-4" style="text-align: right !important" >
<p:clock pattern="HH:mm:ss dd-MM-yyyy" />
</div>
</div>

<div class="ui-g dashboard">

<p:growl id="pg-notificacion" showDetail="true" life="3000" escape="false"/>

<div class="ui-g-12 ui-lg-4 ui-fluid contact-form">


<h:form id="f-perfiles">
<p:panel header="Perfiles" style="min-height:100px">

43
<div class="ui-g">
<div class="ui-g-12">
<p:selectOneMenu id="som-perfil"
value="#{beanAsignarPerfiles.perfilSeleccionado}"
converter="perfilConverter" immediate="true"
autoWidth="false" required="true" effect="fade">
<f:selectItem noSelectionOption="true" itemLabel="Seleccionar
Perfil ..." itemValue="#{null}" />
<f:selectItems value="#{beanAsignarPerfiles.listaPerfiles}" var="perfil"
itemLabel="#{perfil.perfilNombre}" itemValue="#{perfil}"/>
<p:ajax event="itemSelect"
listener="#{beanAsignarPerfiles.actualizarPermisosPerfil}" update="som-perfil :form-
asignar:PojoPickList" />
</p:selectOneMenu>
</div>
</div>
</p:panel>

</h:form>
</div>

<div class="ui-g-12 ui-lg-4 ui-fluid contact-form">


<h:form id="f-asignar">
<p:panel header="Asignar Perfiles" style="min-height:100px">
<div class="ui-g">
<div class="ui-g-12">
<p:commandButton
actionListener="#{beanAsignarPerfiles.preparaAsignarPerfil()}"
icon="fa fa fw fa-check-circle" update="d-asignar-perfil-usuario"
disabled="#{empty beanAsignarPerfiles.usuariosGlobal.target}"
value="Asignar Perfil" />
</div>
<div class="ui-g-12">
<p:commandButton

44
actionListener="#{beanAsignarPerfiles.preparaRetirarPerfil()}"
icon="fa fa-trash-o" styleClass="red-light-btn"
disabled="#{empty beanAsignarPerfiles.usuariosGlobal.target}"
value="Retirar Perfil" update="pd-eliminar-entidad" />
</div>

</div>
</p:panel>
</h:form>
</div>

<div class="ui-g-12 ui-lg-12">


<div class="border-material">
<p:panel header="Asignar Perfiles" style="min-height:100px">
<h:form id="form-asignar">
<p:pickList id="PojoPickList" value="#{beanAsignarPerfiles.usuariosGlobal}"
var="usuario" effect="bounce"
itemValue="#{usuario}" itemLabel="#{usuario.usrAccesoNombre}"
showSourceControls="true" showTargetControls="true" showCheckbox="true"
showSourceFilter="true" showTargetFilter="true"
filterMatchMode="contains" converter="usuarioConverter" responsive="true"
addLabel="Añadir" addAllLabel="Añadir Todos"
removeLabel="Remover" removeAllLabel="Remover Todos">

<f:facet name="sourceCaption">Usuarios</f:facet>
<f:facet name="targetCaption">Perfil:
#{beanAsignarPerfiles.perfilSeleccionado.perfilNombre}</f:facet>

<p:ajax event="transfer" listener="#{beanAsignarPerfiles.onTransfer}"


update=":f-asignar pg-notificacion" />
<p:ajax event="select" listener="#{beanAsignarPerfiles.onSelect}"
update="pg-notificacion"/>
<p:ajax event="unselect" listener="#{beanAsignarPerfiles.onUnselect}"
update="pg-notificacion"/>
<p:ajax event="reorder" listener="#{beanAsignarPerfiles.onReorder}"

45
update="pg-notificacion"/>

<p:column style="width:15%">
<!--<h:graphicImage
name="showcase/images/themeswitcher/themeswitcher-{usuario.idUsuarioAcceso}.png"
alt="{usuario.usrAccesoNombre}" styleClass="ui-theme"/>-->
<p:graphicImage name="images/avatar.png" library="paradise-layout"
style="width: 85%"/>
</p:column>

<p:column style="width:85%;">
<h:outputText value="#{usuario.usrAccesoNombre}" />
</p:column>
</p:pickList>
</h:form>
</p:panel>
</div>
</div>
</div>

<!--dialogs-->

<p:dialog modal="true" showEffect="fade" hideEffect="fade" widgetVar="wv-usr-


perfiles">
<h:form id="f-asignacion" style="text-align:center;">
<h:panelGrid id="panelUsrPerfil" columns="2">
<h:outputText value="De: " style="font-weight:bold" />
<ui:repeat value="#{beanAsignarPerfiles.usuariosGlobal.source}" var="usuario">
<h:outputText value="#{usuario.usrAccesoNombre}" style="margin-
right:5px" />
</ui:repeat>

<h:outputText value="A: " style="font-weight:bold" />


<ui:repeat value="#{beanAsignarPerfiles.usuariosGlobal.target}" var="usuario">
<h:outputText value="#{usuario.usrAccesoNombre}" style="margin-

46
right:5px" />
</ui:repeat>
</h:panelGrid>
</h:form>
</p:dialog>

<p:dialog id="d-asignar-perfil-usuario" header="Asignar Perfil" widgetVar="wv-


asignarPerfil" modal="true"
showEffect="slide" width="450" hideEffect="slide">
<h:form id="f-asignar-perfil">
<div class="ui-g-6 textAlRight">
<h2><h:outputText value="Asignar el Perfil: "/></h2>
<h3><h:outputText value="A los usuarios: "/></h3>
</div>
<div class="ui-g-6 TexAlLeft">
<h2><h:outputText
value="#{beanAsignarPerfiles.perfilSeleccionado.perfilNombre}"/></h2>
<h3><h:outputText value="#{beanAsignarPerfiles.builder}"
escape="false"/></h3>
</div>

<div class="ui-g-12 textAlCenter">


<p:commandButton actionListener="#{beanAsignarPerfiles.asignarPerfil()}"
icon="fa fa fw fa-check-circle" value="Asignar Perfil" update=":form-
asignar:PojoPickList :f-asignar pg-notificacion"/>
</div>
</h:form>
</p:dialog>

<p:dialog id="pd-eliminar-entidad" header="Retirar perfil de los usuarios"


widgetVar="wv-retirarPerfil" modal="true" showEffect="fade" hideEffect="fade">
<h:form id="f-dlg-retirar">
<div class="ui-g-12 textAlCenter">
<h:outputText value="Está seguro de RETIRAR EL PERFIL A LOS USUARIOS:
#{beanAsignarPerfiles.builder}" escape="false"/>

47
</div>
<div class="ui-g-12 textAlCenter">
<p:commandButton value="RETIRAR EL PERFIL"
actionListener="#{beanAsignarPerfiles.retirarPerfil()}"
icon="fa fa-trash-o" update=":form-asignar:PojoPickList :f-asignar pg-
notificacion" />
</div>
</h:form>
</p:dialog>

</ui:define>

</ui:composition>

48
Codificación de Agregar Factura

Tabla 10 Codificación Agregar Factura

49
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/WEB-INF/template.xhtml"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">

<ui:define name="title">Administración de Facturas</ui:define>

<ui:define name="content">

<div class="ui-g ui-fluid">


<div class="ui-g-8 titulo-app">
<span>
<i class="fa fa-star icono-tamano"></i> <h:outputText value="Emision de
factura" />
</span>

</div>
<div class="ui-g-4" style="text-align: right !important" >
<p:clock pattern="HH:mm:ss dd-MM-yyyy" />
</div>
</div>

<div class="ui-g dashboard">

<p:growl id="pg-notificacion" showDetail="true" life="3000" />

<div class="ui-g-12 ">


<p:fieldset >
<!— Datos cabecera de emisor desplegable con fieldset-->

50
<p:fieldset legend="Datos Emisor" toggleable="true" toggleSpeed="500">
<h:form id="formEmisor">
<h:panelGroup id="display" style="border:0px none;background:none">
<p:panelGrid columns="4" rendered="#{beanPedido.facturaSeleccionada !
= null}" style="border:0px none;background:none" >

<p:outputLabel for="rucEmi" ><b>RUC: </b></p:outputLabel>


<h:outputText id="rucEmi"
value="#{beanPedido.infoEmpresa.empRuc}"/>

<p:outputLabel for="razEmi" ><b>Razón Social: </b></p:outputLabel>


<h:outputText id="razEmi"
value="#{beanPedido.infoEmpresa.empRazonSocial}"/>

<p:outputLabel for="dirEmi" ><b>Dirección: </b></p:outputLabel>


<h:outputText id="dirEmi"
value="#{beanPedido.infoEmpresa.empDireccion}"/>

<p:outputLabel for="telEmi" ><b>Teléfono: </b></p:outputLabel>


<h:outputText id="telEmi"
value="#{beanPedido.infoEmpresa.empTelefono}"/>

<p:outputLabel for="corEmi" ><b>Correo: </b></p:outputLabel>


<h:outputText id="corEmi"
value="#{beanPedido.infoEmpresa.empCorreo}"/>

<p:outputLabel for="nuaEmi" ><b>Número de Autorización SRI:


</b></p:outputLabel>
<h:outputText id="nuaEmi"
value="#{beanPedido.infoEmpresa.numAutorizacionSri}"/>

<p:outputLabel for="rcsEmi" ><b>Resolución Contribuyente número:


</b></p:outputLabel>
<h:outputText id="rcsEmi"
value="#{beanPedido.infoEmpresa.numResoContribuyenteSri}"/>

51
<p:outputLabel for="olcEmi" ><b>Obligado a llevar contabilidad:
</b></p:outputLabel>
<h:outputText id="olcEmi" class="ancho-columna
#{estiloUtiles.toStyleLicencia(beanPedido.infoEmpresa.obligadoLlevarContabilidad)}"

value="#{estiloUtiles.toValueLicencia(beanPedido.infoEmpresa.obligadoLlevarContabilidad)}
"/>

</p:panelGrid>
</h:panelGroup>
</h:form>
</p:fieldset>

<!— Datos cliente desplegable con fieldset-->

<p:fieldset legend="Datos Cliente">


<h:form id="formCliente">

<h:panelGrid columns="1" cellpadding="5" style="display: flex;justify-


content: center;">
<!—Selección de cliente traido de Clientes Bean-->
<p:selectOneRadio id="rbDatosCliente" value="#{beanPedido.tipoCliente}"
unselectable="true">
<f:selectItem itemLabel="Consumidor Final"
itemValue="consumidor_final" />
<f:selectItem itemLabel="Datos" itemValue="cliente" />
<p:ajax listener="#{beanPedido.actualizarTipoCliente}"
event="valueChange" update="formCliente"/>
</p:selectOneRadio>
</h:panelGrid>

<h:panelGroup id="display"
rendered="#{beanPedido.permiteIngresarDatosClientes}">
<h:panelGrid columns="3" cellpadding="5" style="display: flex;justify-

52
content: center;">
<!--
<p:selectOneRadio id="rbCliente"
value="{beanPedido.estadoTipoCliente}" unselectable="true">
<f:selectItem itemLabel="Cliente Nuevo" itemValue="nuevo" />
<f:selectItem itemLabel="Cliente Existente" itemValue="existente" />
<p:ajax listener="{beanPedido.actualizarEstadoTipoCliente}"
event="valueChange" update="formCliente"/>
</p:selectOneRadio>
-->

<p:outputLabel value="Persona: " for="objPerCmb" />


<p:selectOneMenu id="objPerCmb"
value="#{beanPedido.usuarioClienteSeleccionado}" title="Persona"
effect="fade" panelStyle="width:375px" style="min-width:
375px;"
autoWidth="false" converter="usuarioConverter"
required="true" requiredMessage="Campo Obligatorio"
disabled="#{beanPedido.permiteCamposDatosClientes}">
<f:selectItem noSelectionOption="true" itemLabel="Selecciona..."
itemValue="#{null}"/>
<f:selectItems value="#{beanPedido.listaUsuariosClientes}"
var="usuario"
itemLabel="#{usuario.persona.perNombres}
#{usuario.persona.perApellidos} / #{usuario.persona.perIdentificacion}"
itemValue="#{usuario}" />
<p:ajax event="change" listener="#{beanPedido.actualizarCliente()}"
update="formCliente:display"/>
</p:selectOneMenu>
</h:panelGrid>
<h:panelGrid columns="3" cellpadding="10">
<p:outputLabel value="Nombres:" for="usrNombre" />
<p:inputText id="usrNombre" value="#{beanPedido.nombres}"
disabled="#{!beanPedido.permiteCamposDatosClientes}"/>
<p:message for="usrNombre"/>

53
<p:outputLabel value="Teléfono:" for="telUsr"/>
<p:inputText id="telUsr" value="#{beanPedido.telefono}"
disabled="#{!beanPedido.permiteCamposDatosClientes}"/>
<p:message for="telUsr"/>

<p:outputLabel value="Direccion:" for="ciuUsr"/>


<p:inputText id="ciuUsr" value="#{beanPedido.ciudad}"
disabled="#{!beanPedido.permiteCamposDatosClientes}"/>
<p:message for="ciuUsr"/>

<p:outputLabel value="RUC / CI:" for="ideUsr" />


<p:inputText id="ideUsr" value="#{beanPedido.identificacion}"
disabled="#{!beanPedido.permiteCamposDatosClientes}"/>
<p:messages for="ideUsr"/>

<p:outputLabel value="Fecha Emisión de Factura:"


for="usrFechaEmi" />
<p:inputText id="usrFechaEmi"
value="#{estiloUtiles.toValueFechaFormato(beanPedido.fechaEmisionFactura,
beanPedido.formatoFecha)}"
disabled="true"/>
<p:message for="usrFechaEmi"/>
</h:panelGrid>
</h:panelGroup>
</h:form>
</p:fieldset>
<!—Creacion de detalle Factura -->

<p:fieldset legend="Detalle Factura">

<h:form id="formDetalleFactura">
<div class="ui-g-4 ui-fluid contact-form">
<p:panel header="Acciones" style="min-height:100px">
<div class="ui-g">

54
<div class="ui-g-12">
<!—Creacion de boton agregar pedido -->

<p:commandButton actionListener="#{beanPedido.agregarPedido}"
icon="fa fa fw fa-check-circle" update="pg-notificacion
formDetalleFactura:display :formDetalleAgregado:dt-entidad"
value="Agregar Pedido" validateClient="true"/>
</div>

</div>
</p:panel>
</div>

<div class="ui-g-8">
<h:panelGroup id="display">
<p:tabView>
<p:tab id="tabVue" title="Vuelo">
<h:panelGrid columns="3" cellpadding="10">

<p:outputLabel value="Vuelo:" for="objVue" />


<p:selectOneMenu id="objVue"
value="#{beanPedido.vueloSeleccionado}" title="Descuento"
effect="fade" panelStyle="width:175px" style="min-
width: 100%;"
autoWidth="false" converter="vueloConverter"
required="true" requiredMessage="Campo
Obligatorio">
<f:selectItem noSelectionOption="true"
itemLabel="Selecciona..." itemValue="#{null}"/>
<f:selectItems value="#{beanPedido.listaVuelos}"
var="vuelo"
itemLabel="#{vuelo.idVuelo}"
itemValue="#{vuelo}" />
<p:ajax event="change"
listener="#{beanPedido.actualizarVuelo()}" update="aer piloto time"/>

55
</p:selectOneMenu>
<p:message for="objVue"/>

<p:outputLabel value="Aeronave:" for="aer" />


<p:inputText id="aer"
value="#{beanPedido.vueloSeleccionado.aeronave.aerNombre}" title="Nombre"
required="true" requiredMessage="Nombre de usuario Obligatorio" />
<p:message for="aer"/>

<p:outputLabel value="Piloto:" for="piloto" />


<p:inputText id="piloto"
value="#{beanPedido.vueloSeleccionado.usuarioAcceso.persona.perNombres}"
title="Nombre" required="true" requiredMessage="Nombre de usuario Obligatorio" />
<p:message for="piloto"/>

<p:outputLabel for="time" value="Fecha del Salto:" />


<p:datePicker id="time"
value="#{beanPedido.vueloSeleccionado.vueHoraLlegada}" showTime="true"
title="Fecha" required="true" requiredMessage="Fecha
Obligatorio"/>
<p:message for="time"/>

<p:outputLabel value="Salto:" for="objSalto" />


<p:selectOneMenu id="objSalto"
value="#{beanPedido.saltoSeleccionado}" title="Persona"
effect="fade" panelStyle="width:175px" style="min-
width: 100%;"
autoWidth="false" converter="saltoConverter"
required="true" requiredMessage="Campo
Obligatorio">
<f:selectItem noSelectionOption="true"
itemLabel="Selecciona..." itemValue="#{null}"/>
<f:selectItems value="#{beanPedido.listaSaltos}"
var="salto"
itemLabel="#{salto.tipoSalto}"

56
itemValue="#{salto}" />
<p:ajax event="change"
listener="#{beanPedido.actualizarSalto()}" update="costo" />
</p:selectOneMenu>
<p:message for="objSalto"/>

<p:outputLabel for="costo" value="Costo:" />


<p:inputNumber id="costo"
value="#{beanPedido.saltoSeleccionado.costoSalto}" title="Fecha" required="true"
requiredMessage="Fecha Obligatorio"/>
<p:message for="costo"/>

</h:panelGrid>
</p:tab>

<p:tab id="tabDat" title="Cliente">


<h:panelGrid columns="3" cellpadding="10">
<p:outputLabel value="Persona: " for="objPerCmb" />
<p:selectOneMenu id="objPerCmb"
value="#{beanPedido.usuarioClienteSalto}" title="Persona"
effect="fade" panelStyle="width:375px" style="min-
width: 375px;"
autoWidth="false" converter="usuarioConverter"
required="true" requiredMessage="Campo Obligatorio"
disabled="#{beanPedido.permiteCamposDatosClientes}">
<f:selectItem noSelectionOption="true"
itemLabel="Selecciona..." itemValue="#{null}"/>
<f:selectItems value="#{beanPedido.listaUsuariosClientes}"
var="usuario"
itemLabel="#{usuario.persona.perNombres}
#{usuario.persona.perApellidos} / #{usuario.persona.perIdentificacion}"
itemValue="#{usuario}" />
<p:ajax event="change"
listener="#{beanPedido.actualizarClienteSalto()}" update="usrNombre ideUsr"/>

57
</p:selectOneMenu>
<p:message for="objPerCmb"/>

<p:outputLabel value="Nombres:" for="usrNombre" />


<p:inputText id="usrNombre"
value="#{beanPedido.usuarioClienteSalto.persona.perNombres}
#{beanPedido.usuarioClienteSalto.persona.perApellidos}"
disabled="true"/>
<p:message for="usrNombre"/>

<p:outputLabel value="RUC / CI:" for="ideUsr" />


<p:inputText id="ideUsr"
value="#{beanPedido.usuarioClienteSalto.persona.perIdentificacion}"
disabled="true"/>
<p:messages for="ideUsr"/>
</h:panelGrid>
</p:tab>

<p:tab id="tabDir" title="Paracaidista">


<h:panelGrid columns="3" cellpadding="10">

<p:outputLabel value="Nombre Paracaidista:" for="objPara" />


<p:selectOneMenu id="objPara"
value="#{beanPedido.paracaidistaSeleccionado}" title="Persona"
effect="fade" panelStyle="width:175px" style="min-
width: 100%;"
autoWidth="false" converter="paracaidistaConverter"
required="true" requiredMessage="Campo
Obligatorio">
<f:selectItem noSelectionOption="true"
itemLabel="Selecciona..." itemValue="#{null}"/>
<f:selectItems value="#{beanPedido.listaParacaidistas}"
var="paracaidista"

itemLabel="#{paracaidista.usuarioAcceso.persona.perNombres}

58
#{paracaidista.usuarioAcceso.persona.perApellidos}"
itemValue="#{paracaidista}" />
<p:ajax event="change"
listener="#{beanPedido.actualizarParacaidista()}" update="tipPar licPar efPar"/>
</p:selectOneMenu>
<p:message for="objPara"/>

<p:outputLabel value="Tipo de Paracaidista:" for="tipPar" />


<p:inputText id="tipPar"
value="#{beanPedido.paracaidistaSeleccionado.tipoParacaidista}" title="Nombre"
required="true" requiredMessage="Nombre de usuario Obligatorio" />
<p:message for="tipPar"/>

<p:outputLabel value="Escuela de Formación:" for="efPar" />


<p:inputText id="efPar"
value="#{beanPedido.paracaidistaSeleccionado.escuelaFormacion}" title="Nombre"
required="true" requiredMessage="Nombre de usuario Obligatorio" />
<p:message for="efPar"/>

<p:outputLabel value="Licencia:" for="licPar" />


<p:inputSwitch id="licPar"
value="#{beanPedido.paracaidistaSeleccionado.licencia}" required="true"
requiredMessage="Contabilidad Obligatorio"
onLabel="SI" offLabel="NO"/>
<p:message for="licPar"/>

</h:panelGrid>
</p:tab>

<p:tab id="tabSeA" title="Servicio Adicional">


<h:panelGrid columns="3" cellpadding="10">

<p:outputLabel value="Servicio" for="objSeA" />


<p:selectOneMenu id="objSeA"
value="#{beanPedido.servAdicionalSeleccionado}" title="Servicio"

59
effect="fade" panelStyle="width:175px" style="min-
width: 100%;"
autoWidth="false"
converter="servicioAdicionalConverter"
required="true" requiredMessage="Campo
Obligatorio">
<f:selectItem noSelectionOption="true"
itemLabel="Selecciona..." itemValue="#{null}"/>
<f:selectItems value="#{beanPedido.listaServiciosAdicionales}"
var="servicio"
itemLabel="#{servicio.serNombre}"
itemValue="#{servicio}" />
<p:ajax event="change"
listener="#{beanPedido.actualizarServicio()}" update="descriSer cosSer resSer"/>
</p:selectOneMenu>
<p:message for="objSeA"/>

<p:outputLabel value="Descripción Servicio:" for="descriSer" />


<p:inputText id="descriSer"
value="#{beanPedido.servAdicionalSeleccionado.serDescripcion}" title="Nombre"
required="true" requiredMessage="Nombre de usuario Obligatorio"
disabled="true"/>
<p:message for="descriSer"/>

<p:outputLabel value="Costo:" for="cosSer" />


<p:inputText id="cosSer"
value="#{beanPedido.servAdicionalSeleccionado.serCosto}" title="Nombre" required="true"
requiredMessage="Nombre de usuario Obligatorio"
disabled="true"/>
<p:message for="cosSer"/>

<p:outputLabel value="Responsable" for="resSer" />


<p:inputText id="resSer"
value="#{beanPedido.servAdicionalSeleccionado.usuarioAcceso.persona.perNombres}
#{beanPedido.servAdicionalSeleccionado.usuarioAcceso.persona.perApellidos}"

60
title="Nombre" required="true"
requiredMessage="Nombre de usuario Obligatorio"
disabled="true"/>
<p:message for="resSer"/>

</h:panelGrid>
</p:tab>

<p:tab id="tabInf" title="Descuentos">


<h:panelGrid columns="3" cellpadding="10">

<p:outputLabel value="Descuento:" for="objDes" />


<p:selectOneMenu id="objDes"
value="#{beanPedido.descuentoSeleccionado}" title="Descuento"
effect="fade" panelStyle="width:175px" style="min-
width: 100%;"
autoWidth="false" converter="descuentoConverter"
required="true" requiredMessage="Campo
Obligatorio">
<f:selectItem noSelectionOption="true"
itemLabel="Selecciona..." itemValue="#{null}"/>
<f:selectItems value="#{beanPedido.listaDescuentos}"
var="descuento"
itemLabel="#{descuento.desNombre}"
itemValue="#{descuento}" />
<p:ajax event="change"
listener="#{beanPedido.actualizarDescuento()}" update="descriDes valoDes"/>
</p:selectOneMenu>
<p:message for="objDes"/>

<p:outputLabel value="Descripción Descuento:"


for="descriDes" />
<p:inputText id="descriDes"
value="#{beanPedido.descuentoSeleccionado.desDescripcion}" title="Nombre"
required="true" requiredMessage="Nombre de usuario Obligatorio" />

61
<p:message for="descriDes"/>

<p:outputLabel value="Valor Descuento:" for="valoDes" />


<p:inputText id="valoDes"
value="#{beanPedido.descuentoSeleccionado.desValor}" title="Nombre" required="true"
requiredMessage="Nombre de usuario Obligatorio" />
<p:message for="valoDes"/>

</h:panelGrid>
</p:tab>

</p:tabView>
</h:panelGroup>
</div>
</h:form>

<div class="ui-g-12 ui-lg-12">


<div class="border-material">
<p:panel header="Saltos" style="min-height:100px">
<h:form id="formDetalleAgregado">
<p:dataTable var="pedido" id="dt-entidad" reflow="true"
value="#{beanPedido.listaNuevosPedidos}" scrollRows="20"
scrollable="true"
selectionMode="single"
selection="#{beanPedido.pedidoSeleccionado}" rowKey="#{pedido.fechaPedido}"
liveScroll="true" scrollHeight="375" emptyMessage="Ingrese
un nuevo registro">

<p:ajax event="rowSelect" listener="#{beanPedido.onRowSelect}"


update="editButton eliminarButton" />
<p:ajax event="rowUnselect"
listener="#{beanPedido.onRowUnselect}" update="editButton eliminarButton" />

<p:column headerText="Tipo de Salto"

62
sortBy="#{pedido.salto.tipoSalto}">
<h:outputText value="#{pedido.salto.tipoSalto}" />
</p:column>

<p:column headerText="Costo de Salto"


sortBy="#{pedido.salto.costoSalto}">
<h:outputText value="#{pedido.salto.costoSalto}" />
</p:column>

<p:column headerText="Servicio Adicional"


sortBy="#{pedido.servicioAdicional.serNombre}">
<h:outputText value="#{pedido.servicioAdicional.serNombre}" />
</p:column>

<p:column headerText="Fecha a Realizarse"


sortBy="#{pedido.vuelo.vueHoraSalida}">
<h:outputText
value="#{estiloUtiles.toValueFechaFormato(pedido.vuelo.vueHoraSalida,
beanPedido.formatoFecha)}" />
</p:column>

<p:column headerText="Hora a Realizarse"


sortBy="#{pedido.vuelo.vueHoraSalida}">
<h:outputText
value="#{estiloUtiles.toValueHoraFormato(pedido.vuelo.vueHoraSalida,
beanPedido.formatoHora)}" />
</p:column>

<p:column headerText="Costo Total"


sortBy="#{pedido.costoTotalPedido}">
<h:outputText value="#{pedido.costoTotalPedido}" />
</p:column>

<f:facet name="header" class="iconos-derecha">

63
<p:commandButton id="editButton" value="Editar"
class="espacio-btn" rendered="false"
icon="ui-icon-pencil"
actionListener="#{beanPedido.preparaActualizar}"
disabled="#{empty beanPedido.pedidoSeleccionado}"
update=":EditForm"/>

<p:commandButton id="eliminarButton" styleClass="red-light-btn


espacio-btn"
value="Eliminar" icon="fa fa-trash-o"
actionListener="#{beanPedido.preparaEliminar}"
disabled="#{empty beanPedido.pedidoSeleccionado}"
update=":EliminarForm"/>

</f:facet>
</p:dataTable>
</h:form>
</p:panel>
</div>
</div>
</p:fieldset>

<p:fieldset legend="Pago">
<h:form id="formPago">
<h:panelGrid columns="3" cellpadding="5" style="display: flex;justify-
content: center;" >

<p:outputLabel value="Forma de Pago:" for="objFoP" />


<p:selectOneMenu id="objFoP"
value="#{beanPedido.formaPagoSeleccionada}" title="Forma de Pago"
effect="fade" style="min-width: 100%;"
autoWidth="false" converter="formaPagoConverter"
required="true" requiredMessage="Campo Obligatorio">
<f:selectItem noSelectionOption="true" itemLabel="Selecciona..."

64
itemValue="#{null}"/>
<f:selectItems value="#{beanPedido.listaFormasPago}"
var="pago"
itemLabel="#{pago.pagoNombre}"
itemValue="#{pago}" />
<p:ajax event="change"
listener="#{beanPedido.actualizarFormaPago()}"/>
</p:selectOneMenu>
<p:message for="objFoP"/>

<p:outputLabel value="IVA %:" for="ivaFac" />


<p:inputText id="ivaFac"
value="#{beanPedido.facturaSeleccionada.facPorcentajeIva}" required="true"
requiredMessage="Campo Obligatorio">
<p:ajax event="keyup" update="subFac tDesFac totFac"
listener="#{beanPedido.actualizarImpuestoIVA}" />
</p:inputText>
<p:message for="ivaFac"/>

<p:outputLabel value="Subtotal:" for="subFac" />


<p:inputText id="subFac"
value="#{beanPedido.facturaSeleccionada.facSubtotal}" disabled="true"/>
<p:message for="subFac"/>

<p:outputLabel value="Total Descuento (-) :" for="tDesFac" />


<p:inputText id="tDesFac"
value="#{beanPedido.facturaSeleccionada.facTotalDescuento}" disabled="true"/>
<p:message for="tDesFac"/>

<p:outputLabel value="Total a Pagar:" for="totFac" />


<p:inputText id="totFac"
value="#{beanPedido.facturaSeleccionada.facValorTotal}" disabled="true"/>
<p:message for="totFac"/>

</h:panelGrid>

65
</h:form>
</p:fieldset>

<p:fieldset legend="Confirmación">
<h:form id="formOpciones">
<div class="ui-g">
<div class="ui-g-12 ui-md-6 ui-lg-3"></div>
<div class="ui-g-12 ui-md-6 ui-lg-3" style="display: flex;justify-content:
center;">
<h:panelGrid columns="1" cellpadding="5">
<p:commandButton actionListener="#{beanPedido.agregarFactura}"
icon="fa fa fw fa-check-circle" update="pg-notificacion
formDetalleFactura:display "
value="Generar Factura" validateClient="true"/>
</h:panelGrid>
</div>
<div class="ui-g-12 ui-md-6 ui-lg-3" style="display: flex;justify-content:
center;">
<h:panelGrid columns="1" cellpadding="5">
<p:commandButton actionListener="#{beanPedido.agregarPedido}"
styleClass="red-light-btn espacio-btn"
icon="fa fa-times-circle" update="pg-notificacion
formDetalleFactura:display "
value="Cancelar" validateClient="true"/>
</h:panelGrid>
</div>
<div class="ui-g-12 ui-md-6 ui-lg-3"></div>
</div>
</h:form>
</p:fieldset>
</p:fieldset>
</div>
</div>

<!--dialogs-->

66
<p:dialog header="Foto" widgetVar="wv-mostrar-foto" modal="true"
showEffect="fade" hideEffect="fade" resizable="false">
<h:form id="FotoForm" style="text-align:center;">
<p:panelGrid columns="2" rendered="#{not empty
beanPedido.pedidoSeleccionado}" columnClasses="label,value">
<f:facet name="header">
<!--<p:graphicImage
name="demo/images/car/{beanPedido.pedidoSeleccionado.brand}-big.gif"/> -->
<p:graphicImage name="images/login/secure.png" library="paradise-
layout" />
</f:facet>

<h:outputText value="Id:" />


<h:outputText value="#{beanPedido.pedidoSeleccionado.idPedido}" />

<h:outputText value="Costo total" />


<h:outputText value="#{beanPedido.pedidoSeleccionado.costoTotalPedido}" />
</p:panelGrid>
</h:form>
</p:dialog>

<p:dialog header="Actualizar Pedido" widgetVar="wv-actualizar" modal="true" >


<h:form id="EditForm">
<h:panelGroup id="display" style="border:0px none;background:none">
<p:panelGrid columns="1" rendered="#{beanPedido.pedidoSeleccionado !=
null}" style="border:0px none;background:none" >
<p:tabView>
<p:tab id="tabDat" title="Salto">
<h:panelGrid columns="3" cellpadding="10">

<p:outputLabel value="Salto:" for="objSalto" />


<p:selectOneMenu id="objSalto"
value="#{beanPedido.pedidoSeleccionado.salto}" title="Salto"
effect="fade" panelStyle="width:175px" style="min-width:

67
100%;"
autoWidth="false" converter="saltoConverter"
required="true" requiredMessage="Campo Obligatorio">
<f:selectItem noSelectionOption="true" itemLabel="Selecciona..."
itemValue="#{null}"/>
<f:selectItems value="#{beanPedido.listaSaltos}"
var="salto"
itemLabel="#{salto.tipoSalto}"
itemValue="#{salto}" />
<p:ajax event="change" listener="#{beanPedido.actualizarSalto()}" />
</p:selectOneMenu>
<p:message for="objSalto"/>

<p:outputLabel for="costo" value="Costo:" />


<p:inputNumber id="costo"
value="#{beanPedido.pedidoSeleccionado.costoSalto}" title="Fecha" required="true"
requiredMessage="Fecha Obligatorio"/>
<p:message for="costo"/>

<p:outputLabel for="time" value="Fecha a Realizarse:" />


<p:datePicker id="time"
value="#{beanPedido.pedidoSeleccionado.fecaARealizarseSalto}" showTime="true"
title="Fecha" required="true" requiredMessage="Fecha
Obligatorio"/>
<p:message for="time"/>

</h:panelGrid>
</p:tab>

<p:tab id="tabVue" title="Vuelo">


<h:panelGrid columns="3" cellpadding="10">

<p:outputLabel value="Vuelo:" for="objVue" />

68
<p:selectOneMenu id="objVue"
value="#{beanPedido.pedidoSeleccionado.vuelo}" title="Descuento"
effect="fade" panelStyle="width:175px" style="min-width:
100%;"
autoWidth="false" converter="vueloConverter"
required="true" requiredMessage="Campo Obligatorio">
<f:selectItem noSelectionOption="true" itemLabel="Selecciona..."
itemValue="#{null}"/>
<f:selectItems value="#{beanPedido.listaVuelos}"
var="vuelo"
itemLabel="#{vuelo.idVuelo}"
itemValue="#{vuelo}" />
<p:ajax event="change" listener="#{beanPedido.actualizarVuelo()}"
update="aer piloto"/>
</p:selectOneMenu>
<p:message for="objVue"/>

<p:outputLabel value="Aeronave:" for="aer" />


<p:inputText id="aer"
value="#{beanPedido.pedidoSeleccionado.vuelo.aeronave.aerNombre}" title="Nombre"
required="true" requiredMessage="Nombre de usuario Obligatorio" />
<p:message for="aer"/>

<p:outputLabel value="Piloto:" for="piloto" />


<p:inputText id="piloto"
value="#{beanPedido.pedidoSeleccionado.vuelo.usuarioAcceso.persona.perNombres}"
title="Nombre" required="true" requiredMessage="Nombre de usuario Obligatorio" />
<p:message for="piloto"/>

</h:panelGrid>
</p:tab>

<p:tab id="tabDir" title="Paracaidista">


<h:panelGrid columns="3" cellpadding="10">

69
<p:outputLabel value="Nombre Paracaidista:" for="objPara" />
<p:selectOneMenu id="objPara"
value="#{beanPedido.pedidoSeleccionado.paracaidista}" title="Persona"
effect="fade" panelStyle="width:175px" style="min-width:
100%;"
autoWidth="false" converter="paracaidistaConverter"
required="true" requiredMessage="Campo Obligatorio">
<f:selectItem noSelectionOption="true" itemLabel="Selecciona..."
itemValue="#{null}"/>
<f:selectItems value="#{beanPedido.listaParacaidistas}"
var="paracaidista"

itemLabel="#{paracaidista.usuarioAcceso.persona.perNombres}
#{paracaidista.usuarioAcceso.persona.perApellidos}"
itemValue="#{paracaidista}" />
<p:ajax event="change"
listener="#{beanPedido.actualizarParacaidista()}" update="tipPar licPar efPar"/>
</p:selectOneMenu>
<p:message for="objPara"/>

<p:outputLabel value="Tipo de Paracaidista:" for="tipPar" />


<p:inputText id="tipPar"
value="#{beanPedido.pedidoSeleccionado.paracaidista.tipoParacaidista}" title="Nombre"
required="true" requiredMessage="Nombre de usuario Obligatorio" />
<p:message for="tipPar"/>

<p:outputLabel value="Escuela de Formación:" for="efPar" />


<p:inputText id="efPar"
value="#{beanPedido.pedidoSeleccionado.paracaidista.escuelaFormacion}" title="Nombre"
required="true" requiredMessage="Nombre de usuario Obligatorio" />
<p:message for="efPar"/>

<p:outputLabel value="Licencia:" for="licPar" />


<p:inputSwitch id="licPar"
value="#{beanPedido.pedidoSeleccionado.paracaidista.licencia}" required="true"

70
requiredMessage="Contabilidad Obligatorio"
onLabel="SI" offLabel="NO"/>
<p:message for="licPar"/>

</h:panelGrid>
</p:tab>

<p:tab id="tabInf" title="Descuentos">


<h:panelGrid columns="3" cellpadding="10">

<p:outputLabel value="Descuento:" for="objDes" />


<p:selectOneMenu id="objDes"
value="#{beanPedido.pedidoSeleccionado.descuento}" title="Descuento"
effect="fade" panelStyle="width:175px" style="min-width:
100%;"
autoWidth="false" converter="descuentoConverter"
required="true" requiredMessage="Campo Obligatorio">
<f:selectItem noSelectionOption="true" itemLabel="Selecciona..."
itemValue="#{null}"/>
<f:selectItems value="#{beanPedido.listaDescuentos}"
var="descuento"
itemLabel="#{descuento.desNombre}"
itemValue="#{descuento}" />
<p:ajax event="change"
listener="#{beanPedido.actualizarDescuento()}" update="descriDes valoDes"/>
</p:selectOneMenu>
<p:message for="objDes"/>

<p:outputLabel value="Descripción Descuento:" for="descriDes" />


<p:inputText id="descriDes"
value="#{beanPedido.pedidoSeleccionado.descuento.desDescripcion}" title="Nombre"
required="true" requiredMessage="Nombre de usuario Obligatorio" />
<p:message for="descriDes"/>

<p:outputLabel value="Valor Descuento:" for="valoDes" />

71
<p:inputText id="valoDes"
value="#{beanPedido.pedidoSeleccionado.descuento.desValor}" title="Nombre"
required="true" requiredMessage="Nombre de usuario Obligatorio" />
<p:message for="valoDes"/>

</h:panelGrid>
</p:tab>

<p:tab id="tabSeA" title="Servicio Adicional">


<h:panelGrid columns="3" cellpadding="10">

<p:outputLabel value="Servicio" for="objSeA" />


<p:selectOneMenu id="objSeA"
value="#{beanPedido.pedidoSeleccionado.servicioAdicional}" title="Servicio"
effect="fade" panelStyle="width:175px" style="min-width:
100%;"
autoWidth="false" converter="servicioAdicionalConverter"
required="true" requiredMessage="Campo Obligatorio">
<f:selectItem noSelectionOption="true" itemLabel="Selecciona..."
itemValue="#{null}"/>
<f:selectItems value="#{beanPedido.listaServiciosAdicionales}"
var="servicio"
itemLabel="#{servicio.serNombre}"
itemValue="#{servicio}" />
<p:ajax event="change" listener="#{beanPedido.actualizarServicio()}"
update="descriSer cosSer resSer"/>
</p:selectOneMenu>
<p:message for="objSeA"/>

<p:outputLabel value="Descripción Servicio:" for="descriSer" />


<p:inputText id="descriSer"
value="#{beanPedido.pedidoSeleccionado.servicioAdicional.serDescripcion}"
title="Nombre" required="true" requiredMessage="Nombre de usuario Obligatorio"
disabled="true"/>
<p:message for="descriSer"/>

72
<p:outputLabel value="Costo:" for="cosSer" />
<p:inputText id="cosSer"
value="#{beanPedido.pedidoSeleccionado.servicioAdicional.serCosto}" title="Nombre"
required="true" requiredMessage="Nombre de usuario Obligatorio"
disabled="true"/>
<p:message for="cosSer"/>

<p:outputLabel value="Responsable" for="resSer" />


<p:inputText id="resSer"
value="#{beanPedido.pedidoSeleccionado.servicioAdicional.usuarioAcceso.persona.perNom
bres}
#{beanPedido.pedidoSeleccionado.servicioAdicional.usuarioAcceso.persona.perApellidos}"
title="Nombre" required="true" requiredMessage="Nombre de
usuario Obligatorio"
disabled="true"/>
<p:message for="resSer"/>

</h:panelGrid>
</p:tab>
</p:tabView>
</p:panelGrid>

</h:panelGroup>
<div class="ui-g-12 ui-fluid contact-form">
<div class="ui-g">
<div class="ui-g-12">
<p:commandButton actionListener="#{beanPedido.editarPedido}"
rendered="#{beanPedido.pedidoSeleccionado != null}"
value="Actualizar" style="min-width:300px" update=" :pg-
notificacion" />
</div>
</div>
</div>

73
</h:form>

</p:dialog>

<p:dialog id="d-eliminar" header="Eliminar Pedido" widgetVar="wv-eliminar"


modal="true"
showEffect="slide" width="450" hideEffect="slide">
<h:form id="EliminarForm">
<div class="ui-g-12 textAlCenter">
<h:outputText value="Está seguro de eliminar el Pedido" />
</div>
<div class="ui-g-12 textAlCenter">
<p:commandButton actionListener="#{beanPedido.eliminarPedido}"
value="Eliminar ahora!" update=" :pg-notificacion :formDetalleAgregado:dt-entidad" />
</div>
</h:form>
</p:dialog>

</ui:define>

</ui:composition>

74
9. Ejecución del Proyecto
9.1. Módulo de Seguridad

Ilustración 43Vista Gestionar Opciones

Ilustración 44 Vista Gestionar Usuarios

Ilustración 45Vista Administración de Perfiles

75
Ilustración 46 Vista agregar Usuarios

Ilustración 47Vista Asignar Permisos a Perfil

76
Ilustración 48 Vista Asignar Perfiles a Usuarios

Ilustración 49 Vista Visor de Permisos

Ilustración 50 Vista Usuarios por Perfil

9.2. Módulo de Personal

Ilustración 51 Vista Administración de Personas

77
Ilustración 52 Vista Administración de paracaidistas

Ilustración 53 Vista Administración de la Formación de paracaidistas

Ilustración 54 Vista Administración de Cursos

78
Ilustración 55 Vista Agregar Personas

Ilustración 56 Vista Agregar Paracaidistas

9.3. Módulo de Saltos

Ilustración 57Vista Administración de Saltos

79
Ilustración 58 Vista Administración de Servicios Adicionales

Ilustración 59 Vista administración de Vuelos

Ilustración 60 Vista Administración de aeronaves

9.4. Módulo de Finanzas

80
Ilustración 61 Vista administración de la Empresa

Ilustración 62 Vista Administración de Forma de Pago

Ilustración 63 VIsta Adminsitración de Descuentos

81
Ilustración 64 Vista Agregar Facturas

Ilustración 65 Vista Ver Facturas

Ilustración 66 Vista Administración de Pedidos

82
8. Conclusiones y Recomendaciones
2.1 9.1 Conclusiones
 El presente proyecto permite generar un aplicativo con un diseño seguro y muy
intuitivo para el cliente, que le permite entender cuales son los objetivos
planteados, alcance y metodología que nuestro equipo tiene para desarrollar el
aplicativo
 La documentación planteada detalles técnicos pero importantes para saber el
proceso y la tecnología usada al desarrollar el proyecto respectivo.
 Todas las tecnologías usadas y aprendidas en la respectiva bibliografía ayudan
a crear un entorno web seguro y fácil de usar.

2.2 9.2 Recomendaciones


 Para implementar el proyecto se recomienda mantener un respectivo orden de
las requisitos y los casos de usos para que se pueda identificar cada módulo y
además que pueda ser mucho mas entendible para otros programadores
 Tanto los requisitos funcionales como los no funcionales son importantes
redactarlos de manera concreta y detallada para que no haya inconvenientes
con los clientes

2.3 9.3 Referencias bibliográficas


 Material distribuido por el Ing. Mauricio Campaña.
 Conde, J. (2012). 10.- Curso de Java EE. Mejorar la presentación con
PrimeFaces. Obtenido de YouTube: https://www.youtube.com/watch?
v=flVHGaU0x50

83

También podría gustarte