Example #1
0
        public ActionResult Drawlots(int idSorteio)
        {
            var responseParticipantes = _sorteioAppService.GetById(idSorteio);

            if (!responseParticipantes.IsSuccessStatusCode)
            {
                return(ErrorMessage("Erro ao trazer participantes"));
            }


            var dadosParticipantesSorteio = JsonConvert.DeserializeObject <SorteioViewModel>
                                                (responseParticipantes.Content.ReadAsStringAsync().Result);

            if (!dadosParticipantesSorteio.SorteioParticipantes.Any())
            {
                return(ErrorMessage("Não foi encontrado nenhum participante"));
            }

            if (dadosParticipantesSorteio.QtdParticipantes <= dadosParticipantesSorteio.QtdeItens)
            {
                foreach (var vencedor in dadosParticipantesSorteio.SorteioParticipantes)
                {
                    _sorteioParticipanteAppService.VencedorParticipantesSorteio(idSorteio, vencedor.Id_Participante);

                    var sorteado      = _usuarioAppService.GetByName(vencedor.Nome_Participante);
                    var sorteadoEmail = JsonConvert.DeserializeObject <UsuarioViewModel>(sorteado.Content.ReadAsStringAsync().Result);

                    EnviarEmail(sorteadoEmail.Email, sorteadoEmail.Nome, dadosParticipantesSorteio.Nome, dadosParticipantesSorteio.NomeCriador);
                }
                return(View(dadosParticipantesSorteio));;
            }

            var aleatorio         = new Random();
            var participantes     = dadosParticipantesSorteio.SorteioParticipantes;
            var vencedores        = new string[dadosParticipantesSorteio.QtdeItens];
            var contadorRotina    = 0;
            var posicoesSorteadas = new int?[dadosParticipantesSorteio.QtdeItens];

            var sortearNovamente = _sorteioParticipanteAppService.SortearNovamente(idSorteio);

            if (!sortearNovamente.IsSuccessStatusCode)
            {
                return(ErrorMessage("Erro ao zerar Vencedores"));
            }

            do
            {
                var posicao = aleatorio.Next(0, participantes.Count);
                if (!posicoesSorteadas.Contains(posicao))
                {
                    posicoesSorteadas[contadorRotina]    = posicao;
                    vencedores[contadorRotina]           = participantes[posicao].Nome_Participante;
                    dadosParticipantesSorteio.QtdeItens -= 1;
                    _sorteioParticipanteAppService.VencedorParticipantesSorteio(idSorteio, participantes[posicao].Id_Participante);
                    contadorRotina++;

                    var sorteado      = _usuarioAppService.GetByName(participantes[posicao].Nome_Participante);
                    var sorteadoEmail = JsonConvert.DeserializeObject <UsuarioViewModel>(sorteado.Content.ReadAsStringAsync().Result);

                    EnviarEmail(sorteadoEmail.Email, sorteadoEmail.Nome, dadosParticipantesSorteio.Nome, participantes[posicao].Sorteio.NomeCriador);
                }
            } while (dadosParticipantesSorteio.QtdeItens > 0);

            var getVencedores = new SorteioViewModel {
                Nome = dadosParticipantesSorteio.Nome
            };

            foreach (var vencedor in vencedores)
            {
                getVencedores.SorteioParticipantes.Add(new SorteioParticipanteViewModel {
                    Nome_Participante = vencedor
                });
            }

            return(View(getVencedores));
        }