示例#1
0
        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);
                }
            }
        }
示例#2
0
        /*
         * 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();
            }
        }
示例#3
0
        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();
            }
        }
示例#4
0
        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);
                }
            }
        }
示例#5
0
 private static void FillNewDataInTransactionHistory(ATMEntities context, string cardNumber, decimal money)
 {
     context.TransactionHistories.Add(
         new TransactionHistory()
     {
         CardNumber = cardNumber, TransactionDate = DateTime.Now, Amount = money
     });
     context.SaveChanges();
 }
示例#6
0
 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();
     }
 }
示例#7
0
        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();
        }
示例#8
0
        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();
            }
        }
示例#9
0
        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;
                }
            }
        }
示例#10
0
        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);
                }
            }
        }
示例#11
0
 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);
         }
     }
 }