Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
778 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.envcce.TEnvEvento;
10
import br.com.swconsultoria.nfe.schema.envcce.TEvento;
11
import br.com.swconsultoria.nfe.schema.envcce.TProcEvento;
12
import br.com.swconsultoria.nfe.schema.envcce.TRetEnvEvento;
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 CartaCorrecaoUtil {
23
 
24
    private CartaCorrecaoUtil() {}
25
 
26
    /**
27
     * MOnta o Evento de CCe unico
28
     *
29
     * @param cce
30
     * @param configuracao
31
     * @return
32
     * @throws NfeException
33
     */
34
    public static TEnvEvento montaCCe(Evento cce, ConfiguracoesNfe configuracao) throws NfeException {
35
        return montaCCe(Collections.singletonList(cce), configuracao);
36
    }
37
 
38
    /**
39
     * MOnta o Evento de CCe em Lote
40
     *
41
     * @param listaCCe
42
     * @param configuracao
43
     * @return
44
     * @throws NfeException
45
     */
46
    public static TEnvEvento montaCCe(List<Evento> listaCCe, ConfiguracoesNfe configuracao) throws NfeException {
47
 
48
        if (listaCCe.size() > 20) {
49
            throw new NfeException("Podem ser enviados no máximo 20 eventos no Lote.");
50
        }
51
 
52
        TEnvEvento envEvento = new TEnvEvento();
53
        envEvento.setVersao(ConstantesUtil.VERSAO.EVENTO_CCE);
54
        envEvento.setIdLote("1");
55
 
56
        listaCCe.forEach(cce -> {
57
            String id = "ID" + EventosEnum.CCE.getCodigo() + cce.getChave() + ChaveUtil.completarComZerosAEsquerda(String.valueOf(cce.getSequencia()), 2);
58
 
59
            TEvento evento = new TEvento();
60
            evento.setVersao(ConstantesUtil.VERSAO.EVENTO_CCE);
61
 
62
            TEvento.InfEvento infEvento = new TEvento.InfEvento();
63
            infEvento.setId(id);
64
            infEvento.setCOrgao(configuracao.getEstado().getCodigoUF());
65
            infEvento.setTpAmb(configuracao.getAmbiente().getCodigo());
66
 
67
            infEvento.setCPF(cce.getCpf());
68
            infEvento.setCNPJ(cce.getCnpj());
69
 
70
            infEvento.setChNFe(cce.getChave());
71
 
72
            // Altere a Data
73
            infEvento.setDhEvento(XmlNfeUtil.dataNfe(cce.getDataEvento(), configuracao.getZoneId()));
74
            infEvento.setTpEvento(EventosEnum.CCE.getCodigo());
75
            infEvento.setNSeqEvento(String.valueOf(cce.getSequencia()));
76
            infEvento.setVerEvento(ConstantesUtil.VERSAO.EVENTO_CCE);
77
 
78
            TEvento.InfEvento.DetEvento detEvento = new TEvento.InfEvento.DetEvento();
79
            detEvento.setVersao(ConstantesUtil.VERSAO.EVENTO_CCE);
80
            detEvento.setDescEvento("Carta de Correcao");
81
 
82
            // Informe a Correção
83
            detEvento.setXCorrecao(cce.getMotivo());
84
            detEvento.setXCondUso("A Carta de Correcao e disciplinada pelo paragrafo 1o-A do art. 7o do Convenio S/N, de 15 de dezembro de 1970 e pode ser utilizada para regularizacao de erro ocorrido na emissao de documento fiscal, desde que o erro nao esteja relacionado com: I - as variaveis que determinam o valor do imposto tais como: base de calculo, aliquota, diferenca de preco, quantidade, valor da operacao ou da prestacao; II - a correcao de dados cadastrais que implique mudanca do remetente ou do destinatario; III - a data de emissao ou de saida.");
85
            infEvento.setDetEvento(detEvento);
86
            evento.setInfEvento(infEvento);
87
            envEvento.getEvento().add(evento);
88
        });
89
 
90
        return envEvento;
91
    }
92
 
93
    /**
94
     * Cria o ProcEvento de CCe
95
     *
96
     * @param configuracoesNfe
97
     * @param enviEvento
98
     * @param retorno
99
     * @return
100
     * @throws JAXBException
101
     * @throws NfeException
102
     */
103
    public static String criaProcEventoCCe(ConfiguracoesNfe config, TEnvEvento enviEvento, TRetEnvEvento retorno) throws JAXBException, NfeException {
104
 
105
        String xml = XmlNfeUtil.objectToXml(enviEvento, config.getEncode());
106
        xml = xml.replace(" xmlns:ns2=\"http://www.w3.org/2000/09/xmldsig#\"", "")
107
                .replace("<evento v", "<evento xmlns=\"http://www.portalfiscal.inf.br/nfe\" v");
108
 
109
        String assinado = Assinar.assinaNfe(ConfiguracoesUtil.iniciaConfiguracoes(config), xml, AssinaturaEnum.EVENTO);
110
 
111
        TProcEvento procEvento = new TProcEvento();
112
        procEvento.setEvento(XmlNfeUtil.xmlToObject(assinado, TEnvEvento.class).getEvento().get(0));
113
        procEvento.setRetEvento(retorno.getRetEvento().get(0));
114
        procEvento.setVersao(ConstantesUtil.VERSAO.EVENTO_CCE);
115
 
116
        return XmlNfeUtil.objectToXml(procEvento, config.getEncode());
117
    }
118
}