示例#1
0
        public void SortearJogos(int id, int barragemId, bool notificarApp = true)
        {
            var rodadaNegocio = new RodadaNegocio();

            try
            {
                List <Classe> classes       = db.Classe.Where(c => c.barragemId == barragemId && c.ativa == true).ToList();
                var           isClasseUnica = db.BarragemView.Find(barragemId).isClasseUnica;
                var           jogos         = new List <Jogo>();
                for (int i = 0; i < classes.Count(); i++)
                {
                    if (isClasseUnica)
                    {
                        rodadaNegocio.EfetuarSorteioPorProximidade(barragemId, classes[i].Id, id);
                    }
                    else
                    {
                        jogos = rodadaNegocio.EfetuarSorteio(classes[i].Id, barragemId, null, id);
                        jogos = rodadaNegocio.definirDesafianteDesafiado(jogos, classes[i].Id, barragemId);
                        rodadaNegocio.salvarJogos(jogos, id);
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            if (notificarApp)
            {
                NotificacaoApp(barragemId);
            }
        }
示例#2
0
        public string GerarRodadasAutomaticas()
        {
            if (DateTime.Now.Hour < 22)
            {
                return("0");
            }
            DateTime      hoje          = DateTime.Now.Date;
            RodadaNegocio rodadaNegocio = new RodadaNegocio();
            Dictionary <Temporada, string> temporadasComErro = new Dictionary <Temporada, string>();

            List <Temporada> temporadasQueIniciamHoje = db.Temporada.Where(t => t.isAutomatico &&
                                                                           t.dataInicio == hoje).ToList();

            //para cada temporada
            //  1. tratar zeramento do ranking se for o caso(a implementar)
            //  2.fechar rodada
            //  3.criar nova rodada
            //  4.sortear jogos da rodada
            //  5.enviar email
            foreach (Temporada temporada in temporadasQueIniciamHoje)
            {
                try
                {
                    List <Rodada> rodadas = db.Rodada.Where(r => r.temporadaId == temporada.Id).ToList();
                    if (rodadas.Count == 0)
                    {
                        criarNovaRodadaComJogos(rodadaNegocio, temporada, hoje);
                    }
                }catch (Exception e)
                {
                    temporadasComErro.Add(temporada, e.Message);
                }
            }

            List <Rodada> rodadasQueEncerramHoje = db.Rodada.Where(r => DbFunctions.TruncateTime(r.dataFim) == hoje && r.isAberta).ToList();

            foreach (Rodada rodada in rodadasQueEncerramHoje)
            {
                Temporada temporada = rodada.temporada;
                try
                {
                    if (temporada.isAutomatico)
                    {
                        rodadaNegocio.FecharRodada(rodada.Id);
                        criarNovaRodadaComJogos(rodadaNegocio, temporada, hoje);
                    }
                }catch (Exception e)
                {
                    temporadasComErro.Add(temporada, e.Message);
                }
            }

            if (temporadasComErro.Count > 0)
            {
                notificarErros(temporadasComErro);
            }

            return("1");
        }
示例#3
0
        private void criarNovaRodadaComJogos(RodadaNegocio rodadaNegocio, Temporada temporada, DateTime hoje)
        {
            Rodada novaRodada = new Rodada();

            novaRodada.temporadaId = temporada.Id;
            novaRodada.barragemId  = temporada.barragemId;
            novaRodada.dataInicio  = hoje;
            novaRodada.dataFim     = hoje.AddDays(temporada.tamanhoRodada.Value);
            rodadaNegocio.Create(novaRodada);
            rodadaNegocio.SortearJogos(novaRodada.Id, temporada.barragemId);
            notificarOrganizadorPorEmail(temporada, novaRodada, null);
        }