Exemple #1
0
        public void ConsultaSaldo()
        {
            //El objeto currentUser contiene la informacion del usuario extraida de la base de datos
            //Se muestra el saldo disponible, almacenado en el atributo saldoActual
            Console.WriteLine("Solicitud de Saldo");
            Console.WriteLine("Su saldo actual es de " + saldo);
            Console.WriteLine("\nPresione una tecla para volver al Menu Principal");
            Console.ReadKey(true);
            using (var db = new Banco())
            {
                //Crea un detalle nuevo
                Detalle detalle = new Detalle();
                detalle.fecha    = DateTime.Now;
                detalle.concepto = db.TipoConcepto.Single(s => s.id == 2).nombre;
                detalle.tipo     = db.TipoConcepto.Single(s => s.id == 2);
                //Crea una transaccion nueva
                Transaccion transaccion = new Transaccion();
                transaccion._usuario = db.Usuario.Single(s => s.nCuenta == nCuenta);
                transaccion._detalle = detalle;

                //Actualizar las tablas
                db.Transaccion.Add(transaccion);
                db.Detalle.Add(detalle);
                db.SaveChanges();
            }
        }
Exemple #2
0
        public int Retiro(int moneyAmount)
        {
            while (true)
            {
                ConsoleKeyInfo opcionRetiro;
                int            montoRetiro = 0;
                Console.Clear();
                //Muestra las opciones posibles de retiro
                Console.WriteLine("Retiro");
                Console.WriteLine("Presione el número correspondiente al monto que desea retirar \n[1] $20 \n[2] $40 \n[3] $60 \n[4] $100 \n[5] $200 \n[6] Personalizado\n[0] Cancelar Operación");
                opcionRetiro = Console.ReadKey(true);
                Console.Clear();
                //Dependiendo de la opcion elegida se asigna un valor a montoRetiro o se cancela la operación
                switch (opcionRetiro.KeyChar)
                {
                case '0':
                    Console.WriteLine("Operación Cancelada");
                    System.Threading.Thread.Sleep(750);
                    return(0);

                case '1':
                    montoRetiro = 20;
                    break;

                case '2':
                    montoRetiro = 40;
                    break;

                case '3':
                    montoRetiro = 60;
                    break;

                case '4':
                    montoRetiro = 100;
                    break;

                case '5':
                    montoRetiro = 200;
                    break;

                case '6':
                    Console.Clear();
                    Console.WriteLine("Digite el monto a retirar:");
                    montoRetiro = Convert.ToInt32(Console.ReadLine());
                    break;

                default:
                    Console.WriteLine("Seleccione una opcion válida");
                    System.Threading.Thread.Sleep(750);
                    continue;
                }
                //Se prueba si el monto a retirar es mayor al saldo del usuario y arroja un error
                if (saldo < montoRetiro)
                {
                    Console.WriteLine("Fondos Insuficientes, seleccione un monto menor");
                    System.Threading.Thread.Sleep(1000);
                    continue;
                }
                //Comprueba si el cajero tiene suficiente dinero físico para el retiro
                else if (montoRetiro > moneyAmount)
                {
                    Console.WriteLine("El cajero no tiene suficiente efectivo, seleccione un monto menor");
                    System.Threading.Thread.Sleep(1000);
                    continue;
                }
                //Si todo es correcto, el montoARetirar se resta al saldo del usuario y se entrega el dinero
                else
                {
                    saldo       -= montoRetiro;
                    moneyAmount -= montoRetiro;
                    Console.WriteLine("Tome su dinero ↓");
                    System.Threading.Thread.Sleep(4000);

                    using (var db = new Banco())
                    {
                        //Update el usuario
                        var usuario = db.Usuario.Single(s => s.nCuenta == nCuenta);
                        usuario.saldo -= montoRetiro;
                        //Crea un detalle nuevo
                        Detalle detalle = new Detalle();
                        detalle.fecha    = DateTime.Now;
                        detalle.concepto = db.TipoConcepto.Single(s => s.id == 1).nombre;
                        detalle.tipo     = db.TipoConcepto.Single(s => s.id == 1);
                        detalle.monto    = montoRetiro;
                        //Crea una transaccion nueva
                        Transaccion transaccion = new Transaccion();
                        transaccion._usuario = usuario;
                        transaccion._detalle = detalle;
                        //Actualizar las tablas
                        db.Transaccion.Add(transaccion);
                        db.Detalle.Add(detalle);
                        db.SaveChanges();
                    }
                    return(moneyAmount);
                }
            }
        }
Exemple #3
0
        public int Deposito()
        {
            bool   valid = false;
            string concepto = null;
            int    cuentaD = 0, moneyAmount = 0;

            int montoDeposito;
            //Se crea un nuevo timer con periodo de 2 minutos
            Timer tiempoDeposito = new Timer(120000);

            //Se desactiva el autoreinicio del timer cuando termine
            tiempoDeposito.AutoReset = false;
            //Se asigna la funcion OnTimedEvent para manejar el evento del timer llegando a 0
            tiempoDeposito.Elapsed += OnTimedEvent;
            //Se ejecuta cuando el timer llega a cero
            void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
            {
                //Se muestra en pantalla un mensaje de error por 1.5 segundos y vuelve al menú principal
                Console.WriteLine("Transacción cancelada por timeout");
                System.Threading.Thread.Sleep(1500);
                //Apagamos el timer
                tiempoDeposito.Enabled = false;
                return;
            }

            ConsoleKeyInfo opcionMenu;

            Console.WriteLine("Depósito");
            Console.WriteLine("[1] Deposito a cuenta propia\n[2] Deposito a otra cuenta\n[3] Cancelar");
            opcionMenu = Console.ReadKey(true);
            bool isTransaccion = false;

            switch (opcionMenu.KeyChar)
            {
            case '1':
                cuentaD = nCuenta;
                break;

            case '2':
                using (var db = new Banco())
                {
                    while (!valid)
                    {
                        Console.WriteLine("Digite el numero de cuenta del destinatario");
                        cuentaD = Convert.ToInt32(Console.ReadLine());
                        try
                        {
                            var usuario = db.Usuario.Include(i => i.tipo).Single(s => s.nCuenta == cuentaD);
                            if (usuario.tipo.nombre != "gerente")
                            {
                                valid = true;
                            }
                        }
                        catch (InvalidOperationException)
                        {
                            continue;
                        }
                    }
                }
                isTransaccion = true;
                break;

            case '3':
                return(0);
            }
            //Se pide el monto de depósito en centavos y se almacena en montoDeposito
            do
            {
                Console.Write("Digite el monto de depósito en centavos: ");
                montoDeposito = Convert.ToInt32(Console.ReadLine());
            } while (montoDeposito < 1);
            Console.WriteLine("Digite un concepto de pago (Opcional)");
            concepto = Console.ReadLine();
            if (!isTransaccion)
            {
                Console.WriteLine("Inserte su dinero");
            }
            else
            {
                Console.WriteLine("Presione una tecla para continuar");
            }
            //Una vez ingresada la cantidad se inicia el timer
            //Si el timer llega a 0, se ejecuta la función OnTimedEvent
            tiempoDeposito.Enabled = true;
            //La condicion dentro del while nos permite saber si el timer sigue corriendo
            //Si sigue corriendo nos permite presionar una tecla (Ingresar el dinero)
            //Si el timer ya llego a cero su propiedad Enabled sera false

            //Revisa si una tecla es presionada
            while (tiempoDeposito.Enabled)
            {
                if (Console.KeyAvailable == true)
                {
                    //Si la tecla es presionada, la lee y  detiene el timer
                    Console.ReadKey(true);
                    tiempoDeposito.Enabled = false;
                    using (var db = new Banco())
                    {
                        //Update el usuario
                        var usuario      = db.Usuario.Single(s => s.nCuenta == nCuenta);
                        var destinatario = db.Usuario.Single(s => s.nCuenta == cuentaD);
                        //Modifica la propiedad saldo y le suma la cantidad depositada convertida a pesos
                        destinatario.saldo += (montoDeposito / 100);
                        if (isTransaccion)
                        {
                            if (usuario.saldo >= montoDeposito / 100)
                            {
                                usuario.saldo -= montoDeposito / 100;
                            }
                            else
                            {
                                Console.WriteLine("No cuenta con el saldo suficente");
                                Console.ReadLine();
                                return(moneyAmount);
                            }
                        }
                        else
                        {
                            moneyAmount += montoDeposito / 100;
                        }
                        //Crea un detalle nuevo
                        Detalle detalle = new Detalle();
                        detalle.fecha         = DateTime.Now;
                        detalle.tipo          = db.TipoConcepto.Single(s => s.id == 3);
                        detalle.monto         = (montoDeposito / 100);
                        detalle.concepto      = concepto != "" ? concepto : db.TipoConcepto.Single(s => s.id == 3).nombre;
                        detalle._destinatario = destinatario;
                        //Crea una transaccion nueva
                        Transaccion transaccion = new Transaccion();
                        transaccion._usuario = usuario;
                        transaccion._detalle = detalle;
                        //Actualizar las tablas
                        db.Transaccion.Add(transaccion);
                        db.Detalle.Add(detalle);
                        db.SaveChanges();
                        //Muestra un mensaje por un segundo y regresa al menú principal
                        Console.WriteLine("Depósito realizado con éxito");
                        System.Threading.Thread.Sleep(1000);
                    }
                }
            }
            return(moneyAmount);
        }
        static void Main(string[] args)
        {
            using (var db = new Banco2Context())
            {
                List <Usuario> users = (from u in db.Usuario select u).ToList();

                Usuario me = new Usuario();//instancia de el usuario que va a iniciar sesion

                string newCuenta;
                string newNip;
                bool   repeat = true;
                int    caso;
                int    dinero = 500 * 20;//dinero con el que inicia el cajero cada que se enciende

                do
                {
                    Console.Clear();

                    Console.WriteLine("Bienvenido al Banco Perron \n");
                    System.Threading.Thread.Sleep(1200);

                    Console.WriteLine("Ingrese su numero de cuenta: ");

                    newCuenta = Console.ReadLine();

                    Console.WriteLine("Ingrese su nip: ");
                    newNip = Console.ReadLine();

                    string resultado = General.validateLogin(newCuenta, newNip, users, me);//retorna el tipo de usuario que logeo
                    //funcion que valida el login, si es valido inicia sesion y construy el objeto de la sesion actual

                    if (resultado == "cliente")                  //usuario tipo cliente
                    {
                        Usuario bdUser = db.Usuario.Find(me.id); //objecto que representa la tabla

                        bool menuClient = true;
                        do
                        {
                            Console.Clear();
                            Console.WriteLine("Hola, " + me.pNombre + "\n");

                            caso = General.mainMenu(me.tipoUsuario);//muestra el menu y retorna un int con la opcion escogida

                            switch (caso)
                            {
                            case 1:
                            {
                                Console.WriteLine("Su balance es de $" + me.saldo);
                                //Obtener el balance de la cuenta
                                Detalle.saveDetalle(null, "consulta", me.id, null);     //guardar en el historial

                                break;
                            }

                            case 2:
                            {
                                int retiro = General.retiroMenu();       //mostrar el menu de la cantidad a retirar
                                if (retiro == 6)
                                {
                                    break;        //si se selecciona 6 cierra el menu
                                }
                                else
                                {
                                    if (dinero > retiro && retiro < me.saldo)       //si hay suficiente dinero en el cajero
                                    {
                                        me.saldo     = me.saldo - retiro;
                                        bdUser.saldo = me.saldo;
                                        //se resta la cantidad que se retiro en la base de datos y en el objeto actual

                                        db.SaveChanges();
                                        Console.WriteLine("Tome su efectivo");

                                        Detalle.saveDetalle(null, "retiro", me.id, retiro);     //guardar en el histoorial

                                        break;
                                    }
                                    else         //si no hay suficiente dinero en el cajero
                                    {
                                        Console.WriteLine("No hay dinero");
                                    }
                                    break;
                                }
                            }

                            case 3:
                            {
                                long cuenta;
                                int  deposito;
                                bool valid = true;
                                bool money = false;

                                do
                                {
                                    Console.WriteLine("Ingresa la cantidad a depositar en centavos(0 si desea salir):");
                                    deposito = Convert.ToInt32(Console.ReadLine());
                                    deposito = deposito / 100;
                                    if (deposito > me.saldo)
                                    {
                                        money = false;
                                    }
                                    else
                                    {
                                        money = true;
                                    }
                                } while (!money);        //validar que la cuenta tiene el dinero suficiente para hacer el deposito

                                if (deposito == 0)
                                {
                                    break;
                                }

                                DateTime inicio = DateTime.Now;
                                TimeSpan maximo = new TimeSpan(00, 00, 02, 00);
                                DateTime final  = DateTime.Now;
                                TimeSpan total  = new TimeSpan(final.Ticks - inicio.Ticks);

                                if (TimeSpan.Compare(total, maximo) == 1)
                                {
                                    Console.Clear();
                                    Console.WriteLine("Transaccion finalizada por inactividad");
                                    Console.ReadKey();
                                    break;
                                }

                                do
                                {
                                    Console.WriteLine("Numero de cuenta a hacer deposito(0 si desea salir):");
                                    cuenta = Convert.ToInt64(Console.ReadLine());
                                    if (cuenta == 0)
                                    {
                                        break;
                                    }
                                    foreach (Usuario user in users)
                                    {
                                        if (user.id == cuenta && user.tipoUsuario == 1)
                                        {
                                            valid = false;
                                        }
                                    }
                                } while (valid);    //lee y valida que exista el numero de cuenta al que se va a depositar

                                if (cuenta == 0)
                                {
                                    break;
                                }

                                Usuario upUsuario = db.Usuario.Find(cuenta); //encuentra al usuari al que se  le va a depositar
                                upUsuario.saldo += deposito;                 //se le suma lo que se le deposito al usuario

                                bdUser.saldo -= deposito;
                                me.saldo     -= deposito;//se resta en la bd y al objeto de la sesion actual, el monto que se deposito

                                if (upUsuario.id == me.id)
                                {
                                    me.saldo = upUsuario.saldo;
                                }
                                //si me hago un deposito a mi mismo, no pasa nada

                                db.SaveChanges();
                                Detalle.saveDetalle(cuenta, "deposito", me.id, deposito);
                                //Guardar este depósito en el historial

                                menuClient = true;

                                break;
                            }

                            case 4:
                            {
                                DateTime nowDate = DateTime.Now;
                                General.getHistorial(me.id, nowDate.Month);        //Mostrar el historial de el mes actual
                                break;
                            }

                            case 5:
                            {
                                General.getHistorial(me.id, (General.mesesMenu()));
                                //Abrir menu para mostrar los meses de los cuales se quiere conocer el historial
                                break;
                            }

                            default:
                            {
                                Console.WriteLine("Saliendo... Gracias");
                                menuClient = false;
                                break;
                            }
                            }

                            if (menuClient)
                            {
                                Console.ReadLine();
                            }
                        } while (menuClient);
                    }

                    else if (resultado == "gerente")
                    {
                        bool menuClient = true;
                        do
                        {
                            Console.Clear();
                            Console.WriteLine("Hola, " + me.pNombre);

                            caso = General.mainMenu(me.tipoUsuario);//muestra el menu para el usuario gerente

                            switch (caso)
                            {
                            case 1:
                            {
                                Console.WriteLine("Cantidad de retiros");
                                General.revisarMes(0, 1);        //funcion que realiza el proceso solicitado en su segundo parametro
                                break;
                            }

                            case 2:
                            {
                                Console.WriteLine("Cantidad de depositos");
                                General.revisarMes(0, 2);        //funcion que realiza el proceso solicitado en su segundo parametro
                                break;
                            }

                            case 3:
                            {
                                Console.WriteLine("Monto total de retiros: ");
                                General.revisarMes(0, 3);        //funcion que realiza el proceso solicitado en su segundo parametro
                                break;
                            }

                            case 4:
                            {
                                Console.WriteLine("Monto total de depositos: ");
                                General.revisarMes(0, 4);        //funcion que realiza el proceso solicitado en su segundo parametro
                                break;
                            }

                            case 5:
                            {
                                bool valid  = false;
                                long cuenta = 0;
                                do
                                {
                                    Console.WriteLine("¿Que cuenta deseas revisar?");
                                    cuenta = Convert.ToInt64(Console.ReadLine());

                                    foreach (Usuario user in users)
                                    {
                                        if (user.id == cuenta)
                                        {
                                            valid = true;
                                            break;
                                        }
                                    }
                                    if (!valid)
                                    {
                                        Console.WriteLine("Cuenta no encontrada");
                                    }
                                } while (!valid);        //encontrar la cuenta de usuario que se va a consultar

                                General.revisarMes(cuenta, 5);

                                break;
                            }

                            default:
                            {
                                Console.WriteLine("Saliendo... Gracias");
                                menuClient = false;
                                break;
                            }
                            }
                            if (menuClient)
                            {
                                Console.ReadLine();
                            }
                        } while (menuClient);
                    }

                    else
                    {
                        Console.WriteLine(resultado);
                    }//opcion si algo sale mal, el tipo de usuario no es ni cliente ni gerente

                    Console.ReadLine();
                } while (repeat == true);
            }
        }