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);
        }
Beispiel #2
0
        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 RetirarDeCajero(ICuentaBancaria origen, int NIP, decimal cantidad)
        {
            decimal comision = 0;

            //el banco solo tiene cajeros en pesos
            if (origen.Balance.Divisa != Divisa.MXN)
            {
                throw new InvalidOperationException("Solo MXN permitidos.");
            }

            //validar NIP
            if (origen.NIP != NIP)
            {
                throw new InvalidOperationException("NIP incorrecto.");
            }

            //cuenta de otro banco, cobrar $30 de comision
            if (origen is CuentaDeAhorroExterna)
            {
                comision = 30;
            }

            //si es tarjeta de credito, cobrar 6% de comision
            if (origen is TarjetaDeCredito)
            {
                comision = cantidad * 0.06m;
            }

            var total = new Moneda(cantidad + comision, Divisa.MXN);

            origen.Balance = (Moneda)origen.Balance.Restar(total);
        }
        public void CambiarNIP(ICuentaBancaria cuenta, int nip, int verificarNip)
        {
            //cuenta de otro banco, operacion invalida
            if (cuenta is CuentaDeAhorroExterna)
            {
                throw new InvalidOperationException("No se puede cambiar NIP de otro banco");
            }

            //NIP debe ser de 4 digitos
            //Puede verse el error?
            if (nip < 999 || verificarNip < 999)
            {
                throw new InvalidOperationException("NIP debe ser de 4 digitos");
            }
            if (nip > 9999 || verificarNip > 999)
            {
                throw new InvalidOperationException("NIP debe ser de 4 digitos");
            }

            //verificar que ambos nips son iguales
            if (nip != verificarNip)
            {
                throw new InvalidOperationException("NIPs distintos.");
            }

            cuenta.NIP = nip;
        }
Beispiel #5
0
 public static void RestarCantidad(ICuentaBancaria destino, Moneda cantidad)
 {
     if (destino.Balance.Divisa != cantidad.Divisa)
     {
         throw new InvalidOperationException("Divisas diferentes");
     }
     destino.Balance.Restar(cantidad);
 }
        public void TransferirEntreCuentasPropias(ICuentaBancaria origen, ICuentaBancaria destino, Moneda cantidad)
        {
            if (origen.Balance.Divisa != destino.Balance.Divisa)
            {
                throw new InvalidOperationException("Divisas diferentes");
            }
            if (origen.Titular.Id != destino.Titular.Id)
            {
                throw new InvalidOperationException("Usuarios diferentes");
            }

            origen.Balance.Restar(cantidad);
            destino.Balance.Agregar(cantidad);
        }
Beispiel #7
0
        static void AgregarBalance(ICuentaBancaria cuentaBancaria, double balance)
        {
            cuentaBancaria.AgregarABalance(balance);

            Console.WriteLine($"{cuentaBancaria.Balance}");
        }
 public BlindajeDecorador(ICuentaBancaria cDecorada) : base(cDecorada)
 {
 }
Beispiel #9
0
 public CuentaDecorador(ICuentaBancaria cuentaDecorada)
 {
     _cuentaDecorada = cuentaDecorada;
 }
Beispiel #10
0
 static void AgregarBalance(ICuentaBancaria cuentaBancaria, double balance)
 {
     cuentaBancaria.AgregarABalance(balance);
     Console.WriteLine($"El valor de balance es: {cuentaBancaria.Balance}"); // Porque la propiedad Balance si es publica a diferencia de balance
 }
Beispiel #11
0
        static void AgregarBalance(ICuentaBancaria cuentaBancaria, double balance)
        {
            cuentaBancaria.agregarABalance(balance);

            Console.WriteLine("Balance cuenta: " + cuentaBancaria.Balance);
        }