package com.fp.frontend.controller.armas.solicitud;

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.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

import com.fp.dto.Request;
import com.fp.dto.Response;
import com.fp.dto.query.DtoQuery;
import com.fp.dto.query.Filter;
import com.fp.dto.query.SubQuery;
import com.fp.dto.save.DtoSave;
import com.fp.frontend.controller.AbstractController;
import com.fp.frontend.controller.alfresco.AlfrescoController;
import com.fp.frontend.controller.armas.parametros.CentroControlArmasController;
import com.fp.frontend.controller.armas.parametros.IngresoDatosTipoTramite;
import com.fp.frontend.controller.pcustomer.PersonAddressController;
import com.fp.frontend.controller.pgeneral.date.TgeneNotAccountingDayController;
import com.fp.frontend.controller.pgeneral.gene.CatalogDetailController;
import com.fp.frontend.controller.pgeneral.gene.ParametersController;
import com.fp.frontend.helper.MessageHelper;
import com.fp.frontend.utility.MsgControlArmas;
import com.fp.frontend.utility.MsgGeneral;
import com.fp.persistence.parmas.param.TarmCentroControl;
import com.fp.persistence.parmas.param.TarmTramite;
import com.fp.persistence.parmas.soli.TarmSolicitud;
import com.fp.persistence.parmas.soli.TarmSolicitudTramite;
import com.fp.persistence.pcustomer.gene.TcustPersonAddress;
import com.fp.persistence.pgeneral.gene.TgeneCatalogDetail;
import com.fp.persistence.pgeneral.safe.TsafeUserDetail;

/**
 * Clase controladora para el ingreso de comprobante de deposito
 *
 * @author CHRISTIAN PAZMINO
 * @version 2.1
 */
@SuppressWarnings("serial")
@ManagedBean
@ViewScoped
public class CargarDepositoController extends AbstractController<TarmSolicitudTramite> {

    /**
     * Variable que contiene el numero de tramite con el que inicia el flujo
     */
    private String numTramite;
    /**
     * Variable que contiene el codigo de solicitud pasado en el flujo
     */
    private String csolicitud;
    /**
     * Variable del tipo TgeneCatalogDetail(catalogo del tramite)
     */
    private TgeneCatalogDetail nombreTramite;
    /**
     * Variable del tipo TgeneCatalogDetail(catalogo de la categoria)
     */
    private TgeneCatalogDetail nombreCategoria;
    /**
     * Variable del tipo TgeneCatalogDetail(catalogo del uso actividad del
     * tramite)
     */
    private TgeneCatalogDetail nombreUsoActividad;
    /**
     * Bandera de tipo booleano para indicar si se habilita el boton de
     * completar tarea
     */
    private Boolean isEnableCompletarTarea = Boolean.FALSE;
    /**
     * Propiedad que premite controlar operaciones de cargar archivos al
     * Alfresco
     */
    @ManagedProperty(value = "#{alfrescoController}")
    private AlfrescoController alfrescoController;

    /**
     * Variable que contiene los datos de la solicitud actual
     */
    private TarmSolicitud solicitud;
    /**
     * Variable que nos permite cargar el comprobante de deposito al Alfresco
     */
    private UploadedFile uploadedFile;
    /**
     * Variable que nos permite cargar la resolucion al Alfresco
     */
    private UploadedFile uploadedFileResolucion;
    /**
     * Variable que indica si el usuario esta negado para continuear el tramite,
     * su tramite pasa a estado anulado
     */
    private Boolean isDenied;
    /**
     * Variable auxiliar usada para diferenciar cuando se presenta o no el
     * mensaje de validacion de fecha expiracion solicitud
     */
    private Boolean isOnlyMsj;
    /**
     * Variable que indica si el numero de comprobante ingresado es correcto
     */
    private Boolean isTrueNComprobante;
    /**
     * Dias laborables permitidos para completar el tramite
     */
    private Integer diasLaborablesPermitidos;
    /**
     * Bandera de tipo booleano para indicar si se ha grabado el reporte
     * generado
     *
     */
    private Boolean isEnableGrabar;
    /**
     * codigo de la provincia del usuario logeado
     */
    private String cprovincia;

    private Boolean requiereNoSolAucpBln;

    /**
     * Referencia al Centro de control;
     */
    private TarmCentroControl centroControl = new TarmCentroControl();

    /**
     * Nombre de la Institucion
     */
    private String nombreInstitucion;

    public CargarDepositoController() throws Exception {
        super(TarmSolicitudTramite.class);
    }

    @PostConstruct
    private void postconstruct() {
//    	super.startQuery();
//    	csolicitud = this.getMfilters().get("csolicitud");
//    	this.getMfilters().clear(); 

        init();
        requiereNoSolAucpBln = Boolean.FALSE;
    }

    public void consultarSolicitud() throws Exception {
        if (numTramite != null) {
            this.record = SolicitudTramiteController.findByNumTramite(numTramite);
            if (record != null && record.getPk().getCsolicitud() != null) {
                csolicitud = record.getPk().getCsolicitud();
                //    		csolicitud=csolicitud.replace("TRA","SOL");
                try {
                    if (record != null) {
                        solicitud = SolicitudArmasController.findByCSolicitud(csolicitud);
                        if (solicitud != null && solicitud.getCtramite() != null) {
                            TarmTramite tramite = IngresoDatosTipoTramite.find(solicitud.getCtramite().toString());
                            if (tramite != null) {
                                //Tramite			
                                nombreTramite = CatalogDetailController.findxCodigoCodcatalogo(tramite.getTipoautorizacion(), tramite.getTipoautorizacioncodigo());
                                nombreCategoria = CatalogDetailController.findxCodigoCodcatalogo(tramite.getCategoria(), tramite.getCategoriacodigo());
                                nombreUsoActividad = CatalogDetailController.findxCodigoCodcatalogo(tramite.getUsoactividad(), tramite.getUsoactividadcodigo());
                                if (tramite.getCategoria().equals("14")) {
                                    requiereNoSolAucpBln = Boolean.TRUE;
                                    obtenerCentroControl(solicitud);
                                } else {
                                    requiereNoSolAucpBln = Boolean.FALSE;
                                }

                            } else {
                                MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_tramiteSinDatosAsociados"));
                            }
                            Date fechaLimiteDate = TgeneNotAccountingDayController.diasLaborablesPreviosAUnaFecha(new Date(), diasLaborablesPermitidos);

                            Calendar fechaLimite = Calendar.getInstance();
                            fechaLimite.setTime(fechaLimiteDate);
                            fechaLimite.set(Calendar.HOUR_OF_DAY, 0);
                            fechaLimite.set(Calendar.MINUTE, 0);
                            fechaLimite.set(Calendar.SECOND, 0);

                            Calendar fechaSolicitud = Calendar.getInstance();
                            fechaSolicitud.setTime(solicitud.getFverificarequisitos());
                            fechaSolicitud.set(Calendar.SECOND, 1);

                            if (fechaSolicitud.compareTo(fechaLimite) < 0) {
                                isOnlyMsj = true;
                                record.setEstadotramite("ANU");
                                record.setEstadotramitecodigo("ESTADOSOLICITUD");
                                super.update();
                                //	this.save(); 				    	
                                RequestContext.getCurrentInstance().update("messages");
                            } else {
                                isDenied = false;
                            }
                        } else {
                            MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_tramiteSinDatosAsociados"));
                        }
                    } else {
                        MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_tramiteSinDatosAsociados"));
                    }
                } catch (Exception e) {
                    MessageHelper.setMessageError(e);
                }
            }
        }
    }

    /**
     * Obtiene el centro de control segun usurio logeado.
     *
     * @param solicitud
     * @throws Exception
     *
     */
    private void obtenerCentroControl(TarmSolicitud solicitud) throws Exception {
        this.centroControl = CentroControlArmasController.findPorCodigo(solicitud.getCcentrocontrol());
        this.setNombreInstitucion(CatalogDetailController.findxCodigoCodcatalogo(centroControl.getNombreinstitucion(), centroControl.getNombreinstitucioncodigo()).getDescription());
    }

    /**
     * Incializa el controlador, cuando se esta utilizando una pagina que utliza
     * el controlador.
     */
    private void init() {
        try {
            this.recperpage = 500;
            this.beanalias = "CARGARDEPOSITO";
            isDenied = true;
            diasLaborablesPermitidos = ParametersController.find("DIASDEPOSITO", "1").getNumbervalue().intValue();
            
            isTrueNComprobante = Boolean.TRUE;
            isOnlyMsj = false;
            isEnableGrabar = Boolean.TRUE;
            isEnableCompletarTarea = Boolean.FALSE;
            obtenerCentroControlSolicitante();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * Metodo que devuelve el centro de control al que pertenece el cliente
     * dueno de la solicitud
     *
     * @throws Exception
     */
    private void obtenerCentroControlSolicitante() throws Exception {
        TsafeUserDetail tsafeUserDetailUsuario = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
        PersonAddressController personAddressController = new PersonAddressController();
        TcustPersonAddress tcustPersonAddres = personAddressController.findPrincipal(tsafeUserDetailUsuario.getPk().getPersoncode().toString());
        if (tcustPersonAddres != null && tcustPersonAddres.getProvincecode() != null) {
        } else {
            MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_notienedireccionprincipal"));
            return;
        }

    }

    /**
     * Accion que reinicia todas las variables de la pagina
     */
    public void cancelar() {
        init();
    }

    /**
     * Metodo que permite grabar el formulario junto al comprobante de deposito
     * en el Alfresco
     *
     */
    @Override
    public void save() {
        try {
            String xPathLocation = getRutaDocumentoSolBase() + "/cm:" + solicitud.getNumerosolicitud() + "/cm:" + "Deposito";
            if (record.getValorverificacion() != null && record.getValorverificacion().doubleValue() > 0) {
                if (isTrueNComprobante) {
                    if (!record.getFechacomprobante().after(new Date())) {
                        if (uploadedFile != null && uploadedFile.getFileName() != null) {
                            String extencionArchivo = getExtension(uploadedFile.getFileName());
                            String nombreArchivo = "CMPRBNT-" + solicitud.getNumerosolicitud() + "." + extencionArchivo;
                            if (alfrescoController.uploadFile(uploadedFile.getInputstream(), nombreArchivo, xPathLocation)) {
                                record.setXpathcomprobante(xPathLocation + "/cm:" + nombreArchivo);
                                //validamos si adjunta la resolucion
                                if (uploadedFileResolucion != null && uploadedFileResolucion.getFileName() != null) {
                                    String xPathLocationResolucion = getRutaDocumentoSolBase() + "/cm:" + solicitud.getNumerosolicitud() + "/cm:" + "Resolucion";
                                    String extencionArchivoResolucion = getExtension(uploadedFileResolucion.getFileName());
                                    String nombreArchivoResolucion = "RESOLUCION-" + solicitud.getNumerosolicitud() + "." + extencionArchivoResolucion;
                                    if (alfrescoController.uploadFile(uploadedFileResolucion.getInputstream(), nombreArchivoResolucion, xPathLocationResolucion)) {
                                        record.setXpathresolucion(xPathLocationResolucion + "/cm:" + nombreArchivoResolucion);
                                    } else {
                                        MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_adjuntar_resolucion"));
                                        return;
                                    }
                                }
                                super.update();
                                DtoSave dtosave = super.getDtoSave();
                                HashMap<String, DtoSave> msave = new HashMap<String, DtoSave>();
                                Request request = this.callerhelper.getRequest();
                                msave.put(this.beanalias, dtosave); // adicionar metadata de mantenimiento para cada tabla.				
                                request.setSaveTables(msave);
                                Response resp = this.callerhelper.executeSave(request);
                                if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
                                    this.postCommit(resp);
                                    MessageHelper.setMessageInfo(resp);
                                    isDenied = true;
                                    isEnableCompletarTarea = Boolean.TRUE;
                                    isEnableGrabar = Boolean.FALSE;
                                    FacesContext context = FacesContext.getCurrentInstance();
                                    context.addMessage(null, new FacesMessage("RECUERDE", MsgControlArmas.getProperty("msg_recuerdeClickContinuarTramite")));
                                } else {
                                    MessageHelper.setMessageError(resp);
                                }
                            } else {
                                MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_tramiteSinDatosAsociados"));
                            }
                        } else {
//				    		MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_archivo"));
                            MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_ingreseComprobanteDeposito"));
                        }
                    } else {
                        MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_fechaDepositoMayorFechaActual"));
                    }
                } else {
                    MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_comprobanteDepositoUsado"));
                }
            } else {
                MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_valorDepositoNegativoCero"));
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Throwable e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * Metodo que retorna la extencion del comprobante de deposito que se desea
     * subir al alfresco
     */
    public String getExtension(String filename) {
        int index = filename.lastIndexOf('.');
        if (index == -1) {
            return "";
        } else {
            return filename.substring(index + 1);
        }
    }

    /**
     * Metodo de consulta no utilizado pero sobrescrito por requisito de
     * herencia
     */
    @Override
    protected void querydatabase() {
        try {

        } catch (Exception e) {
            MessageHelper.setMessageError(e);
        }
    }

    @SuppressWarnings("unchecked")
    public void consultaTramites() {
        try {
            Request request = this.callerhelper.getRequest();
            DtoQuery dto = super.getDtoQuery(true);

            SubQuery subqueryTipo = new SubQuery("TgeneCatalogDetail", "description", "estado", "i.pk.catalog=    (select o.estado       from TarmSolicitud o where o.pk=t.pk.csolicitud) and "
                    + " i.pk.catalogcode=(select o.estadocodigo from TarmSolicitud o where o.pk=t.pk.csolicitud)");
            SubQuery subqueryEstadoTramite = new SubQuery("TgeneCatalogDetail", "description", "estadotramite", "i.pk.catalog=    t.estadotramite and"
                    + " i.pk.catalogcode=t.estadotramitecodigo");

            dto.addSubQuery(subqueryEstadoTramite);
            SubQuery subquerysolicitud = new SubQuery("TarmSolicitud", "numerosolicitud", "solicitud", "i.pk=t.pk.csolicitud");
            dto.addSubQuery(subquerysolicitud);
            dto.setOrderby("t.pk");

            TsafeUserDetail tsafeUserDetailUsuario = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");

            Filter filtro = new Filter();
            filtro.setSql("(numerocomprobante is null OR inicioFlujo is null) and estadotramite='REG' and valorapagar>0 and "
                    + " csolicitud in(select o.pk from TarmSolicitud o where o.personcode ='" + tsafeUserDetailUsuario.getPk().getPersoncode() + "' and o.estado ='APB')");
            dto.addFiltro(filtro);

            HashMap<String, DtoQuery> mtables = new HashMap<String, DtoQuery>();
            mtables.put(this.beanalias, dto); // permite adicionar mas de una tabla.
            request.setQueryTables(mtables);
            Response resp = this.callerhelper.executeQuery(request);
            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) != 0) {
                this.lrecord = new ArrayList<TarmSolicitudTramite>();
                MessageHelper.setMessageError(resp);
            } else {
                this.lrecord = (List<TarmSolicitudTramite>) resp.get(this.beanalias);
                super.postQuery(this.lrecord);
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    public void solicitudSeleccionada(TarmSolicitudTramite tarmSolicitudTramite) {
        try {
            numTramite = tarmSolicitudTramite.getNumerotramite();
            consultarSolicitud();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * Retorna la ruta base donde se almacenara dicho archivo
     *
     * @return
     */
    public String getRutaDocumentoSolBase() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(solicitud.getFregistro());
        StringBuilder ruta = new StringBuilder("cm:Solicitudes");
        ruta = ruta.append("/cm:A-").append(calendar.get(Calendar.YEAR));
        ruta = ruta.append("/cm:M-").append((calendar.get(Calendar.MONTH) + 1) <= 9 ? "0" + (calendar.get(Calendar.MONTH) + 1) : (calendar.get(Calendar.MONTH) + 1));
        return ruta.toString();
    }

    /**
     * Metodo para validar el comprobante de deposito/
     */
    public void validarComprobanteDeposito() {
        this.record.setNumerocomprobante(this.record.getNumerocomprobante().replaceAll(" ", ""));
        String []data = this.record.getNumerocomprobante().split("-");
        for(String s: data){
            List<TarmSolicitudTramite> usandoComprobanteList = SolicitudTramiteController.findByNumeroComprobante(s);
            if (usandoComprobanteList != null && usandoComprobanteList.size() > 0) {
                isTrueNComprobante = Boolean.FALSE;
                MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_comprobanteDepositoUsado"));
                break;
            } else {
                isTrueNComprobante = Boolean.TRUE;
            }
        }
    }

    /**
     * Carga el archivo a grabar en la memoria para su posterior persistencia en
     * el Alfresco
     */
    public void handleUpload(FileUploadEvent event) {
        uploadedFile = event.getFile();
    }

    /**
     * Carga el archivo a grabar en la memoria para su posterior persistencia en
     * el Alfresco
     */
    public void handleUploadResolucion(FileUploadEvent event) {
        uploadedFileResolucion = event.getFile();
    }

    /**
     * Recorta el nombre del archivo a cargarse
     *
     * @param nombre
     * @return nombre recortado
     */
    public String recorteNombre(String nombre) {
        String fielname = nombre;
        if (fielname.length() > 30) {
            fielname = fielname.substring(0, 30) + extencionArchivo(nombre);
        }
        return fielname;
    }

    /**
     * Obtiene la extencion del archivo a cargar
     *
     * @param nombre
     * @return
     */
    private String extencionArchivo(String nombre) {
        int pos = nombre.lastIndexOf('.');
        nombre = nombre.substring(pos);
        return nombre;
    }

    /**
     * Metodo para finalizar la tarea del flujo
     */
    public void iniciarFlujo() {

        try {
            TarmSolicitud tarmSolicitud = SolicitudController.findSolicitudxcodsolicitud(record.getPk().getCsolicitud());
            if (tarmSolicitud == null || tarmSolicitud.getModifiedData() == null || tarmSolicitud.getModifiedData().get("provincecode") == null) {
                MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_sinprovincia"));
                return;
            }
            cprovincia = tarmSolicitud.getModifiedData().get("provincecode").toString();
            Request request = callerhelper.getRequest();
            // limpiar request para finalizar la tarea.
            super.cleanRequest(request);
            request.modifiedData().put("isnew", "Y");
            request.modifiedData().put("csolicitud", record.getPk().getCsolicitud());
            request.modifiedData().put("numerotransaccion", record.getPk().getCtramite());
            request.modifiedData().put("numerosolicitud", solicitud.getNumerosolicitud());
            request.modifiedData().put("cprovincia", cprovincia);
            request.setLogsolicitude(solicitud.getNumerosolicitud());
            Response resp = callerhelper.executeSave(request);
            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
                MessageHelper.setMessageInfo(resp, MsgGeneral.getProperty("msg_initFlow") + " No SOLICITUD: " + solicitud.getNumerosolicitud());
                isEnableCompletarTarea = Boolean.FALSE;
            } else {
                MessageHelper.setMessageError(resp);
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    /**
     * Metodo para validar que el valor del comprobante de deposito sea mayor a
     * cero
     */
    public void valorMayorACero() {
        if (record.getValorverificacion().doubleValue() <= 0) {
            MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_valorDepositoNegativoCero"));
        }
    }

    public AlfrescoController getAlfrescoController() {
        return alfrescoController;
    }

    public void setAlfrescoController(AlfrescoController alfrescoController) {
        this.alfrescoController = alfrescoController;
    }

    public String getCsolicitud() {
        return csolicitud;
    }

    public void setCsolicitud(String csolicitud) {
        this.csolicitud = csolicitud;
    }

    public TgeneCatalogDetail getNombreTramite() {
        return nombreTramite;
    }

    public void setNombreTramite(TgeneCatalogDetail nombreTramite) {
        this.nombreTramite = nombreTramite;
    }

    public TgeneCatalogDetail getNombreCategoria() {
        return nombreCategoria;
    }

    public void setNombreCategoria(TgeneCatalogDetail nombreCategoria) {
        this.nombreCategoria = nombreCategoria;
    }

    public TgeneCatalogDetail getNombreUsoActividad() {
        return nombreUsoActividad;
    }

    public void setNombreUsoActividad(TgeneCatalogDetail nombreUsoActividad) {
        this.nombreUsoActividad = nombreUsoActividad;
    }

    public TarmSolicitud getSolicitud() {
        return solicitud;
    }

    public void setSolicitud(TarmSolicitud solicitud) {
        this.solicitud = solicitud;
    }

    public UploadedFile getUploadedFile() {
        return uploadedFile;
    }

    public void setUploadedFile(UploadedFile uploadedFile) {

        this.uploadedFile = uploadedFile;
    }

    public Boolean getIsDenied() {
        return isDenied;
    }

    public void setIsDenied(Boolean isDenied) {
        this.isDenied = isDenied;
    }

    public Boolean getIsOnlyMsj() {
        return isOnlyMsj;
    }

    public void setIsOnlyMsj(Boolean isOnlyMsj) {
        this.isOnlyMsj = isOnlyMsj;
    }

    public Boolean getIsTrueNComprobante() {
        return isTrueNComprobante;
    }

    public void setIsTrueNComprobante(Boolean isTrueNComprobante) {
        this.isTrueNComprobante = isTrueNComprobante;
    }

    public Boolean getIsEnableCompletarTarea() {
        return isEnableCompletarTarea;
    }

    public void setIsEnableCompletarTarea(Boolean isEnableCompletarTarea) {
        this.isEnableCompletarTarea = isEnableCompletarTarea;
    }

    public String getNumTramite() {
        return numTramite;
    }

    public void setNumTramite(String numTramite) {
        this.numTramite = numTramite;
    }

    public Boolean getIsEnableGrabar() {
        return isEnableGrabar;
    }

    public void setIsEnableGrabar(Boolean isEnableGrabar) {
        this.isEnableGrabar = isEnableGrabar;
    }

    public Boolean getRequiereNoSolAucpBln() {
        return requiereNoSolAucpBln;
    }

    public void setRequiereNoSolAucpBln(Boolean requiereNoSolAucpBln) {
        this.requiereNoSolAucpBln = requiereNoSolAucpBln;
    }

    public String getNombreInstitucion() {
        return nombreInstitucion;
    }

    public String setNombreInstitucion(String nombreInstitucion) {
        if (nombreInstitucion != null && !nombreInstitucion.isEmpty()) {
            this.nombreInstitucion = nombreInstitucion;
        } else {
            this.nombreInstitucion = "";
        }

        return nombreInstitucion;
    }

    public UploadedFile getUploadedFileResolucion() {
        return uploadedFileResolucion;
    }

    public void setUploadedFileResolucion(UploadedFile uploadedFileResolucion) {
        this.uploadedFileResolucion = uploadedFileResolucion;
    }

}
