Full width home advertisement

Facturacion CFDi

CFDi en Java

Post Page Advertisement [Top]

 /**
 *
 * ESTE EJEMPLO TREA MONTOS REALES, AL GENERAR EL XML
 * LO ENVIAS A TU PAC Y SE TIMBRA AUTOMATICO (solo cambia los csd de prueba por los del rfc emisor de la factura)
 *
 * */

public class EjemploCFDi33 {

    public EjemploCFDi33() {}
    
    public void ejecutar(){

        /** CONFIGURACION PARA LA EJECUCION DEL EJEMPLO **/
        Configuracion configXML = new Configuracion();
        
        /** LiCENCIA SISTEMASPYMES **/
        configXML.setLicencia("316ac9e0543522b89b0e32707fb42bb4");
        
        /** MUESTRA INFORMACION DEL SISTEMA DONDE SE EJECUTA EL EJEMPLO - VALORES SI/NO  **/
        configXML.setInfoSistema("SI");
        
        /** TIPO DE COMPROBANTE FISCAL A CREAR, POSIBLES VALORES FACTURA,NOMINA,PAGO,ESCUELAS**/
        configXML.setComprobanteTipo("FACTURA");
        
        /** RUTA DONDE SE GENERA EL XML SELLADO CON LOS CSD (LINUX) o (WINDOWS) **/
        String so=System.getProperty("os.name");
        if(so.contains("Linux"))
            configXML.setRutaXML("/home/carlos/Documentos/xml/");
        
        if(so.contains("Windows"))
            configXML.setRutaXML("C:/proyectos_eclipse/xml/");
        
        /** NOMBRE DEL ARCHIVO XML SELLADO **/
        configXML.setArchivoXML("ejemplo_factura33.xml");
        
        /** RUTA DE LOS CERTIFICADOS CSD DEL RFC EMISOR  **/
        String KEY=System.getProperty("user.dir")+"/libcfdi33/pruebas/EKU9003173C9.key";
        String CER=System.getProperty("user.dir")+"/libcfdi33/pruebas/EKU9003173C9.cer";
        String CONTRASENA="12345678a";
        configXML.setCer(CER);
        configXML.setKey(KEY);
        configXML.setContresena(CONTRASENA);
        
        /** VALIDAR LA INFORMACION INGRESADA ANTES DE CREAR EL ARCHIVO XML - TIEMPO DE EJECUCION 5 A 8 SEGUNDOS - POSIBLES VALORES SI/NO **/
        //configXML.setValidar_pre("SI");
        /** VALIDAR LA INFORMACION INGRESADA DESPUES DE CREAR EL ARCHIVO XML - TIEMPO DE EJECUCION 5 A 8 SEGUNDOS - POSIBLES VALORES SI/NO **/
        //configXML.setValidar_pos("SI");
        
        /** SE CREA EL COMPROBANTE (ESTRUCTURA DEL XML) **/
        Comprobante comprobante = new Comprobante();
        comprobante.setSerie("A");
        comprobante.setFolio("1");
        String FORMATER = "yyyy-MM-dd'T'HH:mm:ss";
        Date date = new Date();
        XMLGregorianCalendar fechaComprobante = Utilerias.getFechaXMLGregorian(date, FORMATER);
        comprobante.setFecha(fechaComprobante);
        comprobante.setSubTotal(new BigDecimal(298.00).setScale(2, RoundingMode.HALF_UP));
        comprobante.setTotal(new BigDecimal(345.68).setScale(2, RoundingMode.HALF_UP));
        String moneda="MXN";
        comprobante.setMoneda(Utilerias.getMonedaComprobante(moneda));
        String tipocomprobante="I";  /** I = INGRESO, E = EGRESO **/
        comprobante.setTipoDeComprobante(Utilerias.getTipoDeComprobante(tipocomprobante));
        comprobante.setFormaPago("01");
        String metododepago="PUE";
        comprobante.setMetodoPago(Utilerias.getMetodoDePagoComprobante(metododepago));
        //comprobante.setCondicionesDePago("CONDIDCIONES");
        //comprobante.setDescuento(new BigDecimal(100.00));
        comprobante.setTipoCambio(new BigDecimal(1.0).setScale(0, RoundingMode.HALF_UP));
        comprobante.setLugarExpedicion("45079");

        /** CFDI RELACIONADO **/
        //CfdiRelacionado cfdiRelacionado = new CfdiRelacionado();
        //cfdiRelacionado.setUUID("A39DA66B-52CA-49E3-879B-5C05185B0EF7");
        /** CFDI RELACIONADOS **/
        //CfdiRelacionados cfdiRelacionados = new CfdiRelacionados();
        //cfdiRelacionados.setTipoRelacion("01");
        //cfdiRelacionados.getCfdiRelacionado().add(cfdiRelacionado);
        //comprobante.setCfdiRelacionados(cfdiRelacionados);
        
        /** DATOS DEL EMISOR **/
        Emisor emisor = new Emisor();
        emisor.setRfc("EKU9003173C9");
        emisor.setRegimenFiscal("601");
        emisor.setNombre("GRUPO SISTEMAS SOLUCIONES");
        comprobante.setEmisor(emisor);
        
        /** DATOS DEL RECEPTOR **/
        Receptor receptor = new Receptor();
        receptor.setNombre("VENTA A PUBLICO EN GENERAL");
        receptor.setRfc("XAXX010101000");
        //receptor.setNumRegIdTrib("0000000000000");
        //String pais="MEX";
        //CPais paisComprobante = Utilerias.getPaisComprobante(pais);
        //receptor.setResidenciaFiscal(paisComprobante);
        String usoCFDI="D05";
        receptor.setUsoCFDI(Utilerias.getUsoCFDiComprobante(usoCFDI));
        comprobante.setReceptor(receptor);

        /** AGREGAR LOS CONCEPTOS*/
        Conceptos conceptos = new Conceptos();
        /** CONCEPTO 1 **/
        Concepto concepto1 = new Concepto();
        concepto1.setClaveProdServ("01010101");
        concepto1.setClaveUnidad("ACT");
        concepto1.setNoIdentificacion("0001");
        concepto1.setCantidad(new BigDecimal(1));
        concepto1.setUnidad("NA");
        concepto1.setDescripcion("Concepto 1");
        concepto1.setValorUnitario(new BigDecimal(99.00).setScale(2, RoundingMode.HALF_UP));
        concepto1.setImporte(new BigDecimal(99.00).setScale(2, RoundingMode.HALF_UP));
        
        /** IMPUESTOS CONCEPTO 1 **/
        Impuestos impuestosConcepto1 = new Impuestos();
        /** IMPUESTOS TRASLADOS **/
        Traslados trasladosConcepto1 = new Traslados();
        /** IMPUESTO TRASLADO **/
        Traslado trasladoConcepto1 = new Traslado();
        trasladoConcepto1.setBase(new BigDecimal(99.00).setScale(2, RoundingMode.HALF_UP));
        trasladoConcepto1.setImporte(new BigDecimal(15.84).setScale(2, RoundingMode.HALF_UP));
        trasladoConcepto1.setImpuesto("002");
        trasladoConcepto1.setTasaOCuota(new BigDecimal(0.160000).setScale(6, RoundingMode.HALF_UP));
        String tipoFactorTraslado1="Tasa";
        trasladoConcepto1.setTipoFactor(Utilerias.getTipoFactorImpuestoConceptoComprobante(tipoFactorTraslado1));
        /** SE AGREGA EL IMPUESTO TRASLADO AL NODO DE IMPUESTOS TRALADADOS**/
        trasladosConcepto1.getTraslado().add(trasladoConcepto1);
        /** SE AGREGAN LOS IMPUESTOS TRASLADADOS AL NODO DEL IMPUESTO DEL CONCEPTO **/
        impuestosConcepto1.setTraslados(trasladosConcepto1);
        
        /** PREDIAL **/
        //CuentaPredial predial = new CuentaPredial();
        //predial.setNumero("23438222");    
        //concepto1.setCuentaPredial(predial);
        
        /** AL CONCEPTO 1 SE LE AGREGAN LOS IMPUESTOS TRALADOS O RETENIDOS **/
        concepto1.setImpuestos(impuestosConcepto1);
        /** AL NODO CONCEPTOS SE LE AGREGA EL CONCEPTO 1 **/
        conceptos.getConcepto().add(concepto1);
        
        /** CONCEPTO 2 **/
        Concepto concepto2 = new Concepto();
        concepto2.setClaveProdServ("01010101");
        concepto2.setClaveUnidad("ACT");
        concepto2.setNoIdentificacion("0001");
        concepto2.setCantidad(new BigDecimal(1));
        concepto2.setUnidad("NA");
        concepto2.setDescripcion("Concepto 1");
        concepto2.setValorUnitario(new BigDecimal(199.00).setScale(2, RoundingMode.HALF_UP));
        concepto2.setImporte(new BigDecimal(199.00).setScale(2, RoundingMode.HALF_UP));
        
        /** IMPUESTOS CONCEPTO 2 **/
        Impuestos impuestosConcepto2 = new Impuestos();
        /** IMPUESTOS TRASLADOS **/
        Traslados trasladosConcepto2 = new Traslados();
        /** IMPUESTO TRASLADO **/
        Traslado trasladoConcepto2 = new Traslado();
        trasladoConcepto2.setBase(new BigDecimal(199.00).setScale(2, RoundingMode.HALF_UP));
        trasladoConcepto2.setImporte(new BigDecimal(31.84).setScale(2, RoundingMode.HALF_UP));
        trasladoConcepto2.setImpuesto("002");
        trasladoConcepto2.setTasaOCuota(new BigDecimal(0.160000).setScale(6, RoundingMode.HALF_UP));
        String tipoFactorTraslado2="Tasa";
        trasladoConcepto2.setTipoFactor(Utilerias.getTipoFactorImpuestoConceptoComprobante(tipoFactorTraslado2));
        /** SE AGREGA EL IMPUESTO TRASLADO AL NODO DE IMPUESTOS TRALADADOS**/
        trasladosConcepto2.getTraslado().add(trasladoConcepto2);
        /** SE AGREGAN LOS IMPUESTOS TRASLADADOS AL NODO DEL IMPUESTO DEL CONCEPTO 2 **/
        impuestosConcepto2.setTraslados(trasladosConcepto2);
        /** AL CONCEPTO 1 SE LE AGREGAN LOS IMPUESTOS TRALADOS O RETENIDOS **/
        concepto2.setImpuestos(impuestosConcepto2);
        /** AL NODO CONCEPTOS SE LE AGREGA EL CONCEPTO 2 **/
        conceptos.getConcepto().add(concepto2);
        /** AL NODO COMPROBANTE SE LE AGREGA EL NODO CONCEPTOS **/
        comprobante.setConceptos(conceptos);
        
        /** SE CREA EL NODO IMPUESTOS DEL COMPROBANTE  **/
        Comprobante.Impuestos impuestosComprobante = new Comprobante.Impuestos();
        
        /** CREAR IMPUESTOS TRASLADOS AL COMPROBANTE*/
        Comprobante.Impuestos.Traslados trasladosComprobante = new Comprobante.Impuestos.Traslados();
        /** CREAR EL IMPUESTO TRASLADO COMPROBANTE*/
        Comprobante.Impuestos.Traslados.Traslado trasladoComprobante = new Comprobante.Impuestos.Traslados.Traslado();
        trasladoComprobante.setImpuesto("002");
        String tipoFactorComprobante="Tasa";
        trasladoComprobante.setTipoFactor(Utilerias.getTipoFactorImpuestoConceptoComprobante(tipoFactorComprobante));
        trasladoComprobante.setTasaOCuota(new BigDecimal(0.160000).setScale(6, RoundingMode.HALF_UP));
        trasladoComprobante.setImporte(new BigDecimal(47.68).setScale(2, RoundingMode.HALF_UP));
        /** AGREGAR EL IMPUESTO TRASLADO AL NODO IMPUESTOS */
        trasladosComprobante.getTraslado().add(trasladoComprobante);
        /** AGREGAR LOS IMPUESTOS TRASLADOS AL NODO IMPUESTOS DEL COMPROBANTE*/
        impuestosComprobante.setTraslados(trasladosComprobante);
        /** AGREGAR EL TOTAL DE IMPUESTOS TRASLADOS DEL COMPROBANTE*/
        impuestosComprobante.setTotalImpuestosTrasladados(new BigDecimal(47.68).setScale(2, RoundingMode.HALF_UP));
        
        /** CREAR IMPUESTOS RETENIDOS AL COMPROBANTE*/
        /*
        Comprobante.Impuestos.Retenciones retencionesComprobante = new Comprobante.Impuestos.Retenciones();
        //RETENCION COMPROBANTE
        Comprobante.Impuestos.Retenciones.Retencion retencionComprobante = new Comprobante.Impuestos.Retenciones.Retencion();
        retencionComprobante.setImporte(new BigDecimal(100.00));
        retencionComprobante.setImpuesto("002");
        retencionesComprobante.getRetencion().add(retencionComprobante);
        impuestosComprobante.setRetenciones(retencionesComprobante);
        impuestosComprobante.setTotalImpuestosRetenidos(new BigDecimal(100));
        */
        
        /** AGREGAR LOS IMPUESTOS TRASLADADOS Y RETENIDOS AL COMPROBANTE*/
        comprobante.setImpuestos(impuestosComprobante);
        
        /** GENERAR EL XML SELLADO CON LOS CERTIFICADOS CSD **/
        CrearXmlCFDi33 xml = new CrearXmlCFDi33(comprobante, configXML);
        RespuestaGenerarXML res = xml.generarXMLCFDi33();

        /** SE IMPRIME LA RESPUESTA**/
        System.out.println("\n Ruta del Archivo XML Sellado generado: "+res.getRutaArchivoXML());
        System.out.println("\n Archivo XML en string: "+res.getArchivoXMLtexto());
        System.out.println("\n Archivo XML en Base64: "+res.getArchivoXMLBase64());
        
        /////////////////////////////////////////////////////////////////////////////////////////////////
        /** AHORA EL XML SELLADO SE TIMBRARA CON EL SERVICIO DE SISTEMASPYMES **/
        /** (O IMPLEMENTAS EL TIMBRADO CON TU PAC DE PREFERENCIA) **/
        System.out.println("\n\n AHORA SE TIMBRARA EL XML SELLADO CON EL TIMBRADO DE SISTEMASPYMES\n\n");
        
        Random rn = new Random();
        int pac = rn.nextInt(10) + 1;
        System.out.println("SERVIDOR SISTEMASPYMES No.: "+ pac);
        
        /** TOMA UN SERVIDOR SISTEMASPYMES AL AZAR **/
        /**
         * CONTAMON CON 10 SERVIDORES PROPIOS PARA BALANCEAR LA CARGA DE TRABAJO
         * Y ASEGURAR DE TIMBRADO DE NUESTROS CLIENTES
         */
        String url_webservice ="http://pac"+pac+".facturacionmexico.com.mx/pac/index.php?wsdl";
        
        /** USUARIOS DE PRUEBA SISTEMASPYMES**/
        String rfc="DEMO700101XXX";
        String clave="DEMO700101XXX";
        /** RUTA DEL XML GENERADO Y SELLADO **/
        String ruta_xml=res.getRutaArchivoXML();
        /** PARA PRUEBAS produccion = NO, para facturas reales, produccion = SI **/
        String produccion="NO";
        
        /**
         *  OBJETO TimbrarCFDi CON 3 METODOS PRINCIPALES
            METODO timbrarXML: PARA TIMBRAR EL XML DE UNA FACTURA
            METODO saldo: PARA VER EL SALDO DE UN RFC
            METODO cancelar: PARA CANCELAR UNA FACTURA XML
        */
        TimbrarCFDi timbrar = new TimbrarCFDi();
        
        /** RESPUESTA DEL TIMBRADO**/
        HashMap<String, String> respuesta_timbrado;
        
        /*********************   METODO TIMBRAR XML ***********************************************************
        /* timbrarXML(String url_webservice, String rfc, String clave,String ruta_xml, String produccion);
         *
         * PARAMETROS:
         * url_webservice : URL DEL WS DE SISTEMAS PYMES
         * rfc: RFC DEL CLIENTE QUE TIMBRARA EL XML
         * clave: CLAVE DEL RFC EN SYSTEMASPYMES
         * ruta_xml: RUTA DONDE ESTA EL XML SELLADO
         * produccion: SI EL TIMBRADO ES DE PRUEBA (timbrado de pruebas solo funciona con el rfc de pruebas) O NO
         *
         * RESPUESTA: HashMap <String,String> CON LA RESPUESTA DE SISTEMASPYMES
         *
         * ELEMENTOS HASHMAP:
         * cfdi64: XML EN BASE64
         * cfdi; xml timbrado en formato cadena
         * png: PNG DE CODIGO QR EN BASE64
         * idpac: PAC CON EL QUE SE TIMBRO EL XML
         * produccion: SI FUE TIMBRADO EN MODO DE PRUEBAS O TIMBRADO REAL
         * codigo_mf_numero: NUMERO DE CODIGO DE RESPUESTA SISTEMASPYMES
         * codigo_mf_texto: TEXTO DE CODIGO DE RESPUESTA SISTEMASPYMES
         * mensaje_original_pac_json: RESPUESTA DEL PAC EN JSON
         * cancelada: SI FUE TIMBRADO DE CANCELACION
         * saldo: SALDO DEL RFC
         * uuid: UUID DEL LA FACTURA TIMBRADA
         * servidor: SERVIDOR SISTEMASPYMES
         * ejecucion: TIEMPO DE EJECUCION DEL TIMBRADO
         * ruta_xml_timbrado: RUTA DONDE ESTA EL ARCHIVO XML CFDI TIMBRADO
         */
        
        
        respuesta_timbrado = timbrar.timbrarXML(url_webservice, rfc, clave, ruta_xml, produccion);
        System.out.println("Demo cfdi64=" + respuesta_timbrado.get("cfdi64"));
        System.out.println("Demo cfdi=" + respuesta_timbrado.get("cfdi"));
        System.out.println("Demo png=" + respuesta_timbrado.get("png"));
        System.out.println("Demo idpac=" + respuesta_timbrado.get("idpac"));
        System.out.println("Demo produccion=" + respuesta_timbrado.get("produccion"));
        System.out.println("Demo codigo_mf_numero=" + respuesta_timbrado.get("codigo_mf_numero"));
        System.out.println("Demo codigo_mf_texto=" + respuesta_timbrado.get("codigo_mf_texto"));
        System.out.println("Demo mensaje_original_pac_json=" + respuesta_timbrado.get("mensaje_original_pac_json"));
        System.out.println("Demo cancelada=" + respuesta_timbrado.get("cancelada"));
        System.out.println("Demo saldo=" + respuesta_timbrado.get("saldo"));
        System.out.println("Demo uuid=" + respuesta_timbrado.get("uuid"));
        System.out.println("Demo servidor=" + respuesta_timbrado.get("servidor"));
        System.out.println("Demo ejecucion=" + respuesta_timbrado.get("ejecucion"));
        System.out.println("Demo ruta xml timbrado=" + respuesta_timbrado.get("ruta_xml_timbrado"));
        
        System.out.println("\n\n");
        
        /** CREAR PDF DEL XML TIMBRADO**/
        String rutaXML_Timbrado=respuesta_timbrado.get("ruta_xml_timbrado");
        String rutaLogo="C:/proyectos_eclipse/xml/logo.png";
        
        Config conf = new Config();
        conf.setRutaXML(rutaXML_Timbrado);
        conf.setRutaLogo(rutaLogo);
        conf.setTitulo("MI EMPRESA S.A DE C.V");
        conf.setLicencia("5eede835e9d63212bdb432c6d3431e7f");
        
    
        CfdiXml2Pdf cfdi2xml = new CfdiXml2Pdf(conf);
        
        /*genera el pdf con el mismo nombre del xml, en la ruta donde esta el xml */
        cfdi2xml.crearPDF();
        
    }

}

No hay comentarios:

Publicar un comentario

Bottom Ad [Post Page]

| Designed by Colorlib