All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mx.emite.sdk.enums.sat.FormasPago Maven / Gradle / Ivy

Go to download

Este kit de consumo provee a los integradores de Apis de Java para construir software que consuma los diferentes servicios web publicados por Emite Facturacion

The newest version!
package mx.emite.sdk.enums.sat;

import org.apache.commons.lang3.StringUtils;
import org.beanio.types.TypeConversionException;

import lombok.Getter;
import mx.emite.sdk.errores.ApiException;
import mx.emite.sdk.errores.I_Api_Errores;
import mx.emite.sdk.utils.Utilerias;

@Getter
public enum FormasPago implements Sat{
	
	EFECTIVO(1,"Efectivo"),
	CHEQUE(2,"Cheque"),
	TRANSFERENCIA(3,"Transferencia"),
	TARJETASDECREDITO(4,"Tarjetas de crédito"),
	MONEDEROSELECTRONICOS(5,"Monederos electrónicos"),
	DINEROELECTRONICO(6,"Dinero electrónico"),
	
	VALESDEDESPENSA(8,"Vales de despensa"),
	TARJETADEDEBITO(28,"Tarjeta de Débito"),
	TARJETADESERVICIO(29,"Tarjeta de Servicio"),
	
	OTROS(99,"Otro",new String[]{"No Identificado"});
	
	//TARJETASDIGITALES(7,"Tarjetas digitales"),
	//BIENES(9,"Bienes"),
		//SERVICIO(10,"Servicio"),
		//PORCUENTADETERCERO(11,"Por cuenta de tercero"),
		//DACIONENPAGO(12,"Dación en pago"),
		//PAGOPORSUBROGACION(13,"Pago por subrogación"),
		//PAGOPORCONSIGNACION(14,"Pago por consignación"),
		//CONDONACION(15,"Condonación"),
		//CANCELACION(16,"Cancelación"),
		//COMPENSACION(17,"Compensación"),
		//NOAPLICA(98,"NA"),
	
	final Integer idSat;
	final String descripcion;
	final String[] sinonimos;
	
	FormasPago(Integer idSat,String descripcion){
		this(idSat,descripcion,null);
	}
	
	FormasPago(Integer idSat,String descripcion,String[] sinonimos){
		this.idSat=idSat;
		this.descripcion=descripcion;
		this.sinonimos=sinonimos;
	}

	/**
	 * Busca una formapago de acuerdo a su descripción
	 * @param descripcion de acuerdo al catalogo del SAT
	 * @return FormasPago valor del enum de acuerdo a la forma de pago
	 */
	public static FormasPago busca(String descripcion) {
		if(StringUtils.isEmpty(descripcion))
			return null;
		for(FormasPago m:values()){
			final Integer clavedesc = sacaInt(descripcion);
			if(clavedesc!=null){
				if(m.idSat.equals(clavedesc)){
					return m;
				}
			}
			if(Utilerias.compara(m.descripcion,descripcion))
				return m;
			
			else if(m.sinonimos!=null){
				for(String s:m.sinonimos){
					if(Utilerias.compara(s,descripcion))
						return m;
				}
			}
		}
		return null;
	}
	
	public static FormasPago buscaSinNulo(String descripcion) {
		final FormasPago fd = busca(descripcion);
		if(fd==null)
			return FormasPago.OTROS;
		else
			return fd;
	}
	
	private static Integer sacaInt(String descripcion) {
		try{
			return Integer.parseInt(descripcion);
		}
		catch(Exception ex){
			return null;
		}
	}

	
	
	/**
	 * Busca una formapago de acuerdo a su id del SAT
	 * @param idSat de acuerdo al catalogo del SAT
	 * @return formapago valor del enum de acuerdo a la forma de pago
	 */
	public static FormasPago id(Integer idSat) {
		for(FormasPago m:values()){
			if(m.idSat.equals(idSat))
				return m;
		}
		return null;
	}
	
	public Integer getIdFormaPago(){
		return idSat;
	}

	public static FormasPago[] formaspago() {
		
		return values();
	}
	
	public static FormasPago unmarshall(String metodo) throws ApiException{
		if(StringUtils.isEmpty(metodo))
			return null;
		final FormasPago estado =  FormasPago.busca(metodo);		
		if(estado==null)
			throw new ApiException(I_Api_Errores.CLIENTE_XML_INVALIDO,"El método de pago "+metodo+" no se encuentra en el catálogo de métodos de pago del SAT");
		else
			return estado;
	}
	
	
	public static String marshall(FormasPago v) throws Exception {
		if(v==null)
			return null;
		return v.getIdSat().intValue()<10?"0"+Integer.toString(v.getIdSat()): Integer.toString(v.getIdSat());
	}
	
	public static Object parse(String text) throws TypeConversionException, ApiException {
		return unmarshall(text);
	}
	
	
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy