/// <summary>
        /// Realiza la adaptación de campos para registrar o actualizar
        /// </summary>
        /// <param name="data">Datos a registrar o actualizar</param>
        /// <returns>Entidad Plantilla con los datos a registrar</returns>
        public static PlantillaRequerimientoEntity RegistrarPlantilla(PlantillaRequerimientoRequest data)
        {
            var plantillaRequerimientoEntity = new PlantillaRequerimientoEntity();

            if (data.CodigoPlantilla != null)
            {
                plantillaRequerimientoEntity.CodigoPlantilla = new Guid(data.CodigoPlantilla);
            }
            else
            {
                Guid code;
                code = Guid.NewGuid();
                plantillaRequerimientoEntity.CodigoPlantilla = code;
            }

            plantillaRequerimientoEntity.Descripcion          = data.Descripcion;
            plantillaRequerimientoEntity.CodigoEstadoVigencia = data.CodigoEstadoVigencia;
            plantillaRequerimientoEntity.IndicadorAdhesion    = Convert.ToBoolean(data.IndicadorAdhesion);
            plantillaRequerimientoEntity.FechaInicioVigencia  = DateTime.ParseExact(data.FechaInicioVigenciaString, DatosConstantes.Formato.FormatoFecha, System.Globalization.CultureInfo.InvariantCulture);
            return(plantillaRequerimientoEntity);
        }
        /// <summary>
        /// Registra o actualiza una plantilla
        /// </summary>
        /// <param name="data">Datos a registrar</param>
        /// <returns>Indicador con el resultado de la operación</returns>
        public ProcessResult <object> RegistrarPlantilla(PlantillaRequerimientoRequest data)
        {
            ProcessResult <object> resultado = new ProcessResult <object>();

            try
            {
                PlantillaRequerimientoEntity entidad = PlantillaRequerimientoAdapter.RegistrarPlantilla(data);
                DateTime fechaActual    = DateTime.Now.Date;
                bool     existeRepetido = false;

                if (!string.IsNullOrWhiteSpace(data.FechaInicioVigenciaString))
                {
                    var resultadoValidacion = plantillaRequerimientoLogicRepository.BuscarPlantillaTipo(Convert.ToBoolean(data.IndicadorAdhesion));
                    existeRepetido = resultadoValidacion.Any(x => x.CodigoPlantilla != entidad.CodigoPlantilla && x.FechaInicioVigenciaDate == entidad.FechaInicioVigencia);
                    if (existeRepetido)
                    {
                        resultado.IsSuccess = false;
                        resultado.Exception = new ApplicationLayerException <PlantillaRequerimientoService>(MensajesSistema.PlantillaExiste);
                    }
                    else
                    {
                        if (data.CodigoPlantilla == null && data.CodigoPlantillaCopiar == null)
                        {
                            entidad.CodigoEstadoVigencia = DatosConstantes.EstadoVigencia.Proximo;
                            plantillaRequerimientoEntityRepository.Insertar(entidad, entornoActualAplicacion);
                        }
                        else if (data.CodigoPlantillaCopiar != null)
                        {
                            entidad.CodigoEstadoVigencia = DatosConstantes.EstadoVigencia.Proximo;
                            plantillaRequerimientoEntityRepository.CopiarPlantilla(new Guid(data.CodigoPlantillaCopiar), data.Descripcion, Convert.ToDateTime(data.FechaInicioVigenciaString), entornoActualAplicacion.UsuarioSession, entornoActualAplicacion.Terminal);
                        }
                        else
                        {
                            var entidadSincronizar = plantillaRequerimientoEntityRepository.GetById(entidad.CodigoPlantilla);
                            entidadSincronizar.Descripcion         = entidad.Descripcion;
                            entidadSincronizar.IndicadorAdhesion   = entidad.IndicadorAdhesion;
                            entidadSincronizar.FechaInicioVigencia = entidad.FechaInicioVigencia;
                            plantillaRequerimientoEntityRepository.Editar(entidadSincronizar, entornoActualAplicacion);
                        }

                        plantillaRequerimientoEntityRepository.GuardarCambios();

                        plantillaRequerimientoEntityRepository.ActualizarPlantillaEstadoVigencia();

                        resultado.Result = data;
                    }
                }
                else
                {
                    resultado.IsSuccess = false;
                    resultado.Exception = new ApplicationLayerException <PlantillaRequerimientoService>(MensajesSistema.PlantillaFechaInicioVigenciIncorrecto);
                }
            }
            catch (Exception e)
            {
                LogBL.grabarLogError(new Exception("RegistrarPlantillaRequerimiento"));
                LogBL.grabarLogError(e.GetBaseException());
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <PlantillaRequerimientoService>(e.GetBaseException().Message);
            }
            return(resultado);
        }
        /// <summary>
        /// Realiza la búsqueda de plantillas
        /// </summary>
        /// <param name="filtro">Filtro de búsqueda</param>
        /// <returns>Listado de plantillas</returns>
        public ProcessResult <List <PlantillaRequerimientoResponse> > BuscarPlantilla(PlantillaRequerimientoRequest filtro)
        {
            ProcessResult <List <PlantillaRequerimientoResponse> > resultado = new ProcessResult <List <PlantillaRequerimientoResponse> >();
            //List<CodigoValorResponse> resultadoTipoContrato = null;
            //List<CodigoValorResponse> resultadoTipoDocumentoContrato = null;
            List <CodigoValorResponse> resultadoEstadoVigencia = null;

            try
            {
                //resultadoTipoContrato = politicaService.ListarTipoContrato().Result;
                //resultadoTipoDocumentoContrato = politicaService.ListarTipoDocumentoContrato().Result;
                resultadoEstadoVigencia = politicaService.ListarEstadoVigencia().Result;

                Guid?codigoPlantilla = filtro.CodigoPlantilla != null ? new Guid(filtro.CodigoPlantilla) : (Guid?)null;

                DateTime?fechaInicioVigencia = null;
                DateTime?fechaFinVigencia    = null;

                if (!string.IsNullOrWhiteSpace(filtro.FechaInicioVigenciaString))
                {
                    fechaInicioVigencia = DateTime.ParseExact(filtro.FechaInicioVigenciaString, DatosConstantes.Formato.FormatoFecha, System.Globalization.CultureInfo.InvariantCulture);
                }
                else
                {
                    fechaInicioVigencia = null;
                }

                if (!string.IsNullOrWhiteSpace(filtro.FechaFinVigenciaString))
                {
                    fechaFinVigencia = DateTime.ParseExact(filtro.FechaFinVigenciaString, DatosConstantes.Formato.FormatoFecha, System.Globalization.CultureInfo.InvariantCulture);
                }
                else
                {
                    fechaFinVigencia = null;
                }

                List <PlantillaRequerimientoLogic> listado = plantillaRequerimientoLogicRepository.BuscarPlantilla(codigoPlantilla, filtro.Descripcion,
                                                                                                                   filtro.CodigoEstadoVigencia, filtro.IndicadorAdhesion,
                                                                                                                   fechaInicioVigencia, fechaFinVigencia, filtro.NumeroPagina, filtro.RegistrosPagina);

                resultado.Result = new List <PlantillaRequerimientoResponse>();
                foreach (var registro in listado)
                {
                    var plantilla = PlantillaRequerimientoAdapter.ObtenerPlantillaPaginado(registro, resultadoEstadoVigencia);
                    resultado.Result.Add(plantilla);
                }
            }
            catch (Exception e)
            {
                resultado.IsSuccess = false;
                resultado.Exception = new ApplicationLayerException <PlantillaRequerimientoService>(e);
            }
            return(resultado);
        }