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