public static string GetDiretorioEmpresa(Declaracao declaracao, int mes) { string folderTipoDeclaracao = GetFolderTipoDeclaracao(declaracao, mes); return(Path.Combine(DownloadFolder, folderTipoDeclaracao, empresaAutenticada.Codigo + "-" + empresaAutenticada.NIF)); }
/// <summary> /// /// </summary> /// <param name="ano"></param> /// <param name="mes"></param> /// <param name="linkAClicar">Trata-se do nome do link em que é para carregar, na lista de opções ("Obter comprovativo" ou "Obter documento de pagamento")</param> internal static void DownloadDMR(int ano, int mes, string linkAClicar, Declaracao declaracao, string estruturaFicheiro) { driver.Navigate().GoToUrl("https://www.portaldasfinancas.gov.pt/pt/external/oadmrsv/consultarDMR.action"); //Selecionar ano e mes var selectMes = new SelectElement(driver.FindElement(By.Id("mes"))); selectMes.SelectByValue(mes.ToString()); var selectAno = new SelectElement(driver.FindElement(By.Id("ano"))); selectAno.SelectByValue(ano.ToString()); driver.FindElement(By.Id("pesquisar")).Click(); Thread.Sleep(500); //Download var elementosLista = driver.FindElements(By.XPath("//*[@id=\"tab1\"]/div[1]/div[3]/div/ul/*/a")); foreach (var elemento in elementosLista) { if (elemento.GetAttribute("innerHTML").Contains(linkAClicar)) { ExpectDownload(); driver.Navigate().GoToUrl(elemento.GetAttribute("href")); ClickButtonWaitForItToAppear(By.Id("obter-btn")); WaitForDownloadFinish(GenNovoNomeFicheiro(estruturaFicheiro), declaracao, mes); } } }
private static void LogError(Exception ex, Empresa empresa, Declaracao declaracao) { if (declaracao == null) { errors.Add(empresa.NIF + " erro: " + ex.Message); } else { errors.Add(empresa.NIF + " erro em " + declaracao.Nome + ": " + ex.Message); } }
internal static void WaitForDownloadFinish(string newName, Declaracao declaracao, int mes) { //Espera que o download comece Util.WaitForFileCountToBeGreaterThan(DownloadFolder, numFilesInDownloadsFolder); //Espera que ele acabe Util.WaitForAllFilesToDownload(DownloadFolder); Thread.Sleep(500); //Espera que o ficheiro final esteja pronto Util.WaitForFileCountToBeGreaterThan(DownloadFolder, numFilesInDownloadsFolder); var diretorio = GetDiretorioEmpresa(declaracao, mes); Thread.Sleep(1000); //Muda o nome Util.RenameLastModifiedFileInFolder(DownloadFolder, newName, diretorio); numFilesInDownloadsFolder++; }
internal static Declaracao[] MergeArrays(params Declaracao[][] declaracoesArray) { int totalLen = 0; //Aloca espaço para a array total foreach (Declaracao[] declacacoes in declaracoesArray) { totalLen += declacacoes.Length; } Declaracao[] mergedArray = new Declaracao[totalLen]; int pos = 0; foreach (Declaracao[] declacacoes in declaracoesArray) { Array.Copy(declacacoes, 0, mergedArray, pos, declacacoes.Length); pos += declacacoes.Length; } return(mergedArray); }
public static string GetFolderTipoDeclaracao(Declaracao declaracao, int mes) { if (declaracao.Tipo == Declaracao.TipoDeclaracao.Anual) { return("Anuais"); } else if (declaracao.Tipo == Declaracao.TipoDeclaracao.Mensal) { return(mes.ToString()); } else if (declaracao.Tipo == Declaracao.TipoDeclaracao.Lista) { return("Listas"); } else if (declaracao.Tipo == Declaracao.TipoDeclaracao.Pedido) { return("Pedidos"); } return("A"); }
internal static void Executar(Empresa[] empresas, Declaracao[] declaracoes, int ano, int mes, string downloadFolder, Action <int> reportProgress, bool headless) { Downloader.reportProgress = reportProgress; filesToRename = new List <string>(); logMessage = new StringBuilder(); Ano = ano; Mes = mes; totalEmpresas = empresas.Length; //Para cada empresa for (int iEmpresa = 0; iEmpresa < totalEmpresas; iEmpresa++) { Empresa empresa = empresas[iEmpresa]; //Cria a pasta, o driver e autentica essa empresa try { DownloadFolder = Path.Combine(downloadFolder, ano.ToString()); Directory.CreateDirectory(DownloadFolder); CriarDriver(DownloadFolder, headless); Autenticar(empresa, declaracoes); } catch (Exception ex) { LogError(ex, empresa, null); break; } totalDeclaracoes = declaracoes.Length; //Para cada declaração executa o que tem a fazer for (int iDeclaracao = 0; iDeclaracao < declaracoes.Length; iDeclaracao++) { numDeclaracaoAProcessar = iDeclaracao; Declaracao declaracao = declaracoes[iDeclaracao]; try { if (declaracao.DownloadFunctionAnual != null) { declaracao.DownloadFunctionAnual.Invoke(ano); } else if (declaracao.DownloadFunctionMensal != null) { declaracao.DownloadFunctionMensal.Invoke(ano, mes); } } catch (Exception ex) { //Se der erro regista-o mas prossegue LogError(ex, empresa, declaracao); } CalcularProgresso(); } //Fecha o chrome quanto todas as transferências terminarem (já não existirem ficheiros ".crdownload") try { Thread.Sleep(2000); Util.WaitForAllFilesToDownload(DownloadFolder); FecharDriver(); } catch (Exception ex) { LogError(ex, empresa, null); break; } filesToRename.Clear(); } FecharDriver(); }