Beispiel #1
0
        private void Sumarizacao(List <ColecaoDocumentosModel> colecaoDocumentos)
        {
            ViewBag.painelSumarizacao = true;
            List <FileInfo>       arquivosNaoEncontrados    = colecaoDocumentos.Find(x => x.tipoArquivo == "arquivosNaoEncontrados").fileDocumento;
            List <DocumentoModel> arquivosEncontrados       = DefineColecaoDocumentos.ExtraiArquivosPorTipo(colecaoDocumentos, "arquivosEncontrados");
            List <DocumentoModel> arquivosErro              = DefineColecaoDocumentos.ExtraiArquivosPorTipo(colecaoDocumentos, "arquivosErro");
            List <DocumentoModel> arquivosErroDuplicado     = DefineColecaoDocumentos.ExtraiArquivosPorTipo(colecaoDocumentos, "arquivosErroDuplicado");
            List <DocumentoModel> arquivosEnviadoComSucesso = DefineColecaoDocumentos.ExtraiArquivosPorTipo(colecaoDocumentos, "arquivosEnviadoComSucesso");


            if (arquivosNaoEncontrados.Count > 0)
            {
                ViewBag.arquivosNaoEncontrados = arquivosNaoEncontrados;
            }
            if (arquivosErro.Count > 0)
            {
                ViewBag.arquivosErro = arquivosErro;
            }
            if (arquivosErroDuplicado.Count > 0)
            {
                ViewBag.arquivosErroDuplicado = arquivosErroDuplicado;
            }
            if (arquivosEnviadoComSucesso.Count > 0)
            {
                ViewBag.arquivosEnviadoComSucesso = arquivosEnviadoComSucesso;
                ViewBag.CountSuccess = arquivosEnviadoComSucesso.Count;
            }
            new Log("Retorno de envio de e-mails", colecaoDocumentos);
        }
Beispiel #2
0
        public static List <ColecaoDocumentosModel> CopiaMoveArquivos(List <ColecaoDocumentosModel> colecaoDocumentos, string dataDiretorio, out string retornoErro)
        {
            List <ColecaoDocumentosModel> novaColecaoDocumentos = new List <ColecaoDocumentosModel>();

            retornoErro = "";
            List <FileInfo>       arquivosNaoEncontrados    = colecaoDocumentos.Find(x => x.tipoArquivo == "arquivosNaoEncontrados").fileDocumento;
            List <DocumentoModel> arquivosEncontrados       = DefineColecaoDocumentos.ExtraiArquivosPorTipo(colecaoDocumentos, "arquivosEncontrados");
            List <DocumentoModel> arquivosErro              = DefineColecaoDocumentos.ExtraiArquivosPorTipo(colecaoDocumentos, "arquivosErro");
            List <DocumentoModel> arquivosEmailErro         = DefineColecaoDocumentos.ExtraiArquivosPorTipo(colecaoDocumentos, "arquivosEmailErro");
            List <DocumentoModel> arquivosErroDuplicado     = DefineColecaoDocumentos.ExtraiArquivosPorTipo(colecaoDocumentos, "arquivosErroDuplicado");
            List <DocumentoModel> arquivosEnviadoComSucesso = DefineColecaoDocumentos.ExtraiArquivosPorTipo(colecaoDocumentos, "arquivosEnviadoComSucesso");

            retornoErro = "";
            try
            {
                List <DocumentoModel> jobs = arquivosEncontrados.Select(x => x.job).Distinct().Select(code => arquivosEncontrados.First(x => x.job == code)).ToList();
                foreach (DocumentoModel job in jobs)
                {
                    try
                    {
                        //verifica se há algum erro com o job.
                        if (job.erro)
                        {
                            continue;
                        }
                        // --
                        List <DocumentoModel> docs = arquivosEncontrados.FindAll(delegate(DocumentoModel x)
                        {
                            return(x.job == job.job && !x.emailEnviado && !x.erro);
                        });

                        foreach (DocumentoModel doc in docs)
                        {
                            try
                            {
                                // --
                                // Verifica se o diretório existe
                                if (!Directory.Exists(doc.diretorioDestino))
                                {
                                    throw new Exception("Diretório de destino não encontrado");
                                }
                                // --
                                // Verifica o último diretório para criar
                                // no mesmo formato na árvore do profissional

                                doc.novoDiretorioDestino = Path.Combine(doc.diretorioDestino, dataDiretorio);

                                // --
                                // Cria o diretório caso não exista
                                if (!Directory.Exists(doc.novoDiretorioDestino))
                                {
                                    Directory.CreateDirectory(doc.novoDiretorioDestino);
                                }

                                // --
                                // Copia o arquivo para o diretório destino
                                File.Copy(doc.arquivo.FullName, Path.Combine(doc.novoDiretorioDestino, doc.arquivo.Name.Replace("OK_", "")), false);
                                // Renomeia o arquivo já enviado
                                File.Move(doc.arquivo.FullName, Path.Combine(doc.arquivo.DirectoryName, "OK_" + doc.arquivo.Name));
                                doc.emailEnviado = true;
                            }
                            catch (Exception ex)
                            {
                                doc.erro           = true;
                                doc.mensagemDeErro = ex.Message;
                                if (doc.emailEnviado)
                                {
                                    arquivosErroDuplicado.Add(doc);
                                }
                                else
                                {
                                    arquivosErro.Add(doc);
                                }
                                new Log(doc);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        job.erro           = true;
                        job.mensagemDeErro = ex.Message;
                        arquivosErro.Add(job);
                        new Log(string.Format("Ocorreu erro durante envio de e-mail. {0}", ex.Message), job);
                    }
                }
            }
            catch (Exception)
            {
                retornoErro = "Ocorreu um erro durante o tratamento dos arquivos.";
            }

            if (retornoErro == "")
            {
                novaColecaoDocumentos = DefineColecaoDocumentos.ColecaoDocumentos(arquivosNaoEncontrados, arquivosEnviadoComSucesso, arquivosEncontrados, arquivosErro, arquivosEmailErro, arquivosErroDuplicado, out retornoErro);
            }

            return(novaColecaoDocumentos);
        }
Beispiel #3
0
        public static List <ColecaoDocumentosModel> LeArquivos(string caminho, List <DocumentoModel> planilhaCtrl, out string retornoErro, out string dataDiretorio)
        {
            List <ColecaoDocumentosModel> colecaoDocumentos = new List <ColecaoDocumentosModel>();

            retornoErro   = "";
            dataDiretorio = "";
            try
            {
                // --
                // Lê todos os arquivos dentro do diretório
                // informado, assim como os subdiretórios
                List <FileInfo>       arquivosNaoEncontrados    = new List <FileInfo>();
                List <DocumentoModel> arquivosEncontrados       = new List <DocumentoModel>();
                List <DocumentoModel> arquivosErro              = new List <DocumentoModel>();
                List <DocumentoModel> arquivosEmailErro         = new List <DocumentoModel>();
                List <DocumentoModel> arquivosErroDuplicado     = new List <DocumentoModel>();
                List <DocumentoModel> arquivosEnviadoComSucesso = new List <DocumentoModel>();

                string[] _t = caminho.Split('\\');
                dataDiretorio = _t[_t.Length - 1];

                foreach (string nomeArquivo in Directory.GetFiles(caminho, "*.pdf", SearchOption.AllDirectories))
                {
                    FileInfo arquivo = new FileInfo(nomeArquivo);
                    // --
                    // Se o nome do último diretório for "Demandas não identificadas com responsável"
                    // eu ignoro os arquivos
                    string[] _tmpdirarq = arquivo.FullName.Split('\\');
                    if (_tmpdirarq[_tmpdirarq.Length - 2] == "Demandas não identificadas com responsável")
                    {
                        continue;
                    }

                    string jobTemp = arquivo.Name.Split('_')[0];
                    // --
                    // Verifica se o nome do arquivo começa com OK
                    // se o nome do arquivo começar com OK o documento já
                    // foi enviado por email para os profissionais
                    jobTemp = jobTemp == "OK" ? arquivo.Name.Split('_')[1] : jobTemp;
                    // --
                    // Procura na planilha de controle se o job está lá
                    DocumentoModel doc = planilhaCtrl.Find(x => x.job == jobTemp);
                    // --
                    // Se não for encontrado o job na planilha de controle
                    // guardamos o aqruivo na planilha de arquivos não encontrados
                    // para criar o log depois
                    // --
                    // Caso o nome do arquivo não esteja parametrizado
                    // também tratamos como arquivo não encontrado
                    if (doc == null || arquivo.Name.Split('_').Length == 0)
                    {
                        arquivosNaoEncontrados.Add(arquivo);
                        continue;
                    }

                    // --
                    // Se o arquivo for encontrado guardamos o restante das
                    // informações no objeto
                    doc.arquivo      = arquivo;
                    doc.emailEnviado = arquivo.Name.Split('_')[0] == "OK";

                    // --
                    // Adiciona o documento na lista de arquivos a serem
                    // copiados
                    DocumentoModel _doc = new DocumentoModel();
                    copyDoc(ref _doc, doc);
                    arquivosEncontrados.Add(_doc);
                }
                // cria coleção de documentos
                colecaoDocumentos = DefineColecaoDocumentos.ColecaoDocumentos(arquivosNaoEncontrados, arquivosEnviadoComSucesso, arquivosEncontrados, arquivosErro, arquivosEmailErro, arquivosErroDuplicado, out retornoErro);
                //colecaoDocumentos = copiaArquivos(colecaoDocumentos, dataDiretorio, out retornoErro);
            }
            catch (Exception)
            {
                retornoErro = "Ocorreu um erro durante a leitura dos arquivos.";
            }
            return(colecaoDocumentos);
        }
        static public List <ColecaoDocumentosModel> EnviaEmail(List <ColecaoDocumentosModel> colecaoDocumentos, List <DocumentoModel> planilhaCtrl, string dataDiretorio, out string retornoErro)
        {
            List <ColecaoDocumentosModel> novaColecaoDocumentos = new List <ColecaoDocumentosModel>();

            retornoErro = "";
            List <FileInfo>       arquivosNaoEncontrados    = colecaoDocumentos.Find(x => x.tipoArquivo == "arquivosNaoEncontrados").fileDocumento;
            List <DocumentoModel> arquivosEncontrados       = DefineColecaoDocumentos.ExtraiArquivosPorTipo(colecaoDocumentos, "arquivosEncontrados");
            List <DocumentoModel> arquivosErro              = DefineColecaoDocumentos.ExtraiArquivosPorTipo(colecaoDocumentos, "arquivosErro");
            List <DocumentoModel> arquivosEmailErro         = DefineColecaoDocumentos.ExtraiArquivosPorTipo(colecaoDocumentos, "arquivosEmailErro");
            List <DocumentoModel> arquivosErroDuplicado     = DefineColecaoDocumentos.ExtraiArquivosPorTipo(colecaoDocumentos, "arquivosErroDuplicado");
            List <DocumentoModel> arquivosEnviadoComSucesso = DefineColecaoDocumentos.ExtraiArquivosPorTipo(colecaoDocumentos, "arquivosEnviadoComSucesso");
            // --
            // Faz um filtro pra pegar jobs únicos
            // para envio de email
            List <DocumentoModel> jobs = arquivosEncontrados.Select(x => x.job).Distinct().Select(code => arquivosEncontrados.First(x => x.job == code)).ToList();

            foreach (DocumentoModel job in jobs)
            {
                try
                {
                    //verifica se há algum erro com o job.
                    if (job.erro)
                    {
                        continue;
                    }
                    // --
                    // Procura todos os emails dos
                    // profissionais que receberão o email
                    List <DocumentoModel> emails = planilhaCtrl.FindAll(x => x.job == job.job);
                    // --
                    // Procura todos os documentos relacionados
                    // ao documento
                    List <DocumentoModel> docs = arquivosEncontrados.FindAll(delegate(DocumentoModel x){ return(x.job == job.job && !x.emailEnviado && !x.erro); });

                    //string docsEmail = MaganeFiles.MoveEAlteraArquivos(docs);
                    string docsEmail = "";
                    foreach (DocumentoModel doc in docs)
                    {
                        // Concatena os nomes dos documentos que serão enviados por email
                        docsEmail += docsEmail.Length > 0 ? "<BR>" + doc.arquivo.Name.Replace("OK_", "") : doc.arquivo.Name.Replace("OK_", "");
                    }
                    // --
                    // Não manda o email se não tiver documentos para enviar
                    if (docsEmail.Length == 0)
                    {
                        job.erro = true;
                        var    arr     = job.arquivo.ToString().Split('\\');
                        string arquivo = arr[arr.Length - 1];
                        job.mensagemDeErro = string.Format("E-mail nâo enviado - A notificação de circularização referentes ao job {0} está marcado como enviado: \" {1}\"", job.job, arquivo);
                        arquivosErro.Add(job);
                        continue;
                    }
                    // --
                    // Instancia o email e configura o remetente
                    MailMessage mail      = new MailMessage();
                    string      endemail  = ConfigurationSettings.AppSettings["MailFrom"].ToString();
                    string      modoTeste = ConfigurationSettings.AppSettings["ModoTeste"].ToString();
                    string      bodyMail  = ConfigurationSettings.AppSettings["BodyMail"].ToString();
                    string      smtpHost  = ConfigurationSettings.AppSettings["SmtpHost"].ToString();
                    int         smtpPort  = Convert.ToInt32(ConfigurationSettings.AppSettings["SmtpPort"]);
                    string      subject   = ConfigurationSettings.AppSettings["Subject"].ToString();



                    string[] _tmpdata = dataDiretorio.Split('.');
                    string   novaData = string.Format("{0}-{1}-{2}", _tmpdata[2], _tmpdata[1], _tmpdata[0]);
                    //#if DEBUG
                    //                    endemail = "*****@*****.**";
                    //#else
                    //                        endemail = "*****@*****.**";
                    //#endif

                    mail.IsBodyHtml = true;
                    if (modoTeste == "true")
                    {
                        /* No modo de teste o corpo do e-mail será alterado, os e-mails serão enviados para um usuário apenas e os gerentes e encarregados serão exibidos no corpo do e-mail.*/

                        var    gerentesEncarregados = "<h1 style='background:#fbfbaf'>Atenção</h1><h3>Este é um e-mail de teste, o e-mail real deverá ser enviados para as pessoas abaixo:</h3>";
                        string gerentes             = "<div>Gerente(s):</div>";
                        string encarregados         = "<div>Encarregado(s):</div>";
                        foreach (DocumentoModel email in emails)
                        {
                            if (mail.To.Where(x => x.Address == email.gerente.email).ToList().Count == 0)
                            {
                                gerentes += string.Format("<ul><li>Nome: {0}</li> <li>E-mail: {1}</li></ul>", email.gerente.nome, email.gerente.email);
                            }

                            if (mail.To.Where(x => x.Address == email.encarregado.email).ToList().Count == 0)
                            {
                                encarregados += string.Format("<ul><li>Nome: {0}</li> <li>E-mail: {1}</li></ul>", email.encarregado.nome, email.encarregado.email);
                            }
                        }
                        bodyMail += gerentesEncarregados + gerentes + encarregados;
                        endemail  = ConfigurationSettings.AppSettings["Teste_MailTo"].ToString();
                        string[] endemails = endemail.Split(';');
                        foreach (var to in endemails)
                        {
                            mail.To.Add(to);
                        }
                    }
                    else
                    {
                        // --
                        // Inclui todos os líderes encontrados
                        foreach (DocumentoModel email in emails)
                        {
                            if (mail.To.Where(x => x.Address == email.gerente.email).ToList().Count == 0)
                            {
                                mail.To.Add(email.gerente.email);
                            }

                            if (mail.To.Where(x => x.Address == email.encarregado.email).ToList().Count == 0)
                            {
                                mail.To.Add(email.encarregado.email);
                            }
                        }
                    }

                    mail.From = new MailAddress(endemail);
                    mail.CC.Add(mail.From);
                    mail.Subject  = subject + novaData;
                    mail.Body     = String.Format(bodyMail, job.job, docsEmail, job.novoDiretorioDestino);
                    mail.Priority = MailPriority.Normal;
                    SmtpClient SmtpServer = new SmtpClient()
                    {
                        Host = smtpHost, Port = smtpPort
                    };
                    // --
                    // Envia o email
                    //SmtpServer.Send(mail);
                    arquivosEnviadoComSucesso.Add(job);
                }
                catch (Exception ex)
                {
                    job.erro           = true;
                    job.mensagemDeErro = ex.Message;
                    arquivosErro.Add(job);
                    retornoErro = string.Format("Ocorreu erro durante envio de e-mail. {0}", ex.Message);
                }
            }
            if (arquivosErro.Count == 0)
            {
                novaColecaoDocumentos = ManageFiles.CopiaMoveArquivos(colecaoDocumentos, dataDiretorio, out retornoErro);
                return(novaColecaoDocumentos);
            }
            else
            {
                return(colecaoDocumentos);
            }
        }