Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
143 changes: 71 additions & 72 deletions src/main/java/com/prismamp/todopago/calculator/CargoCalculator.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
package com.prismamp.todopago.calculator;

import java.util.Date;

import org.springframework.stereotype.Service;

import com.prismamp.todopago.exceptions.BusinessException;
import com.prismamp.todopago.model.Cargo;
import com.prismamp.todopago.model.CargoCuenta;
import com.prismamp.todopago.model.CargoTransaccion;
import com.prismamp.todopago.model.ReglaBonificacion;
import com.prismamp.todopago.model.Valor;
import com.prismamp.todopago.model.PromocionResponse;

@Service
public class CargoCalculator {
Expand All @@ -22,93 +19,67 @@ public Boolean isCostoFinanciero(Cargo cargo) {
}
}

public CargoTransaccion calculateRelacionVigente(CargoCuenta cargoCuenta, Cargo cargo,
CargoTransaccion cargoTransaccion) {

if (null != cargoCuenta && null != cargo) {
cargoTransaccion = checkCargoTransaccion(cargoTransaccion);
if (isRelacionVigente(cargoCuenta)) {
cargoTransaccion.setValorAplicado(cargoCuenta.getValor());
cargoTransaccion.setIdTipoAplicacion(cargoCuenta.getIdTipoAplicacion());
} else {
Valor valor = cargo.getValor();

if (null != valor) {
cargoTransaccion.setValorAplicado(valor.getValor());
cargoTransaccion.setIdTipoAplicacion(valor.getTipo().getId());
} else {
throw new BusinessException("No se puede calcular el Valor a partir del Cargo.");
}
}

return cargoTransaccion;
} else {
throw new BusinessException("No se puede calcular si el CargoCuenta tiene relación vigente.");
}
}

public CargoTransaccion calculateMonto(CargoTransaccion cargoTransaccion, Cargo cargo, Double importe) {
if (null != cargo && null != cargo.getValor()) {

cargoTransaccion = checkCargoTransaccion(cargoTransaccion);

if ("AP_PORCENTAJE".equalsIgnoreCase(cargo.getValor().getTipo().getCodigo())) {
cargoTransaccion.setMontoCalculado(importe * (cargo.getValor().getValor() / 100));
} else if ("AP_FIJO".equalsIgnoreCase(cargo.getValor().getTipo().getCodigo())) {
cargoTransaccion.setMontoCalculado(cargo.getValor().getValor());
} else {
throw new BusinessException("No se puede calcular el monto, el código de aplicación no es válido.");
}
if (null == cargo || null == cargo.getValor()) {
throw new BusinessException("No se puede calcular el monto ya que el cargo no es válido.");
} else if (null == importe) {
throw new BusinessException("No se puede calcular el monto ya que el cargo no es válido.");
}
cargoTransaccion = checkCargoTransaccion(cargoTransaccion);

if ("AP_PORCENTAJE".equalsIgnoreCase(cargoTransaccion.getCodigoAplicacion())) {
cargoTransaccion.setMontoCalculado(importe * (cargo.getValor().getValor() / 100));
} else if ("AP_FIJO".equalsIgnoreCase(cargoTransaccion.getCodigoAplicacion())) {
cargoTransaccion.setMontoCalculado(cargo.getValor().getValor());
} else {
throw new BusinessException("No se puede calcular el monto ya que el código de aplicación no es válido.");
cargoTransaccion.setMontoCalculado(0d);
}
return cargoTransaccion;
}

public CargoTransaccion calculateCostoFinanciero(CargoTransaccion cargoTransaccion, Double importe, Double tasa,
Double bonificacion, Double monto) {

if (importe < 0 || tasa < 0 || bonificacion < 0) {
throw new BusinessException("No se puede calcular el costo financiero con valores negativos.");
}
if (null == monto) {
monto = 0d;
public CargoTransaccion calculateMonto(CargoTransaccion cargoTransaccion, Double importe, PromocionResponse promocion) {
if (null == promocion || null == promocion.getTasaDirecta()) {
throw new BusinessException("No se puede calcular el monto sin tasa directa.");
} else if (null == promocion.getBonificacionCFVendedor()) {
promocion.setBonificacionCFVendedor(0d);
}
cargoTransaccion = checkCargoTransaccion(cargoTransaccion);
importe = checkDouble(importe);

Double montoCalculado = importe * tasa * ((100 - bonificacion) / 100);
cargoTransaccion.setMontoCalculado(montoCalculado + monto);
Double monto = importe * (promocion.getTasaDirecta() / 100) * ((100 - promocion.getBonificacionCFVendedor()) / 100);
cargoTransaccion.setMontoCalculado(monto);

return cargoTransaccion;
}

public CargoTransaccion calculateCostoFinanciero(CargoTransaccion cargoTransaccion, Double importe, Double tasa, Double monto) {
if (importe < 0 || tasa < 0) {
throw new BusinessException("No se puede calcular el costo financiero con valores negativos.");
}
if (null == monto) {
monto = 0d;
}
public CargoTransaccion calculateMontoTasaDirecta(CargoTransaccion cargoTransaccion, Double importe, Double tasaDirecta) {
cargoTransaccion = checkCargoTransaccion(cargoTransaccion);
importe = checkDouble(importe);
tasaDirecta = checkDouble(tasaDirecta);

Double montoCalculado = importe * (tasa / 100);
cargoTransaccion.setMontoCalculado(montoCalculado + monto);
Double montoCalculado = importe * (tasaDirecta / 100);
cargoTransaccion.setMontoCalculado(montoCalculado);

return cargoTransaccion;
}

public CargoTransaccion calculateValorAplicado(CargoTransaccion cargoTransaccion, ReglaBonificacion regla) {
if (null == regla) {
throw new BusinessException("No se puede calcular el valor aplicado para una Regla de Bonificación nula.");
public PromocionResponse setCodigoTipoPromocion(PromocionResponse promocion) {
if (null != promocion && null == promocion.getIdPromocion()) {
promocion.setCodigo("PROMO_CTAS");
}
return promocion;
}

public CargoTransaccion calculateValorAplicado(CargoTransaccion cargoTransaccion, PromocionResponse promocion) {
if (null == promocion) {
throw new BusinessException("No se puede calcular el valor aplicado para una promoción nula.");
}
cargoTransaccion = checkCargoTransaccion(cargoTransaccion);

if (null == regla.getBonificacionCFVendedor()) {
if (null == promocion.getBonificacionCFVendedor()) {
cargoTransaccion.setValorAplicado(0d);
} else {
// TODO Tiene sentido validar el rango de valores para "BonificacionCFVendedor"?
Double bonificacion = regla.getBonificacionCFVendedor();
Double bonificacion = promocion.getBonificacionCFVendedor();
if (bonificacion < 0 || bonificacion > 100) {
throw new BusinessException("No se puede calcular el valor aplicado para una bonificacion menor que cero o mayor que 100.");
}
Expand All @@ -117,18 +88,46 @@ public CargoTransaccion calculateValorAplicado(CargoTransaccion cargoTransaccion
return cargoTransaccion;
}

public CargoTransaccion mapCargo(Cargo cargo, String idTransaccion) {
if (null == cargo) {
throw new BusinessException("No se puede mapear un cargo nulo.");
}
CargoTransaccion result = new CargoTransaccion();
result.setIdCargo(cargo.getId());
result.setValorAplicado(cargo.getValor().getValor());
result.setIdTipoAplicacion(cargo.getValor().getIdTipoAplicacion());
if (null != cargo.getTipoAplicacion()) {
result.setCodigoAplicacion(cargo.getTipoAplicacion().getCodigo());
}
result.setCodigoTipoCargo(cargo.getTipoCargo().getCodigo());
result.setIdTransaccion(idTransaccion);

return result;
}

public CargoTransaccion mapCargoCuenta(CargoCuenta cargoCuenta, CargoTransaccion cargoTransaccion) {
if (null == cargoCuenta) {
return cargoTransaccion;
} else {
cargoTransaccion.setValorAplicado(cargoCuenta.getValor());
cargoTransaccion.setIdTipoAplicacion(cargoCuenta.getIdTipoAplicacion());
cargoTransaccion.setCodigoAplicacion(cargoCuenta.getCodigo());

return cargoTransaccion;
}
}

private CargoTransaccion checkCargoTransaccion(CargoTransaccion cargoTransaccion) {
if (null == cargoTransaccion) {
cargoTransaccion = new CargoTransaccion();
}
return cargoTransaccion;
}

private boolean isRelacionVigente(CargoCuenta cargoCuenta) {
Date inicioVigencia = cargoCuenta.getInicioVigencia();
Date finVigencia = cargoCuenta.getFinVigencia();
Date now = new Date();

return null != inicioVigencia && null != finVigencia && inicioVigencia.before(now) && finVigencia.after(now);
private Double checkDouble(Double value) {
if (null == value) {
value = 0d;
}
return value;
}
}

This file was deleted.

54 changes: 0 additions & 54 deletions src/main/java/com/prismamp/todopago/model/CanalAdhesion.java

This file was deleted.

41 changes: 31 additions & 10 deletions src/main/java/com/prismamp/todopago/model/Cargo.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,19 @@ public class Cargo {

private TipoCargo tipoCargo;

private TipoMedioPago tipoMedioPago;
private MedioPago medioPago;

private Long idCuenta;

private Long idTipoCuenta;

private Long idBaseCalculo;

private CanalAdhesion canalAdhesion;
private Long idCanal;

private Valor valor;

private Tipo tipoAplicacion;

public Long getId() {
return id;
Expand All @@ -32,12 +36,20 @@ public void setTipoCargo(TipoCargo tipoCargo) {
this.tipoCargo = tipoCargo;
}

public TipoMedioPago getTipoMedioPago() {
return tipoMedioPago;
public MedioPago getMedioPago() {
return medioPago;
}

public void setMedioPago(MedioPago medioPago) {
this.medioPago = medioPago;
}

public Long getIdCuenta() {
return idCuenta;
}

public void setTipoMedioPago(TipoMedioPago tipoMedioPago) {
this.tipoMedioPago = tipoMedioPago;
public void setIdCuenta(Long idCuenta) {
this.idCuenta = idCuenta;
}

public Long getIdTipoCuenta() {
Expand All @@ -56,12 +68,12 @@ public void setIdBaseCalculo(Long idBaseCalculo) {
this.idBaseCalculo = idBaseCalculo;
}

public CanalAdhesion getCanalAdhesion() {
return canalAdhesion;
public Long getIdCanal() {
return idCanal;
}

public void setCanalAdhesion(CanalAdhesion canalAdhesion) {
this.canalAdhesion = canalAdhesion;
public void setIdCanal(Long idCanal) {
this.idCanal = idCanal;
}

public Valor getValor() {
Expand All @@ -71,4 +83,13 @@ public Valor getValor() {
public void setValor(Valor valor) {
this.valor = valor;
}

public Tipo getTipoAplicacion() {
return tipoAplicacion;
}

public void setTipoAplicacion(Tipo tipoAplicacion) {
this.tipoAplicacion = tipoAplicacion;
}

}
Loading