예제 #1
0
        public int BuscarSemanaPagaAlunoCancelado(int ano, int matricula, int anoAtual, int cursoID)
        {
            var semanaPaga = -1;

            using (var ctx = new DesenvContext())
            {
                var produtos = new List <int?>();
                if (cursoID == (int)Produto.Cursos.MED)
                {
                    produtos.Add((int)Utilidades.ProductGroups.MED);
                    produtos.Add((int)Utilidades.ProductGroups.CPMED);
                    produtos.Add((int)Utilidades.ProductGroups.MEDEAD);
                }
                else if (cursoID == (int)Produto.Cursos.MEDCURSO)
                {
                    produtos.Add((int)Utilidades.ProductGroups.MEDCURSO);
                    produtos.Add((int)Utilidades.ProductGroups.MEDCURSOEAD);
                }
                else
                {
                    produtos.Add(ProdutoEntity.GetProductByCourse(cursoID));
                }

                var listPagamentos = new List <csp_CustomClient_PagamentosProdutosGeral_Result>();
                var listOrders     = (from so in ctx.tblSellOrders
                                      join od in ctx.tblSellOrderDetails on so.intOrderID equals od.intOrderID
                                      join pr in ctx.tblProducts on od.intProductID equals pr.intProductID
                                      join c in ctx.tblCourses on pr.intProductID equals c.intCourseID
                                      where so.intClientID == matricula &&
                                      produtos.Contains(pr.intProductGroup1) &&
                                      c.intYear == ano
                                      select new { so.intOrderID, so.intStatus, so.intStatus2 }).ToList();

                if (!listOrders.Where(x => x.intStatus == (int)Utilidades.ESellOrderStatus.Ativa).Any() && listOrders.Any(x => x.intStatus2 == (int)Utilidades.ESellOrderStatus.Cancelada))
                {
                    listPagamentos = ctx.Set <csp_CustomClient_PagamentosProdutosGeral_Result>().FromSqlRaw("csp_CustomClient_PagamentosProdutosGeral @p1 = {0}, @p2 = {1}", matricula, ano, 0)
                                     .Where(x => x.intYear == ano).ToList();

                    if (listPagamentos.Count > 0)
                    {
                        var maxMonth = (int)listPagamentos.Where(y => y.txtStatus == "OK").Max(x => x.intMonth);
                        if (maxMonth > 0 && maxMonth <= 12)
                        {
                            var ultimoDiaMes = DateTime.DaysInMonth(anoAtual, maxMonth);
                            var d            = new DateTime(anoAtual, maxMonth, ultimoDiaMes);
                            semanaPaga = Utilidades.GetNumeroSemanaAtual(d);
                        }
                    }
                }
            }

            return(semanaPaga);
        }
예제 #2
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;
            }
        }