#46518
jose.geneos
Participante

Ampliado el seguimiento del código para el (NO) cálculo de retenciones cuando esta configurado por rango.

RetencionGanancias.java
Linea 77

// Se obtiene el valor del parámetro Porcentaje a Retener (T)
setPorcentajeRetencion(getParamValueBigDecimal(
MRetSchemaConfig.NAME_PorcentajeARetener, Env.ZERO));

AbstractRetencionProcessor.java
Linea 247

protected BigDecimal getParamValueBigDecimal(String paramName,
BigDecimal defaultValue) {
return getParamBigDecimal(paramName, defaultValue, null);
}

AbstractRetencionProcessor.java
Linea 257

Base Imponible lega con null !!

protected BigDecimal getParamBigDecimal(String paramName, BigDecimal defaultValue, BigDecimal baseImponible){
Object value = getParamValue(paramName, defaultValue, baseImponible);
BigDecimal valueDecimal = null;
if(value != null){
if(value instanceof BigDecimal){
valueDecimal = (BigDecimal)value;
}
else{
valueDecimal = new BigDecimal(((String)value).replaceAll(“,”, “.”));
}
}
return valueDecimal;
}

AbstractRetencionProcessor.java
Linea 272

Base Imponible lega con null !!!

protected Object getParamValue(String paramName, Object defaultValue, BigDecimal baseImponible){
Object value = null;
// Obtiene el MRetSchemaConfig con el nombre de parámetro pasado.
MRetSchemaConfig param = getRetencionSchema().getParameter(paramName);
// Si hay configuración…
if (param != null) {
// Si es rango busco el rango que incluye al monto, sino obtengo el
// valor del parámetro
if(param.is_Range()){
value = MRetSchemaConfig.getRangeApplyValue(param.getID(),
baseImponible, getTrxName());
}
else{
value = param.getValor();
}
}
// Se retorna el valor o el defaultValue en caso de que el value sea
// null.
return (value == null ? defaultValue : value);
}

MRetSchemaConfig.java
Linea 45

/**
* Valor que se debe aplicar del rango de la configuración parámetro a
* partir del monto parámetro. La consulta se ordena con el monto inicial
* ascendente, o sea, si se definen rangos donde el valor final coincide con
* el valor inicial de otro rango, se tomará el rango con valor inicial
* menor
*
* @param retSchemaConfigID
* id de configuración del esquema de retención
* @param amt
* monto de evaluación
* @param trxName
* transacción actual
* @return el valor a aplicar donde el parámetro amt esté incluído, null en
* caso que el parámetro de configuración sea null o 0, el monto de
* evaluación sea null o no se haya encontrado rango para ese monto
*/
public static Object getRangeApplyValue(Integer retSchemaConfigID, BigDecimal amt, String trxName){

// Geneos: el problema es que acá siempre llega con amt = null !!!

if (Util.isEmpty(retSchemaConfigID, true) || amt == null)
return null;
Object valueObj = DB
.getSQLObject(
trxName,
“SELECT value_apply FROM c_retschema_range WHERE c_retschema_config_id = ? AND ? BETWEEN value_from AND value_to ORDER BY value_from”,
new Object[] { retSchemaConfigID, amt });
return valueObj;
}