/// <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);
        }