public void TransferirATerceros(ICuentaBancaria origen, ICuentaBancaria destino, Moneda cantidad) { if (destino is CuentaDeAhorroExterna == false) { throw new InvalidOperationException("Cuenta destino no es de otro banco"); } if (origen.Balance.Divisa != destino.Balance.Divisa) { throw new InvalidOperationException("Divisas diferentes"); } if (origen.Titular.Id != destino.Titular.Id) { throw new InvalidOperationException("Usuarios diferentes"); } var cuentaExterna = destino as CuentaDeAhorroExterna; var exito = _servicioExternoSPEI.EnviarSpei(cuentaExterna.Banco, cuentaExterna.CLABE, cantidad.Cantidad); if (exito) { origen.Balance.Restar(cantidad); //cobrar comision de 1% FuncionesComunes.RestarCantidad(origen, new Moneda(cantidad.Cantidad * (decimal)0.01, cantidad.Divisa)); } else { throw new ApplicationException("Error al enviar SPEI."); } }
public void PagarTarjeta(ICuentaBancaria cuentaOrigen, TarjetaDeCredito tarjeta, Moneda cantidad) { if (cuentaOrigen.Balance.Divisa != tarjeta.Balance.Divisa) { throw new InvalidOperationException("Divisas diferentes"); } if (cuentaOrigen.Titular.Id != tarjeta.Titular.Id) { throw new InvalidOperationException("Las cuentas de transferencia son de usuarios diferentes"); } //generar comision de 5% si se paga desde otra TDC if (!(cuentaOrigen is CuentaDeAhorro)) { FuncionesComunes.RestarCantidad(cuentaOrigen, new Moneda(cantidad.Cantidad * (decimal)0.05, cantidad.Divisa)); } //generar comision de 10% si se paga despues de fecha de corte var hoy = DateTime.Now; if (new DateTime(hoy.Year, hoy.Month, tarjeta.FechaDeCorte.Day) < DateTime.Now) { FuncionesComunes.RestarCantidad(cuentaOrigen, new Moneda(cantidad.Cantidad * 0.10m, cantidad.Divisa)); } cuentaOrigen.Balance.Restar(cantidad); tarjeta.Balance.Agregar(cantidad); }