public void RunCommand(string command) { if (command == "") { CLI.DisplayTooFewArgumentsError(); } else if (Convert.ToString(command[0]) == ":") //If it starts with : we know it is a admin command { string[] SplittedString = command.Split(' '); //Split it so we can see which command and use the info string AdminCommand = Convert.ToString(SplittedString[0]); if (_adminCommands.ContainsKey(AdminCommand)) { ; } { if (AdminCommand == ":q" || AdminCommand == ":quit") { _adminCommands[":q"].DynamicInvoke(); } else if (AdminCommand == ":activate" || AdminCommand == ":deactivate" || AdminCommand == ":crediton" || AdminCommand == ":creditoff") { int productId = Convert.ToInt32(SplittedString[1]); _adminCommands[AdminCommand].DynamicInvoke(productId); } else if (AdminCommand == ":addcredits") { string username = Convert.ToString(SplittedString[1]); User user = sSystem.GetUserByUsername(username, ReadFromCsv.UserList); decimal amount = Convert.ToDecimal(SplittedString[2]); sSystem.AddCreditsToAccount(user, amount, ReadFromCsv.UserList).Execute(); } else { CLI.DisplayAdminCommandNotFoundMessage(command); } } } else { //Setup Regex to notice the tree different kindes if commands Match username = Regex.Match(command, @"^[a-z\d_-]+$"); //Only username Match buy = Regex.Match(command, @"^[a-z\d_-]+ \d+$"); //username numbers Match multibuy = Regex.Match(command, @"^[a-z\d_-]+ \d+ \d+$"); //username numbers numbers if (username.Success) { try { User user = sSystem.GetUserByUsername(command, ReadFromCsv.UserList); CLI.DisplayUserInfo(user); } catch (InvalidUsernameException) { CLI.DisplayUserNotFound(command); } } else if (buy.Success) { string[] buyArray = command.Split(' '); //Split the command to get the information try { User user = sSystem.GetUserByUsername(Convert.ToString(buyArray[0]), ReadFromCsv.UserList); Product product = sSystem.GetProductByID(Convert.ToInt32(buyArray[1]), ReadFromCsv.ProductList); if (user.Balance >= product.Price || product.CanBeBoughtOnCredit) { sSystem.BuyProduct(user, product, ReadFromCsv.UserList, ReadFromCsv.ProductList).Execute(); CLI.DisplayUserBuysProduct(sSystem.BuyProduct(user, product, ReadFromCsv.UserList, ReadFromCsv.ProductList)); CLI.LowBalanceWarning(user, 50); // Check for low balance } else { CLI.DisplayInsufficientCash(user, product); } } catch (InvalidUsernameException) { CLI.DisplayUserNotFound(Convert.ToString(buyArray[0])); } catch (InactiveProductException) { //Create a list of all inactive products to finde the specifc product by id List <Product> productList = new List <Product>(); foreach (var element in ReadFromCsv.SeasonalProductList.FindAll(x => x.Active == false)) { productList.Add(element); } foreach (var element in ReadFromCsv.ProductList.FindAll(x => x.Active == false)) { productList.Add(element); } Product product = productList.Find(x => x.Id == Convert.ToInt32(buyArray[1])); CLI.DisplayInactiveProduct(product); } catch (ProductDoesNotExsistException) { CLI.DisplayProductNotFound(null); } } else if (multibuy.Success) { string[] buyArray = command.Split(' '); try { User user = sSystem.GetUserByUsername(Convert.ToString(buyArray[0]), ReadFromCsv.UserList); int productCount = Convert.ToInt32(buyArray[1]); Product product = sSystem.GetProductByID(Convert.ToInt32(buyArray[2]), ReadFromCsv.ProductList); decimal totalPrice = productCount * product.Price; if ((user.Balance >= totalPrice || product.CanBeBoughtOnCredit)) { for (int i = 0; i < productCount; i++) // Run the command once for each bought product { sSystem.BuyProduct(user, product, ReadFromCsv.UserList, ReadFromCsv.ProductList).Execute(); } CLI.DisplayUserBuysProduct(productCount, sSystem.BuyProduct(user, product, ReadFromCsv.UserList, ReadFromCsv.ProductList)); CLI.LowBalanceWarning(user, 50); } else { CLI.DisplayInsufficientCash(user, product); } } //http://stackoverflow.com/questions/136035/catch-multiple-exceptions-at-once catch (InvalidUsernameException) { CLI.DisplayUserNotFound(Convert.ToString(buyArray[0])); } catch (InactiveProductException) { List <Product> productList = new List <Product>(); foreach (var element in ReadFromCsv.SeasonalProductList.FindAll(x => x.Active == false)) { productList.Add(element); } foreach (var element in ReadFromCsv.ProductList.FindAll(x => x.Active == false)) { productList.Add(element); } Product product = productList.Find(x => x.Id == Convert.ToInt32(buyArray[2])); CLI.DisplayInactiveProduct(product); } catch (ProductDoesNotExsistException) { CLI.DisplayProductNotFound(null); } } else { CLI.DisplayTooManyArgumentsError(command); } } }
public void CreateTransactionList() { ////Pupulate transaction list and create instances of both types TransactionList.Add(new BuyTransaction(sSystem.GetUserByUsername("fmikkelsen", ReadFromCsv.UserList), sSystem.GetProductByID(11, ReadFromCsv.ProductList), new DateTime(2012, 1, 18), sSystem.GetProductByID(11, ReadFromCsv.ProductList).Price, ReadFromCsv.UserList)); TransactionList.Add(new InsertCashTransaction(sSystem.GetUserByUsername("bsmith", ReadFromCsv.UserList), new DateTime(2014, 1, 18), 4004, ReadFromCsv.UserList)); TransactionList.Add(new BuyTransaction(sSystem.GetUserByUsername("bsmith", ReadFromCsv.UserList), sSystem.GetProductByID(13, ReadFromCsv.ProductList), new DateTime(2016, 6, 18), sSystem.GetProductByID(11, ReadFromCsv.ProductList).Price, ReadFromCsv.UserList)); TransactionList.Add(new InsertCashTransaction(sSystem.GetUserByUsername("inielsen", ReadFromCsv.UserList), new DateTime(2016, 8, 18), 4004, ReadFromCsv.UserList)); TransactionList.Add(new BuyTransaction(sSystem.GetUserByUsername("inielsen", ReadFromCsv.UserList), sSystem.GetProductByID(15, ReadFromCsv.ProductList), DateTime.Now, sSystem.GetProductByID(11, ReadFromCsv.ProductList).Price, ReadFromCsv.UserList)); // Execute them to create a transaction file foreach (var element in ReadFromCsv.TransactionList) { element.Execute(); } }