private static void RecordTransaction( ATMEntities context, string cardNumber, decimal amount) { using (var tran = context.Database.BeginTransaction(System.Data.IsolationLevel.RepeatableRead)) { try { var transactionRecord = new TransactionHistory(); transactionRecord.CardNumber = cardNumber; transactionRecord.TransactionDate = DateTime.Now; transactionRecord.Amount = amount; context.TransactionHistories.Add(transactionRecord); context.SaveChanges(); tran.Commit(); //Console.WriteLine(accounts.First().CardCash -= amount); } catch (Exception e) { tran.Rollback(); throw (e); } } }
/* * inserta transaccion crea el historial, añade un registro en la tabla transacciones y uno en consulta, retiro o deposito * dependiendo del caso */ private void insertarTransaccion(Consulta consulta) { int tipo = 1; int n; using (ATMEntities db = new ATMEntities()) { Transaccion transaccion = new Transaccion(); transaccion.Fecha = DateTime.Today; // obtiene la fecha actual transaccion.Hora = DateTime.Now.TimeOfDay; // hora de la transaccion transaccion.Tipo = tipo; transaccion.N_Cuenta = _numeroDeUsuario; try { n = db.Transaccion.Max(p => p.N_Folio); } catch (Exception e) { n = 1000; } transaccion.N_Folio = n + 1; db.Transaccion.Add(transaccion); db.Entry(transaccion).State = System.Data.Entity.EntityState.Added; consulta.N_Folio = transaccion.N_Folio; db.Consulta.Add(consulta); db.Entry(consulta).State = System.Data.Entity.EntityState.Added; db.SaveChanges(); } }
private void insertarTransaccion(Deposito deposito) { int tipo = 3; int n; using (ATMEntities db = new ATMEntities()) { Transaccion transaccion = new Transaccion(); transaccion.Fecha = DateTime.Today; transaccion.Hora = DateTime.Now.TimeOfDay; transaccion.Tipo = tipo; transaccion.N_Cuenta = _numeroDeUsuario; try { n = db.Transaccion.Max(p => p.N_Folio); } catch (Exception e) { n = 1000; } transaccion.N_Folio = n + 1; db.Transaccion.Add(transaccion); db.Entry(transaccion).State = System.Data.Entity.EntityState.Added; deposito.N_Folio = transaccion.N_Folio; db.Deposito.Add(deposito); db.Entry(deposito).State = System.Data.Entity.EntityState.Added; db.SaveChanges(); } }
public static void WithdrawMoney( ATMEntities context, string cardNumber, string cardPin, decimal amount) { using (var tran = context.Database.BeginTransaction(System.Data.IsolationLevel.RepeatableRead)) { try { if (cardNumber.Length != 10 || cardPin.Length != 4 || amount <= 0) { throw new ArgumentException ("Some of the arguments passed are invalid"); } var accounts = context.CardAccounts.Where(a => a.CardNumber == cardNumber); if (accounts == null) { throw new ArgumentException("No such card in database"); } if (accounts.Count() > 1) { throw new ArgumentException("Database contains more than one card" + " with such number"); } if (accounts.First().CardCash < amount) { throw new InvalidOperationException("Not enough cash in account"); } if (accounts.First().CardPIN != cardPin) { throw new ArgumentException("Invalid PIN"); } var account = accounts.First(); account.CardCash = account.CardCash - amount; context.SaveChanges(); tran.Commit(); RecordTransaction(context, cardNumber, amount); } catch (Exception e) { tran.Rollback(); throw (e); } } }
private static void FillNewDataInTransactionHistory(ATMEntities context, string cardNumber, decimal money) { context.TransactionHistories.Add( new TransactionHistory() { CardNumber = cardNumber, TransactionDate = DateTime.Now, Amount = money }); context.SaveChanges(); }
private void guardarCambios() //guarda el saldo actual { using (ATMEntities db = new ATMEntities()) { Cliente cliente = db.Cliente.Where(d => d.N_Cuenta == _numeroDeUsuario).FirstOrDefault(); cliente.Saldo = _saldo; // actualiza el saldo db.Entry(cliente).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } }
private static void SaveTransactionHistory(string cardNumber, decimal amount) { var db = new ATMEntities(); var newTransaction = new TransactionHistory() { CardNumber = cardNumber, TransactionDate = DateTime.Now, Amount = amount }; db.TransactionHistories.Add(newTransaction); db.SaveChanges(); }
private void depositarCliente(int numCuenta, int monto) { /* * Le suma el monto al saldo del cliente con el Numero de cuenta igual al especificado (numCuenta) */ using (ATMEntities db = new ATMEntities()) { Cliente cliente = db.Cliente.Where(d => d.N_Cuenta == numCuenta).FirstOrDefault(); cliente.Saldo = cliente.Saldo + monto; db.Entry(cliente).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } }
public static void WithdrawMoney(string cardNumber, string cardPin, decimal money) { var context = new ATMEntities(); using (var dbContextTransaction = context.Database.BeginTransaction(IsolationLevel.RepeatableRead)) { try { if (cardNumber.Length != 10 || cardPin.Length != 4) { throw new InvalidOperationException("Invalid length of CardNumber or CardPin"); } var accountCard = context.CardAccounts.FirstOrDefault(ac => ac.CardNumber == cardNumber); if (accountCard == null) { throw new ArgumentNullException("There isn't account with such card number in the database."); } if (accountCard.CardPIN != cardPin) { throw new ArgumentException("The entered PIN number is wrong"); } if (accountCard.CardCash < money) { throw new InvalidOperationException("You are trying to withdraw more than available money."); } accountCard.CardCash -= money; context.SaveChanges(); dbContextTransaction.Commit(); FillNewDataInTransactionHistory(context, accountCard.CardNumber, money); } catch (Exception ex) { dbContextTransaction.Rollback(); throw ex; } } }
private static void WithdrawalMoney(string cardNumber, string cardPin, decimal amount) { var db = new ATMEntities(); using (var dbContextTransaction = db.Database.BeginTransaction()) { try { var account = db.CardAccounts .FirstOrDefault(a => a.CardNumber == cardNumber); if (account == null) { var messge = string.Format("Invalid card number: {0}", cardNumber); throw new ArgumentException(messge); } if (account.CardPin!= cardPin) { var messge = string.Format("Invalid pin number: {0}", cardPin); throw new ArgumentException(messge); } if (account.CardCash < amount) { var messge = string.Format("Not enough amount of money!\nAvailability: {0}", account.CardCash); throw new ArgumentException(messge); } account.CardCash = account.CardCash - amount; db.SaveChanges(); dbContextTransaction.Commit(); SaveTransactionHistory(cardNumber, amount); Console.WriteLine("Withdrawal is successfull.\nRemaining amount: {0}", account.CardCash); } catch (ArgumentException ae) { dbContextTransaction.Rollback(); Console.WriteLine("Error: " + ae.Message); } } }
private static void ATMWithdraw(ATMEntities context, int userId) { using (var dbContextTransaction = context.Database.BeginTransaction()) { var account = context.CardAccounts.Find(userId); try { var givenAccount = context.CardAccounts .Where(a => a.CardNumber == account.CardNumber && a.CardPIN == account.CardPIN); foreach (var acc in givenAccount) { Console.Write("Enter card number: "); string card = Console.ReadLine(); Console.Write("Enter PIN: "); string pin = Console.ReadLine(); if (card != acc.CardNumber || pin != acc.CardPIN) { throw new Exception("Invalid card number or PIN"); } Console.Write("Enter sum: "); decimal sum = decimal.Parse(Console.ReadLine()); if (acc.CardCash < sum) { throw new Exception("Available cash is not enough to commit transaction"); } acc.CardCash -= sum; } context.SaveChanges(); dbContextTransaction.Commit(); Console.WriteLine("Transaction has been commited"); } catch (Exception ex) { dbContextTransaction.Rollback(); Console.WriteLine("Error: " + ex.Message); } } }