public bool ListTransactionByTransactionID_PL()
        {
            Console.Clear();
            Console.WriteLine("------ Transaction Details ------");

            Console.Write("Enter Transaction ID:");
            string transactionID = Console.ReadLine();

            try
            {
                TransactionsBL      transBL     = new TransactionsBL();
                TransactionEntities transaction = transBL.DisplayTransactionByTransactionID_BL(transactionID);
                if (transaction == null)
                {
                    Console.WriteLine($"No Records found for {transactionID}");
                    return(false);
                }
                else
                {
                    BusinessLogicUtil.ShowTransactionDetails(transaction);
                    Console.WriteLine("Press Any Key -> Previous Menu");
                    return(true);
                }
            }
            catch (TransactionDetailsException e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine("Press Any Key -> Try Again");
                return(false);
            }
        }
        public bool ListTransactionByCustomerID_PL()
        {
            Console.Clear();
            Console.Write("Enter Customer ID");
            string customerID = Console.ReadLine();

            if (BusinessLogicUtil.validate(customerID) == false)
            {
                Console.WriteLine("Not a valid customer ID\nPress Any Key -> Try Again");
                Console.ReadKey();
                return(false);
            }

            TransactionsBL             transBL      = new TransactionsBL();
            List <TransactionEntities> transactions = transBL.GetAllTransactionBL();

            bool transactionsFound = false;

            foreach (var transaction in transactions)
            {
                if (transaction.CustomerID == customerID)
                {
                    BusinessLogicUtil.ShowTransactionDetails(transaction);
                    transactionsFound = true;
                }
            }

            if (transactionsFound == false)
            {
                Console.WriteLine($"No Transactions founds in records of {customerID}");
            }

            Console.WriteLine("Press Any Key -> Previous Menu");
            return(true);
        }
        public bool ListTransactionsByDateRangeOfAccountNo_PL()
        {
            Console.Clear();
            Console.Write("Enter Account No");
            string accountNo = Console.ReadLine();

            if (BusinessLogicUtil.validateAccountNo(accountNo) == false)
            {
                Console.WriteLine("Not a valid Account No.\nPress Any Key -> Try Again");
                Console.ReadKey();
                return(false);
            }

            string FromDateStr, ToDateStr;

            Console.WriteLine("All dates must be in mm-dd-yyyy format");
            Console.Write("Enter Start Date:");
            FromDateStr = Console.ReadLine();
            DateTime FromDate = BusinessLogicUtil.validateDate("dd-MM-yyyy", FromDateStr);

            Console.Write("Enter End Date:");
            ToDateStr = Console.ReadLine();
            DateTime ToDate = BusinessLogicUtil.validateDate("dd-MM-yyyy", ToDateStr);

            // validateDate returns default(DateTime) if date is not in valid format because DateTime is non nullable
            if (FromDate == default(DateTime) || ToDate == default(DateTime))
            {
                Console.WriteLine("One or more dates are not in specified format\nSpecified Format mm-dd-yyyy");
                Console.WriteLine("Press Any Key -> Try Again");
                Console.ReadKey();
                return(false);
            }

            // required transactions will be filered out in foreach loop from all transactions
            TransactionsBL             transBL      = new TransactionsBL();
            List <TransactionEntities> transactions = transBL.GetAllTransactionBL();

            bool transactionsFound = false;

            foreach (var transaction in transactions)
            {
                if (transaction.AccountNo == long.Parse(accountNo) && DateTime.Compare(FromDate.Date, transaction.DateOfTransaction.Date) < 0 && DateTime.Compare(transaction.DateOfTransaction.Date, ToDate.Date) < 0)
                {
                    BusinessLogicUtil.ShowTransactionDetails(transaction);
                    transactionsFound = true;
                }
            }

            if (transactionsFound == false)
            {
                Console.WriteLine($"No Transactions found between {FromDate.Date} and {ToDate.Date} of account:{accountNo}");
            }

            Console.WriteLine("Press Any Key -> Previous Menu");
            Console.ReadKey();
            return(true);
        }
        public bool ListTransactionsOfSpecificDateOfAccountNo_PL()
        {
            Console.Clear();
            Console.Write("Enter Account No");
            string accountNo = Console.ReadLine();

            if (BusinessLogicUtil.validateAccountNo(accountNo) == false)
            {
                Console.WriteLine("Not a valid account No.\nPress Any Key -> Try Again");
                Console.ReadKey();
                return(false);
            }

            Console.Write("Enter Date (in dd-MM-yyyy format only):");
            string   inputDateStr = Console.ReadLine();
            DateTime inputDate    = BusinessLogicUtil.validateDate("dd-MM-yyyy", inputDateStr);

            // validateDate returns default(DateTime) if date is not in valid format because DateTime is non nullable
            if (inputDate == default(DateTime))
            {
                Console.WriteLine("Wrong Date Format\nInput date needs to be in dd-MM-yyyy format");
                Console.WriteLine("Press any key -> Try Again");
                Console.ReadKey();
                return(false);
            }

            // required transaction will be filtered in foreach loop from all transaction
            TransactionsBL             transBL      = new TransactionsBL();
            List <TransactionEntities> transactions = transBL.GetAllTransactionBL();

            bool transactionsFound = false;

            Console.WriteLine($"------ All Debit Transactions of {inputDate.Date} ------");
            foreach (var transaction in transactions)
            {
                if (transaction.AccountNo == long.Parse(accountNo) && DateTime.Compare(inputDate.Date, transaction.DateOfTransaction.Date) == 0)
                {
                    BusinessLogicUtil.ShowTransactionDetails(transaction);
                    transactionsFound = true;
                }
            }

            if (transactionsFound == false)
            {
                Console.WriteLine($"No Transactions found on {inputDate.Date} for account {accountNo}");
            }

            Console.WriteLine("Press Any Key -> Previous Menu");
            Console.ReadKey();

            return(true);
        }
        public bool GetAllTransactionsPL()
        {
            Console.Clear();
            Console.WriteLine("------ All Transactions ------");

            TransactionsBL             transBL      = new TransactionsBL();
            List <TransactionEntities> transactions = transBL.GetAllTransactionBL();

            foreach (var transaction in transactions)
            {
                BusinessLogicUtil.ShowTransactionDetails(transaction);
            }

            Console.WriteLine("Press Any Key -> Previous Menu");
            return(true);
        }
        public bool ListCreditTransactionsByDateRangePL()
        {
            Console.Clear();
            Console.WriteLine("------. All Credit Transaction ------");
            string FromDateStr, ToDateStr;

            Console.WriteLine("All dates must be in mm-dd-yyyy format");
            Console.Write("Enter Start Date:");
            FromDateStr = Console.ReadLine();
            DateTime FromDate = BusinessLogicUtil.validateDate("dd-MM-yyyy", FromDateStr);

            Console.Write("Enter End Date:");
            ToDateStr = Console.ReadLine();
            DateTime ToDate = BusinessLogicUtil.validateDate("dd-MM-yyyy", ToDateStr);

            // validateDate returns default(DateTime) if date is not in valid format because DateTime is non nullable
            if (FromDate == default(DateTime) || ToDate == default(DateTime))
            {
                Console.WriteLine("One or more dates are not in specified format\nSpecified Format mm-dd-yyyy");
                Console.WriteLine("Press Any Key -> Try Again");
                return(false);
            }

            TransactionsBL             transBL      = new TransactionsBL();
            List <TransactionEntities> transactions = transBL.GetAllTransactionBL();

            bool transactionsFound = false;

            foreach (var transaction in transactions)
            {
                // Enum for Credit is 0
                if (transaction.Type == (TypeOfTranscation)0 && DateTime.Compare(FromDate.Date, transaction.DateOfTransaction.Date) < 0 && DateTime.Compare(transaction.DateOfTransaction.Date, ToDate.Date) < 0)
                {
                    BusinessLogicUtil.ShowTransactionDetails(transaction);
                    transactionsFound = true;
                }
            }

            if (transactionsFound == false)
            {
                Console.WriteLine($"No Credit Transactions found between {FromDate.Date} and {ToDate.Date}");
            }

            Console.WriteLine("Press Any Key -> Previous Menu");
            return(true);
        }
        public bool ListAllCreditTransactionsPL()
        {
            Console.Clear();
            Console.WriteLine("------ All Credit Transactions ------");

            TransactionsBL             transBL      = new TransactionsBL();
            List <TransactionEntities> transactions = transBL.GetAllTransactionBL();

            foreach (var transaction in transactions)
            {
                // Enum for Credit is 0
                if (transaction.Type == (TypeOfTranscation)0)
                {
                    BusinessLogicUtil.ShowTransactionDetails(transaction);
                }
            }

            Console.WriteLine("Press Any Key -> Previous Menu");
            return(true);
        }
        public bool ListCreditTransactionsOfSpecificDatePL()
        {
            Console.Clear();
            Console.WriteLine("------ Credit Transactions ------");

            Console.Write("Enter Date (in dd-MM-yyyy format only):");
            string   inputDateStr = Console.ReadLine();
            DateTime inputDate    = BusinessLogicUtil.validateDate("dd-MM-yyyy", inputDateStr);

            // validateDate returns default(DateTime) if date is not in valid format because DateTime is non nullable
            if (inputDate == default(DateTime))
            {
                Console.WriteLine("Wrong Date Format\nInput date needs to be in dd-MM-yyyy format");
                Console.WriteLine("Press any key -> Try Again");
                return(false);
            }

            TransactionsBL             transBL      = new TransactionsBL();
            List <TransactionEntities> transactions = transBL.GetAllTransactionBL();

            bool transactionsFound = false;

            Console.WriteLine($"------ All Credit Transactions of {inputDate.Date} ------");
            foreach (var transaction in transactions)
            {
                // Enum for Credit is 0
                if (transaction.Type == (TypeOfTranscation)0 && DateTime.Compare(inputDate.Date, transaction.DateOfTransaction.Date) == 0)
                {
                    BusinessLogicUtil.ShowTransactionDetails(transaction);
                    transactionsFound = true;
                }
            }

            if (transactionsFound == false)
            {
                Console.WriteLine($"No Credit Transactions found on {inputDate.Date}");
            }

            Console.WriteLine("Press Any Key -> Previous Menu");
            return(true);
        }
        public bool ListAllCreditTransactionsOfAccountNo_PL()
        {
            Console.Clear();
            Console.Write("Enter Account No:");
            string accountNo = Console.ReadLine();

            if (BusinessLogicUtil.validateAccountNo(accountNo) == false)
            {
                Console.WriteLine("Not a valid customer ID\nPress Any Key -> Try Again");
                Console.ReadKey();
                return(false);
            }

            TransactionsBL             transBL      = new TransactionsBL();
            List <TransactionEntities> transactions = transBL.GetAllTransactionBL();

            bool transactionsFound = false;

            foreach (var transaction in transactions)
            {
                // Enum for Credit is 0
                if (transaction.Type == (TypeOfTranscation)0 && transaction.AccountNo == long.Parse(accountNo))
                {
                    BusinessLogicUtil.ShowTransactionDetails(transaction);
                    transactionsFound = true;
                }
            }

            if (transactionsFound == false)
            {
                Console.WriteLine($"No Credit transactions founds in account No {accountNo}");
            }

            Console.WriteLine("Press Any Key -> Previous Menu");
            Console.ReadKey();

            return(true);
        }