br.com.swconsultoria.nfe.util.ManifestacaoUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of java-nfe Show documentation
Show all versions of java-nfe Show documentation
Api java para consumo do webService de nota fiscal eletronica
package br.com.swconsultoria.nfe.util;
import br.com.swconsultoria.nfe.Assinar;
import br.com.swconsultoria.nfe.dom.ConfiguracoesNfe;
import br.com.swconsultoria.nfe.dom.Evento;
import br.com.swconsultoria.nfe.dom.enuns.AssinaturaEnum;
import br.com.swconsultoria.nfe.dom.enuns.ManifestacaoEnum;
import br.com.swconsultoria.nfe.exception.NfeException;
import br.com.swconsultoria.nfe.schema.envConfRecebto.TEnvEvento;
import br.com.swconsultoria.nfe.schema.envConfRecebto.TEvento;
import br.com.swconsultoria.nfe.schema.envConfRecebto.TProcEvento;
import br.com.swconsultoria.nfe.schema.envConfRecebto.TretEvento;
import javax.xml.bind.JAXBException;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
/**
* @author Samuel Oliveira - [email protected]
* Data: 02/03/2019 - 22:51
*/
public class ManifestacaoUtil {
private ManifestacaoUtil() {}
/**
* MOnta o Evento de Manifestacao Unico
*
* @param manifesta
* @param configuracao
* @return
* @throws NfeException
*/
public static TEnvEvento montaManifestacao(Evento manifesta, ConfiguracoesNfe configuracao) throws NfeException {
return montaManifestacao(Collections.singletonList(manifesta), configuracao);
}
/**
* MOnta o Evento de Manifestacao Lote
*
* @param listaManifestacao
* @param configuracao
* @return
* @throws NfeException
*/
public static TEnvEvento montaManifestacao(List listaManifestacao, ConfiguracoesNfe configuracao) throws NfeException {
if (listaManifestacao.size() > 20) {
throw new NfeException("Podem ser enviados no máximo 20 eventos no Lote.");
}
TEnvEvento enviEvento = new TEnvEvento();
enviEvento.setVersao(ConstantesUtil.VERSAO.EVENTO_MANIFESTAR);
enviEvento.setIdLote("1");
listaManifestacao.forEach(manifestacao -> {
String id = "ID" + manifestacao.getTipoManifestacao().getCodigo() + manifestacao.getChave() + "01";
TEvento evento = new TEvento();
evento.setVersao(ConstantesUtil.VERSAO.EVENTO_MANIFESTAR);
TEvento.InfEvento infEvento = new TEvento.InfEvento();
infEvento.setId(id);
infEvento.setCOrgao("91");
infEvento.setTpAmb(configuracao.getAmbiente().getCodigo());
infEvento.setCPF(manifestacao.getCpf());
infEvento.setCNPJ(manifestacao.getCnpj());
infEvento.setChNFe(manifestacao.getChave());
infEvento.setDhEvento(XmlNfeUtil.dataNfe(manifestacao.getDataEvento(), configuracao.getZoneId()));
infEvento.setTpEvento(manifestacao.getTipoManifestacao().getCodigo());
infEvento.setNSeqEvento("1");
infEvento.setVerEvento(ConstantesUtil.VERSAO.EVENTO_MANIFESTAR);
TEvento.InfEvento.DetEvento detEvento = new TEvento.InfEvento.DetEvento();
detEvento.setVersao(ConstantesUtil.VERSAO.EVENTO_MANIFESTAR);
detEvento.setDescEvento(manifestacao.getTipoManifestacao().getValor());
if (ManifestacaoEnum.OPERACAO_NAO_REALIZADA.equals(manifestacao.getTipoManifestacao())) {
detEvento.setXJust(manifestacao.getMotivo());
}
infEvento.setDetEvento(detEvento);
evento.setInfEvento(infEvento);
enviEvento.getEvento().add(evento);
});
return enviEvento;
}
/**
* Cria e assina o tag procEventoNFe
*
* @param config Um {@link ConfiguracoesNfe}, interface de configuração da NF-e ou NFC-e.
* @param enviEvento Um {@link TEnvEvento} com a estrutura com a mensagem enviada para o sistema de distribuição.
* @param retorno Um {@link TretEvento} com os dadps do resultado do Envio do Evento.
* @return Uma {@link String} retornando um XML de evento assinado.
* @throws JAXBException
* @throws NfeException
*/
public static String criaProcEventoManifestacao(ConfiguracoesNfe config, TEnvEvento enviEvento, TretEvento retorno) throws JAXBException, NfeException {
String xml = XmlNfeUtil.objectToXml(enviEvento, config.getEncode());
xml = xml.replaceAll(" xmlns:ns2=\"http://www.w3.org/2000/09/xmldsig#\"", "");
xml = xml.replace(" optEvento = XmlNfeUtil.xmlToObject(assinado, TEnvEvento.class)
.getEvento()
.stream()
.filter(e -> e.getInfEvento().getChNFe().equalsIgnoreCase(retorno.getInfEvento().getChNFe()))
.findFirst();
if (optEvento.isPresent()) {
procEvento.setEvento(optEvento.get());
}
procEvento.setRetEvento(retorno);
return XmlNfeUtil.objectToXml(procEvento, config.getEncode());
}
}