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(); } }
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); } } }
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); } }