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.envEventoCancNFe.TEnvEvento;
10
import br.com.swconsultoria.nfe.schema.envEventoCancNFe.TEvento;
11
import br.com.swconsultoria.nfe.schema.envEventoCancNFe.TProcEvento;
12
import br.com.swconsultoria.nfe.schema.envEventoCancNFe.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 CancelamentoUtil {
23
 
24
    private CancelamentoUtil() {}
25
 
26
    /**
27
     * MOnta o Evento de cancelamento unico
28
     * @param cancela
29
     * @param configuracao
30
     * @return
31
     * @throws NfeException
32
     */
33
    public static TEnvEvento montaCancelamento(Evento cancela, ConfiguracoesNfe configuracao) throws NfeException {
34
        return montaCancelamento(Collections.singletonList(cancela), configuracao);
35
    }
36
 
37
    /**
38
     * MOnta o Evento de cancelamento Lote
39
     *
40
     * @param listaCancela
41
     * @param configuracao
42
     * @return
43
     * @throws NfeException
44
     */
45
    public static TEnvEvento montaCancelamento(List<Evento> listaCancela, ConfiguracoesNfe configuracao) throws NfeException {
46
 
47
        if (listaCancela.size() > 20) {
48
            throw new NfeException("Podem ser enviados no máximo 20 eventos no Lote.");
49
        }
50
 
51
        TEnvEvento enviEvento = new TEnvEvento();
52
        enviEvento.setVersao(ConstantesUtil.VERSAO.EVENTO_CANCELAMENTO);
53
        enviEvento.setIdLote("1");
54
 
55
        listaCancela.forEach(evento -> {
56
            String id = "ID" + EventosEnum.CANCELAMENTO.getCodigo() + evento.getChave() + "01";
57
 
58
            TEvento eventoCancela = new TEvento();
59
            eventoCancela.setVersao(ConstantesUtil.VERSAO.EVENTO_CANCELAMENTO);
60
 
61
            TEvento.InfEvento infoEvento = new TEvento.InfEvento();
62
            infoEvento.setId(id);
63
            //MOdificao
64
            infoEvento.setChNFe(evento.getChave());
65
            infoEvento.setCOrgao(String.valueOf(configuracao.getEstado().getCodigoUF()));
66
            infoEvento.setTpAmb(configuracao.getAmbiente().getCodigo());
67
 
68
            infoEvento.setCPF(evento.getCpf());
69
            infoEvento.setCNPJ(evento.getCnpj());
70
 
71
            infoEvento.setDhEvento(XmlNfeUtil.dataNfe(evento.getDataEvento(), configuracao.getZoneId()));
72
            infoEvento.setTpEvento(EventosEnum.CANCELAMENTO.getCodigo());
73
            infoEvento.setNSeqEvento("1");
74
            infoEvento.setVerEvento(ConstantesUtil.VERSAO.EVENTO_CANCELAMENTO);
75
 
76
            TEvento.InfEvento.DetEvento detEvento = new TEvento.InfEvento.DetEvento();
77
            detEvento.setVersao(ConstantesUtil.VERSAO.EVENTO_CANCELAMENTO);
78
            detEvento.setDescEvento("Cancelamento");
79
            detEvento.setNProt(evento.getProtocolo());
80
            detEvento.setXJust(evento.getMotivo());
81
            infoEvento.setDetEvento(detEvento);
82
            eventoCancela.setInfEvento(infoEvento);
83
            enviEvento.getEvento().add(eventoCancela);
84
        });
85
 
86
        return enviEvento;
87
    }
88
 
89
    /**
90
     * Cria o ProcEvento de Cancelamento
91
     *
92
     * @param config
93
     * @param enviEvento
94
     * @param retorno
95
     * @return
96
     * @throws JAXBException
97
     * @throws NfeException
98
     */
99
    public static String criaProcEventoCancelamento(ConfiguracoesNfe config, TEnvEvento enviEvento, TRetEvento retorno) throws JAXBException, NfeException {
100
 
101
        String xml = XmlNfeUtil.objectToXml(enviEvento, config.getEncode());
102
        xml = xml.replace(" xmlns:ns2=\"http://www.w3.org/2000/09/xmldsig#\"", "")
103
                .replace("<evento v", "<evento xmlns=\"http://www.portalfiscal.inf.br/nfe\" v");
104
 
105
        String assinado = Assinar.assinaNfe(ConfiguracoesUtil.iniciaConfiguracoes(config), xml, AssinaturaEnum.EVENTO);
106
 
107
        TProcEvento procEvento = new TProcEvento();
108
        procEvento.setVersao(ConstantesUtil.VERSAO.EVENTO_CANCELAMENTO);
109
        procEvento.setEvento(XmlNfeUtil.xmlToObject(assinado, TEnvEvento.class).getEvento().get(0));
110
        procEvento.setRetEvento(retorno);
111
 
112
        return XmlNfeUtil.objectToXml(procEvento, config.getEncode());
113
    }
114
 
115
}