public void ReinitialiseObjects()
 {
     bookInfo      = null;
     bookCatalogue = null;
     loanTrans     = null;
     transDetail   = null;
     bookID        = 0;
     transID       = 0;
     bookStatus    = "";
 }
 public void DefineTransactionObject()
 {
     transDetail = context.TransDetails.Where(x => x.BookID == bookID).OrderByDescending(x => x.Sn).First();
     loanTrans   = context.LoanTrans.Where(x => x.TransID == transDetail.TransID).First();
     transID     = loanTrans.TransID;
 }
        private void buttonLoan_Click(object sender, EventArgs e)
        {
            using (TransactionScope loanTransScope = new TransactionScope())
            {
                int currentTransID = context.LoanTrans.OrderByDescending(x => x.TransID).First().TransID;
                try
                {
                    if (IsOverLoanLimit(availableLimit, booksToLoan.Count()) == true)
                    {
                        ((FormMain)this.MdiParent).SetToolStripLabelText = "Number of Books has exceeded borrowing limit.";
                        return;
                    }

                    if (IsBookAlreadyOut(context.BookInfoes.Where(x => x.BookID == bookID).Select(x => x.Status).First().ToString()) == true)
                    {
                        ((FormMain)this.MdiParent).SetToolStripLabelText = "Invalid Request. Book is already on loan.";
                        return;
                    }
                }
                catch (InvalidOperationException)
                {
                    ((FormMain)this.MdiParent).SetToolStripLabelText = "Invalid Operation!";
                }
                try
                {
                    Member memberinfo = context.Members.Where(x => x.MemberID == memberID).First();
                }
                catch (InvalidOperationException)
                {
                    ((FormMain)this.MdiParent).SetToolStripLabelText = "Invalid operation. Please make sure enter a valid Member ID and Book ID!";
                    return;
                }

                int createTransID = ++currentTransID;


                //need to have some function to bind bookinfo to the database
                foreach (BookInfo i in booksToLoan)
                {
                    BookInfo bookPersistence = context.BookInfoes.Where(x => x.BookID == i.BookID).First();
                    bookPersistence.Status = "OUT";

                    BookCatalogue bookInvenPersis = context.BookCatalogues.Where(x => x.ISBN == bookPersistence.ISBN).First();
                    bookInvenPersis.StockInLibrary = --bookInvenPersis.StockInLibrary;
                    bookInvenPersis.NumberOnLoan   = ++bookInvenPersis.NumberOnLoan;
                }


                //create new loan transaction
                LoanTran newTrans = new LoanTran();

                newTrans.TransID       = createTransID;
                newTrans.MemberID      = memberID;
                newTrans.NumberOfBooks = booksToLoan.Count();
                context.LoanTrans.Add(newTrans);

                //Create new transDetails information
                foreach (BookInfo i in booksToLoan)
                {
                    int         newSn        = int.Parse(context.TransDetails.OrderByDescending(x => x.Sn).OrderByDescending(x => x.Sn).First().Sn.ToString());
                    TransDetail transDetails = new TransDetail();
                    transDetails.Sn     = ++newSn;
                    transDetails.BookID = i.BookID;
                    try
                    {
                        if (dateTimeLoanDatePicker.Value.Date > DateTime.Today || dateTimeDueDatePicker.Value < dateTimeLoanDatePicker.Value || dateTimeDueDatePicker.Value.Date < DateTime.Today)
                        {
                            throw new LoanException();
                        }
                    }
                    catch (LoanException)
                    {
                        ((FormMain)this.MdiParent).SetToolStripLabelText = "Invalid Loan or Due Date";
                        return;
                    }
                    transDetails.LoanDate = dateTimeLoanDatePicker.Value.Date;
                    transDetails.DueDate  = dateTimeDueDatePicker.Value.Date;
                    transDetails.TransID  = currentTransID;
                    context.TransDetails.Add(transDetails);
                    context.SaveChanges();
                }


                context.SaveChanges();
                ((FormMain)this.MdiParent).SetToolStripLabelText = "Loan Processed Succesfully!";
                booksToLoan.Clear();
                memberInfoClear();
                clearBookInfo();
            }
        }