/// <summary> /// Envia um evento do tipo "EPEC" /// </summary> /// <param name="idlote"></param> /// <param name="sequenciaEvento"></param> /// <param name="nfe"></param> /// <param name="veraplic"></param> /// <returns>Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento</returns> public RetornoRecepcaoEvento RecepcaoEventoEpec(int idlote, int sequenciaEvento, Classes.NFe nfe, string veraplic) { var versaoServico = Auxiliar.VersaoServicoParaString(ServicoNFe.RecepcaoEvento, _cFgServico.VersaoRecepcaoEvento); if (String.IsNullOrEmpty(nfe.infNFe.Id)) { nfe.Assina().Valida(); } var detevento = new detEvento { versao = versaoServico, cOrgaoAutor = nfe.infNFe.ide.cUF, tpAutor = TipoAutor.taEmpresaEmitente, verAplic = veraplic, dhEmi = !String.IsNullOrEmpty(nfe.infNFe.ide.dhEmi) ? nfe.infNFe.ide.dhEmi : Convert.ToDateTime(nfe.infNFe.ide.dEmi).ToString("yyyy-MM-ddTHH:mm:sszzz"), tpNF = nfe.infNFe.ide.tpNF, IE = nfe.infNFe.emit.IE, dest = new dest { UF = nfe.infNFe.dest.enderDest.UF, CNPJ = nfe.infNFe.dest.CNPJ, CPF = nfe.infNFe.dest.CPF, IE = nfe.infNFe.dest.IE, vNF = nfe.infNFe.total.ICMSTot.vNF, vICMS = nfe.infNFe.total.ICMSTot.vICMS, vST = nfe.infNFe.total.ICMSTot.vST } }; var infEvento = new infEventoEnv { cOrgao = Estado.AN, tpAmb = nfe.infNFe.ide.tpAmb, CNPJ = nfe.infNFe.emit.CNPJ, CPF = nfe.infNFe.emit.CPF, chNFe = nfe.infNFe.Id.Substring(3), dhEvento = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"), tpEvento = 110140, nSeqEvento = sequenciaEvento, verEvento = versaoServico, detEvento = detevento }; var evento = new evento { versao = versaoServico, infEvento = infEvento }; var retorno = RecepcaoEvento(idlote, new List <evento> { evento }, TipoRecepcaoEvento.Epec); return(retorno); }
private string GerarXmlEvento(string chaveAcesso, eTipoEventoNFe tipoEvento, string justificativa = null) { if (tipoEvento == eTipoEventoNFe.OperacaoNaoRealizada && justificativa == null) { throw new ArgumentNullException("Justificativa deve ser informada"); } if (tipoEvento != eTipoEventoNFe.OperacaoNaoRealizada) { justificativa = null; } var infEvento = new infEventoEnv { chNFe = chaveAcesso, CNPJ = config.Emitente.CNPJ, CPF = config.Emitente.CPF, cOrgao = eUF.AN, dhEvento = DateTime.Now, nSeqEvento = 1, tpAmb = config.TipoAmbiente, tpEvento = tipoEvento, verEvento = config.VersaoManifestacaoDestinatario.Descricao(), Id = "ID" + ((int)tipoEvento) + chaveAcesso + nSeqEvento.ToString().PadLeft(2, '0'), detEvento = new detEvento() { versao = config.VersaoManifestacaoDestinatario.Descricao(), descEvento = tipoEvento.Descricao().RemoverAcentos() } }; var evento = new evento { versao = config.VersaoManifestacaoDestinatario.Descricao(), infEvento = infEvento }; evento.Assinar(ObterCertificado.Obter(config.ConfigCertificado), config.ConfigCertificado.SignatureMethodSignedXml, config.ConfigCertificado.DigestMethodReference); var pedEvento = new envEvento { versao = config.VersaoManifestacaoDestinatario.Descricao(), idLote = 1, evento = new List <evento> { evento } }; var xmlEvento = XmlUtils.ClasseParaXmlString <envEvento>(pedEvento); return(xmlEvento); }
public RetornoRecepcaoEvento RecepcaoEventoManifestacaoDestinatario(int idlote, int sequenciaEvento, string chaveNFe, TipoEventoManifestacaoDestinatario tipoEventoManifestacaoDestinatario, string cpfcnpj, string justificativa = null) { var versaoServico = Conversao.VersaoServicoParaString(ServicoNFe.RecepcaoEventoManifestacaoDestinatario, _cFgServico.VersaoRecepcaoEventoCceCancelamento); var detEvento = new detEvento { versao = versaoServico, descEvento = tipoEventoManifestacaoDestinatario.Descricao(), xJust = justificativa }; var infEvento = new infEventoEnv { cOrgao = _cFgServico.cUF == Estado.RS ? _cFgServico.cUF : Estado.AN, //RS possui endereço próprio para manifestação do destinatário. Demais UFs usam o ambiente nacional tpAmb = _cFgServico.tpAmb, chNFe = chaveNFe, dhEvento = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"), tpEvento = (int)tipoEventoManifestacaoDestinatario, nSeqEvento = sequenciaEvento, verEvento = versaoServico, detEvento = detEvento }; if (cpfcnpj.Length == 11) { infEvento.CPF = cpfcnpj; } else { infEvento.CNPJ = cpfcnpj; } var evento = new evento { versao = versaoServico, infEvento = infEvento }; var retorno = RecepcaoEvento(idlote, new List <evento> { evento }, ServicoNFe.RecepcaoEventoManifestacaoDestinatario); return(retorno); }
/// <summary> /// Envia um evento do tipo "Carta de Correção" /// </summary> /// <param name="idlote"></param> /// <param name="sequenciaEvento"></param> /// <param name="chaveNFe"></param> /// <param name="correcao"></param> /// <param name="cpfcnpj"></param> /// <returns>Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento</returns> public RetornoRecepcaoEvento RecepcaoEventoCartaCorrecao(int idlote, int sequenciaEvento, string chaveNFe, string correcao, string cpfcnpj) { var versaoServico = Conversao.VersaoServicoParaString(ServicoNFe.RecepcaoEventoCartaCorrecao, _cFgServico.VersaoRecepcaoEventoCceCancelamento); var detEvento = new detEvento { versao = versaoServico, xCorrecao = correcao, xJust = null }; var infEvento = new infEventoEnv { cOrgao = _cFgServico.cUF, tpAmb = _cFgServico.tpAmb, chNFe = chaveNFe, dhEvento = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"), tpEvento = 110110, nSeqEvento = sequenciaEvento, verEvento = versaoServico, detEvento = detEvento }; if (cpfcnpj.Length == 11) { infEvento.CPF = cpfcnpj; } else { infEvento.CNPJ = cpfcnpj; } var evento = new evento { versao = versaoServico, infEvento = infEvento }; var retorno = RecepcaoEvento(idlote, new List <evento> { evento }, ServicoNFe.RecepcaoEventoCartaCorrecao); return(retorno); }
/// <summary> /// Envia um evento do tipo "Cancelamento" /// </summary> /// <param name="idlote"></param> /// <param name="sequenciaEvento"></param> /// <param name="protocoloAutorizacao"></param> /// <param name="chaveNFe"></param> /// <param name="justificativa"></param> /// <param name="cpfcnpj"></param> /// <returns>Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento</returns> public RetornoRecepcaoEvento RecepcaoEventoCancelamento(int idlote, int sequenciaEvento, string protocoloAutorizacao, string chaveNFe, string justificativa, string cpfcnpj) { var versaoServico = Auxiliar.VersaoServicoParaString(ServicoNFe.RecepcaoEvento, _cFgServico.VersaoRecepcaoEvento); var detEvento = new detEvento { nProt = protocoloAutorizacao, versao = versaoServico, xJust = justificativa }; var infEvento = new infEventoEnv { cOrgao = _cFgServico.cUF, tpAmb = _cFgServico.tpAmb, chNFe = chaveNFe, dhEvento = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"), tpEvento = 110111, nSeqEvento = sequenciaEvento, verEvento = versaoServico, detEvento = detEvento }; if (cpfcnpj.Length == 11) { infEvento.CPF = cpfcnpj; } else { infEvento.CNPJ = cpfcnpj; } var evento = new evento { versao = versaoServico, infEvento = infEvento }; var retorno = RecepcaoEvento(idlote, new List <evento> { evento }, TipoRecepcaoEvento.Cancelmento); return(retorno); }
public async Task <retEnvEvento> Cancelar(IList <InfoNFeCancelar> infos) { if (infos == null || infos.Count <= 0) { throw new Exception("Informações da NFe não encontrada"); } if (infos.Count > 20) { throw new Exception("No máximo 20 NFes podem ser canceladas"); } var modelos = infos.Select(x => x.ChaveAcesso.Modelo).Distinct().ToList(); if (modelos.Count != 1) { throw new FalhaValidacaoException("Lista de cancelamento deve conter somente 1 modelo"); } eModeloDocumento modeloDocumento = modelos.FirstOrDefault(); List <evento> eventos = new List <evento>(); foreach (var item in infos) { var protocolo = item.ProtocoloAutorizacao; var chave = item.ChaveAcesso; var just = item.Justificativa; if (string.IsNullOrEmpty(just) || just.Length < 15 || just.Length > 255) { throw new Exception("Justificativa de conter entre 15 e 255 caracteres"); } var detEvento = new detEvento { nProt = protocolo.Protocolo, versao = versao, xJust = just, descEvento = "Cancelamento", }; var infEvento = new infEventoEnv { cOrgao = cfgServico.UF, tpAmb = cfgServico.TipoAmbiente, chNFe = chave.Chave, dhEvento = DateTime.Now, tpEvento = eTipoEventoNFe.NFeCancelamento, nSeqEvento = 1, verEvento = versao, detEvento = detEvento }; if (!string.IsNullOrEmpty(cfgServico.Emitente.CNPJ)) { infEvento.CNPJ = cfgServico.Emitente.CNPJ; } else { infEvento.CPF = cfgServico.Emitente.CPF; } var evento = new evento { versao = versao, infEvento = infEvento }; eventos.Add(evento); } return(await Cancelar(eventos, modeloDocumento)); }
public async Task <retEnvEvento> TransmitirCorrecao(IList <InfoCartaCorrecao> infos) { if (infos == null || infos.Count <= 0) { throw new Exception("Informações da NFe não encontrada"); } if (infos.Count > 20) { throw new Exception("No máximo 20 NFes podem ser Corrigidas"); } List <evento> eventos = new List <evento>(); foreach (var item in infos) { var chave = item.ChaveAcesso; var correcao = item.Correcao; var nSeqEvento = item.nSeqEvento; chave = chave.Replace("NFe", ""); eModeloDocumento _modeloDocumento = chave.Substring(20, 2).ModeloDocumento(); if (item.Correcao.Length < 15 || item.Correcao.Length > 1000) { throw new FalhaValidacaoException("A descrição da correção deve conter entre 15 e 1000 caracteres"); } if (_modeloDocumento != eModeloDocumento.NFe) { throw new FalhaValidacaoException("Somente NFe pode ter Carta Correção"); } var infEvento = new infEventoEnv { chNFe = chave, CNPJ = cfgServico.Emitente.CNPJ, CPF = cfgServico.Emitente.CPF, cOrgao = cfgServico.UF, dhEvento = DateTime.Now, nSeqEvento = nSeqEvento, tpAmb = cfgServico.TipoAmbiente, tpEvento = eTipoEventoNFe.NFeCartaCorrecao, verEvento = _versao, detEvento = new detEvento() { versao = _versao, descEvento = "Carta de Correção", xCorrecao = correcao } }; var evento = new evento { versao = _versao, infEvento = infEvento }; eventos.Add(evento); } foreach (var eventoTmp in eventos) { eventoTmp.infEvento.Id = "ID" + ((int)eventoTmp.infEvento.tpEvento) + eventoTmp.infEvento.chNFe + eventoTmp.infEvento.nSeqEvento.ToString().PadLeft(2, '0'); var _certificado = ObterCertificado.Obter(cfgServico.ConfigCertificado); eventoTmp.Assinar(_certificado, cfgServico.ConfigCertificado.SignatureMethodSignedXml, cfgServico.ConfigCertificado.DigestMethodReference); } var pedEvento = new envEvento { versao = _versao, idLote = 1, evento = eventos }; var xmlEvento = XmlUtils.ClasseParaXmlString <envEvento>(pedEvento); var arqEnv = Path.Combine("Logs", Arquivo.MontarNomeArquivo("ped-eve.xml", cfgServico)); await storage.SaveAsync(arqEnv, xmlEvento); var sefazUrl = Fabrica.FabricarUrl.ObterUrl(eTipoServico.CartaCorrecao, cfgServico.TipoAmbiente, eModeloDocumento.NFe, cfgServico.UF); var envelope = Fabrica.SoapEnvelopeFabrica.FabricarEnvelope(eTipoServico.CartaCorrecao, xmlEvento); var retornoXmlString = await transmitir.TransmitirAsync(sefazUrl, envelope); var retornoXmlStringLimpa = Soap.LimparEnvelope(retornoXmlString, "retEnvEvento").OuterXml; var arqRet = Path.Combine("Logs", Arquivo.MontarNomeArquivo("ret-eve.xml", cfgServico)); await storage.SaveAsync(arqRet, retornoXmlStringLimpa); var retorno = new retEnvEvento().CarregarDeXmlString(retornoXmlStringLimpa, xmlEvento); return(retorno); }