/// <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)); } }
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 } }
/// <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); } }
/// <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 }
/// <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)); } }
/// <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 }
/// <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)); } }
/// <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."); } }
/// <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 !"); }
/// <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)); } }
/// <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)); } }
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 //--------------------------------------------------------------------------------------------------------------------------------------------- }
/// <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); } }
/// <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)); } }
/// <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)); } }
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 //--------------------------------------------------------------------------------------------------------------------------------------------- }
/// <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); } }
/// <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; } }
/// <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 }