/// <summary>
        /// Gera a tabela com os totais e escreve-a num ficheiro
        /// </summary>
        /// <param name="totaisTipoPagamento"></param>
        /// <param name="totaisTipoAdiantamento"></param>
        /// <param name="totaisTipoAdiantamentoPagamento"></param>
        /// <param name="totaisAnulados"></param>
        /// <param name="tipo">Prestador ou Adquirente</param>
        private static void GeraTabelaTxtTotais(RecibosVerdesValores totaisTipoPagamento,
                                                RecibosVerdesValores totaisTipoAdiantamento, RecibosVerdesValores totaisTipoAdiantamentoPagamento,
                                                RecibosVerdesValores totaisAnulados,
                                                int mes, TipoReciboVerdePrestOUAdquir tipo)
        {
            //Gera a tabela para txt

            RecibosVerdesValores total = totaisTipoPagamento + totaisTipoAdiantamento + totaisTipoAdiantamentoPagamento;

            DataTable table = new DataTable();

            table.Columns.Add("Tipo", typeof(string));
            table.Columns.Add("Valor base", typeof(decimal));
            table.Columns.Add("IVA", typeof(decimal));
            table.Columns.Add("Imp. Selo", typeof(decimal));
            table.Columns.Add("IRS", typeof(decimal));
            table.Columns.Add("Recebido", typeof(decimal));

            table.Rows.Add("Pagamento", totaisTipoPagamento.valorBase, totaisTipoPagamento.valorIvaContinente,
                           totaisTipoPagamento.impostoSelo, totaisTipoPagamento.irsSemRetencao,
                           totaisTipoPagamento.importanciaRecebida);

            table.Rows.Add("Adiantamento", totaisTipoAdiantamento.valorBase, totaisTipoAdiantamento.valorIvaContinente,
                           totaisTipoAdiantamento.impostoSelo, totaisTipoAdiantamento.irsSemRetencao,
                           totaisTipoAdiantamento.importanciaRecebida);

            table.Rows.Add("Adiant. para despesas", totaisTipoAdiantamentoPagamento.valorBase, totaisTipoAdiantamentoPagamento.valorIvaContinente,
                           totaisTipoAdiantamentoPagamento.impostoSelo, totaisTipoAdiantamentoPagamento.irsSemRetencao,
                           totaisTipoAdiantamentoPagamento.importanciaRecebida);

            table.Rows.Add("Total", total.valorBase, total.valorIvaContinente, total.impostoSelo,
                           total.irsSemRetencao, total.importanciaRecebida);

            table.Rows.Add("Total anulados", totaisAnulados.valorBase, totaisAnulados.valorIvaContinente, totaisAnulados.impostoSelo,
                           totaisAnulados.irsSemRetencao, totaisAnulados.importanciaRecebida);


            var text = ConsoleTableBuilder.From(table).Export().ToString();

            var diretorio = Path.Combine(DownloadFolder, GetFolderTipoDeclaracao(Declaracao.AT_LISTA_RECIBOS_VERDES_PARA_WINTOUCH_PRESTADOS, mes),
                                         empresaAutenticada.Codigo + "-" + empresaAutenticada.NIF);

            Directory.CreateDirectory(diretorio);

            string nomeFicheiro;

            if (tipo == TipoReciboVerdePrestOUAdquir.Adquirente)
            {
                nomeFicheiro = "Totais adquiridos.txt";
            }
            else
            {
                nomeFicheiro = "Totais emitidos.txt";
            }

            File.WriteAllText(Path.Combine(diretorio, nomeFicheiro), text);
        }
        //Tipo: Prestador e Adquirente
        internal static void DownloadRecibosVerdesEmitidosWintouch(int ano, int mes, TipoReciboVerdePrestOUAdquir tipo)
        {
            List <string> detailsURLs = new List <string>();

            //Vai à lista de recibos verdes, para obter o URL de detalhes de cada um
            RecibosVerdesEmitidosNavegarPorCadaRecibo(ano, mes, tipo, (string downloadURL, string numRecibo, string nomeCliente) =>
            {
                //Para cada recibo, regista o URL para obter os detalhes
                string detailsUrl = downloadURL.Replace("/imprimir/", "/detalhe/").Replace("/normal", "");
                detailsURLs.Add(detailsUrl);
            });

            //Para contar os totais por tipo de recibo
            RecibosVerdesValores totaisTipoPagamento             = new RecibosVerdesValores();
            RecibosVerdesValores totaisTipoAdiantamento          = new RecibosVerdesValores();
            RecibosVerdesValores totaisTipoAdiantamentoPagamento = new RecibosVerdesValores();
            RecibosVerdesValores totaisAnulados = new RecibosVerdesValores();

            List <ReciboVerde> recibosVerdes = new List <ReciboVerde>(detailsURLs.Count);

            //List<ReciboVerde> recibosVerdes = (List<ReciboVerde>)new BinaryFormatter().Deserialize(new FileStream(@"C:\users\miguel\desktop\a.txt", FileMode.Open, FileAccess.Read));//TEMP

            //Depois de obtidos os URLs, navegar até à pagina de detalhes de cada um
            foreach (string detailsUrl in detailsURLs)
            {
                //Obtem os dados do recibo verde, navegado até à página de detalhes
                ReciboVerde reciboVerde = ObterDadosReciboVerde(detailsUrl, tipo);
                recibosVerdes.Add(reciboVerde);

                //Soma os valores para obter um total por tipo de recibo verde
                if (!reciboVerde.anulado)
                {
                    if (reciboVerde.tipoReciboVerde == TipoReciboVerde.Pagamento)
                    {
                        totaisTipoPagamento += reciboVerde.valores;
                    }
                    if (reciboVerde.tipoReciboVerde == TipoReciboVerde.Adiantamento)
                    {
                        totaisTipoAdiantamento += reciboVerde.valores;
                    }
                    if (reciboVerde.tipoReciboVerde == TipoReciboVerde.AdiantamentoPagamento)
                    {
                        totaisTipoAdiantamentoPagamento += reciboVerde.valores;
                    }
                }
                else
                {
                    totaisAnulados += reciboVerde.valores;
                }
            }

            //new BinaryFormatter().Serialize(new FileStream(@"c:\users\miguel\desktop\b.txt", FileMode.Create), recibosVerdes);
            GeraTabelaTxtTotais(totaisTipoPagamento, totaisTipoAdiantamento, totaisTipoAdiantamentoPagamento, totaisAnulados, mes, tipo);
            ExportarFicheiroWintouch(recibosVerdes, mes, tipo);
        }
        public static RecibosVerdesValores operator +(RecibosVerdesValores a, RecibosVerdesValores b)
        {
            RecibosVerdesValores soma = new RecibosVerdesValores();

            soma.valorBase           = a.valorBase + b.valorBase;
            soma.valorIvaContinente  = a.valorIvaContinente + b.valorIvaContinente;
            soma.impostoSelo         = a.impostoSelo + b.impostoSelo;
            soma.irsSemRetencao      = a.irsSemRetencao + b.irsSemRetencao;
            soma.importanciaRecebida = a.importanciaRecebida + b.importanciaRecebida;
            return(soma);
        }