Пример #1
0
        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();
            }
        }
        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);
                }
            }
        }