public static List <ArquivoRps> SetValues()
        {
            List <ArquivoRps> arquivosRpsCol = new List <ArquivoRps>();

            try
            {
                string        pathOrigemImportacao = ParametroDAL.GetValor("OrigemImportacaoPath");
                DirectoryInfo diretorio            = new DirectoryInfo(@pathOrigemImportacao);

                FileInfo[] arquivos = diretorio.GetFiles();
                foreach (FileInfo file in arquivos)
                {
                    if (FileIsValid(file))
                    {
                        string[,] values = GetValues();
                        ArquivoRps arquivoRps = new ArquivoRps();

                        arquivoRps.NomeArquivo    = file.Name;
                        arquivoRps.NomeArquivoREM = file.Name.Replace(".txt", ".REM");
                        arquivoRps.NomeArquivoRET = file.Name.Replace(".txt", ".RET");

                        string[] DadosNFOrigem = ParametroDAL.GetValor("DadosNFOrigem").Split(';');

                        // Primeira linha --> Dados do Prestador
                        if ((lines[1].IndexOf("001|") == 0))
                        {
                            arquivoRps.Rps.NumeroLote         = RpsDAL.GetUltimoLote();
                            arquivoRps.Rps.CpfCnpj            = DadosNFOrigem[0];
                            arquivoRps.Rps.InscricaoMunicipal = DadosNFOrigem[1];
                            arquivoRps.Rps.Quantidade         = "1";                                                                            // Analisar o arquivo se será 1 ou N lotes por arquivo

                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.IdentificacaoRps.Numero = Convert.ToString(LoteRpsDAL.GetUltimoRPS()); //Sequencial => Controle do banco --> Só precisa ser gerado sequencialmente quando o lote for processado com sucesso
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.IdentificacaoRps.Serie  = DadosNFOrigem[2];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.IdentificacaoRps.Tipo   = DadosNFOrigem[3];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.DataEmissao             = DateTime.Now.ToString("yyyy-MM-dd");
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Status      = DadosNFOrigem[4];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Competencia = arquivoRps.Rps.InfDeclaracaoPrestacaoServico.DataEmissao;

                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Prestador.CpfCnpj            = arquivoRps.Rps.CpfCnpj;
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Prestador.InscricaoMunicipal = arquivoRps.Rps.InscricaoMunicipal;
                        }
                        // Segunda linha --> Dados do Tomador
                        if ((lines[2].IndexOf("002|") == 0))
                        {
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Tomador.CpfCnpj     = values[2, 1];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Tomador.RazaoSocial = values[2, 3];

                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Tomador.Endereco.Logradouro      = values[2, 11];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Tomador.Endereco.Numero          = values[2, 12];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Tomador.Endereco.Bairro          = values[2, 8];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Tomador.Endereco.CodigoMunicipio = values[2, 6];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Tomador.Endereco.Uf      = values[2, 7];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Tomador.Endereco.Cep     = values[2, 10];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Tomador.Contato.Telefone = values[2, 5];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Tomador.Contato.Email    = values[2, 4].ToLower().TrimEnd();
                        }
                        // Terceira linha --> Dados do Serviço
                        if ((lines[3].IndexOf("005|") == 0))
                        {
                            decimal valorServico = Convert.ToDecimal(values[3, 1]) / 100;
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.Valores.ValorServicos = Convert.ToString(valorServico).Replace(",", ".");
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.IssRetido             = DadosNFOrigem[5];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.ItemListaServico      = DadosNFOrigem[6];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.CodigoCnae            = DadosNFOrigem[7];

                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.CodigoTributacaoMunicipio = arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.ItemListaServico;


                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.Discriminacao = values[3, 18];
                            // Ir na tabela Regra verificar se há alguma regra estabelecida
                            RegraTO regraGeral = RegraDAL.GetTodos("*");
                            if (regraGeral.Regra != null)
                            {
                                //string discriminacao = regraGeral.Discriminacao;
                                arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.Discriminacao = regraGeral.Discriminacao;
                            }

                            RegraTO regra = RegraDAL.GetPorCpfCnpjPrestador(arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Tomador.CpfCnpj);
                            if (regra.CpfCnpj_Prestador != null)
                            {
                                string   discriminacao     = regra.Discriminacao;
                                string[] srt_discriminacao = discriminacao.Split('|');

                                foreach (string valor in srt_discriminacao)
                                {
                                    switch (valor)
                                    {
                                    case "DataEmissao":
                                        // Campo crítico
                                        string dtEmissao = GetExpressaoComData(arquivoRps.Rps.InfDeclaracaoPrestacaoServico.DataEmissao, regra.Expressoes);
                                        discriminacao = discriminacao.Replace(valor, dtEmissao);
                                        break;

                                    case "ValorServicos":
                                        discriminacao = discriminacao.Replace(valor, arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.Valores.ValorServicos);
                                        break;

                                    case "IssRetido":
                                        discriminacao = discriminacao.Replace(valor, arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.IssRetido);
                                        break;

                                    case "ItemListaServico":
                                        discriminacao = discriminacao.Replace(valor, arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.ItemListaServico);
                                        break;

                                    case "CodigoCnae":
                                        discriminacao = discriminacao.Replace(valor, arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.CodigoCnae);
                                        break;
                                    }
                                }

                                arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.Discriminacao = discriminacao.Replace("|", "");
                            }

                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.CodigoMunicipio     = DadosNFOrigem[8];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.ExigibilidadeISS    = DadosNFOrigem[9];
                            arquivoRps.Rps.InfDeclaracaoPrestacaoServico.Servico.MunicipioIncidencia = DadosNFOrigem[10];
                        }

                        arquivoRps.Rps.InfDeclaracaoPrestacaoServico.OptanteSimplesNacional = DadosNFOrigem[11];
                        arquivoRps.Rps.InfDeclaracaoPrestacaoServico.IncentivoFiscal        = DadosNFOrigem[12];

                        arquivosRpsCol.Add(arquivoRps);
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(arquivosRpsCol);
        }
Exemple #2
0
        public static List <Rps> ObterDadosEnvio()
        {
            List <Rps> rpsCollection = new List <Rps>();
            Rps        rps           = null;

            try {
                string        pathOrigemImportacao = ParametroDAL.GetValor("OrigemImportacaoPath");
                DirectoryInfo diretorio            = new DirectoryInfo(@pathOrigemImportacao);
                FileInfo[]    arquivos             = diretorio.GetFiles();
                if (arquivos.Length != 0)
                {
                    // Busca arquivos do diretorio
                    foreach (FileInfo file in arquivos)
                    {
                        // Somente arquivos TXT/CSV
                        if ((file.Extension.ToUpper().Equals(".TXT")) || (file.Extension.ToUpper().Equals(".CSV")))
                        {
                            string[] lines = System.IO.File.ReadAllLines(file.FullName);
                            if (lines.Length != 0)
                            {
                                string[] linhaCab = lines[0].Split('|');
                                string[] columns  = new string[50];
                                string[,] values = new string[lines.Length, columns.Length];

                                // Verifica se o arquivo possui o cabeçalho SISPEC
                                if ((lines[0].IndexOf("000|") == 0) || (linhaCab.Length == 17))
                                {
                                    int i = 0;

                                    // Preenche a matriz values com os valores dos campos
                                    foreach (string line in lines)
                                    {
                                        columns = line.Split('|');
                                        int j = 0;
                                        foreach (string field in columns)
                                        {
                                            values[i, j] = field;
                                            //Console.WriteLine("\t Line[" + i + "] - Field[" + j + "]: " + field);
                                            j++;
                                        }
                                        i++;
                                    }
                                    rps = new Rps();
                                    //string[] DadosNFPlamedAju = ParametroDAL.GetValor("DadosNFPlamedAju").Split(';');
                                    string[] DadosNFOrigem = ParametroDAL.GetValor("DadosNFOrigem").Split(';');

                                    // Primeira linha --> Dados do Prestador
                                    if ((lines[1].IndexOf("001|") == 0))
                                    {
                                        rps.NumeroLote         = RpsDAL.GetUltimoLote();
                                        rps.CpfCnpj            = DadosNFOrigem[0];
                                        rps.InscricaoMunicipal = DadosNFOrigem[1];
                                        rps.Quantidade         = "1"; // Analisar o arquivo se será 1 ou N lotes por arquivo



                                        rps.InfDeclaracaoPrestacaoServico.IdentificacaoRps.Numero = Convert.ToString(LoteRpsDAL.GetUltimoRPS()); //Sequencial => Controle do banco --> Só precisa ser gerado sequencialmente quando o lote for processado com sucesso
                                        rps.InfDeclaracaoPrestacaoServico.IdentificacaoRps.Serie  = DadosNFOrigem[2];
                                        rps.InfDeclaracaoPrestacaoServico.IdentificacaoRps.Tipo   = DadosNFOrigem[3];
                                        rps.InfDeclaracaoPrestacaoServico.DataEmissao             = DateTime.Now.ToString("yyyy-MM-dd");
                                        rps.InfDeclaracaoPrestacaoServico.Status      = DadosNFOrigem[4];
                                        rps.InfDeclaracaoPrestacaoServico.Competencia = rps.InfDeclaracaoPrestacaoServico.DataEmissao;

                                        rps.InfDeclaracaoPrestacaoServico.Prestador.CpfCnpj            = rps.CpfCnpj;
                                        rps.InfDeclaracaoPrestacaoServico.Prestador.InscricaoMunicipal = rps.InscricaoMunicipal;
                                    }
                                    // Segunda linha --> Dados do Tomador
                                    if ((lines[2].IndexOf("002|") == 0))
                                    {
                                        rps.InfDeclaracaoPrestacaoServico.Tomador.CpfCnpj     = values[2, 1];
                                        rps.InfDeclaracaoPrestacaoServico.Tomador.RazaoSocial = values[2, 3];

                                        rps.InfDeclaracaoPrestacaoServico.Tomador.Endereco.Logradouro      = values[2, 11];
                                        rps.InfDeclaracaoPrestacaoServico.Tomador.Endereco.Numero          = values[2, 12];
                                        rps.InfDeclaracaoPrestacaoServico.Tomador.Endereco.Bairro          = values[2, 8];
                                        rps.InfDeclaracaoPrestacaoServico.Tomador.Endereco.CodigoMunicipio = values[2, 6];
                                        rps.InfDeclaracaoPrestacaoServico.Tomador.Endereco.Uf      = values[2, 7];
                                        rps.InfDeclaracaoPrestacaoServico.Tomador.Endereco.Cep     = values[2, 10];
                                        rps.InfDeclaracaoPrestacaoServico.Tomador.Contato.Telefone = values[2, 5];
                                        rps.InfDeclaracaoPrestacaoServico.Tomador.Contato.Email    = values[2, 4].ToLower().TrimEnd();
                                    }
                                    // Terceira linha --> Dados do Serviço
                                    if ((lines[3].IndexOf("005|") == 0))
                                    {
                                        decimal valorServico = Convert.ToDecimal(values[3, 1]) / 100;
                                        rps.InfDeclaracaoPrestacaoServico.Servico.Valores.ValorServicos = Convert.ToString(valorServico).Replace(",", ".");
                                        rps.InfDeclaracaoPrestacaoServico.Servico.IssRetido             = DadosNFOrigem[5];
                                        rps.InfDeclaracaoPrestacaoServico.Servico.ItemListaServico      = DadosNFOrigem[6];
                                        rps.InfDeclaracaoPrestacaoServico.Servico.CodigoCnae            = DadosNFOrigem[7];

                                        rps.InfDeclaracaoPrestacaoServico.Servico.CodigoTributacaoMunicipio = rps.InfDeclaracaoPrestacaoServico.Servico.ItemListaServico;


                                        rps.InfDeclaracaoPrestacaoServico.Servico.Discriminacao = values[3, 18];
                                        // Ir na tabela Regra verificar se há alguma regra estabelecida
                                        RegraTO regraGeral = RegraDAL.GetTodos("*");
                                        if (regraGeral.Regra != null)
                                        {
                                            //string discriminacao = regraGeral.Discriminacao;
                                            rps.InfDeclaracaoPrestacaoServico.Servico.Discriminacao = regraGeral.Discriminacao;
                                        }

                                        RegraTO regra = RegraDAL.GetPorCpfCnpjPrestador(rps.InfDeclaracaoPrestacaoServico.Tomador.CpfCnpj);
                                        if (regra.CpfCnpj_Prestador != null)
                                        {
                                            string   discriminacao     = regra.Discriminacao;
                                            string[] srt_discriminacao = discriminacao.Split('|');

                                            foreach (string valor in srt_discriminacao)
                                            {
                                                switch (valor)
                                                {
                                                case "DataEmissao":
                                                    // Campo crítico
                                                    string dtEmissao = GetExpressaoComData(rps.InfDeclaracaoPrestacaoServico.DataEmissao, regra.Expressoes);
                                                    discriminacao = discriminacao.Replace(valor, dtEmissao);
                                                    break;

                                                case "ValorServicos":
                                                    discriminacao = discriminacao.Replace(valor, rps.InfDeclaracaoPrestacaoServico.Servico.Valores.ValorServicos);
                                                    break;

                                                case "IssRetido":
                                                    discriminacao = discriminacao.Replace(valor, rps.InfDeclaracaoPrestacaoServico.Servico.IssRetido);
                                                    break;

                                                case "ItemListaServico":
                                                    discriminacao = discriminacao.Replace(valor, rps.InfDeclaracaoPrestacaoServico.Servico.ItemListaServico);
                                                    break;

                                                case "CodigoCnae":
                                                    discriminacao = discriminacao.Replace(valor, rps.InfDeclaracaoPrestacaoServico.Servico.CodigoCnae);
                                                    break;
                                                }
                                            }

                                            rps.InfDeclaracaoPrestacaoServico.Servico.Discriminacao = discriminacao.Replace("|", "");
                                        }

                                        rps.InfDeclaracaoPrestacaoServico.Servico.CodigoMunicipio     = DadosNFOrigem[8];
                                        rps.InfDeclaracaoPrestacaoServico.Servico.ExigibilidadeISS    = DadosNFOrigem[9];
                                        rps.InfDeclaracaoPrestacaoServico.Servico.MunicipioIncidencia = DadosNFOrigem[10];
                                    }

                                    rps.InfDeclaracaoPrestacaoServico.OptanteSimplesNacional = DadosNFOrigem[11];
                                    rps.InfDeclaracaoPrestacaoServico.IncentivoFiscal        = DadosNFOrigem[12];

                                    rpsCollection.Add(rps);
                                }
                            }
                            else
                            {
                                Console.WriteLine("Conteúdo de arquivo no formato inválido (layout inválido).");
                            }
                        }
                        else
                        {
                            Console.WriteLine("Arquivo no formato inválido (tipo inválido).");
                        }

                        nomeArquivo = file.Name.Split('.')[0];
                    }
                }
                else
                {
                    Console.WriteLine("Nenhum arquivo para importação.");
                }
            } catch (Exception e) {
                Console.WriteLine(e.Message);
            }
            return(rpsCollection);
        }