예제 #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;
            }
        }
예제 #3
0
        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);
        }