com.fincatto.documentofiscal.mdfe3.webservices.WSIncluirDFe Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of nfe Show documentation
Show all versions of nfe Show documentation
Biblioteca de comunicacao de nota fiscal eletronica brasileira
package com.fincatto.documentofiscal.mdfe3.webservices;
import com.fincatto.documentofiscal.DFLog;
import com.fincatto.documentofiscal.mdfe3.MDFeConfig;
import com.fincatto.documentofiscal.mdfe3.classes.MDFAutorizador3;
import com.fincatto.documentofiscal.mdfe3.classes.nota.evento.*;
import com.fincatto.documentofiscal.mdfe3.classes.parsers.MDFChaveParser;
import com.fincatto.documentofiscal.mdfe3.webservices.recepcaoevento.MDFeRecepcaoEventoStub;
import com.fincatto.documentofiscal.utils.DFAssinaturaDigital;
import com.fincatto.documentofiscal.validadores.DFBigDecimalValidador;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.util.AXIOMUtil;
import java.math.BigDecimal;
import java.time.ZonedDateTime;
import java.util.List;
/**
* Created by Eldevan Nery Junior on 17/11/17.
*/
class WSIncluirDFe implements DFLog {
private static final String DESCRICAO_EVENTO = "Inclusao DF-e";
private static final BigDecimal VERSAO_LEIAUTE = new BigDecimal("3.00");
private static final String EVENTO_ENCERRAMENTO = "110115";
private final MDFeConfig config;
WSIncluirDFe(final MDFeConfig config) {
this.config = config;
}
MDFeRetorno incluirDFeAssinado(final String chaveAcesso, final String eventoAssinadoXml) throws Exception {
final OMElement omElementResult = this.efetuaIncluirDFe(eventoAssinadoXml, chaveAcesso);
return this.config.getPersister().read(MDFeRetorno.class, omElementResult.toString());
}
MDFeRetorno incluirDFe(final String chaveAcesso, final String nProt, final String cMunCarrega, final String xMunCarrega, final List infDoc) throws Exception {
final String encerramentoNotaXML = this.gerarDadosEncerramento(chaveAcesso, nProt, cMunCarrega, xMunCarrega, infDoc).toString();
final String xmlAssinado = new DFAssinaturaDigital(this.config).assinarDocumento(encerramentoNotaXML);
final OMElement omElementResult = this.efetuaIncluirDFe(xmlAssinado, chaveAcesso);
return this.config.getPersister().read(MDFeRetorno.class, omElementResult.toString());
}
private OMElement efetuaIncluirDFe(final String xmlAssinado, final String chaveAcesso) throws Exception {
final MDFChaveParser mdfChaveParser = new MDFChaveParser(chaveAcesso);
final MDFeRecepcaoEventoStub.MdfeCabecMsg cabec = new MDFeRecepcaoEventoStub.MdfeCabecMsg();
cabec.setCUF(mdfChaveParser.getNFUnidadeFederativa().getCodigoIbge());
cabec.setVersaoDados(DFBigDecimalValidador.tamanho5Com2CasasDecimais(WSIncluirDFe.VERSAO_LEIAUTE, "Versao do Evento"));
final MDFeRecepcaoEventoStub.MdfeCabecMsgE cabecE = new MDFeRecepcaoEventoStub.MdfeCabecMsgE();
cabecE.setMdfeCabecMsg(cabec);
final MDFeRecepcaoEventoStub.MdfeDadosMsg dados = new MDFeRecepcaoEventoStub.MdfeDadosMsg();
final OMElement omElementXML = AXIOMUtil.stringToOM(xmlAssinado);
this.getLogger().debug(omElementXML.toString());
dados.setExtraElement(omElementXML);
final MDFAutorizador3 autorizador = MDFAutorizador3.valueOfCodigoUF(mdfChaveParser.getNFUnidadeFederativa());
final String urlWebService = autorizador.getMDFeRecepcaoEvento(this.config.getAmbiente());
if (urlWebService == null) {
throw new IllegalArgumentException("Nao foi possivel encontrar URL para RecepcaoEvento " + mdfChaveParser.getModelo().name() + ", autorizador " + autorizador.name());
}
final MDFeRecepcaoEventoStub.MdfeRecepcaoEventoResult mdfeRecepcaoEventoResult = new MDFeRecepcaoEventoStub(urlWebService, config).mdfeRecepcaoEvento(dados, cabecE);
final OMElement omElementResult = mdfeRecepcaoEventoResult.getExtraElement();
this.getLogger().debug(omElementResult.toString());
return omElementResult;
}
private MDFeEvento gerarDadosEncerramento(final String chaveAcesso, final String nProt, final String cMunCarrega, final String xMunCarrega, final List infDoc) {
final MDFChaveParser chaveParser = new MDFChaveParser(chaveAcesso);
final MDFeEnviaEventoIncluirDFe incluirDFe = new MDFeEnviaEventoIncluirDFe();
incluirDFe.setDescricaoEvento(WSIncluirDFe.DESCRICAO_EVENTO);
incluirDFe.setnProt(nProt);
incluirDFe.setCodigoMunicipioCarregamento(cMunCarrega);
incluirDFe.setNomeMunicipioCarregamento(xMunCarrega);
incluirDFe.setInfDoc(infDoc);
final MDFeDetalhamentoEvento mdFeDetalhamentoEvento = new MDFeDetalhamentoEvento();
mdFeDetalhamentoEvento.setEnviaEventoIncluirDFe(incluirDFe);
mdFeDetalhamentoEvento.setVersaoEvento(WSIncluirDFe.VERSAO_LEIAUTE);
final MDFeInfoEvento infoEvento = new MDFeInfoEvento();
infoEvento.setAmbiente(this.config.getAmbiente());
infoEvento.setChave(chaveAcesso);
infoEvento.setCnpj(chaveParser.getCnpjEmitente());
infoEvento.setDataHoraEvento(ZonedDateTime.now(this.config.getTimeZone().toZoneId()));
infoEvento.setId(String.format("ID%s%s0%s", WSIncluirDFe.EVENTO_ENCERRAMENTO, chaveAcesso, "1"));
infoEvento.setNumeroSequencialEvento(1);
infoEvento.setOrgao(chaveParser.getNFUnidadeFederativa().getCodigoIbge());
infoEvento.setCodigoEvento(WSIncluirDFe.EVENTO_ENCERRAMENTO);
infoEvento.setDetEvento(mdFeDetalhamentoEvento);
final MDFeEvento mdfeEventoEncerramento = new MDFeEvento();
mdfeEventoEncerramento.setInfoEvento(infoEvento);
mdfeEventoEncerramento.setVersao(WSIncluirDFe.VERSAO_LEIAUTE);
return mdfeEventoEncerramento;
}
}