//****************************************************************************************************************************
        // this handles making a deposit call. creating the unique a/c #...
        // and creates a transaction record, and adds it to the linkedlist
        //**********************************************************************************************************//
        public static BankAccount CreateNewBankAccount(BankAccount bank, string CustNo, Int16 accounttype, decimal amount, decimal interest, string reason = "")
        //**********************************************************************************************************//
        {
            // create unique account number and set it in the account.
            bank.BankAccountNumber = GetBankAccountNumberSeed();// this post increments it's value internally
            bank.CustAccountNumber = Convert.ToInt32(CustNo);
            bank.Balance           = amount;
            bank.AccountType       = accounttype;
            bank.DateOpened        = DateTime.Today.Date;
            bank.InterestRate      = interest;
            //
            //This call increments the file numbering seed data
            bank.FileName = "BankObject" + bank.BankAccountNumber + ".bnk";
            // add full filename to the object
            bank.FullFileName = BankAccount.ReadBankFilePath() + bank.FileName;

            //This call increments the total banks seed data
            // Even though we do NOT need its content here.
            IncrementTotalBanks();

            // Ensure we save the file to disk for the Bank  object itself
            SerializeData.WriteBankAccountToDiskAndText(bank, bank.FullFileName);

            BankTransaction newbankaccount = new BankTransaction();

            newbankaccount.TransDate         = DateTime.Now;
            newbankaccount.AccountType       = bank.AccountType;
            newbankaccount.CustAccountNumber = bank.CustAccountNumber;
            newbankaccount.BankAccountNumber = bank.BankAccountNumber;
            newbankaccount.Transamount       = (decimal)bank.Balance;
            if (reason == "")
            {
                newbankaccount.Notes = "Opening Balance";
            }
            else
            {
                if (reason.Contains("Secondary Bank account  for Customer"))
                {
                    reason += bank.BankAccountNumber.ToString();
                }
                newbankaccount.Notes = reason;
            }
            newbankaccount.Status = bank.Status;
            // Add a transaction record
            BankTransaction.allBankTransactions.AddLast(newbankaccount);
            BankAccountsLinkedList.AddLast(bank);
            DataArray.ArrayAddBank(bank);
            // Update our new Dictionary system
            if (BankAccount.BankDict != null)
            {
                if (!BankAccount.BankDict.ContainsKey(bank.BankAccountNumber))
                {
                    BankAccount.BankDict.Add(bank.BankAccountNumber, bank);
                }
            }
            // This saves the bank LinkedList to both an object file and a Text file
            Lists.SaveAllBankAccountListData();

            //Add data ot our TWO hash tables
            // First the Customer hash tables
            try
            {
                if (CustomerBalanceHashTable.FindHashCustBalEntry(bank.CustAccountNumber.ToString()))
                {
                    CustomerBalanceHashTable.DeleteHashCustBalEntry(bank.CustAccountNumber.ToString());
                }
                CustomerBalanceHashTable.AddHashCustBalEntry(bank.CustAccountNumber.ToString(), bank.Balance);

                if (CustomerFileHashTable.CustFileNoHashTable.ContainsKey(bank.CustAccountNumber))
                {
                    CustomerFileHashTable.CustFileNoHashTable.Remove(bank.CustAccountNumber.ToString());
                }
                CustomerFileHashTable.CustFileNoHashTable.Add(bank.CustAccountNumber.ToString(), bank.FullFileName.ToString());
            }
            catch
            {
            }
            BankArrayChangedEvent?.Invoke(bank, "NEW BANKACCOUNT");
            return(bank);
        }
Example #2
0
        // Save the new customer data as an Object and add it to the Customer List
        // plus create a BankAccount object and add it to the BankAccount List
        // and add a bak transaction
        //*************************************************************************************************************************************************//
        private void SaveBankButton_Click(object sender, EventArgs e)
        //*************************************************************************************************************************************************//
        {
            if (AccountNo.Text.Length == 0 || AccountBalance.Text.Length == 0 || Interest.Text.Length == 0 || OpenDate.Text.Length == 0 || fname.Text.Length == 0 ||
                lname.Text.Length == 0 || day.Text.Length == 0 || month.Text.Length == 0 || year.Text.Length == 0)
            {
                MessageBox.Show("One or more fields are empty, All fields must be populated", "User Input Error");
                return;
            }
            Int16 type = 0;

            if (AccountType.Text.Contains("Normal"))
            {
                type = 1;
            }
            if (AccountType.Text.Contains("Savings"))
            {
                type = 2;
            }
            if (AccountType.Text.Contains("Deposit"))
            {
                type = 3;
            }
            if (AccountType.Text.Contains("Business"))
            {
                type = 4;
            }

            //====================BANK ACCOUNT ========================================
            // READ BANK OBJECT FROM DISK and update it
            // Bank should be valid as it is a global in this file ?
            if (allbankaccounts.SelectedIndex == -1)
            {
                MessageBox.Show("The Bank Account list does not appear to have an item selected\nWe No data has been changed, but we are UNABLE to continue with update...", "Database system ERROR");
                return;
            }
            string target = allbankaccounts.Items[allbankaccounts.SelectedIndex].ToString();

            char[]   ch        = { '\t' };
            char[]   dashch    = { '-' };
            string[] tempacno  = target.Split(ch);
            Int32    accountno = Convert.ToInt32(tempacno[0]);

            Bank = Search.FindBankObjectfromBankNo(accountno);
            int    actype         = Convert.ToInt16(AccountType.SelectedIndex + 1);
            string actypeselected = AccountType.SelectedItem.ToString();

            string[] newselaccount = actypeselected.Split(dashch);
            if (newselaccount[0] != tempacno[1])
            {   // the type of account has been changed - handle it
                for (int i = 0; i < allbankaccounts.Items.Count; i++)
                {
                    string temp = "";
                    temp = allbankaccounts.Items[i].ToString();
                    string[] thisentry = temp.Split(ch);
                    if (thisentry[0] == tempacno[0] && thisentry[1] != newselaccount[0])
                    {
                        listupdateneeded = false;   //This simply avoids the auto update of the listbox, set back to true afterwards
                        allbankaccounts.Items.RemoveAt(i);
                        temp = Bank.BankAccountNumber.ToString() + "\t" + actype.ToString();
                        allbankaccounts.Items.Add(temp);
                        allbankaccounts.SelectedIndex = i;
                        listupdateneeded = true;
                        break;
                    }
                }
            }
            // Thkis call sends Event data to Bankaccount.cs so the handlers can handle it
            // cos we cannot call them directly in BankAccount.cs
            BankAccount.SendBankEventData(Bank, "BANKACCOUNT MODIFIED");

            // we need to  delete the old account and insert the new details  in our ArrayList
            int index = DataArray.ArrayFindBank(Bank);

            DataArray.BankNo.RemoveAt(index);
            BankAccount.BankDict.Remove(index);

            Bank.Balance      = Convert.ToDecimal(AccountBalance.Text);
            Bank.InterestRate = Convert.ToDecimal(Interest.Text);
            Bank.DateOpened   = Convert.ToDateTime(OpenDate.Text);
            Bank.AccountType  = Convert.ToInt16(actype);
            //SAVE BANK OBJECT BACK TO DISK
            SerializeData.WriteBankAccountToDiskAndText(Bank, Bank.FullFileName);
            DataArray.ArrayAddBank(Bank);
            if (BankAccount.BankDict != null)
            {
                if (!BankAccount.BankDict.ContainsKey(Bank.BankAccountNumber))
                {
                    BankAccount.BankDict.Add(Bank.BankAccountNumber, Bank);
                }
            } // handle the Linkedlist as well

            // CREATE A NEW BANK TRANSACTION
            BankTransaction newbankaccount = new BankTransaction();

            newbankaccount.TransDate         = DateTime.Now;
            newbankaccount.AccountType       = Bank.AccountType;
            newbankaccount.CustAccountNumber = Bank.CustAccountNumber;
            newbankaccount.BankAccountNumber = Bank.BankAccountNumber;
            newbankaccount.Transamount       = Bank.Balance;
            newbankaccount.Notes             = "Opening Balance";
            newbankaccount.Status            = Bank.Status;
            BankTransaction.allBankTransactions.AddLast(newbankaccount);
            //Update the Customer HASH TABLE
            CustomerBalanceHashTable.UpdateCustBalHashTable(Bank.CustAccountNumber.ToString(), Bank.Balance);

            //NOW UPDATE CUSTOMER RECORD
            Cust = Customer.GetCustomerAccount(Bank.CustAccountNumber.ToString());
            if (Cust == null)
            {
                MessageBox.Show("Unable to find the Customer Record from LinkedList", "Database system ERROR"); return;
            }
            else
            {
                // we need to  delete the old Customer account and insert the new details  in our ArrayList
                int indx = DataArray.ArrayFindCust(Cust);
                DataArray.CustNo.RemoveAt(indx);
                Customer.CustDict.Remove(indx);
                // Now update the Customer record so we can add it to the array
                Cust.FirstName = fname.Text;
                Cust.LastName  = lname.Text;
                Cust.DOB       = Convert.ToDateTime(day.Text + "/" + month.Text + "/" + year.Text);
                if (Cust.accountnums[0] == Convert.ToInt32(Bank.BankAccountNumber))
                {
                    Cust.accounttypes[0] = type;
                }
                else if (Cust.accountnums[1] == Convert.ToInt32(Bank.BankAccountNumber))
                {
                    Cust.accounttypes[1] = type;
                }
                else if (Cust.accountnums[2] == Convert.ToInt32(Bank.BankAccountNumber))
                {
                    Cust.accounttypes[2] = type;
                }
                else if (Cust.accountnums[3] == Convert.ToInt32(Bank.BankAccountNumber))
                {
                    Cust.accounttypes[3] = type;
                }
                Cust.Address1     = addr1.Text;
                Cust.Address2     = addr2.Text;
                Cust.Town         = town.Text;
                Cust.County       = county.Text;
                Cust.PostCode     = postcode.Text;
                Cust.PhoneNumber  = phone.Text;
                Cust.MobileNumber = mobile.Text;

                // SAVE CUSTOMER OBJECT BACK TO DISK
                Customer.WriteCustObjectToDiskAndText(Cust, Cust.FullFileName);
                try
                {   // update Customer Linked List & ArrayList
                    Customer.CustomersLinkedList.Remove(Cust);
                    Customer.CustomersLinkedList.AddLast(Cust);
                    // save our Customer LinkedList to disk as binary and txt files
                    Lists.SaveAllCustomerListData(Customer.CustomerFilePath + "CustSortedListData.cust");
                    DataArray.ArrayAddCust(Cust);
                    if (Customer.CustDict != null)
                    {
                        if (!Customer.CustDict.ContainsKey(Cust.CustomerNumber))
                        {
                            Customer.CustDict.Add(Cust.CustomerNumber, Cust);
                        }
                    }
                }
                catch { new Exception("Customer Linked List coukld not be updated in bankaccountEdit.cs cline 103"); }
            }

            MessageBox.Show("Bank & Customer  accounts have been updated successfully...,", "Bank account Edit Facility");
        }
Example #3
0
        // Go ahead and make bank account deposit
        //******************************************************************************************************************************
        private void MakeDeposit_Click_1(object sender, EventArgs e)
        //******************************************************************************************************************************
        {
            // Caution, this bank account may be one of several for this customer,
            // so make NO assumptions
            // Bank is already the correct record
            Int32 bankaccountno = 0;

            if (accountnumber.Text.Length == 0 || textBox2.Text.Length == 0)
            {
                info.Text = "Please complete both fields before pressing Go";
                MessageBox.Show("Please complete both fields before pressing Go", "Data Input Error");
                return;
            }
            if (notes.Text == "")
            {
                MessageBox.Show("You have not entered a reason for this deposit ?\nDo you want to continue without doing so ?",
                                "Data Input Error", MessageBoxButtons.YesNo);
                if (DialogResult == DialogResult.No)
                {
                    return;
                }
            }

            // This is the bank account #
            bankaccountno = Convert.ToInt32(accountnumber.Text);
            string acnostring = accountnumber.Text;
            string amountstr  = textBox2.Text.Trim( );

            if (!amountstr.Contains("."))
            {
                amountstr += ".00";
            }
            decimal amount = Convert.ToDecimal(amountstr);

            if (amount <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(amount), "Amount of Deposit [" + amount + "] must be positive");
            }

            // Update the Bank ArrayList
            Bank = DataArray.ArrayGetBank(bankaccountno);
            if (Bank == null)
            {
                MessageBox.Show("Unable to Find Bank  Account in LinkedList??..\nDeposit transaction aborted.", "Fatal Error"); return;
            }
            string custnostring = Bank.CustAccountNumber.ToString( );


            // This call updates BOTH  the Bank A/c and the entry in the LinkedList
            if (!BankAccount.UpdateBankLinkedList(bankaccountno, amount))
            {
                MessageBox.Show("Failed to update BankAccount Linked List for Account " + acnostring, "Bank Account Deposit");
            }
            // Also save the updated bank account back to disk
            SerializeData.WriteBankAccountToDiskAndText(Bank, Bank.FullFileName);
            // now add a new transaction for this operation
            BankTransaction Deposit = new BankTransaction( );

            Deposit.TransDate         = DateTime.Now;
            Deposit.AccountType       = Bank.AccountType;
            Deposit.CustAccountNumber = Bank.CustAccountNumber;
            Deposit.BankAccountNumber = Bank.BankAccountNumber;
            Deposit.Transamount       = amount;
            Deposit.Notes             = "New Deposit : " + notes.Text;
            Deposit.Status            = Bank.Status;
            BankTransaction.allBankTransactions.AddLast(Deposit);

            // update the Customer Balance Hash Table cos it holds the balance value
            CustomerBalanceHashTable.DeleteHashCustBalEntry(custnostring);
            CustomerBalanceHashTable.AddHashCustBalEntry(custnostring, Bank.Balance);

            MessageBox.Show("Deposit of " + amount.ToString( ) + " has been added to account  # " + custnostring + "\nThe new balance is £" + Bank.Balance.ToString( ), "Bank Account Deposit");
            textBox2.Text = "";
            notes.Text    = "";
            accountnumber.Focus( );
            return;
        }