/// <summary> /// Enviar e-mail para a direção da empresa /// </summary> /// <param name="nome">Remetente</param> /// <param name="assunto">Assunto.</param> /// <param name="corpo">Corpo da mensagem</param> public static void EmailDiretoria(string nome, string assunto, string corpo) { using (var db = new Data.Context.AppContext()) { var destinatarios = db.Pessoa.Where(x => x.ObraNotificacao == true).Select(x => x.Email).ToList(); var mailer = new Mailer(); mailer.assunto = "[Engefibra]["+ nome +"] Fale com a Direção: " + assunto; mailer.destinatarios = destinatarios; mailer.tipoEnvioEmail = MailerSendType.Outros; mailer.corpo = "Enviado por: <br />" + nome + "<br />" + corpo; mailer.corpoHtml = true; mailer.Send(); } }
/// <summary> /// Notificação sobre obras agendadas /// </summary> public static void NotificarObrasAgendadas() { var obrasAgendadas = GetAll().Where(x => x.ObraStatusId == 1).ToList(); foreach (var item in obrasAgendadas) { var dataAtual = DateTime.Now; var dataMinimaNotificacao = item.DataAgendamento.AddDays(-2); var dataMaximaNotificacao = item.DataAgendamento.AddDays(2); if(dataAtual >= dataMinimaNotificacao && dataAtual <= dataMaximaNotificacao) { using (var db = new Data.Context.AppContext()) { var destinatarios = db.Pessoa.Where(x => x.ObraNotificacao == true).Select(x => x.Email).ToList(); var mailer = new Mailer(); mailer.assunto = "[Obra] " + item.Nome + ", agendada para " + item.DataAgendamento.ToString("dd/MM/yyyy") + " aguarda uma interação!"; mailer.destinatarios = destinatarios; mailer.tipoEnvioEmail = MailerSendType.Obras; mailer.corpo = "A obra " + item.Nome + ", do cliente " + item.Cliente.Nome + " está em AGENDAMENTO para a data " + item.DataAgendamento.ToString("dd/MM/yyyy") + ".<br /><br />" + "<strong>Encarregado:</strong> " + item.Encarregado.Nome + "<br/>" + "<strong>Pendencias:</strong> " + item.Pendencias + "<br/>" + "<strong>Observações:</strong> " + item.Observacao + "<br/>" + "<strong>Endereço:</strong> " + item.Endereco + " - " + item.Cep + ", " + item.Cidade + "<br/><br />" + "Para não receber notificações, atualize a situação da Obra, ou encerre a mesma caso não tiver outra opção."; mailer.corpoHtml = true; mailer.Send(); db.ObraNotificacao.Add(new Data.Models.ObraNotificacao { ObraId = item.Id, Ativo = true, DataCriacao = DateTime.Now, DataAlteracao = DateTime.Now }); db.SaveChanges(); } } } }
/// <summary> /// Notificação sobre obras com Situação "Pendência" ou Campo "Pendência" preenchido /// </summary> public static void NotificarObrasComPendencia() { var obrasPendencia = GetAll().Where(x => x.ObraStatusId == 3 || !String.IsNullOrEmpty(x.Pendencias)).ToList(); foreach (var item in obrasPendencia) { using (var db = new Data.Context.AppContext()) { var destinatarios = db.Pessoa.Where(x => x.ObraNotificacao == true).Select(x => x.Email).ToList(); var mailer = new Mailer(); mailer.assunto = "[Obra] " + item.Nome + ", com situação PENDENCIA! [IMPORTANTE]"; mailer.destinatarios = destinatarios; mailer.tipoEnvioEmail = MailerSendType.Obras; mailer.corpo = "A obra " + item.Nome + ", do cliente " + item.Cliente.Nome + " está com PENDENCIAS que precisam ser resolvidas para normalização da obra.<br /><br />" + "<strong>Situação:</strong> " + item.ObraStatus.Nome + "<br/>" + "<strong>Encarregado:</strong> " + item.Encarregado.Nome + "<br/>" + "<strong>Pendencias:</strong> " + item.Pendencias + "<br/>" + "<strong>Observações:</strong> " + item.Observacao + "<br/>" + "<strong>Endereço:</strong> " + item.Endereco + " - " + item.Cep + ", " + item.Cidade + "<br/><br />" + "Para não receber notificações, atualize a situação da Obra, ou encerre a mesma caso não tiver outra opção."; mailer.corpoHtml = true; mailer.Send(); db.ObraNotificacao.Add(new Data.Models.ObraNotificacao { ObraId = item.Id, Ativo = true, DataCriacao = DateTime.Now, DataAlteracao = DateTime.Now }); db.SaveChanges(); } } }
/// <summary> /// Dispara a notificação do produto que o saldo está abaixo do parametro configurado /// </summary> /// <param name="produtoId">Identificador do produto</param> public static void NotificacaoSaldoProduto(int produtoId) { using (var db = new Data.Context.AppContext()) { var produto = db.Produto.Find(produtoId); var destinatarios = db.Pessoa.Where(x => x.ObraNotificacao == true).Select(x => x.Email).ToList(); var mailer = new Mailer(); mailer.assunto = "[Estoque] Situação de estoque abaixo do mínimo: " + produto.Nome; mailer.destinatarios = destinatarios; mailer.tipoEnvioEmail = MailerSendType.Produtos; mailer.corpo = "Após um resumo das últimas movimentações, foi constatado que este produto está abaixo da quantidade minima de estoque [" + Configuration.GetValue("QuantidadeEstoqueMinima") + "] unidades.<br />" + "O produto: " + produto.Nome + " de cód. fornecedor [" + produto.CodFornecedor + "] possui saldo [" + EstoqueMovimento.GetSaldoAtualProduto(produtoId) + "] no sistema, por favor verificar.<br /><br />" + "<strong>Fornecedor:</strong> " + produto.Fornecedor + ", entre em contato para consultar preços especiais.<br/>" + "<strong>Observações:</strong> " + produto.Observacao; mailer.corpoHtml = true; mailer.Send(); } }
/// <summary> /// Notificar todos os veiculos que possuem KmAtual maior do que a estabelecida para manutenção /// </summary> public static void NotificarAlertasManutencao() { using (var db = new Data.Context.AppContext()) { var veiculos = GetAll(); foreach (var item in veiculos) { var ultimaManutencao = db.VeiculoManutencaoHistorico .Where(x => x.VeiculoId == item.Id && x.ManutencaoRealizada == true) .OrderByDescending(x => x.Id).FirstOrDefault(); var kmInicialConsideracao = (ultimaManutencao != null ? ultimaManutencao.KmAtual : item.KmInicial); // Caso a Km Atual - Km Inicial for igual ou maior a estabelecida no alerta, toca lenha var quilometragemManutencao = db.VeiculoAlertas.Where(c => c.Id == item.VeiculoAlertaId).FirstOrDefault(); if ((item.KmAtual - kmInicialConsideracao) >= quilometragemManutencao.KmManutencao) { var destinatarios = db.Pessoa.Where(x => x.VeiculoNotificacao == true).Select(x => x.Email).ToList(); var mailer = new Mailer(); mailer.assunto = "[Veiculo] Programar manutenção para: " + item.Placa + " - " + item.Modelo; mailer.destinatarios = destinatarios; mailer.tipoEnvioEmail = MailerSendType.Veiculos; mailer.corpo = "Foi constatado que o veiculo (" + item.Placa + " - " + item.Modelo + ") rodou (" + (item.KmAtual - item.KmInicial) + " kms) após a última manutenção, e foi chegado o momento de realizar uma nova manutenção no mesmo.<br /><br />" + "<strong>Plano de manutenção escolhido:</strong> " + quilometragemManutencao.Nome + " - manutenção programada a cada " + quilometragemManutencao.KmManutencao + " kms.<br/>" + "<strong>Quilometragem ultima manutenção:</strong> " + kmInicialConsideracao + "<br/>" + "<strong>Quilometragem atual:</strong> " + item.KmAtual + "<br/>" + "<strong>Dados veiculo:</strong> " + item.Placa + " - " + item.Modelo + ", " + item.Cor + "/" + item.AnoFabricacao + "<br/><br />" + "Para não receber notificações, encerre a manutenção pendente no sistema, no menu <strong>Veiculos >> Histórico de manutenção de veiculos</strong>"; mailer.corpoHtml = true; mailer.Send(); // Caso não possua nenhuma manutenção pendente, inserir, para aguardar a interação do administrador if (db.VeiculoManutencaoHistorico.Where(x => x.VeiculoId == item.Id && x.ManutencaoRealizada == false).Count() == 0) { db.VeiculoManutencaoHistorico.Add(new Data.Models.VeiculoManutencaoHistorico { VeiculoId = item.Id, KmAtual = item.KmAtual, DataNotificacao = DateTime.Now, DataConfirmacao = DateTime.Now, ManutencaoRealizada = false, UsuarioAlteracao = 0, UsuarioCriacao = 0 }); db.SaveChanges(); } } } } }
/// <summary> /// Notificar todos os veiculos que possuem observação referente a estado do Carro /// </summary> public static void NotificarVeiculosObservacao() { using (var db = new Data.Context.AppContext()) { var veiculos = GetAll(); foreach (var item in veiculos) { if (!String.IsNullOrEmpty(item.Observacao)) { var destinatarios = db.Pessoa.Where(x => x.VeiculoNotificacao == true).Select(x => x.Email).ToList(); var mailer = new Mailer(); mailer.assunto = "[Veiculo] Observação sobre estado: " + item.Placa + " - " + item.Modelo; mailer.destinatarios = destinatarios; mailer.tipoEnvioEmail = MailerSendType.Veiculos; mailer.corpo = "Foi constatado que o veiculo (" + item.Placa + " - " + item.Modelo + ") possui observações, quanto ao seu estado de conservação.<br /><br />" + "<strong>Observação:</strong> " + item.Observacao + "<br/><br/>" + "Caso as observações não sejam reais, ou o problema já tenha sido resolvido, vá até o veiculo no sistema, e remova a observação para não receber novas notificações!"; mailer.corpoHtml = true; mailer.Send(); } } } }