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