/// <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();
            }
        }
Beispiel #2
0
        /// <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();
                    }
                }
            }
        }
Beispiel #3
0
        /// <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();
                    }
                }
            }
        }