public MensagemRetornoEventoCancelamento CancelarNotaFiscal(string ufEmitente, CodigoUfIbge codigoUf, Ambiente ambiente, string cnpjEmitente, string chaveNFe, string protocoloAutorizacao, Modelo modeloNota, string justificativa) { var resultadoCancelamento = _nfeCancelamento.CancelarNotaFiscal(ufEmitente, codigoUf, ambiente, cnpjEmitente, chaveNFe, protocoloAutorizacao, modeloNota, justificativa); if (resultadoCancelamento.Status != StatusEvento.SUCESSO) { return(resultadoCancelamento); } var notaFiscalEntity = _notaFiscalRepository.GetNotaFiscalByChave(chaveNFe); _eventoService.Salvar(new EventoEntity { DataEvento = DateTime.ParseExact(resultadoCancelamento.DataEvento, "yyyy-MM-ddTHH:mm:sszzz", CultureInfo.InvariantCulture), TipoEvento = resultadoCancelamento.TipoEvento, Xml = resultadoCancelamento.Xml, NotaId = notaFiscalEntity.Id, ChaveIdEvento = resultadoCancelamento.IdEvento.Replace("ID", string.Empty), MotivoCancelamento = resultadoCancelamento.MotivoCancelamento, ProtocoloCancelamento = resultadoCancelamento.ProtocoloCancelamento }); notaFiscalEntity.Status = (int)Status.CANCELADA; _notaFiscalRepository.Salvar(notaFiscalEntity, null); return(resultadoCancelamento); }
public IdentificacaoNFe(CodigoUfIbge uf, DateTime dataHoraEmissao, string cnpjEmissor, Modelo modelo, int serie, string numeroNFe, TipoEmissao tipoEmissao, Ambiente ambiente, Emissor emitente, string naturezaOperacao, FinalidadeEmissao finalidade, bool isImpressaoBobina, PresencaComprador indicadorPresenca, string documentoDanfe) { _cnpjEmissor = cnpjEmissor; UF = uf; DataHoraEmissao = dataHoraEmissao; Modelo = modelo; Serie = serie; Numero = numeroNFe; TipoEmissao = tipoEmissao; Ambiente = ambiente; Chave = CalcularChaveSemDV(); DigitoVerificador = CalcularDV(Chave); Chave += DigitoVerificador; CodigoMunicipio = emitente.Endereco.CodigoMunicipio; NaturezaOperacao = naturezaOperacao; FinalidadeEmissao = finalidade; TipoOperacao = TipoOperacao.Saida; OperacaoDestino = OperacaoDestino.Interna; //não suporta interestadual ainda FormatoImpressao = isImpressaoBobina ? FormatoImpressao.Nfce : FormatoImpressao.Retrato; FinalidadeConsumidor = documentoDanfe.Contains("CPF") || Modelo == Modelo.Modelo65 ? FinalidadeConsumidor.ConsumidorFinal : FinalidadeConsumidor.Normal; PresencaComprador = indicadorPresenca; ProcessoEmissao = ProcessoEmissao.AplicativoContribuinte; VersaoAplicativo = "0.0.0.1"; }
public MensagemRetornoInutilizacao InutilizarNotaFiscal(string ufEmitente, CodigoUfIbge codigoUf, Ambiente ambiente, string cnpjEmitente, Modelo modeloNota, string serie, string numeroInicial, string numeroFinal) { var mensagemRetorno = _nfeInutilizacao.InutilizarNotaFiscal(ufEmitente, codigoUf, ambiente, cnpjEmitente, modeloNota, serie, numeroInicial, numeroFinal); if (mensagemRetorno.Status != Status.ERRO) { var notaInutilizada = new NotaInutilizadaTO { DataInutilizacao = DateTime.Now, IdInutilizacao = mensagemRetorno.IdInutilizacao, IsProducao = ambiente == Ambiente.Producao, Modelo = modeloNota == Modelo.Modelo55 ? 55 : 65, Motivo = mensagemRetorno.MotivoInutilizacao, Numero = numeroInicial, Protocolo = mensagemRetorno.ProtocoloInutilizacao, Serie = serie }; Salvar(notaInutilizada, mensagemRetorno.Xml); } return(mensagemRetorno); }
private static IdentificacaoNFe GetIdentificacao(CodigoUfIbge codigoUF, DateTime now, Emissor emitente, Modelo modeloNota, int serie, string numeroNFe, TipoEmissao tipoEmissao, Ambiente ambiente, string documentoDanfe) { var identificacao = new IdentificacaoNFe(codigoUF, now, emitente.CNPJ, modeloNota, serie, numeroNFe, tipoEmissao, ambiente, emitente, "Venda", FinalidadeEmissao.Normal, true, PresencaComprador.Presencial, documentoDanfe); return(identificacao); }
public static TCodUfIBGE ToTCodUfIBGE(CodigoUfIbge codigo) { switch (codigo) { case CodigoUfIbge.DF: return(TCodUfIBGE.Item53); default: throw new ArgumentException(); } }
private static Service GerarServicoCancelamento(CodigoUfIbge UF, X509Certificate2 certificado, string endpoint) { var soapClient = new Evento.NFeRecepcaoEvento4SoapClient(endpoint); soapClient.ClientCredentials.ClientCertificate.Certificate = certificado; return(new Service() { SoapClient = soapClient }); }
private static Service GerarServicoInutilizacao(CodigoUfIbge UF, X509Certificate2 certificado, string endpoint) { var soapClient = new NFeInutilizacao4.NFeInutilizacao4SoapClient(endpoint); soapClient.ClientCredentials.ClientCertificate.Certificate = certificado; return(new Service() { SoapClient = soapClient }); }
private static IdentificacaoNFe GetIdentificacao(NotaFiscalModel NotaFiscal, CodigoUfIbge codigoUF, DateTime now, Emissor emitente, Modelo modeloNota, int serie, string numeroNFe, TipoEmissao tipoEmissao, Ambiente ambiente, string documentoDanfe) { var finalidadeEmissao = (FinalidadeEmissao)Enum.Parse(typeof(FinalidadeEmissao), Acentuacao.RemoverAcentuacao(NotaFiscal.Finalidade)); var identificacao = new IdentificacaoNFe(codigoUF, now, emitente.CNPJ, modeloNota, serie, numeroNFe, tipoEmissao, ambiente, emitente, NotaFiscal.NaturezaOperacao, finalidadeEmissao, NotaFiscal.IsImpressaoBobina, NotaFiscal.IndicadorPresenca, documentoDanfe); return(identificacao); }
public MensagemRetornoEventoCancelamento CancelarNotaFiscal(string ufEmitente, CodigoUfIbge codigoUf, Ambiente ambiente, string cnpjEmitente, string chaveNFe, string protocoloAutorizacao, Modelo modeloNota, string justificativa) { try { var infEvento = new TEventoInfEvento(); infEvento.cOrgao = UfToTCOrgaoIBGEConversor.GetTCOrgaoIBGE(ufEmitente); infEvento.tpAmb = (XmlSchemas.NfeRecepcaoEvento.Cancelamento.Envio.TAmb)(int) ambiente; infEvento.Item = cnpjEmitente; infEvento.ItemElementName = XmlSchemas.NfeRecepcaoEvento.Cancelamento.Envio.ItemChoiceType.CNPJ; infEvento.chNFe = chaveNFe; infEvento.dhEvento = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"); infEvento.tpEvento = TEventoInfEventoTpEvento.Item110111; infEvento.nSeqEvento = "1"; infEvento.verEvento = TEventoInfEventoVerEvento.Item100; infEvento.detEvento = new TEventoInfEventoDetEvento(); infEvento.detEvento.versao = TEventoInfEventoDetEventoVersao.Item100; infEvento.detEvento.descEvento = TEventoInfEventoDetEventoDescEvento.Cancelamento; infEvento.detEvento.nProt = protocoloAutorizacao; infEvento.detEvento.xJust = justificativa; infEvento.Id = "ID110111" + chaveNFe + "01"; var evento = new TEvento(); evento.versao = "1.00"; evento.infEvento = infEvento; var envioEvento = new TEnvEvento(); envioEvento.versao = "1.00"; envioEvento.idLote = "1"; envioEvento.evento = new TEvento[] { evento }; var xml = XmlUtil.Serialize(envioEvento, "http://www.portalfiscal.inf.br/nfe"); var certificado = _certificadoService.GetX509Certificate2(); XmlNode node = AssinaturaDigital.AssinarEvento(xml, "#" + infEvento.Id, certificado); //var resultadoValidacao = ValidadorXml.ValidarXml(node.OuterXml, "envEventoCancNFe_v1.00.xsd"); var servico = _serviceFactory.GetService(modeloNota, ambiente, Servico.CANCELAMENTO, codigoUf, certificado); var client = (NFeRecepcaoEvento4SoapClient)servico.SoapClient; var result = client.nfeRecepcaoEvento(node); var retorno = (TRetEnvEvento)XmlUtil.Deserialize <TRetEnvEvento>(result.OuterXml); if (retorno.cStat.Equals("128")) { var retEvento = retorno.retEvento; if (retEvento.Count() > 0) { var retInfEvento = retEvento[0].infEvento; if (retInfEvento.cStat.Equals("135")) { var procEvento = new Proc.TProcEvento(); TEnvEvento envEvento = (TEnvEvento)XmlUtil.Deserialize <TEnvEvento>(node.OuterXml); var eventoSerialized = XmlUtil.Serialize(envEvento.evento[0], ""); procEvento.evento = (Proc.TEvento)XmlUtil.Deserialize <Proc.TEvento>(eventoSerialized); var retEventoSerialized = XmlUtil.Serialize(retEvento[0], ""); procEvento.retEvento = (Proc.TRetEvento)XmlUtil.Deserialize <Proc.TRetEvento>(retEventoSerialized); procEvento.versao = "1.00"; var procSerialized = XmlUtil.Serialize(procEvento, "http://www.portalfiscal.inf.br/nfe"); return(new MensagemRetornoEventoCancelamento() { Status = StatusEvento.SUCESSO, DataEvento = retInfEvento.dhRegEvento, TipoEvento = retInfEvento.tpEvento, Mensagem = retInfEvento.xMotivo, Xml = procSerialized, IdEvento = infEvento.Id, MotivoCancelamento = justificativa, ProtocoloCancelamento = retInfEvento.nProt }); } else { return(new MensagemRetornoEventoCancelamento() { Status = StatusEvento.ERRO, Mensagem = retInfEvento.xMotivo, }); } } } return(new MensagemRetornoEventoCancelamento() { Status = StatusEvento.ERRO, Mensagem = "Erro desconhecido. Foi gerado um registro com o erro. Contate o suporte.", Xml = "" }); } catch (Exception e) { log.Error(e); string sDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "EmissorNFeDir"); if (!Directory.Exists(sDirectory)) { Directory.CreateDirectory(sDirectory); } using (FileStream stream = File.Create(Path.Combine(sDirectory, "cancelarNotaErro.txt"))) { using (StreamWriter writer = new StreamWriter(stream)) { writer.WriteLine(e.ToString()); } } return(new MensagemRetornoEventoCancelamento() { Status = StatusEvento.ERRO, Mensagem = "Erro ao tentar contactar SEFAZ. Verifique sua conexão.", Xml = "" }); } }
public Service GetService(Modelo modelo, Ambiente ambiente, Servico servico, CodigoUfIbge UF, X509Certificate2 certificado) { string endpoint = ""; if (modelo == Modelo.Modelo55) { if (ambiente == Ambiente.Homologacao) { switch (servico) { case Servico.CANCELAMENTO: endpoint = "RecepcaoEventoSoapHomNfe"; return(GerarServicoCancelamento(UF, certificado, endpoint)); case Servico.INUTILIZACAO: endpoint = "NfeInutilizacao2Homologacao"; return(GerarServicoInutilizacao(UF, certificado, endpoint)); case Servico.AUTORIZACAO: endpoint = "NfeAutorizacaoSoapHom"; return(GerarServicoAutorizacao(UF, certificado, endpoint)); case Servico.RetAutorizacao: endpoint = "NfeRetAutorizacaoSoapHom"; return(GerarServicoRetAutorizacao(UF, certificado, endpoint)); } } else { switch (servico) { case Servico.CANCELAMENTO: endpoint = "RecepcaoEventoSoapProdNfe"; return(GerarServicoCancelamento(UF, certificado, endpoint)); case Servico.INUTILIZACAO: endpoint = "NfeInutilizacao2Producao"; return(GerarServicoInutilizacao(UF, certificado, endpoint)); case Servico.AUTORIZACAO: endpoint = "NfeAutorizacaoSoapProd"; return(GerarServicoAutorizacao(UF, certificado, endpoint)); case Servico.RetAutorizacao: endpoint = "NfeRetAutorizacaoSoapProd"; return(GerarServicoRetAutorizacao(UF, certificado, endpoint)); } } } if (modelo == Modelo.Modelo65) { if (ambiente == Ambiente.Homologacao) { switch (servico) { case Servico.CANCELAMENTO: endpoint = "RecepcaoEventoSoapHomNfce"; return(GerarServicoCancelamento(UF, certificado, endpoint)); case Servico.INUTILIZACAO: endpoint = "NfceInutilizacao2Homologacao"; return(GerarServicoInutilizacao(UF, certificado, endpoint)); case Servico.AUTORIZACAO: endpoint = "NfceAutorizacaoSoapHom"; return(GerarServicoAutorizacao(UF, certificado, endpoint)); case Servico.RetAutorizacao: endpoint = "NfceRetAutorizacaoSoapHom"; return(GerarServicoRetAutorizacao(UF, certificado, endpoint)); } } else { switch (servico) { case Servico.CANCELAMENTO: endpoint = "RecepcaoEventoSoapProdNfce"; return(GerarServicoCancelamento(UF, certificado, endpoint)); case Servico.INUTILIZACAO: endpoint = "NfceInutilizacao2Producao"; return(GerarServicoInutilizacao(UF, certificado, endpoint)); case Servico.AUTORIZACAO: endpoint = "NfceAutorizacaoSoapProd"; return(GerarServicoAutorizacao(UF, certificado, endpoint)); case Servico.RetAutorizacao: endpoint = "NfceRetAutorizacaoSoapProd"; return(GerarServicoRetAutorizacao(UF, certificado, endpoint)); } } } return(null); }
internal MensagemRetornoInutilizacao InutilizarNotaFiscal(string ufEmitente, CodigoUfIbge codigoUf, Ambiente ambiente, string cnpjEmitente, Modelo modeloNota, string serie, string numeroInicial, string numeroFinal) { var inutNFe = new Envio.TInutNFe(); inutNFe.versao = "4.00"; var infInut = new Envio.TInutNFeInfInut(); infInut.tpAmb = (Envio.TAmb)(int) ambiente; infInut.xServ = Envio.TInutNFeInfInutXServ.INUTILIZAR; infInut.cUF = (Envio.TCodUfIBGE)(int) UfToTCOrgaoIBGEConversor.GetTCOrgaoIBGE(ufEmitente); infInut.ano = DateTime.Now.ToString("yy"); infInut.CNPJ = cnpjEmitente; infInut.mod = (Envio.TMod)(int) modeloNota; infInut.serie = serie; infInut.nNFIni = numeroInicial; infInut.nNFFin = numeroFinal; infInut.xJust = "Não usada, quebra de sequência."; var cUF = infInut.cUF.ToString().Replace("Item", string.Empty); var modelo = modeloNota.ToString().Replace("Modelo", string.Empty); infInut.Id = "ID" + cUF + infInut.ano + cnpjEmitente + modelo + int.Parse(serie).ToString("D3") + int.Parse(numeroInicial).ToString("D9") + int.Parse(numeroFinal).ToString("D9"); inutNFe.infInut = infInut; var xml = XmlUtil.Serialize(inutNFe, "http://www.portalfiscal.inf.br/nfe"); var certificado = _certificadoService.GetX509Certificate2(); var node = AssinaturaDigital.AssinarInutilizacao(xml, "#" + infInut.Id, certificado); var servico = _serviceFactory.GetService(modeloNota, ambiente, Servico.INUTILIZACAO, codigoUf, certificado); var client = (NFeInutilizacao4SoapClient)servico.SoapClient; var result = client.nfeInutilizacaoNF(node); var retorno = (Retorno.TRetInutNFe)XmlUtil.Deserialize <Retorno.TRetInutNFe>(result.OuterXml); if (retorno.infInut.cStat.Equals("102")) { var procInut = new Retorno.ProcInut.TProcInutNFe(); var procSerialized = "<?xml version=\"1.0\" encoding=\"utf-8\"?><ProcInutNFe versao=\"4.00\" xmlns=\"http://www.portalfiscal.inf.br/nfe\">" + node.OuterXml.Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", string.Empty) + result.OuterXml.Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", string.Empty) + "</ProcInutNFe>"; return(new MensagemRetornoInutilizacao() { IdInutilizacao = infInut.Id, Status = Status.SUCESSO, Mensagem = retorno.infInut.xMotivo, DataInutilizacao = retorno.infInut.dhRecbto, MotivoInutilizacao = infInut.xJust, ProtocoloInutilizacao = retorno.infInut.nProt, Xml = procSerialized }); } else { return(new MensagemRetornoInutilizacao() { Status = Status.ERRO, Mensagem = retorno.infInut.xMotivo }); } }
public static bool ExecutarConsultaStatus(CodigoUfIbge codigoUF, Ambiente ambiente, X509Certificate2 certificado, Modelo modelo) { XmlNode node = null; try { var parametro = new TConsStatServ(); parametro.cUF = TCodUfIBGEConversor.ToTCodUfIBGE(codigoUF); parametro.tpAmb = ambiente == Ambiente.Homologacao ? TAmb.Item2 : TAmb.Item1; parametro.versao = "4.00"; parametro.xServ = TConsStatServXServ.STATUS; string nFeNamespaceName = "http://www.portalfiscal.inf.br/nfe"; string parametroXML = XmlUtil.Serialize(parametro, nFeNamespaceName); XmlDocument doc = new XmlDocument(); XmlReader reader = XmlReader.Create(new StringReader(parametroXML)); reader.MoveToContent(); node = doc.ReadNode(reader); string endpoint = ""; if (ambiente == Ambiente.Homologacao) { if (modelo == Modelo.Modelo55) { endpoint = "NfeStatusServico2Hom"; } else { endpoint = "NfceStatusServico2Hom"; } } else { if (modelo == Modelo.Modelo55) { endpoint = "NfeStatusServico2Prod"; } else { endpoint = "NfceStatusServico2Prod"; } } var soapClient = new NfeStatusServico4SoapClient(endpoint); soapClient.ClientCredentials.ClientCertificate.Certificate = certificado; XmlNode result = soapClient.nfeStatusServicoNF(node); var retorno = (XmlSchemas.NfeStatusServico2.Retorno.TRetConsStatServ)XmlUtil.Deserialize <XmlSchemas.NfeStatusServico2.Retorno.TRetConsStatServ>(result.OuterXml); return(retorno.cStat == "107"); } catch (Exception e) { log.Error(e); return(false); } }
private NFeAutorizacao4Soap CriarClientWS(NotaFiscal notaFiscal, X509Certificate2 certificado, CodigoUfIbge codigoUf) { var servico = _serviceFactory.GetService(notaFiscal.Identificacao.Modelo, notaFiscal.Identificacao.Ambiente, Servico.AUTORIZACAO, codigoUf, certificado); var client = (NFeAutorizacao4Soap)servico.SoapClient; return(client); }