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); }
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; } }