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; } }
public OrdensVenda GetResumed(int idCliente, List <int> ano, int group1 = 0, int group2 = 0, List <int> lgroup = null) { var ctx = new DesenvContext(); var status = new int[] { 0, 1, 2, 5 }.ToList(); List <int> produtos = new List <int>(); if (group1 > 0) { produtos.Add(group1); } if (group2 > 0) { produtos.Add(group2); } if (lgroup != null && lgroup.Count() > 0) { produtos.AddRange(lgroup); } List <OrdemVenda> consulta = (from so in ctx.tblSellOrders join d in ctx.tblSellOrderDetails on so.intOrderID equals d.intOrderID join p in ctx.tblProducts on d.intProductID equals p.intProductID join c in ctx.tblCourses on d.intProductID equals c.intCourseID where so.intClientID == idCliente && so.intStatus != 1 && ano.Contains(c.intYear.Value) && ( (produtos.Count() == 0) || (produtos.Count() > 0 && produtos.Contains(p.intProductGroup1.Value)) ) orderby so.intOrderID descending select new OrdemVenda { ID = so.intOrderID, IdCliente = so.intClientID, IdFilial = so.intStoreID, Status = (OrdemVenda.StatusOv)so.intStatus, Status2 = (OrdemVenda.StatusOv)so.intStatus2, /////Data = it.dteDate ?? DateTime.MinValue, Descricao = so.txtComment, IdCondicaoPagamento = so.intConditionTypeID ?? -1, IdMethodoEnvio = so.intShippingMethodID ?? -1, IdVendedor = so.intSellerID ?? -1, IdTermo = so.intAgreementID ?? -1, IsParcelado = false, TxtRegister = "", IdProduto = ctx.tblSellOrderDetails.Where(sd => sd.intOrderID == so.intOrderID).Count() == 1 ? p.intProductID : 0, Year = c.intYear ?? 0, GroupID = p.intProductGroup1 ?? 0, // IdCombo = ctx.tblSellOrderDetails.Where(sd => sd.intOrderID == so.intOrderID).Count() > 1 ? //sÓ FAZ SE FOR COMBO // ctx.tblProductCombos_Products // .Where(combo => ctx.tblSellOrderDetails // .Any(sd => sd.intOrderID == so.intOrderID && sd.intProductID.Equals(combo.intProductID))) //PEGO TODA A RELAÇÃO PRODUTO X COMBOS QUE POSSUEM O ALGUM ID DE PRODUTO DA OV // .GroupBy(x => x.intComboID) //AGRUPO POR ID DE COMBO // .Select(x => new // { // qtdProdutosCombo = ctx.tblProductCombos_Products // .Where(cp => cp.intComboID == x.Key) // .Select(j => j.intProductID).Count(), // qtdProdutosComboNaOV = x.Distinct().Count(), // IdCombo = x.Key // }) // VEJO A QUANTIDADE DE PRODUTOS POR COMBO e a quantidade de produtos do combo presentes na OV // .Where(y => y.qtdProdutosCombo.Equals(y.qtdProdutosComboNaOV) && y.qtdProdutosCombo.Equals(ctx.tblProducts // .Where(produto => ctx.tblSellOrderDetails // .Any(sd => sd.intOrderID == so.intOrderID && sd.intProductID.Equals(produto.intProductID))) // .Count())) //Filtra os combos com todos os produtos do combo na OV e a mesma qtdade de produtos que a OV // .Select(x => x.IdCombo).DefaultIfEmpty(0).FirstOrDefault() : 0 } ).ToList(); OrdensVenda ov = new OrdensVenda(); ov.AddRange(consulta.Select(x => new OrdemVenda { ID = x.ID, IdCliente = x.IdCliente, IdFilial = x.IdFilial, Status = x.Status, Status2 = x.Status2, /////Data = it.dteDate ?? DateTime.MinValue, Descricao = x.Descricao, IdCondicaoPagamento = x.IdCondicaoPagamento, IdMethodoEnvio = x.IdMethodoEnvio, IdVendedor = x.IdVendedor, IdTermo = x.IdTermo, IsParcelado = x.IsParcelado, TxtRegister = x.TxtRegister, GroupID = x.GroupID, Year = x.Year, IdProduto = x.IdCombo == 0 ? x.IdProduto : 0, IdCombo = x.IdCombo }).Distinct()); foreach (var o in ov) { if (o.IdCombo > 0) { var produtosCombo = new ProdutoEntity().GetComboProdutos(o.IdCombo); o.ProductIDs = produtosCombo.Select(p => p.ID).ToList(); } else { o.ProductIDs = consulta.Where(c => c.ID == o.ID).Select(z => z.IdProduto).Distinct().ToList(); } } return(ov); }