//**************************************************************************************************************************** // 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); }
// 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"); }
// 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; }