/// <summary>
        /// Realiza la busqueda de unidades operativas de nivel proyecto por Empresa Matriz
        /// </summary>
        /// <param name="filtro">Filtro de búsqueda</param>
        /// <returns>Listado de Unidad Operativa de nivel proyecto por Empresa Matriz</returns>
        public ProcessResult <List <UnidadOperativaResponse> > BuscarUnidadOperativaProyectoPorEmpresaMatriz(FiltroUnidadOperativa filtro)
        {
            List <dynamic> resultadoNivel = null;
            List <dynamic> resultadoTipo  = null;
            ProcessResult <List <UnidadOperativaResponse> > resultado = new ProcessResult <List <UnidadOperativaResponse> >();

            try
            {
                Guid codigoUnidadOperativaMatriz = new Guid(filtro.CodigoUnidadOperativa);

                resultadoNivel = politicaService.ListarNivelUnidadOperativaDinamico().Result;
                resultadoTipo  = politicaService.ListarTipoUnidadOperativaDinamico().Result;

                List <UnidadOperativaLogic> listado = unidadOperativaLogicRepository.BuscarUnidadOperativaProyectoPorEmpresaMatriz(codigoUnidadOperativaMatriz);

                resultado.Result = listado.Select(u => UnidadOperativaAdapter.ObtenerUnidadOperativaResponse(u, resultadoNivel, resultadoTipo)).ToList();
            }
            catch (Exception e)
            {
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <UnidadOperativaService>(e);
            }

            return(resultado);
        }
        /// <summary>
        /// Obtener la unidad operativa superior de un nivel específico
        /// </summary>
        /// <param name="filtro">Obtener código de Unidad Operativa y nivel</param>
        /// <returns>Unidad operativa matriz o superior</returns>
        public ProcessResult <UnidadOperativaResponse> ObtenerUnidadOperativaPorNivelSuperior(FiltroUnidadOperativa filtro)
        {
            ProcessResult <UnidadOperativaResponse> resultado = new ProcessResult <UnidadOperativaResponse>();

            try
            {
                UnidadOperativaLogic objUnidadOperativa = unidadOperativaLogicRepository.ObtenerUnidadOperativaPorNivelSuperior(new Guid(filtro.CodigoUnidadOperativa), filtro.Nivel);
                resultado.Result = UnidadOperativaAdapter.ObtenerUnidadOperativaResponse(objUnidadOperativa, null, null);
            }
            catch (Exception e)
            {
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <UnidadOperativaService>(e);
            }

            return(resultado);
        }
        /// <summary>
        /// Lista las Unidades Operativas de una persona responsable.
        /// </summary>
        /// <param name="loginResponsable">Código de Identificación del Responsable</param>
        /// <returns>Lista unidades operativas</returns>
        public ProcessResult <List <UnidadOperativaResponse> > ListarUnidadesOperativasPorResponsable(string loginResponsable)
        {
            var resultado = new ProcessResult <List <UnidadOperativaResponse> >();

            try
            {
                List <UnidadOperativaLogic> listado = unidadOperativaLogicRepository.ListarUnidadesOperativasPorResponsable(loginResponsable);
                resultado.Result = listado.Select(u => UnidadOperativaAdapter.ObtenerUnidadOperativaResponse(u, null, null)).ToList();
            }
            catch (Exception e)
            {
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <TrabajadorService>(e);
            }

            return(resultado);
        }
        /// <summary>
        /// Lista las unidades operativas de un nivel superior al indicado como parámetro.
        /// </summary>
        /// <param name="codigoNivelUnidadOperativa">Codigo de Nivel de la Unidad Operativa</param>
        /// <returns>Listado de unidad operativas encontrados</returns>
        public ProcessResult <List <UnidadOperativaResponse> > BuscarUnidadOperativaNivelSuperior(string codigoNivelUnidadOperativa)
        {
            ProcessResult <List <UnidadOperativaResponse> > resultado = new ProcessResult <List <UnidadOperativaResponse> >();

            try
            {
                List <UnidadOperativaLogic> listado = unidadOperativaLogicRepository.BuscarUnidadOperativaNivelSuperior(codigoNivelUnidadOperativa);

                resultado.Result = listado.Select(u => UnidadOperativaAdapter.ObtenerUnidadOperativaResponse(u, null, null)).ToList();
            }
            catch (Exception e)
            {
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <UnidadOperativaService>(e);
            }

            return(resultado);
        }
        /// <summary>
        /// Realiza la busqueda de unidades operativas
        /// </summary>
        /// <param name="filtro">Filtro de búsqueda</param>
        /// <returns>Listado de unidad operativas encontrados</returns>
        public ProcessResult <List <UnidadOperativaResponse> > BuscarUnidadOperativa(FiltroUnidadOperativa filtro)
        {
            List <dynamic> resultadoNivel = null, resultadoTipo = null;
            ProcessResult <List <UnidadOperativaResponse> > resultado = new ProcessResult <List <UnidadOperativaResponse> >();

            try
            {
                resultadoNivel = politicaService.ListarNivelUnidadOperativaDinamico().Result;
                resultadoTipo  = politicaService.ListarTipoUnidadOperativaDinamico().Result;
                Guid?unidadPadreIdentificador       = filtro.UnidadSuperior != null ? new Guid(filtro.UnidadSuperior) : (Guid?)null;
                Guid?codigoUnidadOperativa          = filtro.CodigoUnidadOperativa != null ? new Guid(filtro.CodigoUnidadOperativa) : (Guid?)null;
                List <UnidadOperativaLogic> listado = unidadOperativaLogicRepository.BuscarUnidadOperativa(codigoUnidadOperativa, filtro.Nombre, filtro.Nivel, unidadPadreIdentificador, filtro.Indicador, filtro.NumeroPagina, filtro.RegistrosPagina);
                resultado.Result = listado.Select(u => UnidadOperativaAdapter.ObtenerUnidadOperativaResponse(u, resultadoNivel, resultadoTipo)).ToList();
            }
            catch (Exception e)
            {
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <UnidadOperativaService>(e);
            }

            return(resultado);
        }