Beispiel #1
0
        /// <summary>
        /// Consulta a situação de um determinado recibo de envio.
        /// </summary>
        private static void ConsultarReciboDeEnvio(NFeFacade nfeFacade, string numeroRecibo)
        {
            try
            {
                var booStatusOk = ConsultarStatusServico(nfeFacade);

                if (!booStatusOk)
                {
                    return;
                }

                var retornoConsultaProtocolo = nfeFacade.ConsultarReciboDeEnvio(numeroRecibo);
                if (retornoConsultaProtocolo.Retorno.protNFe[0].infProt.nProt != null)
                {
                    Console.WriteLine("#NFe#" + retornoConsultaProtocolo.Retorno.protNFe[0].infProt.nProt);
                }
                if (retornoConsultaProtocolo.Retorno.protNFe[0].infProt != null)
                {
                    Console.WriteLine("#Erro#" + retornoConsultaProtocolo.Retorno.protNFe[0].infProt.xMotivo);
                }
                else
                {
                    Console.WriteLine("#Erro#" + retornoConsultaProtocolo.Retorno.xMotivo);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ocorreu um erro não esperado.");
                Console.WriteLine(string.Format("Detalhes: {0}", ex.Message));
            }
        }
Beispiel #2
0
        private static NFeFacade GetFacade()
        {
            try
            {
                Console.ForegroundColor = ConsoleColor.Blue;
                Console.WriteLine("Iniciando serviço de configurações do Zeus...");
                Console.ResetColor();
                var nfeFacade = new NFeFacade();
                //Verfiicar status das variaveis de configuracao
                var isconfig = nfeFacade.IsConfigured();
                if (!isconfig)
                {
                    Console.Write("");
                    Console.WriteLine("Foi detectado campos obrigatórios não informados\n" +
                                      "Informe dados de configuração");
                    Configurar();
                }

                return(nfeFacade);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ocorreu um erro não esperado.");
                Console.WriteLine("Detalhes: {0}", ex.Message);
                return(null); //stop execute routine
            }
        }
Beispiel #3
0
        /// <summary>
        /// Consulta o status dos webservices relacionados as informações presentes no arquivo de configuração.
        /// </summary>
        /// <returns>True - Online, False - Offline</returns>
        private static bool ConsultarStatusServico(NFeFacade nfeFacade)
        {
            try
            {
                Console.WriteLine("Acessando o serviço de status da receita...");

                var retorno = nfeFacade.ConsultarStatusServico();

                if (retorno.cStat == 107)
                {
                    Console.WriteLine("#ServicoEmOperacao");
                    return(true);
                }
                else
                {
                    Console.WriteLine("#ServicoIndisponivel");
                    return(false);
                }
            }
            catch (InvalidOperationException ex)
            {
                Console.WriteLine(ex.Message);
                return(false);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ocorreu um erro não esperado.");
                Console.WriteLine(string.Format("Detalhes: {0}", ex.Message));
                return(false);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Inutiliza uma faixa de numeração de NFe.
        /// </summary>
        /// <param name="nfeFacade"></param>
        /// <param name="dadosDaInutilizacao">String composta no seguinte formato: ano#cnpj#justificativa#numero_inicial#numero_final#serie</param>
        private static void InutilizarNumeracao(NFeFacade nfeFacade, string dadosDaInutilizacao)
        {
            #region Preparando dados
            var arrayStrDados = dadosDaInutilizacao.Split('#');

            var strCnpj          = string.Empty;
            var strJustificativa = string.Empty;

            var intNumeroInicial = 0;
            var intNumeroFinal   = 0;
            var intSerie         = 0;
            var intAno           = 0;

            try
            {
                strCnpj          = arrayStrDados[1];
                strJustificativa = arrayStrDados[2];
                intNumeroInicial = Convert.ToInt32(arrayStrDados[3]);
                intNumeroFinal   = Convert.ToInt32(arrayStrDados[4]);
                intSerie         = Convert.ToInt32(arrayStrDados[5]);
                intAno           = Convert.ToInt16(arrayStrDados[0]);
            }
            catch
            {
                Console.WriteLine("Um ou mais parâmetros estão incorretos.");
            }
            #endregion

            #region Inutilização

            try
            {
                var booStatusOk = ConsultarStatusServico(nfeFacade);

                if (!booStatusOk)
                {
                    return;
                }

                Console.WriteLine("Executando a inutilização...");
                var retornoInutilizacao = nfeFacade.InutilizarNumeracao(intAno, strCnpj, strJustificativa, intNumeroInicial, intNumeroFinal, intSerie);

                if (retornoInutilizacao.Retorno.infInut.cStat == 102)
                {
                    Console.WriteLine("#InutilizacaoEfetuada#{0}", retornoInutilizacao.Retorno.infInut.nProt);
                }
                else
                {
                    Console.WriteLine("#Erro#{0}", retornoInutilizacao.Retorno.infInut.xMotivo);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ocorreu um erro não esperado.");
                Console.WriteLine(string.Format("Detalhes:{0}", ex.Message));
            }

            #endregion
        }
Beispiel #5
0
        /// <summary>
        /// Atribui uma cofiguração ao arquivo correspondente do zeus.
        /// </summary>
        /// <param name="nfeFacade"></param>
        /// <param name="dadosDaConfiguracao">Chave e valor da configuração separados por #. Exemplo: tipo_ambiente#h</param>
        private static void Configurar(NFeFacade nfeFacade, string dadosDaConfiguracao)
        {
            if (dadosDaConfiguracao == string.Empty)
            {
                IList <string> listConteudoArquivo = nfeFacade.CapturarConteudoArquivoDeConfiguracoes();

                Console.WriteLine("");

                foreach (var str in listConteudoArquivo)
                {
                    if (!string.IsNullOrWhiteSpace(str))
                    {
                        if (str.Substring(0, 1) != "#")
                        {
                            Console.WriteLine(str);
                        }
                    }
                }

                Console.WriteLine("");

                return; // <------- ATENÇÃO
            }

            string strChave;
            string strValor;

            try
            {
                strChave = dadosDaConfiguracao.Split('#')[0];
                strValor = dadosDaConfiguracao.Split('#')[1];
            }
            catch
            {
                Console.WriteLine("Um ou mais parâmetros foram informados de forma incorreta.");
                return;
            }

            try
            {
                Console.WriteLine("Executando a alteração no arquivo de configurações...");
                nfeFacade.AlterarArquivoDeConfiguracoes(strChave, strValor);
                Console.WriteLine("Alteração efetuada com sucesso.");
            }
            catch (InvalidOperationException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ocorreu um erro não esperado.");
                Console.WriteLine(string.Format("Detalhes: {0}", ex.Message));
            }
        }
Beispiel #6
0
        /// <summary>
        /// Cancela uma NFe
        /// </summary>
        /// <param name="nfeFacade"></param>
        /// <param name="dadosDoCancelamento">Dados para o cancelamento no formato: cnpj#justificativa#chave_de_acesso#protocolo#numero_lote#sequencia_evento</param>
        private static void CancelarNFe(NFeFacade nfeFacade, string dadosDoCancelamento)
        {
            #region Preparando dados
            var arrayStrDados = dadosDoCancelamento.Split('#');

            var strCnpj          = string.Empty;
            var strJustificativa = string.Empty;
            var strChaveAcesso   = string.Empty;
            var strProtocolo     = string.Empty;

            var   intNumeroLote      = 0;
            Int16 intSequenciaEvento = 0;

            try
            {
                strCnpj            = arrayStrDados[0];
                strJustificativa   = arrayStrDados[1];
                strChaveAcesso     = Convert.ToString(arrayStrDados[2]);
                strProtocolo       = Convert.ToString(arrayStrDados[3]);
                intNumeroLote      = Convert.ToInt32(arrayStrDados[4]);
                intSequenciaEvento = Convert.ToInt16(arrayStrDados[5]);
            }
            catch
            {
                Console.WriteLine("Um ou mais parâmetros estão incorretos.");
            }
            #endregion

            #region Cancelamento

            try
            {
                var booStatusOk = ConsultarStatusServico(nfeFacade);

                if (!booStatusOk)
                {
                    return;
                }

                Console.WriteLine("Executando o cancelamento...");
                var retornoCancelamento = nfeFacade.CancelarNFe(strCnpj, intNumeroLote, intSequenciaEvento, strChaveAcesso, strProtocolo, strJustificativa);
                Console.WriteLine("#InutilizacaoEfetuada#{0}", retornoCancelamento.Retorno.retEvento[0].infEvento.xMotivo);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ocorreu um erro não esperado.");
                Console.WriteLine(string.Format("Detalhes:{0}", ex.Message));
            }

            #endregion
        }
Beispiel #7
0
 /// <summary>
 /// Exibe uma lista contendo dados de configuração
 /// </summary>
 private static void ExibirConfig()
 {
     try
     {
         Console.Clear();
         var list = NFeFacade.GetConfiguracao();
         foreach (var item in list)
         {
             Console.WriteLine(item);
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(string.Format("Não foi possível exibir dados de configuração.\nErro: {0}", ex.Message));
     }
 }
Beispiel #8
0
 /// <summary>
 /// Exibe uma lista contendo dados de configuração
 /// </summary>
 private static void ExibirConfig()
 {
     try
     {
         Console.Clear();
         var list = NFeFacade.GetConfiguracao();
         foreach (var item in list)
         {
             Console.WriteLine(item);
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine("Não foi possível exibir dados de configuração.");
     }
 }
Beispiel #9
0
        /// <summary>
        ///     Configurar dados
        /// </summary>
        private static void Configurar()
        {
            //Usuario entra com dados
            Console.WriteLine("");
            Console.WriteLine("Informe dados do arquivo de configuração");

            //Variável do arquivo de configurações, Descrição
            Console.WriteLine("Caminho do arquivo .pfx");
            var pathcertificado = Console.ReadLine();

            Console.WriteLine("Senha do certificado");
            var certificadosenha = Console.ReadLine();

            Console.WriteLine("Caminho do diretório onde serão salvos os xml");
            var pathxml = Console.ReadLine();

            Console.WriteLine("Diretório onde estão os arquivos de schame tipo .xsd");
            var pathchema = Console.ReadLine();

            Console.WriteLine("Código IBGE do estado do emitente");
            var emitente = Console.ReadLine();

            Console.WriteLine("Modelo do documento 55 ou 65");
            var modelodocumento = Console.ReadLine();

            Console.WriteLine("Salvar arquivo XML {1 - Sim | 0 - Nao}");
            var salvarxmlservico = Console.ReadLine();

            Console.WriteLine("Tempo de espera máximo dos serviços da sefaz em milisegundos");
            var timeout = Console.ReadLine();

            Console.WriteLine("Ambiente { 1 - Producão | 2 - Homologação }");
            var tmpamb = Console.ReadLine();

            Console.WriteLine("Tipo de emissão 1 (Normal) | 2 (FS-IA)| 3 (SCAN)| 4 (EPEC)| 5 (FS-DA)| 6 (SVC-AN)| 7 (SVC-RS) | 9 (Offline) ");
            var tmpemissao = Console.ReadLine();

            Console.WriteLine("Versão da NFe { 3.10 | 4.00 } ");
            var versaoNFe = Console.ReadLine();

            //Set dados
            NFeFacade.SetConfiguracoes(pathcertificado, certificadosenha, pathxml,
                                       pathchema, emitente, modelodocumento, salvarxmlservico, timeout, tmpamb, tmpemissao, versaoNFe);

            Console.Clear();
            Console.WriteLine("Dados configurados !");
        }
Beispiel #10
0
 /// <summary>
 /// Cria o arquivo de configuração do app.
 /// </summary>
 private static void CriarArquivoDeConfiguracoes(NFeFacade nfeFacade)
 {
     try
     {
         Console.WriteLine("Gerando arquivo de configurações...");
         nfeFacade.CriarArquivoDeConfiguracoes();
         Console.WriteLine("Arquivo de configurações gerado com sucesso.");
     }
     catch (InvalidOperationException ex)
     {
         Console.WriteLine(ex.Message);
     }
     catch (Exception ex)
     {
         Console.WriteLine("Ocorreu um erro não esperado.");
         Console.WriteLine(string.Format("Detalhes: {0}", ex.Message));
     }
 }
Beispiel #11
0
        /// <summary>
        /// Atribui uma cofiguração ao arquivo correspondente do zeus.
        /// </summary>
        /// <param name="nfeFacade"></param>
        /// <param name="dadosDaConfiguracao">Chave e valor da configuração separados por #. Exemplo: tipo_ambiente#h</param>
        private static void Configurar(NFeFacade nfeFacade, string dadosDaConfiguracao)
        {
            if(dadosDaConfiguracao == string.Empty)
            {
                IList<string> listConteudoArquivo = nfeFacade.CapturarConteudoArquivoDeConfiguracoes();

                Console.WriteLine("");

                foreach(var str in listConteudoArquivo)
                {
                    if(!string.IsNullOrWhiteSpace(str))
                        if(str.Substring(0,1) != "#")
                            Console.WriteLine(str);
                }

                Console.WriteLine("");

                return; // <------- ATENÇÃO
            }

            string strChave;
            string strValor;

            try
            {
                strChave = dadosDaConfiguracao.Split('#')[0];
                strValor = dadosDaConfiguracao.Split('#')[1];
            }
            catch
            {
                Console.WriteLine("Um ou mais parâmetros foram informados de forma incorreta.");
                return;
            }

            try
            {
                Console.WriteLine("Executando a alteração no arquivo de configurações...");
                nfeFacade.AlterarArquivoDeConfiguracoes(strChave, strValor);
                Console.WriteLine("Alteração efetuada com sucesso.");
            }
            catch (InvalidOperationException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ocorreu um erro não esperado.");
                Console.WriteLine(string.Format("Detalhes: {0}", ex.Message));
            }
        }
Beispiel #12
0
        public static void Main(string[] args)
        {
            //Comandos a serem executados.
            var listComandos = new List <KeyValuePair <Comando, string> >();

            for (var i = 0; i < args.Length; i++)
            {
                /*
                 * ====================================================================================
                 * Comandos aceitos pelo app:
                 * "/enviar" - Enviar NFe
                 * "/recibo" - Consultar recibo
                 * "/status" - Status serviço
                 * "/inutilizar" - Inutilizar numeração
                 * "/config" - Mudar configuração
                 * ====================================================================================
                 */
                try
                {
                    switch (args[i])
                    {
                    case "/?": listComandos.Add(new KeyValuePair <Comando, string>(Comando.Help, string.Empty)); break;

                    case "/enviar": listComandos.Add(new KeyValuePair <Comando, string>(Comando.EnviarNFe, string.Format("{0}#{1}#{2}", args[i + 1], args[i + 2], args[i + 3]))); break;

                    case "/recibo": listComandos.Add(new KeyValuePair <Comando, string>(Comando.ConsultarReciboEnvio, args[i + 1])); break;

                    case "/status": listComandos.Add(new KeyValuePair <Comando, string>(Comando.StatusServico, string.Empty)); break;

                    case "/inutilizar": listComandos.Add(new KeyValuePair <Comando, string>(Comando.InutilizarNumeracao, string.Format("{0}#{1}#{2}#{3}#{4}#{5}", args[i + 1], args[i + 2], args[i + 3], args[i + 4], args[i + 5], args[i + 6]))); break;

                    case "/cancelar": listComandos.Add(new KeyValuePair <Comando, string>(Comando.CancelarNFe, string.Format("{0}#{1}#{2}#{3}#{4}#{5}", args[i + 1], args[i + 2], args[i + 3], args[i + 4], args[i + 5], args[i + 6]))); break;

                    case "/config": listComandos.Add(new KeyValuePair <Comando, string>(Comando.Configurar, (args.Length == 1) ? "" : string.Format("{0}#{1}", args[i + 1], args[i + 2]))); break;
                    }
                }
                catch
                {
                    Console.WriteLine("Um ou mais parâmetros não foram informados corretamente.");
                }
            }

            //VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
            if (listComandos.Count == 0)
            {
                return;                          //Se não tiver nada para fazer, encerra o app.
            }
            //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^



            //---------------------------------------------------------------------------------------------------------------------------------------------
            //Execução das tarefas
            //INÍCIO

            try
            {
                Console.WriteLine("Iniciando serviço de configurações do Zeus...");
                NFeFacade nfeFacade = null;

                try
                {
                    nfeFacade = new NFeFacade();
                }
                catch (FileNotFoundException)
                {
                    Console.Write("O arquivo de configurações do Zeus não foi encontrado. Deseja cria-lo?(S/N):");
                    if (Console.ReadKey().Key == ConsoleKey.S)
                    {
                        nfeFacade = new NFeFacade(true);
                        nfeFacade.CriarArquivoDeConfiguracoes();
                        Console.WriteLine("");
                        Console.WriteLine("Lembre-se atribuir os dados necessários ao arquivo que foi criado.");
                        return; // <----- FINALIZA APP
                    }
                }
                catch (InvalidOperationException ex)
                {
                    Console.WriteLine(ex.Message);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Ocorreu um erro não esperado.");
                    Console.WriteLine(string.Format("Detalhes: {0}", ex.Message));
                }

                //VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
                foreach (var tarefa in listComandos)
                {
                    switch (tarefa.Key)
                    {
                    case Comando.Help: ImprimirHelp(); break;

                    case Comando.EnviarNFe: EnviarNFe(nfeFacade, tarefa.Value); break;

                    case Comando.ConsultarReciboEnvio: ConsultarReciboDeEnvio(nfeFacade, tarefa.Value); break;

                    case Comando.StatusServico: ConsultarStatusServico(nfeFacade); break;

                    case Comando.InutilizarNumeracao: InutilizarNumeracao(nfeFacade, tarefa.Value); break;

                    case Comando.CancelarNFe: CancelarNFe(nfeFacade, tarefa.Value); break;

                    case Comando.CriarArquivoDeConfiguracoes: CriarArquivoDeConfiguracoes(nfeFacade); break;

                    case Comando.Configurar: Configurar(nfeFacade, tarefa.Value); break;
                    }
                }
                //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            }
            catch (InvalidOperationException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ocorreu um erro não esperado.");
                Console.WriteLine(string.Format("Detalhes: {0}", ex.Message));
            }

            //FIM
            //Execução das tarefas
            //---------------------------------------------------------------------------------------------------------------------------------------------
        }
Beispiel #13
0
        ///  <summary>
        ///  Envia uma NFe para o servidor da sefaz.
        ///  </summary>
        /// <param name="nfeFacade"></param>
        /// <param name="dadosDoEnvio">Informações do envio no formato: path_do_arquivo_xml_da_nfe_nao_assinada#numero_do_lote.</param>
        private static void EnviarNFe(NFeFacade nfeFacade, string dadosDoEnvio)
        {
            string     strPathArquivoXml;
            int        numeroLote;
            TipoXmlNFe tipoXml;

            try
            {
                var arrayStrDados = dadosDoEnvio.Split('#');
                strPathArquivoXml = arrayStrDados[0];
                numeroLote        = int.Parse(arrayStrDados[1]);
                switch (arrayStrDados[2])
                {
                case "D": tipoXml = TipoXmlNFe.Destinatario;
                    break;

                case "N":
                    tipoXml = TipoXmlNFe.NFe;
                    break;

                case "L":
                    tipoXml = TipoXmlNFe.Lote;
                    break;

                default:
                    throw new ArgumentException();
                }
            }
            catch
            {
                Console.WriteLine("Um ou mais parâmetros foram informados de forma incorreta.");
                return;
            }

            try
            {
                File.ReadAllText(strPathArquivoXml);
            }
            catch (UnauthorizedAccessException ex)
            {
                var strMensagem = string.Format("Não foi possível acessar o arquivo \"{0}\"", strPathArquivoXml);
                Console.WriteLine(strMensagem);
                Console.WriteLine("Detalhes:");
                Console.WriteLine(ex.Message);
                return;
            }

            try
            {
                var booStatusOk = ConsultarStatusServico(nfeFacade);

                if (!booStatusOk)
                {
                    return;
                }

                var nfeBuilder = new NFeBuilder(strPathArquivoXml, tipoXml);
                Console.WriteLine("Preparando a NFe...");
                var retorno = nfeFacade.EnviarNFe(numeroLote, nfeBuilder.Build());
                if (retorno.Retorno.cStat == 103)
                {
                    Console.WriteLine("#NFe#" + retorno.Retorno.infRec.nRec);
                }
                else
                {
                    Console.WriteLine("#Erro#" + retorno.Retorno.xMotivo);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Houve uma falha não esperada durante o processo de envio.");
                Console.WriteLine("Detalhes:");
                Console.WriteLine(ex.Message);
            }
        }
Beispiel #14
0
        /// <summary>
        /// Consulta a situação de um determinado recibo de envio.
        /// </summary>
        private static void ConsultarReciboDeEnvio(NFeFacade nfeFacade,string numeroRecibo)
        {
            try
            {
                var booStatusOk = ConsultarStatusServico(nfeFacade);

                if (!booStatusOk)
                {
                    return;
                }

                var retornoConsultaProtocolo = nfeFacade.ConsultarReciboDeEnvio(numeroRecibo);
                if (retornoConsultaProtocolo.Retorno.protNFe[0].infProt.nProt != null)
                {
                    Console.WriteLine("#NFe#" + retornoConsultaProtocolo.Retorno.protNFe[0].infProt.nProt);
                }
                if (retornoConsultaProtocolo.Retorno.protNFe[0].infProt != null)
                {
                    Console.WriteLine("#Erro#" + retornoConsultaProtocolo.Retorno.protNFe[0].infProt.xMotivo);
                }
                else
                {
                    Console.WriteLine("#Erro#" + retornoConsultaProtocolo.Retorno.xMotivo);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ocorreu um erro não esperado.");
                Console.WriteLine(string.Format("Detalhes: {0}", ex.Message));
            }
        }
Beispiel #15
0
 /// <summary>
 /// Cria o arquivo de configuração do app.
 /// </summary>
 private static void CriarArquivoDeConfiguracoes(NFeFacade nfeFacade)
 {
     try
     {
         Console.WriteLine("Gerando arquivo de configurações...");
         nfeFacade.CriarArquivoDeConfiguracoes();
         Console.WriteLine("Arquivo de configurações gerado com sucesso.");
     }
     catch(InvalidOperationException ex)
     {
         Console.WriteLine(ex.Message);
     }
     catch(Exception ex)
     {
         Console.WriteLine("Ocorreu um erro não esperado.");
         Console.WriteLine(string.Format("Detalhes: {0}", ex.Message));
     }
 }
Beispiel #16
0
        public static void Main(string[] args)
        {
            //Comandos a serem executados.
            var listComandos = new List<KeyValuePair<Comando, string>>();

            for (var i = 0; i < args.Length; i++)
            {
                /*
                ====================================================================================
                Comandos aceitos pelo app:
                "/enviar" - Enviar NFe
                "/recibo" - Consultar recibo
                "/status" - Status serviço
                "/inutilizar" - Inutilizar numeração
                "/config" - Mudar configuração
                ====================================================================================
                */
                try
                {
                    switch (args[i])
                    {
                        case "/?": listComandos.Add(new KeyValuePair<Comando, string>(Comando.Help,string.Empty)); break;
                        case "/enviar": listComandos.Add(new KeyValuePair<Comando, string>(Comando.EnviarNFe, string.Format("{0}#{1}#{2}", args[i + 1], args[i+2], args[i + 3]))); break;
                        case "/recibo": listComandos.Add(new KeyValuePair<Comando, string>(Comando.ConsultarReciboEnvio, args[i + 1])); break;
                        case "/status": listComandos.Add(new KeyValuePair<Comando, string>(Comando.StatusServico, string.Empty)); break;
                        case "/inutilizar": listComandos.Add(new KeyValuePair<Comando, string>(Comando.InutilizarNumeracao, string.Format("{0}#{1}#{2}#{3}#{4}#{5}", args[i + 1], args[i + 2], args[i + 3], args[i + 4], args[i + 5], args[i + 6]))); break;
                        case "/cancelar": listComandos.Add(new KeyValuePair<Comando, string>(Comando.CancelarNFe, string.Format("{0}#{1}#{2}#{3}#{4}#{5}", args[i + 1], args[i + 2], args[i + 3], args[i + 4], args[i + 5], args[i + 6]))); break;
                        case "/config": listComandos.Add(new KeyValuePair<Comando, string>(Comando.Configurar,(args.Length == 1) ? "" : string.Format("{0}#{1}", args[i + 1], args[i + 2]))); break;
                    }
                }
                catch
                {
                    Console.WriteLine("Um ou mais parâmetros não foram informados corretamente.");
                }
            }

            //VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
            if (listComandos.Count == 0) return; //Se não tiver nada para fazer, encerra o app. 
            //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^



            //---------------------------------------------------------------------------------------------------------------------------------------------
            //Execução das tarefas
            //INÍCIO

            try
            {
                Console.WriteLine("Iniciando serviço de configurações do Zeus...");
                NFeFacade nfeFacade = null;

                try
                {
                    nfeFacade = new NFeFacade();
                }
                catch(FileNotFoundException)
                {
                    Console.Write("O arquivo de configurações do Zeus não foi encontrado. Deseja cria-lo?(S/N):");
                    if(Console.ReadKey().Key == ConsoleKey.S)
                    {
                        nfeFacade = new NFeFacade(true);
                        nfeFacade.CriarArquivoDeConfiguracoes();
                        Console.WriteLine("");
                        Console.WriteLine("Lembre-se atribuir os dados necessários ao arquivo que foi criado.");
                        return; // <----- FINALIZA APP
                    }
                }
                catch(InvalidOperationException ex)
                {
                    Console.WriteLine(ex.Message);
                }
                catch(Exception ex)
                {
                    Console.WriteLine("Ocorreu um erro não esperado.");
                    Console.WriteLine(string.Format("Detalhes: {0}", ex.Message));
                }

                //VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
                foreach (var tarefa in listComandos)
                {
                    switch(tarefa.Key)
                    {
                        case Comando.Help: ImprimirHelp(); break;
                        case Comando.EnviarNFe: EnviarNFe(nfeFacade, tarefa.Value); break;
                        case Comando.ConsultarReciboEnvio: ConsultarReciboDeEnvio(nfeFacade, tarefa.Value);break;
                        case Comando.StatusServico: ConsultarStatusServico(nfeFacade); break;
                        case Comando.InutilizarNumeracao: InutilizarNumeracao(nfeFacade, tarefa.Value);break;
                        case Comando.CancelarNFe: CancelarNFe(nfeFacade, tarefa.Value);break;
                        case Comando.CriarArquivoDeConfiguracoes: CriarArquivoDeConfiguracoes(nfeFacade); break;
                        case Comando.Configurar: Configurar(nfeFacade, tarefa.Value); break;
                    }
                }
                //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            }
            catch (InvalidOperationException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ocorreu um erro não esperado.");
                Console.WriteLine(string.Format("Detalhes: {0}", ex.Message));
            }

            //FIM
            //Execução das tarefas
            //---------------------------------------------------------------------------------------------------------------------------------------------
        }
Beispiel #17
0
        ///  <summary>
        ///  Envia uma NFe para o servidor da sefaz.
        ///  </summary>
        /// <param name="nfeFacade"></param>
        /// <param name="dadosDoEnvio">Informações do envio no formato: path_do_arquivo_xml_da_nfe_nao_assinada#numero_do_lote.</param>
        private static void EnviarNFe(NFeFacade nfeFacade, string dadosDoEnvio)
        {
            string strPathArquivoXml;
            int numeroLote;
            TipoXmlNFe tipoXml;

            try
            {
                var arrayStrDados = dadosDoEnvio.Split('#');
                strPathArquivoXml = arrayStrDados[0];
                numeroLote = int.Parse(arrayStrDados[1]);
                switch (arrayStrDados[2])
                {
                    case "D": tipoXml = TipoXmlNFe.Destinatario;
                        break;
                    case "N":
                        tipoXml = TipoXmlNFe.NFe;
                        break;
                    case "L":
                        tipoXml = TipoXmlNFe.Lote;
                        break;
                    default:
                        throw new ArgumentException();
                }
            }
            catch
            {
                Console.WriteLine("Um ou mais parâmetros foram informados de forma incorreta.");
                return;
            }

            try
            {
                File.ReadAllText(strPathArquivoXml);
            }
            catch (UnauthorizedAccessException ex)
            {
                var strMensagem = string.Format("Não foi possível acessar o arquivo \"{0}\"", strPathArquivoXml);
                Console.WriteLine(strMensagem);
                Console.WriteLine("Detalhes:");
                Console.WriteLine(ex.Message);
                return;
            }

            try
            {
                var booStatusOk = ConsultarStatusServico(nfeFacade);

                if (!booStatusOk)
                {
                    return;
                }

                var nfeBuilder = new NFeBuilder(strPathArquivoXml, tipoXml);
                Console.WriteLine("Preparando a NFe...");
                var retorno = nfeFacade.EnviarNFe(numeroLote, nfeBuilder.Build());
                if (retorno.Retorno.cStat == 103)
                {
                    Console.WriteLine("#NFe#"+retorno.Retorno.infRec.nRec);
                }
                else
                {
                    Console.WriteLine("#Erro#"+retorno.Retorno.xMotivo);
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine("Houve uma falha não esperada durante o processo de envio.");
                Console.WriteLine("Detalhes:");
                Console.WriteLine(ex.Message);
            }
        }
Beispiel #18
0
        /// <summary>
        /// Consulta o status dos webservices relacionados as informações presentes no arquivo de configuração.
        /// </summary>
        /// <returns>True - Online, False - Offline</returns>
        private static bool ConsultarStatusServico(NFeFacade nfeFacade)
        {
            try
            {
                Console.WriteLine("Acessando o serviço de status da receita...");

                var retorno = nfeFacade.ConsultarStatusServico();

                if (retorno.cStat == 107)
                {
                    Console.WriteLine("#ServicoEmOperacao");
                    return true;
                }
                else
                {
                    Console.WriteLine("#ServicoIndisponivel");
                    return false;
                }
            }
            catch (InvalidOperationException ex)
            {
                Console.WriteLine(ex.Message);
                return false;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ocorreu um erro não esperado.");
                Console.WriteLine(string.Format("Detalhes: {0}", ex.Message));
                return false;
            }
        }
Beispiel #19
0
        /// <summary>
        /// Inutiliza uma faixa de numeração de NFe.
        /// </summary>
        /// <param name="nfeFacade"></param>
        /// <param name="dadosDaInutilizacao">String composta no seguinte formato: ano#cnpj#justificativa#numero_inicial#numero_final#serie</param>
        private static void InutilizarNumeracao(NFeFacade nfeFacade, string dadosDaInutilizacao)
        {
            #region Preparando dados
            var arrayStrDados = dadosDaInutilizacao.Split('#');

            var strCnpj = string.Empty;
            var strJustificativa = string.Empty;

            var intNumeroInicial = 0;
            var intNumeroFinal = 0;
            var intSerie = 0;
            var intAno = 0;

            try
            {

                strCnpj = arrayStrDados[1];
                strJustificativa = arrayStrDados[2];
                intNumeroInicial = Convert.ToInt32(arrayStrDados[3]);
                intNumeroFinal = Convert.ToInt32(arrayStrDados[4]);
                intSerie = Convert.ToInt32(arrayStrDados[5]);
                intAno = Convert.ToInt16(arrayStrDados[0]);
            }
            catch
            {
                Console.WriteLine("Um ou mais parâmetros estão incorretos.");
            }
            #endregion

            #region Inutilização

            try
            {
                var booStatusOk = ConsultarStatusServico(nfeFacade);

                if (!booStatusOk)
                {
                    return;
                }

                Console.WriteLine("Executando a inutilização...");
                var retornoInutilizacao = nfeFacade.InutilizarNumeracao(intAno, strCnpj, strJustificativa, intNumeroInicial, intNumeroFinal, intSerie);

                if(retornoInutilizacao.Retorno.infInut.cStat == 102)
                {
                    Console.WriteLine("#InutilizacaoEfetuada#{0}",retornoInutilizacao.Retorno.infInut.nProt);
                }
                else
                {
                    Console.WriteLine("#Erro#{0}", retornoInutilizacao.Retorno.infInut.xMotivo);
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine("Ocorreu um erro não esperado.");
                Console.WriteLine(string.Format("Detalhes:{0}",ex.Message));
            }

            #endregion
        }
Beispiel #20
0
        /// <summary>
        /// Cancela uma NFe
        /// </summary>
        /// <param name="nfeFacade"></param>
        /// <param name="dadosDoCancelamento">Dados para o cancelamento no formato: cnpj#justificativa#chave_de_acesso#protocolo#numero_lote#sequencia_evento</param>
        private static void CancelarNFe(NFeFacade nfeFacade, string dadosDoCancelamento)
        {
            #region Preparando dados
            var arrayStrDados = dadosDoCancelamento.Split('#');

            var strCnpj = string.Empty;
            var strJustificativa = string.Empty;
            var strChaveAcesso = string.Empty;
            var strProtocolo = string.Empty;
            
            var intNumeroLote = 0;
            Int16 intSequenciaEvento = 0;

            try
            {
                strCnpj = arrayStrDados[0];
                strJustificativa = arrayStrDados[1];
                strChaveAcesso = Convert.ToString(arrayStrDados[2]);
                strProtocolo = Convert.ToString(arrayStrDados[3]);
                intNumeroLote = Convert.ToInt32(arrayStrDados[4]);
                intSequenciaEvento = Convert.ToInt16(arrayStrDados[5]);
            }
            catch
            {
                Console.WriteLine("Um ou mais parâmetros estão incorretos.");
            }
            #endregion

            #region Cancelamento

            try
            {
                var booStatusOk = ConsultarStatusServico(nfeFacade);

                if (!booStatusOk)
                {
                    return;
                }

                Console.WriteLine("Executando o cancelamento...");
                var retornoCancelamento = nfeFacade.CancelarNFe(strCnpj, intNumeroLote, intSequenciaEvento, strChaveAcesso, strProtocolo, strJustificativa);
                Console.WriteLine("#InutilizacaoEfetuada#{0}", retornoCancelamento.Retorno.retEvento[0].infEvento.xMotivo);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ocorreu um erro não esperado.");
                Console.WriteLine(string.Format("Detalhes:{0}", ex.Message));
            }

            #endregion
        }