Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
695 blopes 1
package nfe.util;
2
 
3
import br.com.swconsultoria.nfe.Assinar;
4
import br.com.swconsultoria.nfe.dom.ConfiguracoesNfe;
5
import br.com.swconsultoria.nfe.dom.Evento;
6
import br.com.swconsultoria.nfe.dom.enuns.AssinaturaEnum;
7
import br.com.swconsultoria.nfe.dom.enuns.EventosEnum;
8
import br.com.swconsultoria.nfe.exception.NfeException;
9
import br.com.swconsultoria.nfe.schema.envEventoCancSubst.TEnvEvento;
10
import br.com.swconsultoria.nfe.schema.envEventoCancSubst.TEvento;
11
import br.com.swconsultoria.nfe.schema.envEventoCancSubst.TProcEvento;
12
import br.com.swconsultoria.nfe.schema.envEventoCancSubst.TRetEvento;
13
 
14
import javax.xml.bind.JAXBException;
15
import java.util.Collections;
16
import java.util.List;
17
 
18
/**
19
 * @author Samuel Oliveira - samuk.exe@hotmail.com
20
 * Data: 02/03/2019 - 22:51
21
 */
22
public class CancelamentoSubstituicaoUtil {
23
 
24
    private CancelamentoSubstituicaoUtil() {}
25
 
26
    /**
27
     * MOnta o Evento de cancelamento unico
28
     *
29
     * @param cancela
30
     * @param configuracao
31
     * @return
32
     * @throws NfeException
33
     */
34
    public static TEnvEvento montaCancelamento(Evento cancela, ConfiguracoesNfe configuracao) throws NfeException {
35
        return montaCancelamento(Collections.singletonList(cancela), configuracao);
36
    }
37
 
38
    /**
39
     * MOnta o Evento de cancelamento Lote
40
     *
41
     * @param listaCancela
42
     * @param configuracao
43
     * @return
44
     * @throws NfeException
45
     */
46
    public static TEnvEvento montaCancelamento(List<Evento> listaCancela, ConfiguracoesNfe configuracao) throws NfeException {
47
 
48
        if (listaCancela.size() > 20) {
49
            throw new NfeException("Podem ser enviados no máximo 20 eventos no Lote.");
50
        }
51
 
52
        TEnvEvento enviEvento = new TEnvEvento();
53
        enviEvento.setVersao(ConstantesUtil.VERSAO.EVENTO_CANCELAMENTO_SUBSTIUICAO);
54
        enviEvento.setIdLote("1");
55
 
56
        listaCancela.forEach(evento -> {
57
            String id = "ID" + EventosEnum.CANCELAMENTO_SUBSTITUICAO.getCodigo() + evento.getChave() + "01";
58
 
59
            TEvento eventoCancela = new TEvento();
60
            eventoCancela.setVersao(ConstantesUtil.VERSAO.EVENTO_CANCELAMENTO_SUBSTIUICAO);
61
 
62
            TEvento.InfEvento infoEvento = new TEvento.InfEvento();
63
            infoEvento.setId(id);
64
            infoEvento.setCOrgao(String.valueOf(configuracao.getEstado().getCodigoUF()));
65
            infoEvento.setTpAmb(configuracao.getAmbiente().getCodigo());
66
 
67
            infoEvento.setCPF(evento.getCpf());
68
            infoEvento.setCNPJ(evento.getCnpj());
69
 
70
            infoEvento.setChNFe(evento.getChave());
71
 
72
            infoEvento.setDhEvento(XmlNfeUtil.dataNfe(evento.getDataEvento(), configuracao.getZoneId()));
73
            infoEvento.setTpEvento(EventosEnum.CANCELAMENTO_SUBSTITUICAO.getCodigo());
74
            infoEvento.setNSeqEvento("1");
75
            infoEvento.setVerEvento(ConstantesUtil.VERSAO.EVENTO_CANCELAMENTO_SUBSTIUICAO);
76
 
77
            TEvento.InfEvento.DetEvento detEvento = new TEvento.InfEvento.DetEvento();
78
            detEvento.setVersao(ConstantesUtil.VERSAO.EVENTO_CANCELAMENTO_SUBSTIUICAO);
79
            detEvento.setDescEvento("Cancelamento por substituicao");
80
            detEvento.setCOrgaoAutor(String.valueOf(configuracao.getEstado().getCodigoUF()));
81
            detEvento.setTpAutor("1");
82
            detEvento.setVerAplic(ConstantesUtil.VERSAO.EVENTO_CANCELAMENTO_SUBSTIUICAO);
83
            detEvento.setNProt(evento.getProtocolo());
84
            detEvento.setXJust(evento.getMotivo());
85
            detEvento.setChNFeRef(evento.getChaveSusbstituta());
86
            infoEvento.setDetEvento(detEvento);
87
            eventoCancela.setInfEvento(infoEvento);
88
            enviEvento.getEvento().add(eventoCancela);
89
        });
90
 
91
        return enviEvento;
92
    }
93
 
94
    /**
95
     * Cria o ProcEvento de Cancelamento
96
     *
97
     * @param config
98
     * @param enviEvento
99
     * @param retorno
100
     * @return
101
     * @throws JAXBException
102
     * @throws NfeException
103
     */
104
    public static String criaProcEventoCancelamento(ConfiguracoesNfe config, TEnvEvento enviEvento, TRetEvento retorno) throws JAXBException, NfeException {
105
 
106
        String xml = XmlNfeUtil.objectToXml(enviEvento, config.getEncode());
107
        xml = xml.replace(" xmlns:ns2=\"http://www.w3.org/2000/09/xmldsig#\"", "")
108
                .replace("<evento v", "<evento xmlns=\"http://www.portalfiscal.inf.br/nfe\" v");
109
 
110
        String assinado = Assinar.assinaNfe(ConfiguracoesUtil.iniciaConfiguracoes(config), xml, AssinaturaEnum.EVENTO);
111
 
112
        TProcEvento procEvento = new TProcEvento();
113
        procEvento.setVersao(ConstantesUtil.VERSAO.EVENTO_CANCELAMENTO);
114
        procEvento.setEvento(XmlNfeUtil.xmlToObject(assinado, TEnvEvento.class).getEvento().get(0));
115
        procEvento.setRetEvento(retorno);
116
 
117
        return XmlNfeUtil.objectToXml(procEvento, config.getEncode());
118
    }
119
 
120
}