/// <summary>
        /// Registra los datos del Lista de Variable
        /// </summary>
        /// <param name="datos">Datos del Lista a Registrar</param>
        /// <returns>Código de resultado de operación</returns>
        public ProcessResult <string> RegistrarVariableLista(VariableListaRequest datos)
        {
            var resultado = new ProcessResult <string>();

            try
            {
                if (datos.CodigoVariableLista == null || datos.CodigoVariableLista == "" || datos.CodigoVariableLista == "00000000-0000-0000-0000-000000000000")
                {
                    var entidad = VariableAdapter.ObtenerVariableListaEntity(datos);
                    variableListaEntityRepository.Insertar(entidad);
                }
                else
                {
                    var entidad = variableListaEntityRepository.GetById(new Guid(datos.CodigoVariableLista));
                    entidad.Nombre      = datos.Nombre;
                    entidad.Descripcion = datos.Descripcion;
                    variableListaEntityRepository.Editar(entidad);
                }

                variableListaEntityRepository.GuardarCambios();
                resultado.Result = "0";
            }
            catch (Exception e)
            {
                resultado.Result    = "-1";
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <VariableService>(e);
            }

            return(resultado);
        }
        /// <summary>
        /// Registra los datos del Campo de Variable
        /// </summary>
        /// <param name="datos">Datos del Campo a Registrar</param>
        /// <returns>Código de resultado de operación</returns>
        public ProcessResult <string> RegistrarVariableCampo(VariableCampoRequest datos)
        {
            var resultado = new ProcessResult <string>();

            try
            {
                if (datos.CodigoVariableCampo == null || datos.CodigoVariableCampo == "" || datos.CodigoVariableCampo == "00000000-0000-0000-0000-000000000000")
                {
                    var entidad = VariableAdapter.ObtenerVariableCampoEntity(datos);
                    variableCampoEntityRepository.Insertar(entidad);
                }
                else
                {
                    var entidad = variableCampoEntityRepository.GetById(new Guid(datos.CodigoVariableCampo));
                    entidad.Orden            = (byte)datos.Orden;
                    entidad.Nombre           = datos.Nombre;
                    entidad.TipoAlineamiento = datos.TipoAlineamiento;
                    entidad.Tamanio          = datos.Tamanio.Value;
                    variableCampoEntityRepository.Editar(entidad);
                }

                variableCampoEntityRepository.GuardarCambios();
                resultado.Result = "0";
            }
            catch (Exception e)
            {
                resultado.Result    = "-1";
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <VariableService>(e);
            }

            return(resultado);
        }
        /// <summary>
        /// Realiza la busqueda de variables
        /// </summary>
        /// <param name="filtro"></param>
        /// <returns>Lista de variables</returns>
        public ProcessResult <List <VariableResponse> > BuscarVariable(VariableRequest filtro)
        {
            ProcessResult <List <VariableResponse> > resultado = new ProcessResult <List <VariableResponse> >();

            try
            {
                Guid?codigoVariable  = (filtro.CodigoVariable != null && filtro.CodigoVariable != "") ? new Guid(filtro.CodigoVariable) : (Guid?)null;
                Guid?codigoPlantilla = (filtro.CodigoPlantilla != null && filtro.CodigoPlantilla != "") ? new Guid(filtro.CodigoPlantilla) : (Guid?)null;

                if (filtro.IndicadorGlobalSelect == "0")
                {
                    filtro.IndicadorGlobal = false;
                }
                else if (filtro.IndicadorGlobalSelect == "1")
                {
                    filtro.IndicadorGlobal = true;
                }
                else
                {
                    filtro.IndicadorGlobal = null;
                }

                List <VariableLogic> listado = variableLogicRepository.BuscarVariable(
                    codigoVariable,
                    filtro.Identificador,
                    filtro.Nombre,
                    filtro.CodigoTipo,
                    filtro.IndicadorGlobal,
                    codigoPlantilla,
                    filtro.IndicadorVariableSistema
                    );

                var tipoVariable = ListarTipoVariable().Result;

                var plantilla = plantillaService.BuscarPlantilla(new PlantillaRequest()
                {
                }).Result;

                resultado.Result = new List <VariableResponse>();

                foreach (var registro in listado)
                {
                    resultado.Result.Add(VariableAdapter.ObtenerVariable(registro, plantilla, tipoVariable));
                }
            }
            catch (Exception e)
            {
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <VariableService>(e);
            }
            return(resultado);
        }
        /// <summary>
        /// Realiza la búsqueda de Lista de Variable
        /// </summary>
        /// <param name="filtro">Filtro de Búsqueda</param>
        /// <returns>Lista de Variable Lista</returns>
        public ProcessResult <List <VariableListaResponse> > BuscarVariableLista(VariableListaRequest filtro)
        {
            var resultado = new ProcessResult <List <VariableListaResponse> >();

            try
            {
                Guid?codigoVariableLista = filtro.CodigoVariableLista == null ? (Guid?)null : new Guid(filtro.CodigoVariableLista);
                Guid?codigoVariable      = filtro.CodigoVariable == null ? (Guid?)null : new Guid(filtro.CodigoVariable);

                var listaConsulta = variableListaLogicRepository.BuscarLista(codigoVariableLista, codigoVariable, filtro.Nombre);

                resultado.Result = listaConsulta.Select(c => VariableAdapter.ObtenerVariableLista(c)).ToList();
            }
            catch (Exception e)
            {
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <VariableService>(e);
            }

            return(resultado);
        }
        /// <summary>
        /// Realiza la búsqueda de Campos de Variable
        /// </summary>
        /// <param name="filtro">Filtro de Búsqueda</param>
        /// <returns>Lista de Campos de Variable</returns>
        public ProcessResult <List <VariableCampoResponse> > BuscarVariableCampo(VariableCampoRequest filtro)
        {
            var resultado = new ProcessResult <List <VariableCampoResponse> >();

            try
            {
                Guid?codigoVariableCampo = filtro.CodigoVariableCampo == null ? (Guid?)null : new Guid(filtro.CodigoVariableCampo);
                Guid?codigoVariable      = filtro.CodigoVariable == null ? (Guid?)null : new Guid(filtro.CodigoVariable);

                var listaConsulta         = variableCampoLogicRepository.BuscarCampo(codigoVariableCampo, codigoVariable, filtro.Nombre, filtro.Orden);
                var listaTipoAlineamiento = this.ListarTipoAlineamiento().Result;

                resultado.Result = listaConsulta.Select(c => VariableAdapter.ObtenerVariableCampo(c, listaTipoAlineamiento)).ToList();
            }
            catch (Exception e)
            {
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <VariableService>(e);
            }

            return(resultado);
        }
        /// <summary>
        /// Registrar Variable
        /// </summary>
        /// <param name="filtro">Variable a registrar</param>
        /// <returns>Indicador de conformidad
        /// 0: Registro satisfactorio
        /// 2: Identificador repetido
        /// 3: Nombre repetido
        /// -1: Ocurrio un Error Inesperado</returns>
        public ProcessResult <string> RegistrarVariable(VariableRequest filtro)
        {
            ProcessResult <string> resultado = new ProcessResult <string>();

            resultado.Result = "0";
            try
            {
                var listaVariable = BuscarVariable(new VariableRequest()
                {
                }).Result;

                //Validar si el Idetificador de la variable es repetido
                if (listaVariable.Any(itemAny => (filtro.CodigoVariable == null || new Guid(filtro.CodigoVariable) != itemAny.CodigoVariable) &&
                                      (filtro.IndicadorGlobal == true || itemAny.CodigoPlantilla == new Guid(filtro.CodigoPlantilla)) &&
                                      itemAny.Identificador == filtro.Identificador))
                {
                    resultado.Result    = "2";
                    resultado.IsSuccess = false;
                    return(resultado);
                }

                //Validar si el Nombre de la variable es repetido
                if (listaVariable.Any(itemAny => (filtro.CodigoVariable == null || new Guid(filtro.CodigoVariable) != itemAny.CodigoVariable) &&
                                      (filtro.IndicadorGlobal == true || itemAny.CodigoPlantilla == new Guid(filtro.CodigoPlantilla)) &&
                                      itemAny.Nombre == filtro.Nombre))
                {
                    resultado.Result    = "3";
                    resultado.IsSuccess = false;
                    return(resultado);
                }

                var entidad = VariableAdapter.ObtenerVariableEntityDesdeVariableRequest(filtro);


                if (filtro.CodigoVariable == null)
                {
                    variableEntityRepository.Insertar(entidad);

                    variableEntityRepository.GuardarCambios();
                    //Agregar una columna por default si es tabla
                    if (entidad.CodigoTipo == DatosConstantes.TipoVariable.Tabla)
                    {
                        var campo = new VariableCampoEntity();
                        campo.CodigoVariableCampo = Guid.NewGuid();
                        campo.CodigoVariable      = entidad.CodigoVariable;
                        campo.Nombre           = "Título";
                        campo.Orden            = 1;
                        campo.Tamanio          = 100;
                        campo.TipoAlineamiento = "center";
                        variableCampoEntityRepository.Insertar(campo);
                        variableCampoEntityRepository.GuardarCambios();
                    }
                }
                else
                {
                    var varibleActual = variableEntityRepository.GetById(entidad.CodigoVariable);
                    varibleActual.CodigoPlantilla          = entidad.CodigoPlantilla;
                    varibleActual.CodigoTipo               = entidad.CodigoTipo;
                    varibleActual.Identificador            = entidad.Identificador;
                    varibleActual.Nombre                   = entidad.Nombre;
                    varibleActual.IndicadorGlobal          = entidad.IndicadorGlobal;
                    varibleActual.Descripcion              = entidad.Descripcion;
                    varibleActual.IndicadorVariableSistema = entidad.IndicadorVariableSistema;
                    variableEntityRepository.Editar(varibleActual);

                    variableEntityRepository.GuardarCambios();
                }

                resultado.IsSuccess = true;
            }
            catch (Exception e)
            {
                resultado.Result    = "-1";
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <VariableService>(e);
            }

            return(resultado);
        }