/// <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 = ServicoNFe.RecepcaoEventoCartaCorrecao.VersaoServicoParaString(_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); }
public RetornoRecepcaoEvento RecepcaoEventoManifestacaoDestinatario(int idlote, int sequenciaEvento, string chaveNFe, TipoEventoManifestacaoDestinatario tipoEventoManifestacaoDestinatario, string cpfcnpj, string justificativa = null) { var versaoServico = ServicoNFe.RecepcaoEventoManifestacaoDestinatario.VersaoServicoParaString(_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 "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)); }