CARTA PORTE 3.0 EN JAVA CODIGO FUENTE
CLASE QUE GENERA UN XML CFDI DE CARTA PORTE 3.0 EN JAVA
GENERA EL ARCHIVO XML Y EL BASE64 DEL XML PARA ENVIARLO A TU PAC ,
EL XML LO SELLA CON LOS CERTIFICADOS CSD DEL RFC EMISOR
package com.sistemaspymes.cfdi40;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import javax.xml.datatype.XMLGregorianCalendar;
import com.generarxml.cfdi40.Configuracion;
import com.generarxml.cfdi40.CrearXmlCFDi40;
import com.generarxml.cfdi40.Utilerias;
import com.generarxml.cfdi40.CrearXmlCFDi40.RespuestaGenerarXML;
import mx.gob.sat.cartaporte30.CartaPorte;
import mx.gob.sat.cartaporte30.CartaPorte.FiguraTransporte;
import mx.gob.sat.cartaporte30.CartaPorte.FiguraTransporte.TiposFigura;
import mx.gob.sat.cartaporte30.CartaPorte.Mercancias;
import mx.gob.sat.cartaporte30.CartaPorte.Mercancias.Mercancia;
import mx.gob.sat.cartaporte30.CartaPorte.Mercancias.TransporteAereo;
import mx.gob.sat.cartaporte30.CartaPorte.Ubicaciones;
import mx.gob.sat.cartaporte30.CartaPorte.Ubicaciones.Ubicacion;
import mx.gob.sat.cartaporte30.CartaPorte.Ubicaciones.Ubicacion.Domicilio;
import mx.gob.sat.cfd._4.Comprobante;
import mx.gob.sat.cfd._4.Comprobante.Conceptos;
import mx.gob.sat.cfd._4.Comprobante.Conceptos.Concepto;
import mx.gob.sat.cfd._4.Comprobante.Conceptos.Concepto.Impuestos;
import mx.gob.sat.cfd._4.Comprobante.Conceptos.Concepto.Impuestos.Retenciones;
import mx.gob.sat.cfd._4.Comprobante.Conceptos.Concepto.Impuestos.Retenciones.Retencion;
import mx.gob.sat.cfd._4.Comprobante.Conceptos.Concepto.Impuestos.Traslados;
import mx.gob.sat.cfd._4.Comprobante.Conceptos.Concepto.Impuestos.Traslados.Traslado;
import mx.gob.sat.cfd._4.Comprobante.Emisor;
import mx.gob.sat.cfd._4.Comprobante.Receptor;
import mx.gob.sat.sitio_internet.cfd.catalogos.CPais;
import mx.gob.sat.sitio_internet.cfd.catalogos.cartaporte.CCodigoTransporteAereo;
import mx.gob.sat.sitio_internet.cfd.catalogos.cartaporte.CTipoPermiso;
/**
*
* 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 de tu pac)
* */
public class EjemploCartaPorte30 {
public EjemploCartaPorte30() {}
public void ejecutar(){
//CONFIGURACION DE EJECUCION
Configuracion configXML = new Configuracion();
configXML.setLicencia("316ac9e0543522b89b0e32707fb42bb4");
configXML.setInfoSistema("SI");
configXML.setComprobanteTipo("CARTA_PORTE");
String so=System.getProperty("os.name");
if(so.contains("Linux"))
{
//ruta donde se genera el xml sellado para enviarlo al pac (LINUX)
configXML.setRutaXML("/home/carlos/Documentos/xml/");
}
if(so.contains("Windows"))
{
//ruta donde se genera el xml sellado para enviarlo al pac (WINDOWS)
configXML.setRutaXML("C:\\Users\\52871\\eclipse-workspace\\xml\\");
}
configXML.setArchivoXML("ejemplo_carta_porte.xml");
//CERTIFICADOS DE PRUEBAS
String KEY=System.getProperty("user.dir")+"/libcfdi40/pruebas/EKU9003173C9.key";
String CER=System.getProperty("user.dir")+"/libcfdi40/pruebas/EKU9003173C9.cer";
String CONTRASENA="12345678a";
configXML.setCer(CER);
configXML.setKey(KEY);
configXML.setContresena(CONTRASENA);
configXML.setValidar_pre("SI"); // VALIDAR LA INFORMACION INGRESADA ANTES DE CREAR EL ARCHIVO XML - TIEMPO DE EJECUCION 5 A 8 SEGUNDOS
//configXML.setValidar_pos("SI"); // VALIDAR LA INFORMACION INGRESADA DESPUES DE CREAR EL ARCHIVO XML - TIEMPO DE EJECUCION 5 A 8 SEGUNDOS
/*COMPROBANTE*/
Comprobante comprobante = new Comprobante();
comprobante.setSerie("A");
comprobante.setFolio("1");
/*FORMATO DE FECHA*/
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(25000.00).setScale(2, RoundingMode.HALF_UP));
comprobante.setTotal(new BigDecimal(28000.00).setScale(2, RoundingMode.HALF_UP));
String moneda="MXN";
comprobante.setMoneda(Utilerias.getMonedaComprobante(moneda));
String tipocomprobante="I";
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");
comprobante.setExportacion("01");
/*EMISOR*/
Emisor emisor = new Emisor();
emisor.setRfc("EKU9003173C9");
emisor.setRegimenFiscal("601");
emisor.setNombre("ESCUELA KEMPER URGATE");
comprobante.setEmisor(emisor);
/*RECEPTOR*/
Receptor receptor = new Receptor();
receptor.setNombre("UNIVERSIDAD ROBOTICA ESPAÑOLA");
receptor.setRfc("URE180429TM6");
receptor.setDomicilioFiscalReceptor("86991");
receptor.setRegimenFiscalReceptor("601");
//receptor.setNumRegIdTrib("0000000000000");
//String pais="MEX";
//CPais paisComprobante = Utilerias.getPaisComprobante(pais);
//receptor.setResidenciaFiscal(paisComprobante);
String usoCFDI="G01";
receptor.setUsoCFDI(Utilerias.getUsoCFDiComprobante(usoCFDI));
comprobante.setReceptor(receptor);
/*CONCEPTOS*/
Conceptos conceptos = new Conceptos();
/*CONCEPTO*/
Concepto concepto1 = new Concepto();
concepto1.setClaveProdServ("78101500");
concepto1.setClaveUnidad("H87");
concepto1.setNoIdentificacion("0001");
concepto1.setCantidad(new BigDecimal(1));
concepto1.setUnidad("Pieza");
concepto1.setDescripcion("Concepto 10");
concepto1.setValorUnitario(new BigDecimal(25000.00).setScale(2, RoundingMode.HALF_UP));
concepto1.setImporte(new BigDecimal(25000.00).setScale(2, RoundingMode.HALF_UP));
concepto1.setObjetoImp("02");
/*IMPUESTOS CONCEPTO*/
Impuestos impuestosConcepto1 = new Impuestos();
/*IMPUESTOS TRASLADOS*/
Traslados trasladosConcepto1 = new Traslados();
/*IMPUESTO TRASLADO*/
Traslado trasladoConcepto1 = new Traslado();
trasladoConcepto1.setBase(new BigDecimal(25000.00).setScale(2, RoundingMode.HALF_UP));
trasladoConcepto1.setImporte(new BigDecimal(4000.00).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));
trasladosConcepto1.getTraslado().add(trasladoConcepto1);
//retenciones concepto
Retenciones retencionesConcepto1 = new Retenciones();
//retencion concepto
Retencion retencionConcepto = new Retencion();
retencionConcepto.setBase(new BigDecimal(25000.00).setScale(2, RoundingMode.HALF_UP));
retencionConcepto.setImporte(new BigDecimal(1000.00).setScale(2, RoundingMode.HALF_UP));
retencionConcepto.setImpuesto("002");
retencionConcepto.setTasaOCuota(new BigDecimal(0.040000).setScale(6, RoundingMode.HALF_UP));
String tipoFactorRetencion1="Tasa";
retencionConcepto.setTipoFactor(Utilerias.getTipoFactorImpuestoConceptoComprobante(tipoFactorRetencion1));
retencionesConcepto1.getRetencion().add(retencionConcepto);
//agregar retenciones y traslados
impuestosConcepto1.setTraslados(trasladosConcepto1);
impuestosConcepto1.setRetenciones(retencionesConcepto1);
//agregar impuestos al concepto
concepto1.setImpuestos(impuestosConcepto1);
//agragar concepto al nodo conceptos
conceptos.getConcepto().add(concepto1);
//agragar conceptos al comprobante
comprobante.setConceptos(conceptos);
/*IMPUESTOS COMPROBANTE*/
Comprobante.Impuestos impuestosComprobante = new Comprobante.Impuestos();
//RETENCIONES 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(1000.00));
retencionComprobante.setImpuesto("002");
retencionesComprobante.getRetencion().add(retencionComprobante);
impuestosComprobante.setRetenciones(retencionesComprobante);
/*TRASLADOS COMPROBANTE*/
Comprobante.Impuestos.Traslados trasladosComprobante = new Comprobante.Impuestos.Traslados();
/*TRASLADO COMPROBANTE*/
Comprobante.Impuestos.Traslados.Traslado trasladoComprobante = new Comprobante.Impuestos.Traslados.Traslado();
trasladoComprobante.setImpuesto("002");
String tipoFactorComprobante="Tasa";
trasladoComprobante.setBase(new BigDecimal(25000).setScale(2, RoundingMode.HALF_UP));
trasladoComprobante.setTipoFactor(Utilerias.getTipoFactorImpuestoConceptoComprobante(tipoFactorComprobante));
trasladoComprobante.setTasaOCuota(new BigDecimal(0.160000).setScale(6, RoundingMode.HALF_UP));
trasladoComprobante.setImporte(new BigDecimal(4000.00).setScale(2, RoundingMode.HALF_UP));
trasladosComprobante.getTraslado().add(trasladoComprobante);
impuestosComprobante.setTraslados(trasladosComprobante);
//impuestosComprobante.setTotalImpuestosRetenidos(new BigDecimal(100));
impuestosComprobante.setTotalImpuestosTrasladados(new BigDecimal(4000.00).setScale(2, RoundingMode.HALF_UP));
impuestosComprobante.setTotalImpuestosRetenidos(new BigDecimal(1000.00).setScale(2, RoundingMode.HALF_UP));
comprobante.setImpuestos(impuestosComprobante);
//COMPLEMENTO CARTA PORTE
CartaPorte cartaPorte = new CartaPorte();
cartaPorte.setVersion("3.0");
cartaPorte.setTranspInternac("No");
cartaPorte.setIdCCP("CCCBCD94-870A-4332-A52A-A52AA52AA52A");
//cartaPorte.setTotalDistRec(new BigDecimal(2).setScale(2, RoundingMode.HALF_UP));
//UBICACIONES
Ubicaciones ubicaciones = new Ubicaciones();
//UBICACION 1 , PUEDE SER LA UBICACION ORIGEN
Ubicacion ubicacionOrigen = new Ubicacion();
//ubicacionOrigen.setIDUbicacion("OR000001");
ubicacionOrigen.setTipoUbicacion("Origen");
ubicacionOrigen.setRFCRemitenteDestinatario("EKU9003173C9");
String FORMATER_FechaHoraSalidaLlegada = "yyyy-MM-dd'T'HH:mm:ss";
Date date_FechaHoraSalidaLlegada = new Date();
XMLGregorianCalendar FechaHoraSalidaLlegada = Utilerias.getFechaXMLGregorian(date_FechaHoraSalidaLlegada, FORMATER_FechaHoraSalidaLlegada);
ubicacionOrigen.setFechaHoraSalidaLlegada(FechaHoraSalidaLlegada);
ubicacionOrigen.setTipoEstacion("01");
ubicacionOrigen.setNumEstacion("EA1810");
ubicacionOrigen.setNombreEstacion("La Palma");
Domicilio domicilioUbicacionOrigen = new Domicilio();
String SpaisDomicilioUbicacionOrigen="MEX";
CPais paisDomicilioUbicacionOrigen = Utilerias.getPaisComprobante(SpaisDomicilioUbicacionOrigen);
domicilioUbicacionOrigen.setPais(paisDomicilioUbicacionOrigen);
domicilioUbicacionOrigen.setNumeroExterior("004");
domicilioUbicacionOrigen.setLocalidad("23");
domicilioUbicacionOrigen.setEstado("COA");
domicilioUbicacionOrigen.setColonia("0347");
domicilioUbicacionOrigen.setCodigoPostal("25350");
domicilioUbicacionOrigen.setCalle("Cancun Chetumal");
ubicacionOrigen.setDomicilio(domicilioUbicacionOrigen);
//UBICACION 2 , PUEDE SER LA UBICACION DESTINO
Ubicacion ubicacionDestino = new Ubicacion();
//ubicacionDestino.setIDUbicacion("OR000001");
ubicacionDestino.setTipoUbicacion("Destino");
ubicacionDestino.setRFCRemitenteDestinatario("EKU9003173C9");
//ubicacionDestino.setDistanciaRecorrida(new BigDecimal(1).setScale(2, RoundingMode.HALF_UP));
String FORMATER_FechaHoraSalidaLlegadaUbicacionDestino = "yyyy-MM-dd'T'HH:mm:ss";
Date date_FechaHoraSalidaLlegadaUbicacionDestino = new Date();
XMLGregorianCalendar FechaHoraSalidaLlegadaUbicacionDestino = Utilerias.getFechaXMLGregorian(date_FechaHoraSalidaLlegadaUbicacionDestino, FORMATER_FechaHoraSalidaLlegadaUbicacionDestino);
ubicacionDestino.setFechaHoraSalidaLlegada(FechaHoraSalidaLlegadaUbicacionDestino);
ubicacionDestino.setTipoEstacion("02");
ubicacionDestino.setNumEstacion("EA1814");
ubicacionDestino.setNombreEstacion("Pista Morelos");
Domicilio domicilioUbicacionDestino = new Domicilio();
String SpaisDomicilioUbicacionDestino="MEX";
CPais paisDomicilioUbicacionDestino = Utilerias.getPaisComprobante(SpaisDomicilioUbicacionDestino);
domicilioUbicacionDestino.setPais(paisDomicilioUbicacionDestino);
domicilioUbicacionDestino.setNumeroExterior("004");
domicilioUbicacionDestino.setLocalidad("23");
domicilioUbicacionDestino.setEstado("COA");
domicilioUbicacionDestino.setColonia("0347");
domicilioUbicacionDestino.setCodigoPostal("25350");
domicilioUbicacionDestino.setCalle("Cancun Chetumal");
ubicacionDestino.setDomicilio(domicilioUbicacionDestino);
//AGREGAR UBICACION AL NODO UBICACIONES
ubicaciones.getUbicacion().add(ubicacionOrigen);
ubicaciones.getUbicacion().add(ubicacionDestino);
//MERCANCIAS
Mercancias mercancias = new Mercancias();
mercancias.setPesoBrutoTotal(new BigDecimal(1.0).setScale(2, RoundingMode.HALF_UP));
mercancias.setUnidadPeso("XBX");
mercancias.setNumTotalMercancias(1);
//mercancia 1
Mercancia mercancia1 = new Mercancia();
mercancia1.setBienesTransp("11121900");
mercancia1.setDescripcion("productos de perfumeria");
mercancia1.setCantidad(new BigDecimal(1.0).setScale(2, RoundingMode.HALF_UP));
mercancia1.setClaveUnidad("XBX");
mercancia1.setPesoEnKg(new BigDecimal(1.0).setScale(2, RoundingMode.HALF_UP));
mercancia1.setMaterialPeligroso("No");
mercancia1.setValorMercancia(new BigDecimal(50000.00).setScale(2, RoundingMode.HALF_UP));
String monedaM1="MXN";
mercancia1.setMoneda(Utilerias.getMonedaComprobante(monedaM1));
mercancia1.setDimensiones("30/40/30plg");
TransporteAereo transporteAereo = new TransporteAereo();
transporteAereo.setRFCEmbarcador("WATM640917J45");
CTipoPermiso tipoPermiso_=CTipoPermiso.fromValue("TPTA01");
transporteAereo.setPermSCT(tipoPermiso_);
transporteAereo.setNumPolizaSeguro("154647");
transporteAereo.setNumPermisoSCT("0X2XTXZ0X5X0X3X2X1X0");
transporteAereo.setNumeroGuia("803117555500");
transporteAereo.setNombreEmbarcador("FULANITO");
transporteAereo.setNombreAseg("SEGUROS SA DE CV");
transporteAereo.setMatriculaAeronave("AB1-MEX");
transporteAereo.setLugarContrato("MEX");
transporteAereo.setCodigoTransportista(CCodigoTransporteAereo.fromValue("CA149"));
//agregar la mercancia al nodo de mercancias
mercancias.getMercancia().add(mercancia1);
//agregar el metodo de trasporte al nodo mercancias
mercancias.setTransporteAereo(transporteAereo);
//Figura transporte
FiguraTransporte figuratrasporte = new FiguraTransporte();
TiposFigura tiposFigura = new TiposFigura();
tiposFigura.setTipoFigura("01");
tiposFigura.setRFCFigura("WERX631016S30");
tiposFigura.setNumLicencia("a234567890");
tiposFigura.setNombreFigura("XAIME WEIR ROJO");
figuratrasporte.getTiposFigura().add(tiposFigura);
cartaPorte.setMercancias(mercancias);
cartaPorte.setFiguraTransporte(figuratrasporte);
cartaPorte.setUbicaciones(ubicaciones);
Comprobante.Complemento complemento = new Comprobante.Complemento();
complemento.getAny().add(cartaPorte);
//comprobante.setComplemento(complemento); //AGREGAR COMPLEMENTO FORMA ANTERIOR
//comprobante.getComplemento().add(complemento); //AGREGAR COMPLEMENTO NUEVA FORMA
comprobante.setComplemento(complemento);
/*GENERAR XML*/
CrearXmlCFDi40 xml = new CrearXmlCFDi40(comprobante, configXML);
RespuestaGenerarXML res = xml.generarXMLCFDi40();
System.out.println("Ruta xml generado: "+res.getRutaArchivoXML());
System.out.println("Archivo XML en string: "+res.getArchivoXMLtexto());
System.out.println("Archivo XML en Base64: "+res.getArchivoXMLBase64());
}
}
Buscas una forma de implementar la factura electronica de manera facil
solo llenando una plantilla de texto con los datos de la factura
o llenando un arreglo de datos con los datos de la factura
tenemos una libreria para generar el xml cfdi de una factura electronica
visita nuestra pagina web
https://factura.cfdi.red/
No hay comentarios:
Publicar un comentario