예제 #1
0
        /// <summary>
        ///
        /// Obter uma quantidade N de participantes da trilha, aleatoriamente.
        /// </summary>
        /// <param name="usuarioTrilhaIdLogado">ID do usuário logado, que não deverá visualizar seu PIN na tela.</param>
        /// <param name="qntMax">Quantidade máxima de participantes.</param>
        /// <returns></returns>
        public virtual List <int> ObterParticipantes(int usuarioTrilhaIdLogado, int?qntMax = 50)
        {
            // Obter somente os ids das matrículas que possuam participações nesse nível.
            var ids =
                ListaUsuarioTrilha
                .Select(x => new { x.ID, x.NovasTrilhas, x.StatusMatricula })
                .Where(x => x.NovasTrilhas == true && x.StatusMatricula == enumStatusMatricula.Inscrito &&
                       x.ID != usuarioTrilhaIdLogado)
                .Select(x => x.ID)
                .ToList();

            var selecionados = new List <int>();

            var randi = new Random();

            // Loopar pelos ids e ir removendo aleatoriamente de acordo com a quantidade de ids restantes.
            // O loop só acontece enquanto houverem ids ou alcançar o limite máximo (qntMax)
            for (var i = 1; i <= qntMax && ids.Any(); i++)
            {
                var valor = ids[randi.Next(ids.Count())];

                selecionados.Add(valor);

                // Remover o id selecionado a cada loop para não repetir.
                ids.Remove(valor);
            }

            return(selecionados);
        }
예제 #2
0
 /// <summary>
 /// Verifica se o usuário possui matrícula num nível de trilha.
 /// </summary>
 /// <param name="usuarioId">ID do usuário</param>
 /// <returns></returns>
 public virtual bool UsuarioPossuiMatricula(int usuarioId)
 {
     return(ListaUsuarioTrilha.Any(ut => ut.Usuario.ID == usuarioId && ut.NovasTrilhas == true && ut.StatusMatricula != enumStatusMatricula.CanceladoAluno));
 }