Exemple #1
0
        public List <Semana> GetSemanas(int ano, int idProduto, int matricula, Semana.TipoAba aba)
        {
            try
            {
                const int ativo            = 1;
                const int inativo          = 0;
                const int produtoAdaptamed = 73;


                new Util.Log().SetLog(new LogMsPro
                {
                    Matricula = matricula,
                    IdApp     = Aplicacoes.MsProMobile,
                    Tela      = aba == Semana.TipoAba.Aulas
                                              ? Util.Log.MsProLog_Tela.MainAula
                                              : aba == Semana.TipoAba.Questoes
                                                  ? Util.Log.MsProLog_Tela.MainQuestao
                                                  : 0,
                    Acao = Util.Log.MsProLog_Acao.Abriu
                });

                var anoVigente = Utilidades.GetYear();


                using (var ctx = new DesenvContext())
                {
                    var lSemanas = new List <Semana>();

                    var semanaAtual = Utilidades.GetNumeroSemanaAtual(DateTime.Now);

                    var listaEntidades = ctx.Set <msp_API_ListaEntidades_Result>().FromSqlRaw("msp_API_ListaEntidades @intProductGroup = {0}, @intYear = {1}, @matricula = {2}", idProduto, ano, matricula)
                                         .ToList();

                    int prod = ProdutoEntity.GetProductByCourse(idProduto);

                    var temas     = listaEntidades.Select(y => y.intLessonTitleID);
                    var entidades = listaEntidades.Select(y => y.intID)
                                    .ToArray();

                    var acessoAntecipado = AlunoTemAcessoAntecipado(matricula);
                    var semanas          = listaEntidades.GroupBy(x => new { entidade = x.intID, semana = x.intSemana, dataInicio = x.dataInicio, datafim = x.datafim })
                                           .ToList();

                    var mesesCursados = ctx.csp_loadMesesCursados(matricula, prod);

                    var mesesCursadosAnoAnterior = mesesCursados.Where(x => x.intYear < anoVigente).Select(x => (int)x.intMonth).ToArray();

                    var mesesCursadosAnoAtual = mesesCursados.Where(x => x.intYear == anoVigente).Select(x => (int)x.intMonth).ToArray();


                    if (anoVigente > DateTime.Now.Year)
                    {
                        semanaAtual = 1;
                    }


                    var isSemanasDisabled = false;
                    if (!semanas.Any())
                    {
                        isSemanasDisabled = true;
                        const int matriculaGlobal = 96409;

                        semanas.AddRange(ctx.Set <msp_API_ListaEntidades_Result>().FromSqlRaw("msp_API_ListaEntidades @intProductGroup = {0}, @intYear = {1}, @matricula = {2}", idProduto, ano, matriculaGlobal).AsEnumerable()
                                         .GroupBy(x => new { entidade = x.intID, semana = x.intSemana, dataInicio = x.dataInicio, datafim = x.datafim })
                                         .ToList());
                    }

                    var dicProgressos         = new Dictionary <int, int>();
                    var dicProgressosQuestoes = new Dictionary <long, int>();

                    switch (aba)
                    {
                    case Semana.TipoAba.Aulas:
                        dicProgressos = new MednetEntity().GetProgressoAulas(temas.ToArray(), matricula);
                        break;

                    case Semana.TipoAba.Materiais:
                        break;

                    case Semana.TipoAba.Questoes:
                        dicProgressosQuestoes = GetProgressoQuestoes(entidades, matricula);
                        break;

                    case Semana.TipoAba.Revalida:
                        break;

                    default:
                        break;
                    }

                    foreach (var itSemana in semanas)
                    {
                        var numeroSemana = itSemana.Key.semana ?? 0;
                        var semana       = new Semana();

                        if (idProduto == produtoAdaptamed)
                        {
                            var currentYear = ano;
                            if (currentYear == 0)
                            {
                                currentYear = DateTime.Now.Year;
                            }

                            var dataTextoInicio = itSemana.Key.dataInicio + "/" + currentYear;
                            var dataInicio      = DateTime.ParseExact(dataTextoInicio, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                            var liberacao       = dataInicio <= DateTime.Now;
                            semana.Ativa       = isSemanasDisabled ? 0 : Convert.ToInt32(liberacao);
                            semana.Numero      = numeroSemana;
                            semana.DataInicio  = itSemana.Key.dataInicio;
                            semana.DataFim     = itSemana.Key.datafim;
                            semana.Apostilas   = new List <Apostila>();
                            semana.SemanaAtiva = Convert.ToInt32((dataTextoInicio == "15/09/2017"));
                        }
                        else
                        {
                            semana.Ativa      = VerificaLiberacaoSemana(acessoAntecipado, isSemanasDisabled, semanaAtual, itSemana.Key.semana, mesesCursadosAnoAnterior, mesesCursadosAnoAtual, itSemana.Key.dataInicio);
                            semana.Numero     = numeroSemana;
                            semana.DataInicio = itSemana.Key.dataInicio;
                            semana.DataFim    = itSemana.Key.datafim;
                            semana.Apostilas  = new List <Apostila>();

                            semana.SemanaAtiva = semanaAtual == numeroSemana ? ativo : inativo;
                        }

                        if (itSemana.Count() > 2)
                        {
                            var entidadeAgrupada = itSemana.GroupBy(y => new { idEntidade = y.intID, entidade = y.entidade }).ToList();
                            foreach (var entidade in entidadeAgrupada)
                            {
                                var percentlido = 0;
                                switch (aba)
                                {
                                case Semana.TipoAba.Aulas:
                                    percentlido = semana.Ativa == 1 ? (int?)dicProgressos.FirstOrDefault(x => x.Key == entidade.First().intLessonTitleID).Value ?? 0 : 0;      //GetProgressoAula(entidade.First().intLessonTitleID, matricula) : 0;
                                    break;

                                case Semana.TipoAba.Materiais:
                                    percentlido = semana.Ativa == 1 ? new MaterialApostilaEntity().GetProgressoMaterial(entidade.First().intID, matricula) : 0;
                                    break;

                                case Semana.TipoAba.Questoes:
                                    percentlido = semana.Ativa == 1 ? (int?)dicProgressosQuestoes.FirstOrDefault(x => x.Key == entidade.First().intID).Value ?? 0 : 0;      //GetPercentQuestoes((int)entidade.First().intID, matricula) : 0;
                                    break;

                                default:
                                    break;
                                }

                                var apostila = new Apostila
                                {
                                    IdEntidade  = (int)entidade.Key.idEntidade,
                                    Nome        = entidade.Key.entidade,
                                    PercentLido = percentlido,
                                    Temas       = new List <AulaTema>()
                                };

                                foreach (var tema in entidade)
                                {
                                    apostila.Temas.Add(new AulaTema {
                                        TemaID = tema.intLessonTitleID
                                    });
                                }

                                semana.Apostilas.Add(apostila);
                                if (entidadeAgrupada.Count() == 1)
                                {
                                    semana.Apostilas.Add(apostila);
                                }
                            }
                        }
                        else
                        {
                            foreach (var tema in itSemana)
                            {
                                var percentlido = 0;
                                switch (aba)
                                {
                                case Semana.TipoAba.Aulas:
                                    //percentlido = semana.Ativa == 1 ? GetProgressoAula(tema.intLessonTitleID, matricula) : 0;
                                    percentlido = semana.Ativa == 1 ? (int?)dicProgressos.FirstOrDefault(x => x.Key == tema.intLessonTitleID).Value ?? 0 : 0;
                                    break;

                                case Semana.TipoAba.Materiais:
                                    //percentlido = semana.Ativa == 1 ? new MaterialApostilaEntity().GetProgressoMaterial(semana.Apostilas.FirstOrDefault().IdEntidade, matricula) : 0;
                                    percentlido = new MaterialApostilaEntity().GetProgressoMaterial(tema.intID, matricula);
                                    break;

                                case Semana.TipoAba.Questoes:
                                    percentlido = semana.Ativa == 1 ? (int?)dicProgressosQuestoes.FirstOrDefault(x => x.Key == tema.intID).Value ?? 0 : 0;      // GetPercentQuestoes((int)tema.intID, matricula) : 0;
                                    break;

                                default:
                                    break;
                                }

                                var apostila = new Apostila
                                {
                                    IdEntidade  = (int)tema.intID,
                                    Nome        = tema.entidade,
                                    PercentLido = percentlido,
                                    Temas       = new List <AulaTema>()
                                };

                                apostila.Temas.Add(new AulaTema {
                                    TemaID = tema.intLessonTitleID
                                });

                                semana.Apostilas.Add(apostila);
                                if (itSemana.Count() == 1)
                                {
                                    semana.Apostilas.Add(apostila);
                                }
                            }
                        }

                        lSemanas.Add(semana);
                    }
                    //Se nenhuma semana estiver marcada como semana atual, marca a ultima
                    if (lSemanas.Any() && lSemanas.All(x => x.SemanaAtiva != 1))
                    {
                        lSemanas.Last().SemanaAtiva = 1;
                    }
                    return(lSemanas);
                }
            }
            catch
            {
                throw;
            }
        }