Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

package nfe;

import java.rmi.RemoteException;

import javax.xml.bind.JAXBException;
import javax.xml.stream.XMLStreamException;

import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.util.AXIOMUtil;
import org.apache.axis2.transport.http.HTTPConstants;

import br.inf.portalfiscal.nfe.schema_4.inutNFe.TInutNFe;
import br.inf.portalfiscal.nfe.schema_4.inutNFe.TRetInutNFe;
import br.inf.portalfiscal.www.nfe_400.wsdl.NFeInutilizacao.NFeInutilizacao4Stub;
import nfe.dom.ConfiguracoesIniciaisNfe;
import nfe.exception.NfeException;
import nfe.exception.NfeValidacaoException;
import nfe.util.CertificadoUtil;
import nfe.util.ConstantesUtil;
import nfe.util.ObjetoUtil;
import nfe.util.WebServiceUtil;
import nfe.util.XmlUtil;

/**
 * Classe Responsavel por inutilizar uma Faixa de numeracao da Nfe.
 *
 * @author Samuel Oliveira - samuk.exe@hotmail.com - www.samuelweb.com.br
 */

class Inutilizar {

    static TInutNFe criaObjetoInutiliza(String id, String motivo, String tipo) throws NfeException {
        ConfiguracoesIniciaisNfe config = ConfiguracoesIniciaisNfe.getInstance();

        TInutNFe inutNFe = new TInutNFe();
        inutNFe.setVersao(ConstantesUtil.VERSAO.INUTILIZACAO);

        TInutNFe.InfInut infInut = new TInutNFe.InfInut();
        infInut.setId(id);
        infInut.setTpAmb(config.getAmbiente());
        infInut.setXServ("INUTILIZAR");
        infInut.setCUF(id.substring(2,4));
        infInut.setAno(id.substring(4,6));

        infInut.setCNPJ(id.substring(6,20));
        infInut.setMod(tipo.equals(ConstantesUtil.NFE) ? "55" : "65");
        infInut.setSerie(Integer.valueOf(id.substring(22,25)).toString());

        infInut.setNNFIni(Integer.valueOf(id.substring(25,34)).toString());
        infInut.setNNFFin(Integer.valueOf(id.substring(34,43)).toString());

        infInut.setXJust(motivo);
        inutNFe.setInfInut(infInut);

        return inutNFe;
    }

    static TRetInutNFe inutiliza(String id, String motivo, String tipo) throws NfeException {

        try {

            ConfiguracoesIniciaisNfe config = CertificadoUtil.iniciaConfiguracoes();

            TInutNFe inutNFe = criaObjetoInutiliza(id, motivo,tipo);

            String xml = XmlUtil.objectToXml(inutNFe);
            xml = xml.replaceAll(" xmlns:ns2=\"http://www.w3.org/2000/09/xmldsig#\"", "");

            xml = Assinar.assinaNfe(xml, Assinar.INFINUT);

            String erros = Validar.validaXml(xml, Validar.INUTILIZACAO);
            if (!ObjetoUtil.isEmpty(erros)) {
                throw new NfeValidacaoException("Erro Na Validação do Xml: " + erros);
            }

            if (config.isLog()) {
                System.out.println("Xml Inutilizar: " + xml);
            }
            OMElement ome = AXIOMUtil.stringToOM(xml);

            NFeInutilizacao4Stub.NfeDadosMsg dadosMsg = new NFeInutilizacao4Stub.NfeDadosMsg();
            dadosMsg.setExtraElement(ome);

            NFeInutilizacao4Stub stub = new NFeInutilizacao4Stub(WebServiceUtil.getUrl(tipo, ConstantesUtil.SERVICOS.INUTILIZACAO));

            //Timeout
            if (!ObjetoUtil.isEmpty(config.getTimeout())) {
                stub._getServiceClient().getOptions().setProperty(
                        HTTPConstants.SO_TIMEOUT, config.getTimeout());
                stub._getServiceClient().getOptions().setProperty(
                        HTTPConstants.CONNECTION_TIMEOUT, config.getTimeout());
            }

            NFeInutilizacao4Stub.NfeResultMsg result = stub.nfeInutilizacaoNF(dadosMsg);

            return XmlUtil.xmlToObject(result.getExtraElement().toString(), TRetInutNFe.class);
        } catch (RemoteException | XMLStreamException | JAXBException e) {
            throw new NfeException(e.getMessage());
        }

    }

}