Exemple #1
0
        private void LembreteFornecedorAceiteMembro()
        {
            try
            {
                var dataHoje = DateTime.Now;

                if (dataHoje.DayOfWeek != DayOfWeek.Saturday && dataHoje.DayOfWeek != DayOfWeek.Sunday)
                {
                    Connection = new HubConnection(Url);
                    Proxy      = Connection.CreateHubProxy("Notificacoes");
                    Connection.Start();

                    NotificacoesAlertasService service = new NotificacoesAlertasService();
                    eventLog9.WriteEntry($"Lembrando fornecedor de aceitar mebro.", EventLogEntryType.Information, 1);
                    List <Usuario> usuarios = service.EnviarEmailSmsFornecedorAceitarMembro();

                    if (usuarios.Count > 0)
                    {
                        Proxy.Invoke("LembreteFornecedorAceiteMembros", usuarios.Select(c => c.TokenSignalR).ToList());
                    }

                    eventLog9.WriteEntry($"Lembrete de aceite para fornecedor executada com sucesso!", EventLogEntryType.Information, 1);
                }
            }
            catch (Exception ex)
            {
                eventLog9.WriteEntry($"Erro ao lembrar fornecedor para aceitar membro.\n\n{ex}", EventLogEntryType.Error, 1);
            }
        }
Exemple #2
0
        private void fctNotificacaoAlertas()
        {
            NotificacoesAlertasService NAservice = new NotificacoesAlertasService();
            TipoAvisos objTipoAviso = new TipoAvisos();

            //Seta usuário Padrão de Robô
            SessaoEconomiza.UsuarioId = int.Parse(ConfigurationManager.AppSettings["usuarioPadraoRobo"]);



            //Valida Horario Util
            //das 9h as 17h
            int HoraUtilInicio = 9;
            int HoraUtilFim    = 17;
            int horaAtual      = DateTime.Now.Hour;

            if (DateTime.Now.DayOfWeek != DayOfWeek.Sunday && DateTime.Now.DayOfWeek != DayOfWeek.Saturday)
            {
                ////Valida Novas Cotações, se Fornecedor ainda não deu o Lance.
                eventLog.WriteEntry("Inicio NovaCotacao.", EventLogEntryType.Information);
                objTipoAviso = NAservice.GetTipoAviso((int)TipoAviso.NovaCotacao);
                TrataFornecedorNovaCotacao(objTipoAviso);
            }


            if (horaAtual >= HoraUtilInicio && horaAtual <= HoraUtilFim && (DateTime.Now.DayOfWeek != DayOfWeek.Sunday && DateTime.Now.DayOfWeek != DayOfWeek.Saturday))
            {
                //Trata Aceites dos Pedidos/Cotacoes
                eventLog.WriteEntry("Inicio PedidoPendentedeAceiteMembro.", EventLogEntryType.Information);
                objTipoAviso = NAservice.GetTipoAviso((int)TipoAviso.PedidoPendentedeAceiteMembro);
                TrataPedidosPendentesAceiteMembro(objTipoAviso);

                eventLog.WriteEntry("Inicio PedidoPendentedeAceiteFornecedor.", EventLogEntryType.Information);
                objTipoAviso = NAservice.GetTipoAviso((int)TipoAviso.PedidoPendentedeAceiteFornecedor);
                TrataPedidosPendentesAceiteFornecedor(objTipoAviso);

                ////Novo Fornecedor Cadastrado, aviso para membros.
                eventLog.WriteEntry("Inicio NovoFornecedorAvisoMembro.", EventLogEntryType.Information);
                objTipoAviso = NAservice.GetTipoAviso((int)TipoAviso.NovoFornecedorAvisoMembro);
                NovoFornecedorAvisoMembro(objTipoAviso);

                // Antecipação do Pedido do Membro Agendado pelo Calendário.
                //eventLog.WriteEntry("Inicio NotificaAntecipacaoCotacaoPedidoMembro.", EventLogEntryType.Information);
                //objTipoAviso = NAservice.GetTipoAviso((int)TipoAviso.NovoFornecedorAvisoMembro);
                //AntecipacaoCotacaoPedidoMembro(objTipoAviso);


                ////Aceite de Fornecedor para Trabalhar com Membr/*os*/
                //eventLog.WriteEntry("Inicio PendentedeAceiteFornecedorMembro.", EventLogEntryType.Information);
                //objTipoAviso = NAservice.GetTipoAviso((int)TipoAviso.PendentedeAceiteFornecedorMembro);
                //TrataAceiteFornecedorParaMembro(objTipoAviso);

                //Valida Prazo de Entrega do Pedido.
            }
        }
Exemple #3
0
        private void AntecipacaoCotacaoPedidoMembro(TipoAvisos pTipoAviso)
        {
            NotificacoesAlertasService NAService = new NotificacoesAlertasService();
            EmailService EmailSrv       = new EmailService();
            SmsService   SmsSrv         = new SmsService();
            var          _templateEmail = EmailSrv.BuscaTemplate(41);

            var listUsuariosPedido = NAService.AntecipacaoPedidoMembro();

            listUsuariosPedido.ForEach(x =>
            {
                var dataCotacaoHoje = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 12, 0, 0);

                EmailSrv.EnviarEmailViaRobo(NAService.UsuarioRobo(), $"Economiza Já -  Adiantamos o pedido {x.Key} para {dataCotacaoHoje}.", x.Value.UsuarioEmail, _templateEmail, Origem.NovaCotacao);

                var telefone    = $"{x.Value.Telefones.FirstOrDefault(t => t.Ativo).DddCel}{x.Value.Telefones.FirstOrDefault(t => t.Ativo).Celular}";
                var mensagemSms = $"Economiza Já - Adiantamos a cotação do pedido {x.Key} para {dataCotacaoHoje}";

                SmsSrv.EnviaSms(telefone, mensagemSms, TipoOrigemSms.NovaCotacao);
            });
        }
Exemple #4
0
        private void TrataFornecedorNovaCotacao(TipoAvisos pTipoAviso)
        {
            try
            {
                NotificacoesAlertasService NAService = new NotificacoesAlertasService();
                EmailService EmailSrv                = new EmailService();
                SmsService   SmsSrv                  = new SmsService();
                var          _templateEmail          = EmailSrv.BuscaTemplate(41);
                var          qtdHoraEnvioNotificacao = Convert.ToInt32(NAService.GetParametroSistema("NOTIF_FECH_COTACAO"));

                List <EntidadeCotacao.Cotacao> listaPedidoMembro = NAService.ListarCotacoesPendentes();

                foreach (EntidadeCotacao.Cotacao item in listaPedidoMembro)
                {
                    var qtdItens = item.CotacaoPedidos.SelectMany(x => x.Pedido.ItemPedidos).Sum(q => q.Quantidade);

                    var frase = qtdItens > 1 ? $"{qtdItens} itens" : $"{qtdItens} item";

                    var mensagemSms = $"Economiza Já - Daqui a pouco a cotação {item.Id} irá encerrar, temos {frase} para você dar o preço, não deixe de faturar. Se já respondeu desconsiderar este aviso.";

                    var templateCompleto = _templateEmail.Replace("#CotacaoId#", item.Id.ToString()).Replace("#Frase#", frase);

                    List <EntidadeUsuario.Usuario> listaUsuario = NAService.UsuariosFornecedoresResponderCotacao(item, qtdHoraEnvioNotificacao);

                    foreach (EntidadeUsuario.Usuario usuario in listaUsuario)
                    {
                        EmailSrv.EnviarEmailViaRobo(NAService.UsuarioRobo(), $"Economiza Já -  Daqui a pouco a cotação {item.Id} irá encerrar.", usuario.UsuarioEmail, templateCompleto, Origem.NovaCotacao);

                        SmsSrv.EnviaSms(usuario.Pessoa.Telefones.Select(t => t.DddCel).FirstOrDefault() + usuario.Pessoa.Telefones.Select(t => t.Celular).FirstOrDefault(),
                                        mensagemSms, TipoOrigemSms.NovaCotacao);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao enviar email ou sms", ex);
            }
        }
Exemple #5
0
        private void NovoFornecedorAvisoMembro(TipoAvisos pTipoAviso)
        {
            try
            {
                NotificacoesAlertasService NAService = new NotificacoesAlertasService();
                EmailService EmailSrv = new EmailService();
                SmsService   SmsSrv   = new SmsService();

                DateTime DtExec = NAService.UltimaExecucaoRotina(pTipoAviso.Id, "NotificacoesAlertas");

                List <RetornoAvisos> listaUsuario = NAService.VerificaNovoFornecedorCadastrado(pTipoAviso.Id, DtExec);
                NAService.GravaExecucaoRotina(pTipoAviso.Id, "NotificacoesAlertas");

                foreach (RetornoAvisos retAviso in listaUsuario)
                {
                    //Enviar Email
                    if (retAviso.EnviarEmail)
                    {
                        EmailSrv.EnviarEmailViaRobo(
                            NAService.UsuarioRobo(),
                            "Novos fornecedores",
                            retAviso.Usuario.UsuarioEmail,
                            "corpoemailNovos Fornecedores para se segmento",
                            Origem.NovaCotacao);
                    }

                    //Enviar SMS
                    if (retAviso.EnviarSMS)
                    {
                        SmsSrv.EnviaSms(retAviso.Usuario.Pessoa.Telefones.Select(t => t.DddCel).FirstOrDefault() + retAviso.Usuario.Pessoa.Telefones.Select(t => t.Celular).FirstOrDefault(),
                                        "Economiza Já - Novos Fornecedores foram cadastrados para seu segmento.",
                                        TipoOrigemSms.PedidosPendentesAprovacaoMembro);
                    }

                    if (retAviso.EnviarEmail || retAviso.EnviarSMS)
                    {
                        NAService.AtualizaDataAviso(retAviso.Aviso, NAService.UsuarioRobo().Id);
                    }

                    //Grava Aviso
                    if (retAviso.NovoAviso)
                    {
                        NAService.AddAvisos(
                            new Avisos()
                        {
                            Ativo = true,
                            //Pedido = item,
                            IdReferencia        = retAviso.Usuario.PessoaId,
                            DataUltimoAviso     = DateTime.Now,
                            ExibeNaTelaAvisos   = true,
                            TipoAvisosId        = pTipoAviso.Id,
                            URLPaginaDestino    = "/#/fornecedor",
                            TituloAviso         = "Novos Fornecedores",
                            ToolTip             = "Novos Fornecedores",
                            DescricaoAviso      = "Novos fornecedores cadastros em seu segmento",
                            ModuloId            = pTipoAviso.ModuloId, //Modulo Membro
                            UsuarioNotificadoId = retAviso.Usuario.Id
                        });
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemple #6
0
        private void TrataFornecedorNovaCotacao(TipoAvisos pTipoAviso)
        {
            try
            {
                NotificacoesAlertasService NAService = new NotificacoesAlertasService();
                EmailService EmailSrv = new EmailService();
                SmsService   SmsSrv   = new SmsService();


                List <EntidadeCotacao.Cotacao> listaPedidoMembro = NAService.ListarCotacoesPendentes();

                foreach (EntidadeCotacao.Cotacao item in listaPedidoMembro)
                {
                    List <RetornoAvisos> listaUsuario = NAService.TrataNovaCotacaoFornecedor(item, pTipoAviso.Id);

                    foreach (RetornoAvisos retAviso in listaUsuario)
                    {
                        //Enviar Email
                        if (retAviso.EnviarEmail)
                        {
                            EmailSrv.EnviarEmailViaRobo(
                                NAService.UsuarioRobo(),
                                "Pendência dar lance na Cotação",
                                retAviso.Usuario.UsuarioEmail,
                                "corpoemail Pendente dar lance na Cotação",
                                Origem.NovaCotacao);
                        }

                        //Enviar SMS
                        if (retAviso.EnviarSMS)
                        {
                            SmsSrv.EnviaSms(retAviso.Usuario.Pessoa.Telefones.Select(t => t.DddCel).FirstOrDefault() + retAviso.Usuario.Pessoa.Telefones.Select(t => t.Celular).FirstOrDefault(),
                                            "Economiza Já - Cotação aguardnado seu lance.",
                                            TipoOrigemSms.PedidosPendentesAprovacaoMembro);
                        }

                        if (retAviso.EnviarEmail || retAviso.EnviarSMS)
                        {
                            NAService.AtualizaDataAviso(retAviso.Aviso, NAService.UsuarioRobo().Id);
                        }

                        //Grava Aviso
                        ////if (retAviso.NovoAviso)
                        ////{

                        ////    NAService.AddAvisos(
                        ////        new Avisos()
                        ////        {
                        ////            Ativo = true,
                        ////            //Pedido = item,
                        ////            IdReferencia = item.Id,
                        ////            DataUltimoAviso = DateTime.Now,
                        ////            ExibeNaTelaAvisos = true,
                        ////            TipoAvisosId = pTipoAviso.Id,
                        ////            URLPaginaDestino = "/#/cotacoes",
                        ////            TituloAviso = "Cotação Pendente de Lance",
                        ////            ToolTip = "Cotação Pendente de Lance",
                        ////            DescricaoAviso = "Cotação Pendente de Lance " + item.Id,
                        ////            ModuloId = pTipoAviso.ModuloId, //Modulo Membro
                        ////            UsuarioNotificadoId = retAviso.Usuario.Id
                        ////        });
                        ////}
                    }
                }

                NAService.LimparTabelAvisosPorNovasCotacoesFornecedor(listaPedidoMembro, pTipoAviso.Id);
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemple #7
0
        private void TrataAceiteFornecedorParaMembro(TipoAvisos pTipoAviso)
        {
            try
            {
                NotificacoesAlertasService NAService = new NotificacoesAlertasService();
                EmailService         EmailSrv        = new EmailService();
                SmsService           SmsSrv          = new SmsService();
                List <RetornoAvisos> retornoAvisos   = new List <RetornoAvisos>();

                //Recupera fornecedores Que precisam dar o Aceite para solicitacao do Membro
                List <MembroFornecedor> listaMembroFornecedor = NAService.ListaPendenciasAceiteFornecedorParaMembro();


                foreach (MembroFornecedor item in listaMembroFornecedor)
                {
                    //Trata Permissão de Envio se Fornecedor quer receber essas informações por Email/SMS
                    retornoAvisos = NAService.TrataPendenciasAceiteFornecedorParaMembro(item, pTipoAviso.Id);
                    foreach (RetornoAvisos retAviso in retornoAvisos)
                    {
                        //Enviar Email
                        if (retAviso.EnviarEmail)
                        {
                            var template   = NAService.GetCorpoEmail(9);
                            var corpoEmail = template.Replace("#NomeFornecedor#", retAviso.Usuario.Pessoa.PessoaJuridica.NomeFantasia);
                            corpoEmail = template.Replace("#NomeMembro#", item.Membro.Pessoa.PessoaJuridica.NomeFantasia);

                            EmailSrv.EnviarEmailViaRobo(
                                NAService.UsuarioRobo(),
                                "Pendência Aceite dos Pedidos",
                                retAviso.Usuario.UsuarioEmail,
                                corpoEmail,
                                Origem.NovaCotacao);
                        }

                        //Enviar SMS
                        if (retAviso.EnviarSMS)
                        {
                            SmsSrv.EnviaSms(retAviso.Usuario.Pessoa.Telefones.Select(t => t.DddCel).FirstOrDefault() + retAviso.Usuario.Pessoa.Telefones.Select(t => t.Celular).FirstOrDefault(),
                                            "Economiza Já - Pedido. Aguardando Aprovação dos Pedidos.",
                                            TipoOrigemSms.PedidosPendentesAprovacaoMembro);
                        }

                        //Grava Aviso
                        ////if (retAviso.NovoAviso)
                        ////{

                        ////    NAService.AddAvisos(
                        ////        new Avisos()
                        ////        {
                        ////            Ativo = true,
                        ////            //Pedido = item,
                        ////            IdReferencia = item.MembroId,
                        ////            DataUltimoAviso = DateTime.Now,
                        ////            ExibeNaTelaAvisos = true,
                        ////            TipoAvisosId = pTipoAviso.Id,
                        ////            //TipoAviso = pTipoAviso,
                        ////            URLPaginaDestino = "/#/membro",
                        ////            TituloAviso = "Pendente aceite novo Membro",
                        ////            ToolTip = "Novo Membro",
                        ////            DescricaoAviso = ("Pendente aceite novo Membro " + item.Membro.Pessoa.PessoaJuridica.NomeFantasia).Substring(0,99),
                        ////            ModuloId = 4, //Modulo Fornecedor
                        ////            UsuarioNotificadoId = retAviso.Usuario.Id
                        ////        });
                        ////}
                    }
                }

                //Limpa tabela de avisos solicitação novo membro para fornecedor
                NAService.LimparTabelAvisosPorSolicitacaoMembroFornecedor(listaMembroFornecedor, pTipoAviso.Id);
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemple #8
0
        private void TrataPedidosPendentesAceiteFornecedor(TipoAvisos pTipoAviso)
        {
            try
            {
                NotificacoesAlertasService NAService           = new NotificacoesAlertasService();
                EmailService         EmailSrv                  = new EmailService();
                SmsService           SmsSrv                    = new SmsService();
                List <RetornoAvisos> retornoAvisos             = new List <RetornoAvisos>();
                List <Fornecedor>    listaFornecedoresUsuarios = new List <Fornecedor>();


                List <Pedido> listaPedidoFornecedor = NAService.ListarPedidosPendentes(TipoCliente.Fornecedor);

                foreach (Pedido item in listaPedidoFornecedor)
                {
                    listaFornecedoresUsuarios = NAService.ListaFornecedorPedido(item);

                    foreach (Fornecedor itemFornecedor in listaFornecedoresUsuarios.Distinct())
                    {
                        retornoAvisos = NAService.TrataPedidoFornecedor(item, itemFornecedor, pTipoAviso.Id);
                        foreach (RetornoAvisos retAviso in retornoAvisos)
                        {
                            //Enviar Email
                            if (retAviso.EnviarEmail)
                            {
                                var template   = NAService.GetCorpoEmail(18);
                                var corpoEmail = template.Replace("#NomeFantasia#", retAviso.Usuario.Pessoa.PessoaJuridica.NomeFantasia);

                                EmailSrv.EnviarEmailViaRobo(
                                    NAService.UsuarioRobo(),
                                    "Pendência Aceite do Pedido " + item.Id,
                                    retAviso.Usuario.UsuarioEmail,
                                    corpoEmail,
                                    Origem.NovaCotacao);
                            }

                            //Enviar SMS
                            if (retAviso.EnviarSMS)
                            {
                                SmsSrv.EnviaSms(retAviso.Usuario.Pessoa.Telefones.Select(t => t.DddCel).FirstOrDefault() + retAviso.Usuario.Pessoa.Telefones.Select(t => t.Celular).FirstOrDefault(),
                                                "Economiza Já - Pedido. Aguardando Aprovação do Pedido " + item.Id + ".",
                                                TipoOrigemSms.PedidosPendentesAprovacaoMembro);
                            }

                            if (retAviso.EnviarEmail || retAviso.EnviarSMS)
                            {
                                NAService.AtualizaDataAviso(retAviso.Aviso, NAService.UsuarioRobo().Id);
                            }

                            //Grava Aviso
                            ////if (retAviso.NovoAviso)
                            ////{

                            ////    NAService.AddAvisos(
                            ////        new Avisos()
                            ////        {
                            ////            Ativo = true,
                            ////            //Pedido = item,
                            ////            IdReferencia = item.Id,
                            ////            DataUltimoAviso = DateTime.Now,
                            ////            ExibeNaTelaAvisos = true,
                            ////            TipoAvisosId = pTipoAviso.Id,
                            ////            //TipoAviso = pTipoAviso,
                            ////            URLPaginaDestino = "/#/pedidos",
                            ////            TituloAviso = "Aceite Pendente",
                            ////            ToolTip = "",
                            ////            DescricaoAviso = "Aceite Pendente do pedido " + item.Id, //email 18
                            ////            ModuloId = 4, //Modulo Fornecedor
                            ////            UsuarioNotificadoId = retAviso.Usuario.Id
                            ////        });
                            ////}
                        }
                    }
                }

                //Limpa tabela de Avisos
                NAService.LimparTabelAvisosPorFornecedor(listaPedidoFornecedor, pTipoAviso.Id);
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemple #9
0
        private void FecharCotacaoService()
        {
            var cotacaoAtualID = 0;

            var listaFornecedoresMelhorPreco = new List <Fornecedor>();

            try
            {
                eventLog.WriteEntry("Início processamento Cotações.", EventLogEntryType.Information);
                var            naService = new NotificacoesAlertasService();
                List <Usuario> listaUsuarioDeuCotacao = new List <Usuario>();
                List <Pedido>  listaMembroPedido      = null;
                CotacaoPedidos cotacaoAnteior         = null;

                int statusID = 0;

                //Seta usuário Padrão de Robô
                SessaoEconomiza.UsuarioId = int.Parse(ConfigurationManager.AppSettings["usuarioPadraoRobo"]);

                CotacaoService CS = new CotacaoService();
                //Consulta Cotações em aberto para processar
                List <CotacaoPedidos> listaCotacaoPedido = CS.ListarCotacaoPedidos().OrderBy(ob => ob.CotacaoId).ThenBy(tb => tb.PedidoId).ToList(); //Lista todos Pedidos das cotações Fechadas.

                //Verifica quantidade de cotacoes
                /////qtdCotacoes = listaCotacaoPedido.GroupBy(gb => gb.CotacaoId).Select(s => new { s.Key }).Count();
                /////var teste = listaCotacaoPedido.GroupBy(gb => gb.CotacaoId).Select( s=> new { t = s.Key, c = s.Count() });

                foreach (var itemCotacao in listaCotacaoPedido)
                {
                    var pedidoCotacao    = itemCotacao.Pedido;
                    var resultadoCotacao = CS.ListarResultadoCotacao(itemCotacao.CotacaoId); //Lista os resultados da cotação
                    int PedidoComLance   = 0;

                    if (cotacaoAnteior == null || cotacaoAnteior.CotacaoId != cotacaoAtualID)
                    {
                        cotacaoAnteior = itemCotacao;
                    }
                    cotacaoAtualID = itemCotacao.CotacaoId; //pega cotação atual para tratamento

                    //Atualiza Cotação com todos pedidos Cotados
                    if (cotacaoAtualID != cotacaoAnteior.CotacaoId)
                    {
                        fctAtualizarCotacaoEncerrada(cotacaoAnteior.CotacaoId);
                        CS.EmailNotificacaoFornecedor(listaUsuarioDeuCotacao.Distinct().ToList(), cotacaoAnteior.CotacaoId);
                        CS.SmsNotificacaoFornecedor(listaUsuarioDeuCotacao.Distinct().ToList(), cotacaoAnteior.CotacaoId);

                        listaUsuarioDeuCotacao = new List <Usuario>();
                    }
                    listaMembroPedido = new List <Pedido>();

                    if (resultadoCotacao.Count > 0)
                    {
                        foreach (ItemPedido itemPedido in pedidoCotacao.ItemPedidos) //Varre todos os pedidos da Cotação
                        {
                            decimal precoUnitario = 0;

                            var resultadoCotacaoMenorValor = resultadoCotacao.FindAll(rc => rc.ProdutoId == itemPedido.ProdutoId && rc.PrecoNegociadoUnit > 0); // Filtra único produto na Resultado Cotação que tenha o lance mairo que zero

                            if (!resultadoCotacaoMenorValor.Any())
                            {
                                itemPedido.Ativo = false; //inativa item sem lance
                                CS.SalvarItemPedido(itemPedido);
                                continue;
                            }

                            PedidoComLance++;

                            // verifica se cotaçao tem fornecedor que não atende todos os clientes
                            decimal precoMedio = 0;

                            Usuario usuarioDeuCotacao = null;
                            if (resultadoCotacao.GroupBy(rc => rc.Qtd).Select(n => new { n.Key }).Count() > 1) //Verifica se na cotação existe divisão Membro / Fornecedor
                            {
                                List <Fornecedor> LFornec = CS.ListaFornecedoresPorMembro(itemPedido.Pedido.MembroId);

                                var ValidaSeTemResultadoItemCotado = resultadoCotacaoMenorValor.Where(w =>
                                                                                                      w.Cotacao.CotacaoPedidos.Select(ww => ww.PedidoId == itemPedido.PedidoId).Any() && // identifica se é pedido correto
                                                                                                      LFornec.Contains(w.Fornecedor));

                                if (!ValidaSeTemResultadoItemCotado.Any()) //valida se algum Fornecedor vinculado ao Membro deu lance.
                                {
                                    PedidoComLance--;
                                    itemPedido.Ativo = false; //inativa Item sem lance
                                    CS.SalvarItemPedido(itemPedido);
                                    continue;
                                }

                                if (itemPedido.FlgOutraMarca && ValidaSeTemResultadoItemCotado.Count(c => c.FlgOutraMarca) > 0)
                                {
                                    precoUnitario = ValidaSeTemResultadoItemCotado.Where(x => x.FlgOutraMarca).Min(mp => mp.PrecoNegociadoUnit);
                                    precoMedio    = ValidaSeTemResultadoItemCotado.Where(x => x.FlgOutraMarca).Average(ap => ap.PrecoNegociadoUnit); // Pega valor médio da lista
                                }
                                else if (!itemPedido.FlgOutraMarca && ValidaSeTemResultadoItemCotado.Count(c => !c.FlgOutraMarca) > 0)
                                {
                                    precoUnitario = ValidaSeTemResultadoItemCotado.Where(ic => !ic.FlgOutraMarca).Min(mp => mp.PrecoNegociadoUnit);     // Pega menor valor da lista
                                    precoMedio    = ValidaSeTemResultadoItemCotado.Where(ic => !ic.FlgOutraMarca).Average(ap => ap.PrecoNegociadoUnit); // Pega valor médio da lista
                                }

                                itemPedido.PrecoMedioUnit     = precoMedio;
                                itemPedido.PrecoNegociadoUnit = precoUnitario;


                                var objFornecedor = resultadoCotacaoMenorValor.Where(w =>
                                                                                     w.Cotacao.CotacaoPedidos.Select(ww => ww.PedidoId == itemPedido.PedidoId).Any() && // identifica se é pedido correto
                                                                                     LFornec.Contains(w.Fornecedor)).FirstOrDefault(x => x.PrecoNegociadoUnit == precoUnitario);

                                if (objFornecedor != null)
                                {
                                    itemPedido.FornecedorId = objFornecedor.FornecedorId;
                                    usuarioDeuCotacao       = objFornecedor.UsuarioCriacao;

                                    itemPedido.FornecedorUsuario   = usuarioDeuCotacao;
                                    itemPedido.FornecedorUsuarioId = usuarioDeuCotacao.Id;
                                }

                                //Pegando observação.
                                var itemObservacao =
                                    resultadoCotacaoMenorValor.OrderByDescending(o => o.DtCriacao)
                                    .FirstOrDefault(x => x.ProdutoId == itemPedido.ProdutoId &&
                                                    !string.IsNullOrEmpty(x.Observacao) &&
                                                    x.FornecedorId == itemPedido.FornecedorId &&
                                                    itemPedido.FlgOutraMarca);

                                itemPedido.Observacao = itemObservacao != null ? itemObservacao.Observacao : string.Empty;
                            }
                            else //Cotação com todos fornecedores atendendo todos clientes
                            {
                                if (itemPedido.FlgOutraMarca && resultadoCotacaoMenorValor.Count(c => c.FlgOutraMarca) > 0)
                                {
                                    itemPedido.PrecoNegociadoUnit = resultadoCotacaoMenorValor.Where(x => x.FlgOutraMarca).Min(mp => mp.PrecoNegociadoUnit);
                                    itemPedido.PrecoMedioUnit     = resultadoCotacaoMenorValor.Where(x => x.FlgOutraMarca).Average(ap => ap.PrecoNegociadoUnit);
                                }
                                else if (!itemPedido.FlgOutraMarca && resultadoCotacaoMenorValor.Count(c => !c.FlgOutraMarca) > 0)
                                {
                                    itemPedido.PrecoNegociadoUnit = resultadoCotacaoMenorValor.Where(x => !x.FlgOutraMarca).Min(mp => mp.PrecoNegociadoUnit);
                                    itemPedido.PrecoMedioUnit     = resultadoCotacaoMenorValor.Where(x => !x.FlgOutraMarca).Average(ap => ap.PrecoNegociadoUnit);
                                }

                                if (resultadoCotacaoMenorValor.Any())
                                {
                                    itemPedido.FornecedorId = resultadoCotacaoMenorValor
                                                              .FirstOrDefault(x =>
                                                                              x.PrecoNegociadoUnit == itemPedido.PrecoNegociadoUnit &&
                                                                              x.FlgOutraMarca == itemPedido.FlgOutraMarca).FornecedorId;

                                    usuarioDeuCotacao = resultadoCotacaoMenorValor
                                                        .FirstOrDefault(x =>
                                                                        x.PrecoNegociadoUnit == itemPedido.PrecoNegociadoUnit &&
                                                                        x.FlgOutraMarca == itemPedido.FlgOutraMarca).UsuarioCriacao;

                                    itemPedido.FornecedorUsuario   = usuarioDeuCotacao;
                                    itemPedido.FornecedorUsuarioId = usuarioDeuCotacao.Id;

                                    //Pegando observação.
                                    var itemObservacao =
                                        resultadoCotacaoMenorValor.OrderByDescending(o => o.DtCriacao)
                                        .FirstOrDefault(x => x.ProdutoId == itemPedido.ProdutoId &&
                                                        !string.IsNullOrEmpty(x.Observacao) &&
                                                        x.FornecedorId == itemPedido.FornecedorId &&
                                                        itemPedido.FlgOutraMarca);

                                    itemPedido.Observacao = itemObservacao != null ? itemObservacao.Observacao : string.Empty;
                                }
                            }
                            //Salva Item Pedido
                            CS.SalvarItemPedido(itemPedido);
                            if (itemPedido.FornecedorId != null)
                            {
                                listaFornecedoresMelhorPreco.Add(CS.BuscaFornecedorById(int.Parse(itemPedido.FornecedorId.ToString())));
                            }
                            listaUsuarioDeuCotacao.Add(usuarioDeuCotacao);
                        }

                        if (PedidoComLance > 0)
                        {
                            statusID = CS.BuscaStatusSistema(12, 3).Id;// Pedido com lance em algum produto
                        }
                        else
                        {
                            statusID = CS.BuscaStatusSistema(12, 9).Id; // Pedido sem lance
                        }
                    }
                    else
                    {
                        // Cotação sem Lances
                        foreach (ItemPedido itemPedido in pedidoCotacao.ItemPedidos) //Varre todos os itens do pedido desativando
                        {
                            itemPedido.Ativo = false;                                //inativa Item sem lance
                            CS.SalvarItemPedido(itemPedido);
                        }
                        // Apenas atualiza Status do Pedido para tratamento
                        statusID = CS.BuscaStatusSistema(12, 9).Id; // Pedido sem itens
                    }

                    pedidoCotacao.StatusSistemaId = statusID; //23
                    CS.SalvarPedido(pedidoCotacao);

                    listaMembroPedido.Add(pedidoCotacao);
                    //Inserir Histórico Pedido
                    var pedidoHistorico = new HistStatusPedido
                    {
                        Ativo           = true,
                        DtCriacao       = DateTime.Now,
                        Pedido          = pedidoCotacao,
                        PedidoId        = pedidoCotacao.Id,
                        StatusSistemaId = statusID
                    };
                    //Status do histórico
                    CS.InserirHistoricoPedido(pedidoHistorico);

                    CS.EmailNotificacaoMembro(listaMembroPedido.Distinct().ToList());
                    CS.SmsNotificacaoMembro(listaMembroPedido.Distinct().ToList());

                    // Remove todos os avisos de todos todos os fornecedores referente a estpa cotação
                    naService.RemoverAvisosFornecedoresCotacao(cotacaoAtualID, (int)TipoAviso.NovaCotacao);
                }//foreach (var itemCotacao in listaCotacaoPedido)

                //Atualiza ultima Cotação do laço, ou quando temos apenas uma cotação
                if (cotacaoAtualID > 0 && cotacaoAtualID == cotacaoAnteior.CotacaoId)
                {
                    fctAtualizarCotacaoEncerrada(cotacaoAtualID);
                    CS.EmailNotificacaoFornecedor(listaUsuarioDeuCotacao.Distinct().ToList(), cotacaoAtualID);
                    CS.SmsNotificacaoFornecedor(listaUsuarioDeuCotacao.Distinct().ToList(), cotacaoAtualID);
                }

                eventLog.WriteEntry("Fim processamento Cotações.", EventLogEntryType.Information);
            }
            catch (Exception ex)
            {
                eventLog.WriteEntry("Cotação - " + cotacaoAtualID + " > " + ex.Message + Environment.NewLine + ex.StackTrace, EventLogEntryType.Error);
            }
        }
Exemple #10
0
        private void TrataPedidosPendentesAceiteMembro(TipoAvisos pTipoAviso)
        {
            try
            {
                NotificacoesAlertasService NAService = new NotificacoesAlertasService();
                EmailService EmailSrv = new EmailService();
                SmsService   SmsSrv   = new SmsService();


                List <Pedido> listaPedidoMembro = NAService.ListarPedidosPendentes(TipoCliente.Membro);


                foreach (Pedido item in listaPedidoMembro)
                {
                    List <RetornoAvisos> listaUsuario = NAService.TrataPedidoMembro(item, pTipoAviso.Id);

                    foreach (RetornoAvisos retAviso in listaUsuario)
                    {
                        //Enviar Email
                        if (retAviso.EnviarEmail)
                        {
                            var template = NAService.GetCorpoEmail(22);

                            if (retAviso.Usuario.Pessoa.TipoPessoa == TipoPessoa.PessoaJuridica)
                            {
                                var corpoEmail = template.Replace("#NomeFantasia#", retAviso.Usuario.Pessoa.PessoaJuridica.NomeFantasia);
                                EmailSrv.EnviarEmailViaRobo(
                                    NAService.UsuarioRobo(),

                                    "Corra aprove seu pedido " + item.Id + " valores validos por 2 dias a partir da data de retorno da cotacao, Evite o CANCELAMENTO",
                                    retAviso.Usuario.UsuarioEmail,
                                    corpoEmail,
                                    Origem.NovaCotacao);
                            }
                            else
                            {
                                var corpoEmail = template.Replace("#NomeFantasia#", retAviso.Usuario.Pessoa.PessoaFisica.Nome);
                                EmailSrv.EnviarEmailViaRobo(
                                    NAService.UsuarioRobo(),


                                    "Corra aprove seu pedido " + item.Id + " valores validos por 2 dias a partir da data de retorno da cotacao, Evite o CANCELAMENTO",
                                    retAviso.Usuario.UsuarioEmail,
                                    corpoEmail,
                                    Origem.NovaCotacao);
                            }
                        }

                        //Enviar SMS
                        if (retAviso.EnviarSMS)
                        {
                            SmsSrv.EnviaSms(retAviso.Usuario.Pessoa.Telefones.Select(t => t.DddCel).FirstOrDefault() + retAviso.Usuario.Pessoa.Telefones.Select(t => t.Celular).FirstOrDefault(),
                                            // "Economiza Já - Aguardando Aprovação de Pedido " + item.Id + ".",

                                            "Economiza Já-Corra aprove seu pedido " + item.Id + " valores validos por 2 dias a partir da data de retorno da cotacao, Evite o CANCELAMENTO",
                                            TipoOrigemSms.PedidosPendentesAprovacaoMembro);
                        }

                        if (retAviso.EnviarEmail || retAviso.EnviarSMS)
                        {
                            NAService.AtualizaDataAviso(retAviso.Aviso, NAService.UsuarioRobo().Id);
                        }

                        //Grava Aviso
                        ////if (retAviso.NovoAviso)
                        ////{

                        ////    NAService.AddAvisos(
                        ////        new Avisos()
                        ////        {
                        ////            Ativo = true,
                        ////            //Pedido = item,
                        ////            IdReferencia = item.Id,
                        ////            DataUltimoAviso = DateTime.Now,
                        ////            ExibeNaTelaAvisos = true,
                        ////            TipoAvisosId = pTipoAviso.Id,
                        ////            URLPaginaDestino = "/#/meusPedidos",
                        ////            TituloAviso = "Aceite Pendente",
                        ////            ToolTip = "",
                        ////            DescricaoAviso = "Aceite Pendente do pedido " + item.Id,
                        ////            ModuloId = 3, //Modulo Membro
                        ////            UsuarioNotificadoId = retAviso.Usuario.Id
                        ////        });
                        ////}
                    }
                }
                //testar melhor esse trecho para limpar avisos.
                NAService.LimparTabelAvisosPorMembro(listaPedidoMembro, pTipoAviso.Id);
            }
            catch (Exception ex)
            {
                throw new Exception("Erro TrataPedidosPendentesAceiteMembro", ex);
            }
        }