package com.zinep.trans;
import com.zinep.Cliente;
import com.zinep.Cuenta;
import com.zinep.Monto;
import com.zinep.Sucursal;
import com.zinep.utils.Recurso;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author JÑahui
*/
public class DevolverDepositoAPlazo extends Transaccion {
private final Sucursal sucursal;
private final Monto interesesGenerados;
private final Monto cantAPlazoFijo;
private final Cuenta cuenta;
public DevolverDepositoAPlazo(Cliente cliente, Cuenta cuenta, Sucursal sucursal, Monto cantAPlazoFijo, List<Recurso> recursos) {
super(cliente, "Devolver Deposito a Plazo", 10, recursos);
this.sucursal = sucursal;
this.cantAPlazoFijo = cantAPlazoFijo;
this.interesesGenerados = new Monto(cantAPlazoFijo.getMonto() * 4 / 100, cantAPlazoFijo.getMoneda());
this.cuenta = cuenta;
}
public static DevolverDepositoAPlazo devolverDeposito(Cliente cliente, Cuenta cuenta, Sucursal sucursal, Monto cantAPlazoFijo) {
List<Recurso> recursos = new ArrayList<Recurso>();
recursos.add(cuenta);
return new DevolverDepositoAPlazo(cliente, cuenta, sucursal, cantAPlazoFijo, recursos);
}
@Override
public void ejecutar() {
long cantidadDisp = sucursal.getMontoDisp(cantAPlazoFijo.getMoneda()).getMonto() - cantAPlazoFijo.getMonto() - interesesGenerados.getMonto();
if (cantidadDisp >= 0) {
sucursal.restarMonto(cantAPlazoFijo);
sucursal.restarMonto(interesesGenerados);
cuenta.aumentarMonto(cantAPlazoFijo);
cuenta.aumentarMonto(interesesGenerados);
} else {
estado = Estado.CANCELADO;
}
}
}