• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

wmixvideo / nfe / #6985

02 Jun 2016 11:49PM UTC coverage: 79.364% (+3.7%) from 75.706%
#6985

push

travis-ci

fincatto
Atualizado xsd de validacao de envio de lote, que valida as notas com assinatura.
Atualizado para versão 2.0.0-SNAPSHOT, pois o codigo quebrou a compatibilidade.

0 of 1 new or added line in 1 file covered. (0.0%)

349 existing lines in 68 files now uncovered.

4742 of 5975 relevant lines covered (79.36%)

50.29 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/main/java/com/fincatto/nfe310/webservices/WSLoteEnvio.java
1
package com.fincatto.nfe310.webservices;
2

3
import com.fincatto.nfe310.NFeConfig;
4
import com.fincatto.nfe310.assinatura.AssinaturaDigital;
5
import com.fincatto.nfe310.classes.NFAutorizador31;
6
import com.fincatto.nfe310.classes.NFModelo;
7
import com.fincatto.nfe310.classes.lote.envio.NFLoteEnvio;
8
import com.fincatto.nfe310.classes.lote.envio.NFLoteEnvioRetorno;
9
import com.fincatto.nfe310.classes.lote.envio.NFLoteEnvioRetornoDados;
10
import com.fincatto.nfe310.classes.nota.NFNota;
11
import com.fincatto.nfe310.classes.nota.NFNotaInfo;
12
import com.fincatto.nfe310.classes.nota.NFNotaInfoSuplementar;
13
import com.fincatto.nfe310.parsers.NotaParser;
14
import com.fincatto.nfe310.persister.NFPersister;
15
import com.fincatto.nfe310.utils.NFGeraChave;
16
import com.fincatto.nfe310.utils.NFGeraQRCode;
17
import com.fincatto.nfe310.validadores.xsd.XMLValidador;
18
import com.fincatto.nfe310.webservices.gerado.NfeAutorizacaoStub;
19
import com.fincatto.nfe310.webservices.gerado.NfeAutorizacaoStub.NfeAutorizacaoLoteResult;
20
import com.fincatto.nfe310.webservices.gerado.NfeAutorizacaoStub.NfeCabecMsg;
21
import com.fincatto.nfe310.webservices.gerado.NfeAutorizacaoStub.NfeCabecMsgE;
22
import com.fincatto.nfe310.webservices.gerado.NfeAutorizacaoStub.NfeDadosMsg;
23
import org.apache.axiom.om.OMElement;
24
import org.apache.axiom.om.util.AXIOMUtil;
25
import org.slf4j.Logger;
26
import org.slf4j.LoggerFactory;
27

28
import javax.xml.stream.XMLStreamException;
29
import java.util.Iterator;
30

31
class WSLoteEnvio {
32

33
    private static final String NFE_ELEMENTO = "NFe";
UNCOV
34
    private static final Logger LOGGER = LoggerFactory.getLogger(WSLoteEnvio.class);
×
35
    private final NFeConfig config;
36

UNCOV
37
    WSLoteEnvio(final NFeConfig config) {
×
38
        this.config = config;
×
39
    }
×
40

41
    NFLoteEnvioRetorno enviaLoteAssinado(final String loteAssinadoXml, final NFModelo modelo) throws Exception {
NEW
42
        return this.comunicaLote(loteAssinadoXml, modelo);
×
43
    }
44

45
    NFLoteEnvioRetornoDados enviaLote(final NFLoteEnvio lote) throws Exception {
46
        // adiciona a chave e o dv antes de assinar
47
        for (final NFNota nota : lote.getNotas()) {
×
48
            final NFGeraChave geraChave = new NFGeraChave(nota);
×
UNCOV
49
            final NFNotaInfo notaInfo = nota.getInfo();
×
UNCOV
50
            notaInfo.setIdentificador(geraChave.getChaveAcesso());
×
UNCOV
51
            notaInfo.getIdentificacao().setDigitoVerificador(geraChave.getDV());
×
52
        }
×
53

54
        // assina o lote
55
        final String documentoAssinado = new AssinaturaDigital(this.config).assinarDocumento(lote.toString());
×
56
        final NFLoteEnvio loteAssinado = new NotaParser().loteParaObjeto(documentoAssinado);
×
57

58
        // verifica se nao tem NFCe junto com NFe no lote e gera qrcode (apos assinar mesmo, eh assim)
UNCOV
59
        int qtdNF = 0, qtdNFC = 0;
×
UNCOV
60
        for (final NFNota nota : loteAssinado.getNotas()) {
×
61
            switch (nota.getInfo().getIdentificacao().getModelo()) {
×
62
                case NFE:
63
                    qtdNF++;
×
64
                    break;
×
65
                case NFCE:
66
                    final NFGeraQRCode geraQRCode = new NFGeraQRCode(nota, this.config);
×
UNCOV
67
                    nota.setInfoSuplementar(new NFNotaInfoSuplementar());
×
68
                    nota.getInfoSuplementar().setQrCode(geraQRCode.getQRCode());
×
69
                    qtdNFC++;
×
UNCOV
70
                    break;
×
71
                default:
UNCOV
72
                    throw new IllegalArgumentException(String.format("Modelo de nota desconhecida: %s", nota.getInfo().getIdentificacao().getModelo()));
×
73
            }
UNCOV
74
        }
×
75

76
        // verifica se todas as notas do lote sao do mesmo modelo
UNCOV
77
        if ((qtdNF > 0) && (qtdNFC > 0)) {
×
UNCOV
78
            throw new IllegalArgumentException("Lote contendo notas de modelos diferentes!");
×
79
        }
80

81
        // guarda o modelo das notas
UNCOV
82
        final NFModelo modelo = qtdNFC > 0 ? NFModelo.NFCE : NFModelo.NFE;
×
83

84
        // comunica o lote
UNCOV
85
        final NFLoteEnvioRetorno loteEnvioRetorno = this.comunicaLote(loteAssinado.toString(), modelo);
×
UNCOV
86
        return new NFLoteEnvioRetornoDados(loteEnvioRetorno, loteAssinado);
×
87
    }
88

89
    private NFLoteEnvioRetorno comunicaLote(final String loteAssinadoXml, final NFModelo modelo) throws Exception {
90
        //valida o lote assinado, para verificar se o xsd foi satisfeito, antes de comunicar com a sefaz
UNCOV
91
        XMLValidador.validaLote(loteAssinadoXml);
×
92

93
        //envia o lote para a sefaz
UNCOV
94
        final OMElement omElement = this.nfeToOMElement(loteAssinadoXml);
×
95

UNCOV
96
        final NfeDadosMsg dados = new NfeDadosMsg();
×
UNCOV
97
        dados.setExtraElement(omElement);
×
98

UNCOV
99
        final NfeCabecMsgE cabecalhoSOAP = this.getCabecalhoSOAP();
×
UNCOV
100
        WSLoteEnvio.LOGGER.debug(omElement.toString());
×
101

UNCOV
102
        final NFAutorizador31 autorizador = NFAutorizador31.valueOfCodigoUF(this.config.getCUF());
×
UNCOV
103
        final String endpoint = NFModelo.NFE.equals(modelo) ? autorizador.getNfeAutorizacao(this.config.getAmbiente()) : autorizador.getNfceAutorizacao(this.config.getAmbiente());
×
UNCOV
104
        if (endpoint == null) {
×
UNCOV
105
            throw new IllegalArgumentException("Nao foi possivel encontrar URL para Autorizacao " + modelo.name() + ", autorizador " + autorizador.name());
×
106
        }
107

UNCOV
108
        final NfeAutorizacaoLoteResult autorizacaoLoteResult = new NfeAutorizacaoStub(endpoint).nfeAutorizacaoLote(dados, cabecalhoSOAP);
×
UNCOV
109
        final NFLoteEnvioRetorno loteEnvioRetorno = new NFPersister().read(NFLoteEnvioRetorno.class, autorizacaoLoteResult.getExtraElement().toString());
×
UNCOV
110
        WSLoteEnvio.LOGGER.info(loteEnvioRetorno.toString());
×
UNCOV
111
        return loteEnvioRetorno;
×
112
    }
113

114
    private NfeCabecMsgE getCabecalhoSOAP() {
UNCOV
115
        final NfeCabecMsg cabecalho = new NfeCabecMsg();
×
UNCOV
116
        cabecalho.setCUF(this.config.getCUF().getCodigoIbge());
×
UNCOV
117
        cabecalho.setVersaoDados(NFeConfig.VERSAO_NFE);
×
UNCOV
118
        final NfeCabecMsgE cabecalhoSOAP = new NfeCabecMsgE();
×
UNCOV
119
        cabecalhoSOAP.setNfeCabecMsg(cabecalho);
×
UNCOV
120
        return cabecalhoSOAP;
×
121
    }
122

123
    private OMElement nfeToOMElement(final String documento) throws XMLStreamException {
UNCOV
124
        final OMElement ome = AXIOMUtil.stringToOM(documento);
×
UNCOV
125
        final Iterator<?> children = ome.getChildrenWithLocalName(WSLoteEnvio.NFE_ELEMENTO);
×
UNCOV
126
        while (children.hasNext()) {
×
UNCOV
127
            final OMElement omElement = (OMElement) children.next();
×
UNCOV
128
            if ((omElement != null) && (WSLoteEnvio.NFE_ELEMENTO.equals(omElement.getLocalName()))) {
×
UNCOV
129
                omElement.addAttribute("xmlns", NFeConfig.NFE_NAMESPACE, null);
×
130
            }
UNCOV
131
        }
×
UNCOV
132
        return ome;
×
133
    }
134
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc