com.planit.smsrenta.controladores.VehiculoBean.java Source code

Java tutorial

Introduction

Here is the source code for com.planit.smsrenta.controladores.VehiculoBean.java

Source

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

import com.planit.smsrenta.metodos.Upload;
import com.planit.smsrenta.dao.ICategoriaDao;
import com.planit.smsrenta.dao.ICategoriasServicioDao;
import com.planit.smsrenta.dao.ICiudadDao;
import com.planit.smsrenta.dao.IColorDao;
import com.planit.smsrenta.dao.IEmpleadoDao;
import com.planit.smsrenta.dao.IEstadoDao;
import com.planit.smsrenta.dao.IEstadoVehiculoDao;
import com.planit.smsrenta.dao.IProveedorDao;
import com.planit.smsrenta.dao.IReferenciaDao;
import com.planit.smsrenta.dao.IUsuarioDao;
import com.planit.smsrenta.dao.IVehiculoDao;
import com.planit.smsrenta.dao.ImpCategoriaDao;
import com.planit.smsrenta.dao.ImpCategoriasServicioDao;
import com.planit.smsrenta.dao.ImpCiudadDao;
import com.planit.smsrenta.dao.ImpColorDao;
import com.planit.smsrenta.dao.ImpEmpleadoDao;
import com.planit.smsrenta.dao.ImpEstadoDao;
import com.planit.smsrenta.dao.ImpEstadoVehiculoDao;
import com.planit.smsrenta.dao.ImpProveedorDao;
import com.planit.smsrenta.dao.ImpReferenciaDao;
import com.planit.smsrenta.dao.ImpUsuarioDao;
import com.planit.smsrenta.dao.ImpVehiculoDao;
import static com.planit.smsrenta.metodos.Upload.getMapPathFotosVehiculos;
import static com.planit.smsrenta.metodos.Upload.getPathDefaultVehiculo;
import com.planit.smsrenta.modelos.SmsCategoria;
import com.planit.smsrenta.modelos.SmsCategoriasServicio;
import com.planit.smsrenta.modelos.SmsCiudad;
import com.planit.smsrenta.modelos.SmsEmpleado;
import com.planit.smsrenta.modelos.SmsEstadovehiculo;
import com.planit.smsrenta.modelos.SmsMercado;
import com.planit.smsrenta.modelos.SmsProveedor;
import com.planit.smsrenta.modelos.SmsReservacion;
import com.planit.smsrenta.modelos.SmsVehiculo;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.apache.commons.io.IOUtils;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

public class VehiculoBean {

    //Objetos de vista 
    private SmsVehiculo vehiculoView;
    private SmsEstadovehiculo estadoVehiculoView;
    private SmsProveedor proveedorView;
    private SmsEmpleado empleadoView;

    private List<SmsVehiculo> vehiculosListView;
    private List<SmsVehiculo> vehiculosSeleccionados;
    private List<String> placasVehiculos;
    private List<SmsVehiculo> vehiculos;

    //relacion con otros modelos
    private List<SmsCategoriasServicio> categoriasListView;
    private List<String> categoriasSeleccionados;
    private List<SmsEmpleado> conductores;
    private SmsCategoriasServicio categoria;

    //Relacion con otros controladores   
    Upload fileController;
    EstadoVehiculoBean estadoVehiculoController;

    //Variables   
    private String nombre;
    private String buscar;
    private String estadoArchivo1;
    private String estadoArchivo2;
    private String buscarEmpleado;
    private int operacion;
    private int operacionAdministracion;

    //Banderas    
    private boolean habilitarCancelar;

    //Conexion con el DAO
    ICategoriaDao cateDao;
    IProveedorDao provDao;
    ICiudadDao ciuDao;
    IReferenciaDao refDao;
    IVehiculoDao vehDao;
    IUsuarioDao usuDao;
    IEstadoDao estadoDao;
    IColorDao colorDao;
    IEstadoVehiculoDao estadoVehDao;
    IEmpleadoDao empleadoDao;

    public VehiculoBean() {

        vehiculoView = new SmsVehiculo();
        proveedorView = new SmsProveedor();
        empleadoView = new SmsEmpleado();

        vehiculosListView = new ArrayList<>();
        vehiculosSeleccionados = new ArrayList<>();

        categoria = new SmsCategoriasServicio();
        categoriasListView = new ArrayList<>();
        categoriasSeleccionados = new ArrayList<>();

        estadoVehiculoView = new SmsEstadovehiculo();
        placasVehiculos = new ArrayList<>();

        habilitarCancelar = true;

        estadoVehiculoController = new EstadoVehiculoBean();
        fileController = new Upload();
        buscar = null;
        buscarEmpleado = null;

        cateDao = new ImpCategoriaDao();
        provDao = new ImpProveedorDao();
        ciuDao = new ImpCiudadDao();
        refDao = new ImpReferenciaDao();
        vehDao = new ImpVehiculoDao();
        usuDao = new ImpUsuarioDao();
        estadoDao = new ImpEstadoDao();
        colorDao = new ImpColorDao();
        estadoVehDao = new ImpEstadoVehiculoDao();
        empleadoDao = new ImpEmpleadoDao();

        nombre = "Registrar Vehiculo";
        operacion = 0;
        operacionAdministracion = 0;
        estadoArchivo1 = "Foto sin subir";
        estadoArchivo2 = "Foto sin subir";

        vehiculos = new ArrayList<>();
        conductores = new ArrayList<>();
    }

    @PostConstruct
    public void init() {
        vehiculosListView = vehDao.mostrarVehiculo();

    }

    //Getters & Setters 
    public SmsCategoriasServicio getCategoria() {
        return categoria;
    }

    public void setCategoria(SmsCategoriasServicio categoria) {
        this.categoria = categoria;
    }

    public List<SmsCategoriasServicio> getCategoriasListView() {
        return categoriasListView;
    }

    public void setCategoriasListView(List<SmsCategoriasServicio> categoriasListView) {
        this.categoriasListView = categoriasListView;
    }

    public List<String> getCategoriasSeleccionados() {
        return categoriasSeleccionados;
    }

    public void setCategoriasSeleccionados(List<String> categoriasSeleccionados) {
        this.categoriasSeleccionados = categoriasSeleccionados;
    }

    public List<SmsVehiculo> getVehiculosSeleccionados() {
        return vehiculosSeleccionados;
    }

    public void setVehiculosSeleccionados(List<SmsVehiculo> vehiculosSeleccionados) {
        this.vehiculosSeleccionados = vehiculosSeleccionados;
    }

    public SmsEstadovehiculo getEstadoVehiculoView() {
        return estadoVehiculoView;
    }

    public void setEstadoVehiculoView(SmsEstadovehiculo estadoVehiculoView) {
        this.estadoVehiculoView = estadoVehiculoView;
    }

    public boolean isHabilitarCancelar() {
        return habilitarCancelar;
    }

    public void setHabilitarCancelar(boolean habilitarCancelar) {
        this.habilitarCancelar = habilitarCancelar;
    }

    public List<SmsVehiculo> getVehiculosListView() {
        return vehiculosListView;
    }

    public void setVehiculosListView(List<SmsVehiculo> vehiculosListView) {
        this.vehiculosListView = vehiculosListView;
    }

    public SmsVehiculo getVehiculoView() {
        return vehiculoView;
    }

    public void setVehiculoView(SmsVehiculo veh) {
        this.vehiculoView = veh;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getBuscar() {
        return buscar;
    }

    public void setBuscar(String buscar) {
        this.buscar = buscar;
    }

    public int getOperacion() {
        return operacion;
    }

    public void setOperacion(int operacion) {
        this.operacion = operacion;
    }

    public String getEstadoArchivo1() {
        return estadoArchivo1;
    }

    public void setEstadoArchivo1(String estadoArchivo1) {
        this.estadoArchivo1 = estadoArchivo1;
    }

    public String getEstadoArchivo2() {
        return estadoArchivo2;
    }

    public void setEstadoArchivo2(String estadoArchivo2) {
        this.estadoArchivo2 = estadoArchivo2;
    }

    public List<String> getPlacasVehiculos() {
        return placasVehiculos;
    }

    public void setPlacasVehiculos(List<String> placasVehiculos) {
        this.placasVehiculos = placasVehiculos;
    }

    public SmsProveedor getProveedorView() {
        return proveedorView;
    }

    public void setProveedorView(SmsProveedor proveedorView) {
        this.proveedorView = proveedorView;
    }

    public SmsEmpleado getEmpleadoView() {
        return empleadoView;
    }

    public void setEmpleadoView(SmsEmpleado empleadoView) {
        this.empleadoView = empleadoView;
    }

    public List<SmsVehiculo> getVehiculos() {
        return vehiculos;
    }

    public void setVehiculos(List<SmsVehiculo> vehiculos) {
        this.vehiculos = vehiculos;
    }

    public List<SmsEmpleado> getConductores() {
        return conductores;
    }

    public void setConductores(List<SmsEmpleado> conductores) {
        this.conductores = conductores;
    }

    public String getBuscarEmpleado() {
        return buscarEmpleado;
    }

    public void setBuscarEmpleado(String buscarEmpleado) {
        this.buscarEmpleado = buscarEmpleado;
    }

    public int getOperacionAdministracion() {
        return operacionAdministracion;
    }

    public void setOperacionAdministracion(int operacionAdministracion) {
        this.operacionAdministracion = operacionAdministracion;
    }

    //Definicion de metodos VEHICULO
    //Metodos CRUD y complementos
    public void registrar() {

        //En caso de subir NO una fotografia del vehiculo, el sistema asigna al vehiculo una fotografia default
        if (vehiculoView.getVehFotoRuta() == null && vehiculoView.getVehFotoNombre() == null) {
            String ruta = getPathDefaultVehiculo();
            vehiculoView.setVehFotoRuta(ruta);
            vehiculoView.setVehFotoNombre("Default.png");
            vehiculoView.setVehFoto2Ruta(ruta);
            vehiculoView.setVehFoto2Nombre("Default.png");
        }

        vehiculoView.getSmsEstado().setEstadoNombre("Disponible");

        //Consulta estado
        vehiculoView.setSmsEstado(estadoDao.consultarEstado(vehiculoView.getSmsEstado()));

        //Consulta proveedor    
        vehiculoView.setSmsProveedor(provDao.consultarProveedor(vehiculoView.getSmsProveedor()));

        //Consulta categoria      
        vehiculoView.setSmsCategoria(cateDao.consultarCategoria(vehiculoView.getSmsCategoria()));

        //Consulta ciudad        
        vehiculoView.setSmsCiudad(ciuDao.consultarCiudad(vehiculoView.getSmsCiudad()));

        //Consulta referencia      
        vehiculoView.setSmsReferencia(refDao.consultarReferencias(vehiculoView.getSmsReferencia()));

        //Consultar color
        vehiculoView.setSmsColor(colorDao.consultarColor(vehiculoView.getSmsColor()));

        //Registramos el vehiculo
        vehDao.registrarVehiculo(vehiculoView);//Registra el Vehiculo

        //Reiniciamos valores para las variables llamadas desde las vista
        estadoArchivo1 = "Foto sin subir";
        estadoArchivo2 = "Foto sin subir";

        estadoVehiculoView.setSmsVehiculo(vehiculoView); //relacionamos el vehiculo con los valores asignados en la seccion de estado
        estadoVehiculoController.registrarEstVeh(estadoVehiculoView);//registramos el estado

        //limpiamos objetos        
        vehiculoView = new SmsVehiculo();
        estadoVehiculoView = new SmsEstadovehiculo();

        //Actualizamos la lista que muestra los vehiculos registrados en el sistema
        vehiculosListView = vehDao.mostrarVehiculo();
    }

    public void modificar() {
        //Consulta estado
        vehiculoView.setSmsEstado(estadoDao.consultarEstado(vehiculoView.getSmsEstado()));

        //Consulta proveedor    
        vehiculoView.setSmsProveedor(provDao.consultarProveedor(vehiculoView.getSmsProveedor()));

        //Consulta categoria      
        vehiculoView.setSmsCategoria(cateDao.consultarCategoria(vehiculoView.getSmsCategoria()));

        //Consulta ciudad        
        vehiculoView.setSmsCiudad(ciuDao.consultarCiudad(vehiculoView.getSmsCiudad()));

        //Consulta referencia      
        vehiculoView.setSmsReferencia(refDao.consultarReferencias(vehiculoView.getSmsReferencia()));

        //Consultar color
        vehiculoView.setSmsColor(colorDao.consultarColor(vehiculoView.getSmsColor()));

        vehDao.modificarVehiculo(vehiculoView);//Se modifica el vehiculo

        //Consultamos el vehiculo recien modificado       
        estadoVehiculoView.setSmsVehiculo(vehiculoView); //Relacionamos el estado de vehiculo con el vehiculo.
        estadoVehiculoController.registrarEstVeh(estadoVehiculoView);//Registramos el estado del vehiculo

        //Reiniciamos valores para las variables llamadas desde las vista
        estadoArchivo2 = "Foto sin subir";
        estadoArchivo1 = "Foto sin subir";

        vehiculoView = new SmsVehiculo();
        estadoVehiculoView = new SmsEstadovehiculo();

        //Actualizamos la lista que muestra los vehiculos registrados en el sistema
        vehiculosListView = vehDao.mostrarVehiculo();
    }

    public void eliminar() {
        //Eliminamos el vehiculo seleccionado
        vehDao.eliminarVehiculo(vehiculoView);
        vehiculoView = new SmsVehiculo();//Limpiamos el objeto que contenia el vehiculo a eliminar
        operacion = 0;
        habilitarCancelar = true;
        nombre = "Registrar Vehiculo";
        //Recargamos la lista de vehiculos
        vehiculosListView = vehDao.mostrarVehiculo();
    }

    //Metodos Propios
    public void metodo() {
        if (operacion == 0) {
            registrar();
        } else if (operacion == 1) {
            modificar();
            operacion = 0;
            habilitarCancelar = true;
            nombre = "Registrar Vehiculo";
        }
    }

    public void seleccionarCRUD(int i) {
        operacion = i;
        if (operacion == 1) {
            habilitarCancelar = false;
            nombre = "Editar Vehiculo";
            //Consultamos el estado del vehiculo
            estadoVehiculoView = estadoVehDao.consultarEstadoVehiculo(vehiculoView);

            //Si el vehiculo tiene una foto asignada damos valores a nuestras variables para mostrar que foto esta asignada
            if (vehiculoView.getVehFotoNombre() != null && vehiculoView.getVehFotoRuta() != null) {
                estadoArchivo1 = "Foto subida:" + vehiculoView.getVehFotoNombre();

            } else { //En caso de no existir fotografia, indicamos en la vista la posibilidad de subir una foto para el vehiculo
                estadoArchivo1 = "Foto sin subir";
            }

            if (vehiculoView.getVehFoto2Nombre() != null && vehiculoView.getVehFoto2Ruta() != null) {
                estadoArchivo2 = "Foto subida:" + vehiculoView.getVehFotoNombre();

            } else { //En caso de no existir fotografia, indicamos en la vista la posibilidad de subir una foto para el vehiculo
                estadoArchivo2 = "Foto sin subir";
            }

        }
    }

    public void cancelarCRUD() {
        //Limpiamos objetos utilizados
        vehiculoView = new SmsVehiculo();
        estadoVehiculoView = new SmsEstadovehiculo();
        estadoArchivo1 = "Foto sin subir";
        estadoArchivo2 = "Foto sin subir";
        operacion = 0;

        //Reiniciamos los objetos
        habilitarCancelar = true;
        nombre = "Registrar Vehiculo";
    }

    //Metodos para filtrar o consultar vehiculos
    public List<SmsVehiculo> consultarVehiculosDisponible(SmsReservacion reserva, SmsMercado mercado,
            int categoriaServicio) {
        vehiculosListView = new ArrayList<>();
        String ciudadVeh = reserva.getSmsCiudadByIdCiudadInicio().getCiudadNombre();
        String mercadoSeleccionado = mercado.getMercadoNombre();

        Calendar calInicio = Calendar.getInstance();
        calInicio.setTime(reserva.getReservacionHoraInicio());
        calInicio.add(Calendar.HOUR, -1);
        calInicio.add(Calendar.MINUTE, -59);

        Calendar calLlegada = Calendar.getInstance();
        calLlegada.setTime(reserva.getReservacionHoraLlegada());
        calLlegada.add(Calendar.HOUR, 2);

        Date hespacioInicio = calInicio.getTime();
        Date hespacioLlegada = calLlegada.getTime();

        SimpleDateFormat formatDate;
        SimpleDateFormat formatTime;
        formatDate = new SimpleDateFormat("yyyy-MM-dd");
        formatTime = new SimpleDateFormat("HH:mm:ss");

        String FechaInicio = formatDate.format(reserva.getReservacionFechaInicio());
        String FechaLlegada = formatDate.format(reserva.getReservacionFechaLlegada());
        String HoraInicio = formatTime.format(reserva.getReservacionHoraInicio());
        String HoraLlegada = formatTime.format(reserva.getReservacionHoraLlegada());
        String espacioinicio = formatTime.format(hespacioInicio);
        String espacioLlegada = formatTime.format(hespacioLlegada);

        vehiculosListView = vehDao.consultarVehiculosDisponibles(FechaInicio, FechaLlegada, HoraInicio, HoraLlegada,
                ciudadVeh, espacioinicio, espacioLlegada, mercadoSeleccionado, categoriaServicio);
        return vehiculosListView;
    }

    public List<SmsVehiculo> consultarVehiculosCiudad(SmsCiudad c) {
        vehiculosListView = new ArrayList<>();
        vehiculoView.setSmsCiudad(c);
        vehiculosListView = vehDao.consultarVehiculosCiudad(vehiculoView.getSmsCiudad());
        return vehiculosListView;
    }

    public List<String> consultarVehiculosSegunProveedor(SmsProveedor proveedor) {
        vehiculosListView = new ArrayList<>();
        placasVehiculos = new ArrayList<>();
        vehiculosListView = vehDao.consultarVehiculosSegunProveedor(proveedor);
        for (int i = 0; i < vehiculosListView.size(); i++) {
            placasVehiculos.add(vehiculosListView.get(i).getVehPlaca());
        }
        return placasVehiculos;
    }

    public List<SmsVehiculo> filtrarVehiculosCiudad(SmsCiudad c, SmsCategoria cat) {
        vehiculosListView = new ArrayList<>();
        vehiculoView.setSmsCiudad(c);
        String categoriaVeh = cat.getCategoriaNombre();
        vehiculosListView = vehDao.filtrarVehiculosCiudad(vehiculoView.getSmsCiudad(),
                vehiculoView.getSmsCategoria().getCategoriaNombre());
        return vehiculosListView;
    }

    public List<SmsVehiculo> filtrarVehiculosDisponibles(SmsReservacion reserva, SmsCategoria cat,
            SmsMercado mercado, int categoriaServicio) {
        vehiculosListView = new ArrayList<>();
        String categoriaVeh = cat.getCategoriaNombre();
        String ciudadVeh = reserva.getSmsCiudadByIdCiudadInicio().getCiudadNombre();
        String mercadoSeleccionado = mercado.getMercadoNombre();

        Calendar calInicio = Calendar.getInstance();
        calInicio.setTime(reserva.getReservacionHoraInicio());
        calInicio.add(Calendar.HOUR, -1);
        calInicio.add(Calendar.MINUTE, -59);

        Calendar calLlegada = Calendar.getInstance();
        calLlegada.setTime(reserva.getReservacionHoraLlegada());
        calLlegada.add(Calendar.HOUR, 2);

        Date hespacioInicio = calInicio.getTime();
        Date hespacioLlegada = calLlegada.getTime();

        SimpleDateFormat formatDate;
        SimpleDateFormat formatTime;
        formatDate = new SimpleDateFormat("yyyy-MM-dd");
        formatTime = new SimpleDateFormat("HH:mm:ss");

        String FechaInicio = formatDate.format(reserva.getReservacionFechaInicio());
        String FechaLlegada = formatDate.format(reserva.getReservacionFechaLlegada());
        String HoraInicio = formatTime.format(reserva.getReservacionHoraInicio());
        String HoraLlegada = formatTime.format(reserva.getReservacionHoraLlegada());
        String espacioinicio = formatTime.format(hespacioInicio);
        String espacioLlegada = formatTime.format(hespacioLlegada);

        vehiculosListView = vehDao.filtrarVehiculosDisponibles(FechaInicio, FechaLlegada, HoraInicio, HoraLlegada,
                ciudadVeh, categoriaVeh, espacioinicio, espacioLlegada, mercadoSeleccionado, categoriaServicio);
        return vehiculosListView;
    }

    public List<SmsVehiculo> buscarVehiculoSegunPlaca(SmsReservacion reserva, SmsMercado mercado, String placa,
            int categoriaServicio) {
        vehiculosListView = new ArrayList<>();
        String ciudadVeh = reserva.getSmsCiudadByIdCiudadInicio().getCiudadNombre();
        String mercadoSeleccionado = mercado.getMercadoNombre();

        SimpleDateFormat formatDate;
        SimpleDateFormat formatTime;
        formatDate = new SimpleDateFormat("yyyy-MM-dd");
        formatTime = new SimpleDateFormat("HH:mm:ss");

        String FechaInicio = formatDate.format(reserva.getReservacionFechaInicio());
        String FechaLlegada = formatDate.format(reserva.getReservacionFechaLlegada());
        String HoraInicio = formatTime.format(reserva.getReservacionHoraInicio());
        String HoraLlegada = formatTime.format(reserva.getReservacionHoraLlegada());

        vehiculosListView = vehDao.consultarVehiculoDisponibleSegunPlaca(FechaInicio, FechaLlegada, HoraInicio,
                HoraLlegada, ciudadVeh, mercadoSeleccionado, placa, categoriaServicio);
        return vehiculosListView;
    }

    public void filtrarVehiculos() {
        vehiculosListView = new ArrayList<>();
        if (buscar == null) {
            vehiculosListView = vehDao.mostrarVehiculo();
        } else {
            vehiculosListView = vehDao.filtrarVehiculos(buscar);
        }
    }

    //Metodos para la asociacion de vehiculos con conductores
    public void asociarVehiculosConductores() {
        //obtenemos los objetos vehiculo y empleado con sus colecciones habilitadas
        vehiculoView = vehDao.consultarVehiculoConConductores(vehiculoView);
        empleadoView = empleadoDao.consultarEmpleadoConVehiculo(empleadoView);

        //asociamos vehiculo y conductor
        vehiculoView.getSmsEmpleados().add(empleadoView);
        empleadoView.getSmsVehiculos().add(vehiculoView);

        vehDao.modificarVehiculo(vehiculoView);

        vehiculoView = new SmsVehiculo();
        empleadoView = new SmsEmpleado();
        proveedorView = new SmsProveedor();
        vehiculos = new ArrayList<>();
        conductores = new ArrayList<>();
    }

    public void cargarVehiculoEmpleadosSegunProveedor() {
        if (proveedorView.getProveedorRazonSocial() != null) {
            vehiculos = vehDao.consultarVehiculosSegunProveedor(proveedorView);
            conductores = empleadoDao.consultarEmpleadosSegunProveedor(proveedorView);
        }
    }

    public void filtrarVehiculoSegunProveedor(SmsProveedor proveedor) {
        vehiculos = new ArrayList<>();
        if (buscar == null) {
            if (proveedor.getProveedorRazonSocial() != null) {
                vehiculos = vehDao.consultarVehiculosSegunProveedor(proveedor);
            }
        } else {
            if (proveedor.getProveedorRazonSocial() != null) {
                vehiculos = vehDao.filtrarVehiculoSegunProveedor(buscar, proveedor);
            }
        }
    }

    public void filtrarEmpleadoSegunProveedor(SmsProveedor proveedor) {
        conductores = new ArrayList<>();
        if (buscarEmpleado == null) {
            if (proveedor.getProveedorRazonSocial() != null) {
                conductores = empleadoDao.consultarEmpleadosSegunProveedor(proveedor);
            }
        } else {
            if (proveedor.getProveedorRazonSocial() != null) {
                conductores = empleadoDao.filtrarUsuariosEmpleadosSegunProveedor(buscarEmpleado, proveedor);
            }
        }
    }

    public void cancelarAsociacionVehiculoConductor() {
        vehiculoView = new SmsVehiculo();
        empleadoView = new SmsEmpleado();
        proveedorView = new SmsProveedor();
        vehiculos = new ArrayList<>();
        conductores = new ArrayList<>();
    }

    //metodos para asociacion de vehiculos con servicios
    public void asociar() {
        operacionAdministracion = 1;
        habilitarCancelar = false;
        vehiculos = new ArrayList<>();
        vehiculos = vehDao.mostrarVehiculo();
    }

    public void remover() {
        operacionAdministracion = 2;
        habilitarCancelar = false;
        vehiculos = new ArrayList<>();
    }

    public void cancelarAsociacionVehiculoServicios() {
        operacionAdministracion = 0;
        habilitarCancelar = true;
        categoriasSeleccionados = new ArrayList<>();
        vehiculosSeleccionados = new ArrayList<>();
        vehiculos = new ArrayList<>();
        categoria = new SmsCategoriasServicio();
        vehiculoView = new SmsVehiculo();
    }

    public void filtrarVehiculosConsultados() {
        if (operacionAdministracion == 1) {
            vehiculos = new ArrayList<>();
            if (buscar == null) {
                vehiculos = vehDao.mostrarVehiculo();
            } else {
                vehiculos = vehDao.filtrarVehiculos(buscar);
            }
        } else if (operacionAdministracion == 2) {
            vehiculos = new ArrayList<>();
            if (buscar == null) {
                vehiculos = vehDao.consultarVehiculosSegunCategoriaServicio(categoria);
            } else {
                vehiculos = vehDao.filtrarVehiculosSegunCategoriaServicio(buscar, categoria);
            }
        }
    }

    public void consultarVehiculoSegunCategoria() {
        vehiculos = new ArrayList<>();
        vehiculosSeleccionados = new ArrayList<>();

        ICategoriasServicioDao catSerDao = new ImpCategoriasServicioDao();
        categoria = catSerDao.consultarCategoriaServicio(categoria);

        vehiculos = vehDao.consultarVehiculosSegunCategoriaServicio(categoria);
    }

    public void asociarVehiculosServicios() {
        ICategoriasServicioDao catSerDao = new ImpCategoriasServicioDao();
        SmsCategoriasServicio catServicio;
        categoriasListView = new ArrayList<>();
        //Consultamos la informacion completa de las categorias seleccionadas
        for (int i = 0; i < categoriasSeleccionados.size(); i++) {
            catServicio = new SmsCategoriasServicio();
            catServicio.setCatNombre(categoriasSeleccionados.get(i));
            catServicio = catSerDao.consultarCategoriaServicioConVehiculos(catServicio);
            categoriasListView.add(catServicio);//Almacenamos los objetos completos en una nueva lista
        }

        List<SmsVehiculo> vehiculosParaAsociar = new ArrayList<>();

        //Consultamos los vehiculos seleccionados para habilitar la relacion con las categorias de servicios
        for (int i = 0; i < vehiculosSeleccionados.size(); i++) {
            vehiculosParaAsociar.add(vehDao.consultarVehiculoConCategorias(vehiculosSeleccionados.get(i)));
        }

        //Asociamos los objetos
        for (int i = 0; i < categoriasListView.size(); i++) {
            for (int j = 0; j < vehiculosParaAsociar.size(); j++) {
                boolean existeVeh = false;

                //Validamos que el vehiculo j no este asociado a la categoria i
                for (SmsVehiculo vehiculo : categoriasListView.get(i).getSmsVehiculos()) {
                    if (vehiculo.getIdVehiculo().equals(vehiculosParaAsociar.get(j).getIdVehiculo())) {
                        existeVeh = true;
                    }
                }
                if (!existeVeh) {
                    categoriasListView.get(i).getSmsVehiculos().add(vehiculosParaAsociar.get(j));
                }

                boolean existeCat = false;

                //validamos que la categoria i no este ya asociada al vehiculo j
                for (SmsCategoriasServicio cat : vehiculosParaAsociar.get(j).getSmsCategoriasServicios()) {
                    if (cat.getIdCategoriaServicio().equals(categoriasListView.get(i).getIdCategoriaServicio())) {
                        existeCat = true;
                    }
                }
                if (!existeCat) {
                    vehiculosParaAsociar.get(j).getSmsCategoriasServicios().add(categoriasListView.get(i));
                }
            }
        }

        for (int i = 0; i < vehiculosParaAsociar.size(); i++) {
            vehDao.asociarVehiculo(vehiculosParaAsociar.get(i));
        }

        //        for (int i = 0; i < vehiculosParaAsociar.size(); i++) {
        //            vehiculoView = new SmsVehiculo();
        //            vehiculoView = vehiculosParaAsociar.get(i);
        //            for (int j = 0; j < categoriasListView.size(); j++) {
        //                catServicio = categoriasListView.get(j);
        //                catServicio.getSmsVehiculos().add(vehiculoView);
        //                vehiculoView.getSmsCategoriasServicios().add(catServicio);
        //                vehDao.asociarVehiculo(vehiculoView);
        //            }
        //        }
        //Limpiamos objetos
        categoriasSeleccionados = new ArrayList<>();
        vehiculosSeleccionados = new ArrayList<>();
        vehiculoView = new SmsVehiculo();
        categoria = new SmsCategoriasServicio();

        //Enviamos mensaje de confirmacion a la vista
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Vehiculos asociados", "");

        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void removerVehiculosServicios() {

        List<SmsVehiculo> vehiculosParaRemover = new ArrayList<>();

        //Consultamos los vehiculos seleccionados para habilitar la relacion con las categorias de servicios
        for (int i = 0; i < vehiculosSeleccionados.size(); i++) {
            vehiculosParaRemover.add(vehDao.consultarVehiculoConCategorias(vehiculosSeleccionados.get(i)));
        }

        //Removemos los objetos
        for (int i = 0; i < vehiculosParaRemover.size(); i++) {

            SmsCategoriasServicio categoriaConVehiculos = new SmsCategoriasServicio();
            ICategoriasServicioDao catDao = new ImpCategoriasServicioDao();
            categoriaConVehiculos = catDao.consultarCategoriaServicioConVehiculos(categoria);

            for (SmsVehiculo veh : categoriaConVehiculos.getSmsVehiculos()) {
                if (veh.getIdVehiculo().equals(vehiculosParaRemover.get(i).getIdVehiculo())) {
                    vehiculoView = veh;
                }
            }

            SmsCategoriasServicio cat = new SmsCategoriasServicio();
            for (SmsCategoriasServicio categoriaServicio : vehiculoView.getSmsCategoriasServicios()) {
                if (categoriaConVehiculos.getIdCategoriaServicio()
                        .equals(categoriaServicio.getIdCategoriaServicio())) {
                    cat = categoriaServicio;
                }
            }

            categoriaConVehiculos.getSmsVehiculos().remove(vehiculoView);
            vehiculoView.getSmsCategoriasServicios().remove(cat);
            vehDao.asociarVehiculo(vehiculoView);
        }

        //Limpiamos objetos
        categoriasSeleccionados = new ArrayList<>();
        vehiculos = new ArrayList<>();
        categoria = new SmsCategoriasServicio();
        vehiculosSeleccionados = new ArrayList<>();
        vehiculoView = new SmsVehiculo();

        //Enviamos mensaje de confirmacion a la vista
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, "Vehiculos Desligados", "");
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    //Metodos para subida de archivos  
    public void uploadPhoto1(FileUploadEvent e) throws IOException {
        try {
            UploadedFile uploadedPhoto = e.getFile();
            String destination;

            HashMap<String, String> map = getMapPathFotosVehiculos();
            destination = map.get("path");
            if (null != uploadedPhoto) {
                fileController.uploadFile(IOUtils.toByteArray(uploadedPhoto.getInputstream()),
                        uploadedPhoto.getFileName(), destination);
                vehiculoView.setVehFotoNombre(uploadedPhoto.getFileName());
                vehiculoView.setVehFotoRuta(map.get("url") + uploadedPhoto.getFileName());

                if (operacion == 0) {
                    estadoArchivo1 = "Foto Subida con exito";
                } else if (operacion == 1) {
                    estadoArchivo1 = "Foto actualizada con exito";

                }
            }
            FacesContext.getCurrentInstance().addMessage("messages", new FacesMessage(FacesMessage.SEVERITY_INFO,
                    "Su foto (" + uploadedPhoto.getFileName() + ")  se ha guardado con exito.", ""));
        } catch (Exception ex) {
            ex.getMessage();
        }
    }

    public void uploadPhoto2(FileUploadEvent e) throws IOException {
        try {
            UploadedFile uploadedPhoto = e.getFile();
            String destination;

            HashMap<String, String> map = getMapPathFotosVehiculos();
            destination = map.get("path");
            if (null != uploadedPhoto) {
                fileController.uploadFile(IOUtils.toByteArray(uploadedPhoto.getInputstream()),
                        uploadedPhoto.getFileName(), destination);
                vehiculoView.setVehFoto2Nombre(uploadedPhoto.getFileName());
                vehiculoView.setVehFoto2Ruta(map.get("url") + uploadedPhoto.getFileName());

                if (operacion == 0) {
                    estadoArchivo2 = "Foto Subida con exito";
                } else if (operacion == 1) {
                    estadoArchivo2 = "Foto actualizada con exito";

                }
            }

            FacesContext.getCurrentInstance().addMessage("messages", new FacesMessage(FacesMessage.SEVERITY_INFO,
                    "Su foto (" + uploadedPhoto.getFileName() + ")  se ha guardado con exito.", ""));
        } catch (Exception ex) {
            ex.getMessage();
        }
    }

}