예제 #1
0
        private static string DisplayAndGetProducChoice()
        {
            string         productChoice  = "";
            ProductManager productManager = ProductManagerFactory.Create();

            foreach (var product in productManager.ListProducts())
            {
                Console.WriteLine("================================================================");
                Console.WriteLine("Product Type: " + product.ProductType);
                Console.WriteLine("Product Price Per SquareFoot: " + product.CostPerSquareFoot);
                Console.WriteLine("Labor Cost Per SquareFoot: " + product.LaborCostPerSquareFoot);
                Console.WriteLine("================================================================");
            }
            Console.WriteLine("Please Enter A Product Type: ");
            productChoice = Console.ReadLine();
            List <Product> products = new List <Product>();

            while (productManager.ListProducts().All(product => product.ProductType != productChoice))
            {
                Console.WriteLine("Product Type not supported; please, refference the list above.");
                Console.WriteLine("Product choice: ");
                productChoice = Console.ReadLine();
            }
            return(productChoice);
        }
예제 #2
0
        public static string GetProduct(string prompt)
        {
            while (true)
            {
                ProductManager productManager     = ProductManagerFactory.Create();
                var            productLookup      = productManager.DisplayProducts();
                var            listOfProductNames = productLookup.Select(p => p.ProductType.ToUpper()).ToList();

                Console.Write(prompt);
                string format = "{0,-10} {1,20:c} {2,35:c}";
                Console.WriteLine(format, "\nProduct: ", "Cost per sq. ft.: ", "Labor cost per sq. ft.: ");

                for (int i = 0; i < productLookup.Count; i++)
                {
                    Console.WriteLine(format, $"{productLookup[i].ProductType}", $"${productLookup[i].CostPerSquareFoot}", $"${productLookup[i].LaborCostPerSqareFoot}");
                    Console.WriteLine();
                }

                string input = Console.ReadLine().ToUpper();
                if (!listOfProductNames.Contains(input))
                {
                    Console.WriteLine("You must enter a correct product name. Check your spelling.");
                    Console.WriteLine("Press any key to try again...");
                    Console.WriteLine();
                    Console.ReadKey();
                    Console.Clear();
                }
                else
                {
                    Console.Clear();
                    return(input.ToLower());
                }
            }
        }
예제 #3
0
        public void OrderProductType(Order order)
        {
            bool validProduct = false;

            while (!validProduct)
            {
                Console.Write(" Product Choice: ");
                string newProductType = (Console.ReadLine());
                if (!string.IsNullOrEmpty(newProductType))
                {
                    ProductManager productManager = ProductManagerFactory.Create();
                    TextInfo       textInfo       = new CultureInfo("en-US", false).TextInfo;
                    newProductType = textInfo.ToTitleCase(newProductType);
                    var product = productManager.ProductType(newProductType);
                    if (product != null)
                    {
                        validProduct                 = true;
                        order.ProductType            = newProductType;
                        order.CostPerSquareFoot      = product.CostPerSquareFoot;
                        order.LaborCostPerSquareFoot = product.LaborCostPerSquareFoot;
                    }
                    else
                    {
                        Console.WriteLine(" Please enter a VALID product. ");
                    }
                }
                else
                {
                    validProduct = true;
                }
            }
        }
예제 #4
0
        public void ChangeProduct(DisplaySingleOrderResponse response)
        {
            bool validProduct = false;

            while (!validProduct)
            {
                Console.Write(" Product Choice: ");
                string newProductType = (Console.ReadLine().ToUpper());

                if (!string.IsNullOrEmpty(newProductType))
                {
                    ProductManager productManager = ProductManagerFactory.Create();
                    Product        product        = productManager.ProductType(newProductType);

                    if (product != null)
                    {
                        validProduct = true;
                        response.OrderDetails.ProductType = newProductType;
                    }
                    else
                    {
                        Console.WriteLine(" Please enter a VALID product. ");
                    }
                }
                else
                {
                    validProduct = true;
                }
            }
        }
예제 #5
0
        public static Order CreateOrder(DateTime orderDateInput, int orderNumberInput, string customerNameInput, string stateInput, string productTypeInput, decimal areaInput)
        {
            Conversions     convert        = new Conversions();
            TaxStateManager stateManager   = TaxStateManagerFactory.Create();
            ProductManager  productManager = ProductManagerFactory.Create();
            OrderManager    manager        = OrderManagerFactory.Create();
            Order           order          = new Order();

            order.OrderDate              = orderDateInput;
            order.OrderNumber            = orderNumberInput;
            order.CustomerName           = customerNameInput;
            order.State                  = stateInput;
            order.StateAbv               = stateManager.FindTaxState(stateInput).TaxState.StateCode;
            order.TaxRate                = stateManager.FindTaxState(stateInput).TaxState.TaxRate;
            order.ProductType            = productManager.FindProduct(productTypeInput).Product.ProductType;
            order.Area                   = areaInput;
            order.CostPerSqaureFoot      = productManager.FindProduct(productTypeInput).Product.CostPerSquareFoot;
            order.LaborCostPerSquareFoot = productManager.FindProduct(productTypeInput).Product.LaborCostPerSquareFoot;
            order.MaterialCost           = convert.MaterialCost(order, productManager.FindProduct(productTypeInput).Product);
            order.LaborCost              = convert.LaborCost(order, productManager.FindProduct(productTypeInput).Product);
            order.Tax   = convert.Tax(order, stateManager.FindTaxState(stateInput).TaxState);
            order.Total = convert.Total(order);

            return(order);
        }
예제 #6
0
        public void CanGetProductFromFile(string productType, bool expected)
        {
            ProductManager        productManager = ProductManagerFactory.Create();
            ProductLookupResponse response       = productManager.GetProduct(productType);

            Assert.AreEqual(expected, response.Success);
        }
예제 #7
0
        public void CanLoadProductTestData()
        {
            ProductManager manager = ProductManagerFactory.Create();

            ProductListResponse response = manager.ProductList();

            Assert.IsNotNull(response.Products);
            Assert.IsTrue(response.Success);
        }
예제 #8
0
        public void CanChooseProductTest()
        {
            ProductManager manager = ProductManagerFactory.Create();

            ProductLookupResponse response = manager.ChooseProduct("Carpet");

            Assert.IsNotNull(response.Product.ProductType);
            Assert.IsTrue(response.Success);
            Assert.AreEqual("Carpet", response.Product.ProductType);
        }
예제 #9
0
        public void RetrieveProductListTest()
        {
            ProductManager manager = ProductManagerFactory.Create();

            ProductListResponse response = manager.ProductsAvailable();

            Assert.IsNotNull(response.Products);

            Product product = response.Products.Find(p => p.ProductType == "Tile");

            Assert.AreEqual(product.ProductType, "Tile");
        }
예제 #10
0
        public void RetrieveProductInformationTest()
        {
            ProductManager manager = ProductManagerFactory.Create();

            ProductInformationResponse response = manager.ProductInformation("Tile");

            Assert.IsNotNull(response.Product);

            Product product = response.Product;

            Assert.AreEqual(product.ProductType, "Tile");
        }
예제 #11
0
        public void Execute()
        {
            Console.Clear();
            Console.ForegroundColor = ConsoleColor.Green;
            Order          newOrder       = new Order();
            OrderManager   orderManager   = OrderManagerFactory.Create();
            TaxManager     taxManager     = TaxManagerFactory.Create();
            ProductManager productManager = ProductManagerFactory.Create();

            Console.WriteLine("Add Order");
            SeperatorBar();

            //Query User Info
            newOrder.Date         = QueryDate();
            newOrder.CustomerName = QueryCustomerName();
            newOrder.State        = QueryState();
            newOrder.ProductType  = QueryProductType();
            newOrder.Area         = QueryArea();

            //Calculations
            newOrder.TaxRate                = taxManager.GetStateTax(newOrder.State).TaxRate;
            newOrder.CostPerSquareFoot      = productManager.GetProductType(newOrder.ProductType).CostPerSquareFoot;
            newOrder.LaborCostPerSquareFoot = productManager.GetProductType(newOrder.ProductType).LaborCostPerSquareFoot;
            newOrder._calculateTotal();
            DisplayOrder(newOrder);

            if (YorN($"Are you sure you want to add your order?") == "Y")
            {
                AddOrderResponse response = orderManager.AddOrder(newOrder);
                if (response.Success)
                {
                    DisplayOrder(response.Order);
                    Console.WriteLine("Your order has been added to our files!");
                    Console.WriteLine(response.Message);
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("An error occured, your order was not saved");
                    Console.WriteLine(response.Message);
                }
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Your order was not saved");
            }
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }
예제 #12
0
        public static string GetProduct()
        {
            bool   validProductType = false;
            string product          = "";

            ProductManager productmanager = ProductManagerFactory.Create();

            do
            {
                Console.WriteLine("Please select a product.");
                Console.Write("Product Type: ");
                string productInput    = Console.ReadLine().ToUpper();
                var    selectedProduct = productmanager.GetProductInfo(productInput);

                if (string.IsNullOrEmpty(productInput))
                {
                    validProductType = true;
                    Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                    ConsoleIO.DisplayMessage($"Product empty.");
                    Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                }
                else
                {
                    if (selectedProduct == null)
                    {
                        Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                        ConsoleIO.DisplayMessage($"Error handling request.  Unavailable product.");
                        Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                    }
                    else
                    {
                        if (productmanager.ProductExistsInFile(selectedProduct.ProductType))
                        {
                            product = productInput;
                            Console.WriteLine("*********************************************");
                            ConsoleIO.DisplayMessage($"You have selected {selectedProduct.ProductType}");
                            Console.WriteLine("*********************************************");
                            validProductType = true;
                        }
                        else
                        {
                            Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                            ConsoleIO.DisplayMessage($"Error handling request.  Invalid input.");
                            Console.WriteLine("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                        }
                    }
                }
            } while (validProductType == false);
            return(product);
        }
예제 #13
0
        public static decimal GetCostLaborPerSquareFoot(string productType)
        {
            ProductManager productRepository = ProductManagerFactory.Create();
            decimal        costLabor         = 0;

            foreach (var product in productRepository.ListProducts())
            {
                if (product.ProductType == productType)
                {
                    costLabor = product.LaborCostPerSquareFoot;
                }
            }
            return(costLabor);
        }
예제 #14
0
        public static decimal GetCostMaterials(decimal area, string productType)
        {
            decimal materialCost = 0;

            ProductManager productRepository = ProductManagerFactory.Create();

            foreach (var product in productRepository.ListProducts())
            {
                if (product.ProductType == productType)
                {
                    materialCost = product.CostPerSquareFoot;
                }
            }
            return(materialCost * area);
        }
예제 #15
0
        public static List <Product> CreateProductList()
        {
            ProductManager manager = ProductManagerFactory.Create();

            ProductListResponse plResponse = manager.GetProductList();

            if (plResponse.Success)
            {
                return(plResponse.Products);
            }
            else
            {
                Console.WriteLine("An error occured: ");
                Console.WriteLine(plResponse.Message);
            }

            return(plResponse.Products);
        }
예제 #16
0
        public static void Field(Order order)

        {
            TaxLookUpResponse          taxResponse     = TaxManagerFactory.Create().TaxLookUp(order.State);
            ProductInformationResponse productResponse = ProductManagerFactory.Create().ProductInformation(order.ProductType);


            order.TaxRate            = Math.Round(taxResponse.TaxInformation.TaxRate, 2);
            order.CostPerSquareFoot  = Math.Round(productResponse.Product.CostPerSquareFoot, 2);
            order.LaborCostPerSquare = Math.Round(productResponse.Product.LaborCostPerSquareFoot, 2);


            order.MaterialCost = Math.Round(order.Area * order.CostPerSquareFoot, 2);
            order.LaborCost    = Math.Round(order.Area * order.LaborCostPerSquare, 2);

            order.Tax   = Math.Round(((order.MaterialCost + order.LaborCost) * (order.TaxRate / 100)), 2);
            order.Total = Math.Round((order.MaterialCost + order.LaborCost + order.Tax), 2);
        }
예제 #17
0
        public static void RequestingProduct(Order order, bool newOrder)
        {
            //Show a list of available products and pricing information to choose from. Again,
            //if a product is added to the file it should show up in the application without a code change.


            string originalProduct = order.ProductType;

            ProductListResponse productResponse = ProductManagerFactory.Create().ProductsAvailable();
            List <Product>      products        = productResponse.Products;

            int productNumber = -1;

            while (true)
            {
                Console.Clear();
                Console.WriteLine(!newOrder ? "Select Number to Replace Current Product Type\n" :
                                  "Select Number for Which Product Type\n");

                Output.DisplayIO.DisplayProductsList(products);

                Console.Write(!newOrder ? $"\nEnter Product Type #({originalProduct})" :
                              "\nProduct Type (#): ");
                string selectedNumber = Console.ReadLine();

                if (!newOrder ? selectedNumber == "" : false)
                {
                    order.ProductType = originalProduct;
                    break;
                }


                if (!int.TryParse(selectedNumber, out productNumber))
                {
                    continue;
                }

                if (0 <= productNumber && productNumber <= (products.Count - 1))
                {
                    order.ProductType = products[productNumber].ProductType;
                    break;
                }
            }
        }
예제 #18
0
        private void AskToEditProductType()
        {
            ProductManager   productManager = ProductManagerFactory.Create(); //calls product repo
            AddOrderResponse response       = new AddOrderResponse();

            _productsList = productManager.GetProductsToDisplay();
            Console.Clear();
            ConsoleIO.DisplayProductsAvailable(_productsList);
            ConsoleIO.DisplaySingleOrder(_originalOrder);

            while (true)
            {
                Console.Write("Enter new product or just press enter to continue: ");
                string productType = Console.ReadLine();

                if (productType == "")
                {
                    _productType = productManager.GetProductInfo(_originalOrder.ProductType);
                    break;
                }
                else
                {
                    response = productManager.CheckProduct(productType);
                    if (response.Success == false)
                    {
                        Console.WriteLine("An error occurred with the product entered.  Contact IT.");
                        continue;
                    }
                    else
                    {
                        _productType = productManager.GetProductInfo(productType);
                        break;
                    }
                }
            }
        }
        public void Execute()
        {
            Console.Clear();
            ConsoleIO.HeadingLable("Add an Order");
            Order newOrder = new Order();

            newOrder.OrderDate    = ConsoleIO.GetDateFromUser("Enter Order Date (ex. MM/DD/YYYY): ");
            newOrder.CustomerName = ConsoleIO.GetStringInputFromUser("Customer Name: ");

            StateTaxManager stateTaxManager = StateTaxManagerFactory.Create();
            bool            validState      = false;

            while (!validState)
            {
                StateLookupResponse response = stateTaxManager.GetStateTax(ConsoleIO.GetStringInputFromUser("State (ex. MN, or Minnesota): "));
                if (response.Success)
                {
                    newOrder.State   = response.StateTax.StateAbbreviation;
                    newOrder.TaxRate = response.StateTax.TaxRate;
                    validState       = true;
                }
                else
                {
                    ConsoleIO.RedMessage($"An Error Occured: {response.Message}");
                }
            }

            ProductManager      productManager = ProductManagerFactory.Create();
            ProductListResponse productList    = productManager.GetProductList();

            if (productList.Success)
            {
                ConsoleIO.HeadingLable("Product List");

                foreach (Product p in productList.Products)
                {
                    ConsoleIO.DisplayProducts(p);
                }
            }
            else
            {
                ConsoleIO.RedMessage($"An Error Occured: {productList.Message}");
                Console.WriteLine("\nPress any key to continue...");
                Console.ReadKey();
                return;
            }

            bool validProduct = false;

            while (!validProduct)
            {
                ProductLookupResponse response = productManager.GetProduct(ConsoleIO.GetStringInputFromUser("Product Name: "));
                if (response.Success)
                {
                    newOrder.ProductType            = response.Product.ProductType;
                    newOrder.CostPerSquareFoot      = response.Product.CostPerSquareFoot;
                    newOrder.LaborCostPerSquareFoot = response.Product.LaborCostPerSquareFoot;
                    validProduct = true;
                }
                else
                {
                    ConsoleIO.RedMessage($"An Error Occured: {response.Message}");
                }
            }

            newOrder.Area = ConsoleIO.GetAreaFromUser("Area: ");
            ConsoleIO.HeadingLable($"{newOrder.CustomerName}'s New Order");
            ConsoleIO.DisplayOrderInformation(newOrder, false);

            OrderManager orderManager = OrderManagerFactory.Create();

            bool submit = ConsoleIO.GetYesNoAnswerFromUser("Would you like to submit this order?");

            if (submit)
            {
                AddOrderResponse addResponse = orderManager.AddOrder(newOrder);

                if (addResponse.Success)
                {
                    Console.Clear();
                    ConsoleIO.YellowMessage("Order Submitted!");
                    ConsoleIO.DisplayOrderInformation(addResponse.Order, true);
                }
                else
                {
                    ConsoleIO.RedMessage($"An Error Occured: {addResponse.Message}");
                }
            }
            else
            {
                ConsoleIO.RedMessage("Add order cancelled.");
            }

            Console.WriteLine("\nPress any key to continue...");
            Console.ReadKey();
        }
예제 #20
0
        public void Execute()
        {
            OrderManager   manager        = OrderManagerFactory.Create();
            StateManager   stateManager   = StateManagerFactory.Create();
            ProductManager productManager = ProductManagerFactory.Create();


            ConsoleIO.OrderHeader("Edit an Order:");
            Console.WriteLine("Please enter the date of the order you would like to edit.");

            var repo = manager.GetAllOrders(ConsoleIO.GetDateFromUser());

            if (repo.Success)
            {
                ConsoleIO.OrderHeader("Edit an Order:");
                ConsoleIO.DisplayAllOdersForDate(repo.Orders);
                Console.WriteLine(ConsoleIO.SeparatorBar);
                Console.WriteLine();

                int orderNumber = ConsoleIO.GetOrderNumberFromUser("Which order number would you like to edit?: ");
                var ordertoedit = manager.LookupOrder(ConsoleIO.OrderDate, orderNumber);
                if (ordertoedit.Success)
                {
                    ConsoleIO.OrderHeader("Edit an Order:");
                    Console.WriteLine("Type the information to edit in the following prompts.\n If you wish to keep the information in parenthesis simply press enter.");
                    string name = ConsoleIO.GetCustomerNameEdit(ordertoedit.Order.Name);
                    if (!string.IsNullOrEmpty(name))
                    {
                        ordertoedit.Order.Name = name;
                    }
                    var response = stateManager.ListAllStates();
                    if (response.Success)
                    {
                        ConsoleIO.OrderHeader("Edit an Order:Type the information to edit in the following prompts.\n If you wish to keep the information in parenthesis simply press enter.");
                        ConsoleIO.DisplayAllStates(response.StateList);
                        Console.WriteLine();
                        while (true)
                        {
                            string state = ConsoleIO.GetStateForEdit(ordertoedit.Order.State);
                            if (!string.IsNullOrEmpty(state))
                            {
                                var StateTax = stateManager.LookupState(state);
                                if (StateTax.Success)
                                {
                                    ordertoedit.Order.State   = StateTax.StateTax.State;
                                    ordertoedit.Order.TaxRate = StateTax.StateTax.TaxRate;
                                    break;
                                }
                                else
                                {
                                    Console.WriteLine(StateTax.Message);
                                    ConsoleIO.EnterKeyToContinue();
                                }
                            }
                            break;
                        }
                    }
                    ConsoleIO.OrderHeader("Edit an Order:Type the information to edit in the following prompts.\n If you wish to keep the information in parenthesis simply press enter.");
                    var productresponse = productManager.ProductList();
                    if (productresponse.Success)
                    {
                        ConsoleIO.DisplayAllProducts(productresponse.Products);
                        Console.WriteLine();

                        while (true)
                        {
                            string product = ConsoleIO.GetProductTypeForEdit(ordertoedit.Order.PrductType);
                            if (!string.IsNullOrEmpty(product))
                            {
                                var customerProduct = productManager.ChooseProduct(product);
                                if (customerProduct.Success)
                                {
                                    ordertoedit.Order.PrductType             = customerProduct.Product.ProductType;
                                    ordertoedit.Order.CostPerSqureFoot       = customerProduct.Product.CostPerSquareFoot;
                                    ordertoedit.Order.LaborCostPerSquareFoot =
                                        customerProduct.Product.LaborCostPerSquareFoot;
                                    break;
                                }

                                else
                                {
                                    Console.WriteLine(customerProduct.Message);
                                    ConsoleIO.EnterKeyToContinue();
                                }
                            }
                            break;
                        }

                        while (true)
                        {
                            decimal area;
                            ConsoleIO.OrderHeader("Edit an Order:Type the information to edit in the following prompts. \nIf you wish to keep the information in parenthesis simply press enter.");
                            Console.Write($"Enter the squarefootage for the floor ({ordertoedit.Order.Area}): ");
                            string input = Console.ReadLine();
                            if (string.IsNullOrEmpty(input))
                            {
                                break;
                            }
                            if (!decimal.TryParse(input, out area))
                            {
                                Console.WriteLine("You must enter valid number.");
                                Console.WriteLine("Press any key to continue...");
                                Console.ReadKey();
                            }
                            if (area < 100)
                            {
                                Console.WriteLine("The square foot area must be at least 100 square feet.");
                                ConsoleIO.EnterKeyToContinue();
                            }

                            else
                            {
                                ordertoedit.Order.Area = area;
                                break;
                            }
                        }
                        ConsoleIO.OrderHeader("Edit an Order:");
                        ConsoleIO.DisplayOrders(ordertoedit.Order);
                        string answer = ConsoleIO.GetYesNoAnswerFromUser("Would you like to update this order?: ");
                        if (answer == "Y")
                        {
                            var editResponse = manager.EditOrder(ordertoedit.Order, ConsoleIO.OrderDate);
                            if (editResponse.Success)
                            {
                                Console.WriteLine("The order was updated!");
                                ConsoleIO.EnterKeyToContinue();
                            }
                            else
                            {
                                Console.WriteLine(editResponse.Message);
                                ConsoleIO.EnterKeyToContinue();
                            }
                        }
                        else
                        {
                            Console.WriteLine("The edit was cancelled.");
                            ConsoleIO.EnterKeyToContinue();
                        }


                        ordertoedit.Order.MaterialCost = ordertoedit.Order.Area * ordertoedit.Order.CostPerSqureFoot;
                        ordertoedit.Order.LaborCost    = ordertoedit.Order.Area * ordertoedit.Order.LaborCostPerSquareFoot;
                        ordertoedit.Order.Tax          = (ordertoedit.Order.MaterialCost + ordertoedit.Order.LaborCost) *
                                                         (ordertoedit.Order.TaxRate / 100);
                        ordertoedit.Order.Total = ordertoedit.Order.MaterialCost + ordertoedit.Order.LaborCost +
                                                  ordertoedit.Order.Tax;

                        Console.Clear();
                        ConsoleIO.DisplayOrders(ordertoedit.Order);
                        Console.WriteLine(ConsoleIO.SeparatorBar);
                    }

                    else
                    {
                        Console.WriteLine(response.Message);
                        ConsoleIO.EnterKeyToContinue();
                    }
                }

                else
                {
                    Console.WriteLine(ordertoedit.Message);
                    ConsoleIO.EnterKeyToContinue();
                }
            }
            else
            {
                Console.WriteLine(repo.Message);
                ConsoleIO.EnterKeyToContinue();
            }
        }
        public void Execute()
        {
            Console.Clear();
            StateManager   stateManager   = StateManagerFactory.Create();
            ProductManager productManager = ProductManagerFactory.Create();
            OrderManager   orderManager   = OrderManagerFactory.Create();
            Orders         newOrder       = new Orders();


            ConsoleIO.OrderHeader("Add an Order");
            Console.WriteLine("Please enter a future date for the order.");
            newOrder.orderDate = ConsoleIO.GetFutureDateFromUser();
            var numberResponse = orderManager.GetOrderNumber(ConsoleIO.OrderDate);

            newOrder.OrderNumber = numberResponse.OrderNumber;
            newOrder.Name        = ConsoleIO.GetCustomerNameFromUserForAdd();
            Console.Clear();
            var response = stateManager.ListAllStates();

            if (response.Success)
            {
                ConsoleIO.OrderHeader("Add an Order");
                ConsoleIO.DisplayAllStates(response.StateList);
                while (true)
                {
                    string state    = ConsoleIO.GetStateFromUserForAdd();
                    var    StateTax = stateManager.LookupState(state);
                    if (StateTax.Success)
                    {
                        newOrder.State   = StateTax.StateTax.State;
                        newOrder.TaxRate = StateTax.StateTax.TaxRate;
                        break;
                    }
                    else
                    {
                        Console.WriteLine(StateTax.Message);
                        ConsoleIO.EnterKeyToContinue();
                    }
                }
                ConsoleIO.OrderHeader("Add an Order");
                var productresponse = productManager.ProductList();
                if (productresponse.Success)
                {
                    ConsoleIO.DisplayAllProducts(productresponse.Products);

                    while (true)
                    {
                        string product         = ConsoleIO.GetProductTypeFromUser();
                        var    customerProduct = productManager.ChooseProduct(product);
                        if (customerProduct.Success)
                        {
                            newOrder.PrductType             = customerProduct.Product.ProductType;
                            newOrder.CostPerSqureFoot       = customerProduct.Product.CostPerSquareFoot;
                            newOrder.LaborCostPerSquareFoot = customerProduct.Product.LaborCostPerSquareFoot;
                            break;
                        }

                        else
                        {
                            Console.WriteLine(customerProduct.Message);
                            ConsoleIO.EnterKeyToContinue();
                        }
                    }
                    ConsoleIO.OrderHeader("Add an Order");
                    Console.WriteLine(ConsoleIO.SeparatorBar);
                    newOrder.Area = ConsoleIO.GetAreaFromUser();



                    newOrder.MaterialCost = newOrder.Area * newOrder.CostPerSqureFoot;
                    newOrder.LaborCost    = newOrder.Area * newOrder.LaborCostPerSquareFoot;
                    newOrder.Tax          = (newOrder.MaterialCost + newOrder.LaborCost) * (newOrder.TaxRate / 100);
                    newOrder.Total        = newOrder.MaterialCost + newOrder.LaborCost + newOrder.Tax;

                    ConsoleIO.OrderHeader("Add an Order");
                    ConsoleIO.DisplayOrders(newOrder);
                    Console.WriteLine(ConsoleIO.SeparatorBar);
                    string answer = ConsoleIO.GetYesNoAnswerFromUser("Would you like to place this order?: ");
                    if (answer == "Y")
                    {
                        var createresponse = orderManager.CreateOrder(newOrder, ConsoleIO.OrderDate);
                        if (createresponse.Success)
                        {
                            Console.WriteLine("The order was placed!");
                            ConsoleIO.EnterKeyToContinue();
                        }
                        else
                        {
                            Console.WriteLine(createresponse.Message);
                            ConsoleIO.EnterKeyToContinue();
                        }
                    }
                    else
                    {
                        Console.WriteLine("The order was cancelled.");
                        ConsoleIO.EnterKeyToContinue();
                    }
                }
                else
                {
                    Console.WriteLine(productresponse.Message);
                    ConsoleIO.EnterKeyToContinue();
                }
            }

            else
            {
                Console.WriteLine(response.Message);
                ConsoleIO.EnterKeyToContinue();
            }
        }
예제 #22
0
        internal static void Execute(DisplayMode mode)
        {
            DisplayOrderWorkFlow.Execute(mode, true, false, out OrderResponse response, out OrderManager myOM);

            if (!response.Success)
            {
                return;
            }
            string input;

            if (!ConsoleIO.GetString("Type (E/e) to edit this order: ", 1, out input))
            {
                return;
            }
            if (input.ToUpper() == "E")
            {
                Order editedOrder = new Order()
                {
                    OrderDate        = response.Order.OrderDate,
                    OrderNumber      = response.Order.OrderNumber,
                    OrderStateTax    = response.Order.OrderStateTax,
                    OrderProduct     = response.Order.OrderProduct,
                    CustomerName     = response.Order.CustomerName,
                    Area             = response.Order.Area,
                    FileTotal        = response.Order.FileTotal,
                    FileTax          = response.Order.FileTax,
                    FileMaterialCost = response.Order.FileMaterialCost,
                    FileLaborCost    = response.Order.FileLaborCost,
                };

                ConsoleIO.DisplayText("OK, you are now in Edit mode.", false, false, ConsoleColor.DarkYellow);
                //Customer Name
                if (!ConsoleIO.GetString($"Enter a new customer name, or press Enter to keep ({editedOrder.CustomerName}): ", _maxCustNameLength, out input))
                {
                    return;
                }
                if (input == "")
                {
                    //User pressed Enter
                }
                else
                {
                    if (input.Length > _maxCustNameLength || !(input.All(c => char.IsLetterOrDigit(c) || c == ' ' || c == '.' || c == ',')))
                    {
                        bool loop;
                        do
                        {
                            loop = false;
                            ConsoleIO.DisplayText("That name was invalid. \nOnly Characters [A-Z][a-z][0-9][,][.][ ] are allowed.", false, false, ConsoleColor.Red);
                            if (!ConsoleIO.GetString($"Enter the customer name (max {_maxCustNameLength} characters): ", _maxCustNameLength, out input))
                            {
                                return;
                            }
                            if (input == "" || input.Length > _maxCustNameLength || !(input.All(c => char.IsLetterOrDigit(c) || c == ' ' || c == '.' || c == ',')))
                            {
                                loop = true;
                            }
                        } while (loop);
                    }
                    else
                    {
                        editedOrder.CustomerName = input;
                    }
                }

                //State
                TaxManager    myTM       = TaxManagerFactory.Create();
                TaxesResponse responseTs = myTM.GetTaxes();
                if (!ConsoleIO.GetString($"Enter a new state (f.ex. {responseTs.Taxes[0].StateCode}), or press Enter to keep ({editedOrder.OrderStateTax.StateCode}): ", 2, out input))
                {
                    return;
                }
                if (input == "")
                {
                    //User pressed Enter
                }
                else
                {
                    TaxResponse responseT = myTM.GetTaxByState(input.ToUpper());
                    if (!responseT.Success)
                    {
                        ConsoleIO.DisplayText("That was not a valid state.", false, false, ConsoleColor.Red);
                        ConsoleIO.DisplayTaxes(responseTs.Taxes, false, false, ConsoleColor.Blue);
                        bool loop;
                        do
                        {
                            loop = false;
                            if (!ConsoleIO.GetString($"Enter a state (f.ex. {responseTs.Taxes[0].StateCode}) from the list: ", 2, out input))
                            {
                                return;
                            }
                            responseT = myTM.GetTaxByState(input.ToUpper());
                            if (!responseT.Success)
                            {
                                ConsoleIO.DisplayText("That was not a valid state.", false, false, ConsoleColor.Red);
                                loop = true;
                            }
                        } while (loop);
                        editedOrder.OrderStateTax = responseT.StateTax;
                    }
                    else
                    {
                        editedOrder.OrderStateTax = responseT.StateTax;
                    }
                }

                //Product
                if (!ConsoleIO.GetString($"Enter a new product type, or press Enter to keep the current one ({editedOrder.OrderProduct.ProductType}): ", 255, out input))
                {
                    return;
                }
                if (input == "")
                {
                    //User pressed Enter
                }
                else
                {
                    ProductManager  myPM      = ProductManagerFactory.Create();
                    ProductResponse responseP = myPM.GetProductByType(input.ToUpper());
                    if (!responseP.Success)
                    {
                        ConsoleIO.DisplayText("That was not a valid product type.", false, false, ConsoleColor.Red);
                        ProductsResponse responsePs = myPM.GetProducts();
                        ConsoleIO.DisplayProducts(responsePs.Products, false, false, ConsoleColor.Blue);
                        bool loop;
                        do
                        {
                            loop = false;
                            if (!ConsoleIO.GetString("Enter the product type from the list wish to select: ", 255, out input))
                            {
                                return;
                            }
                            responseP = myPM.GetProductByType(input.ToUpper());
                            if (!responseP.Success)
                            {
                                ConsoleIO.DisplayText("That was not a valid product type.", false, false, ConsoleColor.Red);
                                loop = true;
                            }
                        } while (loop);
                        editedOrder.OrderProduct = responseP.Product;
                    }
                    else
                    {
                        editedOrder.OrderProduct = responseP.Product;
                    }
                }

                //Area
                decimal decimalArea = editedOrder.Area;
                if (!ConsoleIO.GetString($"Enter a new area (>={_minArea} ft²), or press Enter to keep the current area ({editedOrder.Area}): ", 255, out input))
                {
                    return;
                }
                if (input == "")
                {
                    //User pressed Enter
                }
                else
                {
                    if (!(decimal.TryParse(input, out decimalArea)) || decimalArea < _minArea || decimalArea > _maxArea)
                    {
                        if (!ConsoleIO.GetDecimalValue($"Enter a valid Area (>={_minArea} ft²) : ", true, _minArea, _maxArea, out decimalArea))
                        {
                            return;
                        }
                        editedOrder.Area = decimalArea;
                    }
                    else
                    {
                        editedOrder.Area = decimalArea;
                    }
                }

                editedOrder.Recalculate();

                //Display Confirmation of Order Changes
                Console.Clear();
                ConsoleIO.DisplayText("Original order:", false, false, ConsoleColor.Blue);
                ConsoleIO.DisplayOrder(mode, response.Order, false, false, ConsoleColor.Blue);
                ConsoleIO.DisplayText("Edited order:", false, false, ConsoleColor.DarkYellow);
                ConsoleIO.DisplayOrder(mode, editedOrder, false, false, ConsoleColor.DarkYellow);

                //Prompt for Saving
                if (!ConsoleIO.GetString("Press (Y/y) if you wish to save the changes: ", 1, out input))
                {
                    return;
                }
                if (input.ToUpper() == "Y")
                {
                    OrderResponse editResponse = new OrderResponse();
                    editResponse = myOM.EditOrder(editedOrder);
                    if (editResponse.Success)
                    {
                        ConsoleIO.DisplayText("Changes were saved. \nPress any key to continue...", false, true);
                    }
                    else
                    {
                        ConsoleIO.DisplayText(editResponse.Message + "\nPress any key to continue...", false, true, ConsoleColor.Red);
                    }
                }
                else
                {
                    ConsoleIO.DisplayText("Changes were NOT saved. \nPress any key to continue...", false, true);
                }
            }
        }
예제 #23
0
        public void Execute()
        {
            Console.ForegroundColor = ConsoleColor.Green;
            OrderManager orderManager = OrderManagerFactory.Create();
            TaxManager taxManager = TaxManagerFactory.Create();
            ProductManager productManager = ProductManagerFactory.Create();


            Order newOrder = new Order();

            Console.Clear();
            Console.WriteLine("Edit Order");
            SeperatorBar();

            //Query Access To Order To Edit
            int orderNumber = QueryOrderNumber();
            DateTime orderDate = QueryDate();
            Order oldOrder = orderManager.DisplayOrder(orderNumber, orderDate).Order;
            DisplayOrder(oldOrder);

            //define edit in models
            if (YorN($"Are you sure you want to edit your order?") == "Y")
            {
                try
                {
                    OrderResponse oldOrderResponse = orderManager.DisplayOrder(orderNumber, orderDate);

                    if (oldOrderResponse.Success)
                    {
                        bool flag = true;
                        while (flag)
                        {
                            Console.WriteLine("Edit the Order Customer Name or press enter to keep the Old Order's Customer Name the same.");
                            if (Console.ReadLine() != "")
                            {
                                newOrder.CustomerName = QueryCustomerName();
                            }
                            else
                            {
                                newOrder.CustomerName = oldOrder.CustomerName;
                            }
                            Console.WriteLine("Edit the Order State or press enter to keep the Old Order's State the same.");
                            if (Console.ReadLine() != "")
                            {
                                newOrder.State = QueryState();
                            }
                            else
                            {
                                newOrder.State = oldOrder.State;
                            }
                            Console.WriteLine("Edit the Order Product Type or press enter to keep the Old Order's Product Type the same.");
                            if (Console.ReadLine() != "")
                            {
                                newOrder.ProductType = QueryProductType();
                            }
                            else
                            {
                                newOrder.ProductType = oldOrder.ProductType;
                            }
                            Console.WriteLine("Edit the Order Area or press enter to keep the Old Order's Area the same.");
                            if (Console.ReadLine() != "")
                            {
                                newOrder.Area = QueryArea();
                            }
                            else
                            {
                                newOrder.Area = oldOrder.Area;
                            }
                            newOrder.TaxRate = taxManager.GetStateTax(newOrder.State).TaxRate;
                            newOrder.CostPerSquareFoot = productManager.GetProductType(newOrder.ProductType).CostPerSquareFoot;
                            newOrder.LaborCostPerSquareFoot = productManager.GetProductType(newOrder.ProductType).LaborCostPerSquareFoot;
                            newOrder._calculateTotal();

                            flag = false;
                        }

                        EditOrderResponse response = orderManager.EditOrder(oldOrder, newOrder, orderDate, orderNumber);
                        if (response.Success)
                        {
                            Console.ForegroundColor = ConsoleColor.Green;
                            DisplayOrder(response.NewOrder);
                            Console.WriteLine("Your order has been successfully edited.");
                        }
                        else
                        {
                            Console.ForegroundColor = ConsoleColor.Yellow;
                            Console.WriteLine("An error occured, youe old order should still be in the database");
                            Console.WriteLine(response.Message);
                        }
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("Press any key to continue...");
                        Console.ReadKey();
                    }
                    else
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Your order was not saved");
                    }
                }
                catch (Exception ex)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("There was an issue with your input, redirecting you back to the menu");
                    Console.WriteLine("Press any key to continue...");
                    Console.ReadKey();
                }
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("An error occured");
            }
        }
예제 #24
0
        public void Execute()
        {
            string workflow = "Edit";

            OrderManager    orderManager    = OrderManagerFactory.Create();
            StateTaxManager stateTaxManager = StateTaxManagerFactory.Create();
            ProductManager  productManager  = ProductManagerFactory.Create();

            Headers.DisplayHeader(workflow);

            //get date
            DateTime date = ConsoleIO.GetExistingOrderDate("Enter the date of the order you would like to edit (MM/DD/YYYY): ");

            Headers.DisplayHeader(workflow);

            //get order number
            int orderNumber = ConsoleIO.GetOrderNumberFromUser("Enter the order number: ");

            OrderGetSingleResponse orderResponse = orderManager.GetSingleOrder(date, orderNumber);

            if (orderResponse.Success)
            {
                Headers.DisplayHeader(workflow);
                ShowDetails.DisplayOrderDetails(orderResponse.Order);
                Console.WriteLine("Press any key to begin editing...");
                Console.ReadKey();
            }
            else
            {
                Console.WriteLine("An error occured:");
                Console.WriteLine(orderResponse.Message);
                Console.WriteLine("Press any key to return to main menu...");
                Console.ReadKey();
                return;
            }

            Headers.DisplayHeader(workflow);


            //edit name
            string editName = ConsoleIO.GetCustomerName("Edit", orderResponse.Order.CustomerName);

            Headers.DisplayHeader(workflow);

            //edit state
            bool     validInput   = false;
            StateTax editStateTax = null;

            while (!validInput)
            {
                string editState = ConsoleIO.GetStateInputFromUser("Edit");
                if (editState == "")
                {
                    validInput = true;
                }
                else
                {
                    StateTaxResponse stateTaxResponse = stateTaxManager.GetStateTax(editState);
                    if (stateTaxResponse.Success == true)
                    {
                        editStateTax = stateTaxResponse.State;
                        validInput   = true;
                    }
                }
            }

            Headers.DisplayHeader(workflow);


            //edit product type
            List <Product> products    = productManager.GetProductList().Products;
            Product        editProduct = ConsoleIO.DisplayProducts(products, "Edit");

            Headers.DisplayHeader(workflow);

            //edit area

            decimal editArea = ConsoleIO.GetArea("Edit");

            Headers.DisplayHeader(workflow);

            //display order changes

            Order editOrder = new Order(orderResponse.Order);

            if (editName != "")
            {
                editOrder.CustomerName = editName;
            }
            if (editStateTax != null)
            {
                editOrder.State   = editStateTax.StateAbbreviation;
                editOrder.TaxRate = editStateTax.TaxRate;
            }
            if (editProduct != null)
            {
                editOrder.ProductType            = editProduct.ProductType;
                editOrder.LaborCostPerSquareFoot = editProduct.LaborCostPerSquareFoot;
                editOrder.CostPerSquareFoot      = editProduct.CostPerSquareFoot;
            }
            if (editArea != int.MaxValue)
            {
                editOrder.Area = editArea;
            }

            //send it!
            ShowDetails.DisplayOrderDetails(editOrder);

            if (ConsoleIO.GetYesOrNo("Submit changes to order?") == "Y")
            {
                OrderAddEditedResponse response = orderManager.AddEditedOrder(editOrder);
                if (!response.Success)
                {
                    Console.WriteLine("There was an error adding the order:");
                    Console.WriteLine(response.Message);
                }
                else
                {
                    Console.WriteLine("Order added! Press any key to return to main menu...");
                    Console.ReadKey();
                }
            }
            else
            {
                Console.WriteLine("Edit order cancelled :( Press any key to continue...");
                Console.ReadKey();
            }
        }
        public void Execute()
        {
            Console.Clear();
            ConsoleIO.HeadingLable("Edit an Order");

            //Get an order with an Order Number and Order Date
            int      orderNumber = ConsoleIO.GetIntInputFromUser("Order Number: ");
            DateTime orderDate   = ConsoleIO.GetDateFromUser("Order Date (MM/DD/YYYY): ", true);

            //Lookup Order and Begin editing or Error out
            OrderManager        orderManager = OrderManagerFactory.Create();
            OrderLookupResponse orderLookup  = orderManager.LookupOrder(orderNumber, orderDate);

            if (orderLookup.Success)
            {
                //Create a new order for the user to fill in params
                Order editOrder = new Order();

                //Display the order that will be edited
                ConsoleIO.HeadingLable($"Editing Order: {orderLookup.Order.OrderNumber} - {orderLookup.Order.OrderDate:MM/dd/yyyy}");

                //Get new order name from user, display the old name
                editOrder.CustomerName = ConsoleIO.GetStringInputFromUser($"Customer Name ({orderLookup.Order.CustomerName}): ", true);

                //Create a state tax object to get correct input from user for new order state params
                StateTaxManager stateTaxManager = StateTaxManagerFactory.Create();
                bool            validInput      = false;
                while (!validInput)
                {
                    //Get a state tax object that matches the user input unless input is ""
                    StateLookupResponse stateTaxResponse = stateTaxManager.GetStateTax(ConsoleIO.GetStringInputFromUser($"State (ex. MN, or Minnesota)({orderLookup.Order.State}): ", true));
                    if (!stateTaxResponse.Success && stateTaxResponse.Message == "")
                    {
                        validInput = true;
                    }
                    else if (stateTaxResponse.Success)
                    {
                        //If tax object exists assign new order state and tax params
                        editOrder.State   = stateTaxResponse.StateTax.StateAbbreviation;
                        editOrder.TaxRate = stateTaxResponse.StateTax.TaxRate;
                        validInput        = true;
                    }
                    else
                    {
                        ConsoleIO.RedMessage($"An Error Occured: {stateTaxResponse.Message}");
                    }
                }

                //Create a product manager to get a product list
                ProductManager      productManager = ProductManagerFactory.Create();
                ProductListResponse productList    = productManager.GetProductList();

                //Print out product list or error out
                if (productList.Success)
                {
                    ConsoleIO.HeadingLable("Product List");

                    foreach (Product p in productList.Products)
                    {
                        ConsoleIO.DisplayProducts(p);
                    }
                }
                else
                {
                    ConsoleIO.RedMessage($"An Error Occured: {productList.Message}");
                    Console.WriteLine("\nPress any key to continue...");
                    Console.ReadKey();
                    return;
                }

                //Get valid user input for new order product type
                bool validProduct = false;
                while (!validProduct)
                {
                    ProductLookupResponse productResponse = productManager.GetProduct(ConsoleIO.GetStringInputFromUser($"Product Name ({orderLookup.Order.ProductType}): ", true));

                    //User enters nothing and nothing is assigned
                    if (!productResponse.Success && productResponse.Message == "")
                    {
                        validProduct = true;
                    }
                    else if (productResponse.Success)
                    {
                        //Valid entry assigns new order product params
                        editOrder.ProductType            = productResponse.Product.ProductType;
                        editOrder.CostPerSquareFoot      = productResponse.Product.CostPerSquareFoot;
                        editOrder.LaborCostPerSquareFoot = productResponse.Product.LaborCostPerSquareFoot;
                        validProduct = true;
                    }
                    else
                    {
                        ConsoleIO.RedMessage($"An Error Occured: {productResponse.Message}");
                    }
                }

                //Get valid area for new order from user
                editOrder.Area = ConsoleIO.GetAreaFromUser($"Area ({orderLookup.Order.Area}): ", true);

                //Assign old order params to new order params
                EditOrderResponse editResponse = orderManager.EditOrder(orderLookup.Order, editOrder);

                //If the edit is successful ask to save order, otherwise error out
                if (editResponse.Success)
                {
                    //Display
                    ConsoleIO.HeadingLable("Updated Order");
                    ConsoleIO.DisplayOrderInformation(editResponse.Order, true);
                    bool saveEdit = ConsoleIO.GetYesNoAnswerFromUser("Would you like to submit and save the updated order information?");
                    if (saveEdit)
                    {
                        SaveOrderResponse saveResponse = orderManager.SaveOrder(editResponse.Order);
                        if (saveResponse.Success)
                        {
                            ConsoleIO.YellowMessage($"\nUpdated Order: {editResponse.Order.OrderNumber} - {editResponse.Order.OrderDate:MM/dd/yyyy}");
                        }
                        else
                        {
                            ConsoleIO.RedMessage($"An Error Occured: {saveResponse.Message}");
                        }
                    }
                }
                else
                {
                    ConsoleIO.RedMessage($"An Error Occured: {editResponse.Message}");
                }
            }
            else
            {
                ConsoleIO.RedMessage(orderLookup.Message);
            }
            Console.WriteLine("\nPress any key to continue...");
            Console.ReadKey();
        }
예제 #26
0
        internal static void Execute(DisplayMode mode)
        {
            Order newOrder = new Order();

            ConsoleIO.DisplayText("===== Add Order =============================================", true, false);
            if (!ConsoleIO.GetDateValue("Enter the date you wish create an order for: ", DateTime.Now.Date, out DateTime orderDate))
            {
                return;
            }
            newOrder.OrderDate = orderDate;

            //Customer Name
            string customerName;
            bool   loop;

            do
            {
                loop = false;
                if (!ConsoleIO.GetString($"Enter the customer name (max {_maxCustNameLength} characters): ", _maxCustNameLength, out customerName))
                {
                    return;
                }
                //if (!(customerName.All(c => char.IsLetterOrDigit(c) || c == '.' || c == ',')))
                if (customerName == "" || customerName.Length > _maxCustNameLength || !(customerName.All(c => char.IsLetterOrDigit(c) || c == ' ' || c == '.' || c == ',')))
                {
                    ConsoleIO.DisplayText("The name entered contains invalid characters. \nOnly Characters [A-Z][a-z][0-9][,][.][ ] are allowed!", false, false, ConsoleColor.Red);
                    loop = true;
                }
            } while (loop);
            newOrder.CustomerName = customerName;

            //State
            String        input;
            TaxManager    myTM       = TaxManagerFactory.Create();
            TaxesResponse responseTs = myTM.GetTaxes();

            ConsoleIO.DisplayTaxes(responseTs.Taxes, false, false, ConsoleColor.Blue);
            TaxResponse responseT = new TaxResponse();

            do
            {
                loop = false;
                if (!ConsoleIO.GetString($"Enter a state (f.ex. {responseTs.Taxes[0].StateCode}) from the list: ", 2, out input))
                {
                    return;
                }
                responseT = myTM.GetTaxByState(input);
                if (!responseT.Success)
                {
                    ConsoleIO.DisplayText("That was not a valid state.", false, false, ConsoleColor.Red);
                    loop = true;
                }
            } while (loop);
            newOrder.OrderStateTax = responseT.StateTax;

            //Product
            ProductManager   myPM       = ProductManagerFactory.Create();
            ProductsResponse responsePs = myPM.GetProducts();

            ConsoleIO.DisplayProducts(responsePs.Products, false, false, ConsoleColor.Blue);
            ProductResponse responseP = new ProductResponse();

            do
            {
                loop = false;
                if (!ConsoleIO.GetString("Enter the product type from the list wish to select: ", 255, out input))
                {
                    return;
                }
                responseP = myPM.GetProductByType(input);
                if (!responseP.Success)
                {
                    ConsoleIO.DisplayText("That was not a valid product type.", false, false, ConsoleColor.Red);
                    loop = true;
                }
            } while (loop);
            newOrder.OrderProduct = responseP.Product;

            //Area
            if (!ConsoleIO.GetDecimalValue($"Enter a valid Area (>={_minArea} ft²) : ", true, _minArea, _maxArea, out decimal decimalArea))
            {
                return;
            }
            newOrder.Area = decimalArea;

            newOrder.Recalculate();

            //Display Confirmation of Order Changes
            Console.Clear();
            ConsoleIO.DisplayText("New order:", false, false, ConsoleColor.DarkYellow);
            ConsoleIO.DisplayOrder(mode, newOrder, false, false, ConsoleColor.DarkYellow);

            //Prompt for Saving
            if (!ConsoleIO.GetString($"Press (Y/y) if you wish to save this new order.", 1, out input))
            {
                return;
            }
            if (input.ToUpper() == "Y")
            {
                OrderManager  myOM     = OrderManagerFactory.Create(orderDate);
                OrderResponse response = new OrderResponse();
                response = myOM.AddOrder(newOrder);
                if (response.Success)
                {
                    ConsoleIO.DisplayText("The order was saved. \nPress any key to continue...", false, true);
                }
                else
                {
                    ConsoleIO.DisplayText(response.Message + "\nPress any key to continue...", false, true, ConsoleColor.Red);
                }
            }
            else
            {
                ConsoleIO.DisplayText("The order was NOT saved. \nPress any key to continue...", false, true);
            }
        }
예제 #27
0
        public void Execute()
        {
            InputRules      inputManager   = new InputRules();
            OrderManager    manager        = OrderManagerFactory.Create();
            TaxStateManager stateManager   = TaxStateManagerFactory.Create();
            ProductManager  productManager = ProductManagerFactory.Create();
            Order           order          = new Order();
            DateTime        orderDate;
            string          stateInput, productInput, tempAreaInput;



            Console.Clear();
            Console.WriteLine("Edit an Order");
            Console.WriteLine("--------------------");



            //Get order date file
            Console.WriteLine("Please enter the Order Date you would like to edit");
            while (!DateTime.TryParse(Console.ReadLine(), out orderDate))
            {
                Console.WriteLine("That is not a valid format, please try again");
            }



            //display all orders
            OrderLookupResponse fileResponse = manager.AllOrderLookup(orderDate);

            if (fileResponse.Success)
            {
                foreach (Order entry in fileResponse.Orders)
                {
                    ConsoleIO.DisplayOrder(entry);
                }
            }
            Console.WriteLine();



            //get order number and make edits
            int orderNumberInput;

            Console.WriteLine("Enter the Order Number you'd like to edit:");
            while (!int.TryParse(Console.ReadLine(), out orderNumberInput))
            {
                Console.WriteLine("That is not a valid input.  Try again");
            }
            OrderLookupResponse response = manager.OrderLookup(orderDate, orderNumberInput);

            if (response.Success)
            {
                ConsoleIO.DisplayOrder(response.Order);
                order = response.Order;
                Console.WriteLine();

                Console.WriteLine("Please enter new values, entering nothing will keep current value.");



                //Edit Name
                NameCheckResponse nameResponse = new NameCheckResponse();
                Console.Write("Enter the Customer's Name:  ");
                string nameInput = Console.ReadLine().Replace(',', '|').Trim();
                nameResponse = inputManager.NameCheck(nameInput);
                if (nameInput != "")
                {
                    while (!nameResponse.Success)
                    {
                        nameResponse = inputManager.NameCheck(nameInput);
                        if (!nameResponse.Success)
                        {
                            Console.WriteLine(nameResponse.Message);
                            Console.Write("Name: ");
                            nameInput = Console.ReadLine();
                        }
                    }
                    order.CustomerName = nameInput;
                }
                Console.Clear();



                //Display States
                Console.WriteLine("These are the states in our system, please enter which state.");
                foreach (TaxState entry in stateManager.GetTaxStates())
                {
                    Console.WriteLine(entry.StateName);
                }

                //Edit State
                TaxStateLookupResponse  stateResponse      = new TaxStateLookupResponse();
                StateInputCheckResponse stateInputResponse = new StateInputCheckResponse();

                Console.WriteLine("Please enter new values, entering nothing will keep current value.");

                Console.Write("State: ");
                stateInput         = Console.ReadLine();
                stateInputResponse = inputManager.StateCheck(stateInput);
                if (stateInputResponse.Success)
                {
                    stateResponse.Success = false;
                    while (!stateResponse.Success)
                    {
                        stateResponse = stateManager.FindTaxState(stateInput);
                        if (!stateResponse.Success)
                        {
                            Console.WriteLine(stateResponse.Message);
                            Console.Write("State: ");
                            stateInput = Console.ReadLine();
                        }
                    }
                    order.State = stateInput;
                }
                Console.Clear();



                //Display Products
                Console.WriteLine("These are the materials availbale to choose from:");
                foreach (Product entry in productManager.GetProducts())
                {
                    Console.WriteLine(string.Format("{0},  Labor Cost: {1},  Material Cost: {2}",
                                                    entry.ProductType,
                                                    entry.LaborCostPerSquareFoot,
                                                    entry.CostPerSquareFoot));
                }

                //Edit Product
                ProductLookupResposnse    productResponse      = new ProductLookupResposnse();
                ProductInputCheckResponse productInputResponse = new ProductInputCheckResponse();
                Console.WriteLine("Please enter new values, entering nothing will keep current value.");

                Console.Write("Product Type: ");
                productInput         = Console.ReadLine();
                productInputResponse = inputManager.ProductCheck(productInput);
                if (productInputResponse.Success)
                {
                    productResponse.Success = false;
                    while (!productResponse.Success)
                    {
                        productResponse = productManager.FindProduct(productInput);
                        if (!productResponse.Success)
                        {
                            Console.WriteLine(productResponse.Message);
                            Console.Write("Product Type: ");
                            productInput = Console.ReadLine();
                        }
                    }
                    order.ProductType = productInput;
                }
                Console.Clear();



                //Edit Area
                AreaCheckResponse areaResponse = new AreaCheckResponse();
                Console.Write("Area: ");
                decimal areaInput;
                tempAreaInput = Console.ReadLine();
                if (tempAreaInput != "")
                {
                    areaResponse.Success = false;
                    while (!decimal.TryParse(tempAreaInput, out areaInput))
                    {
                        Console.WriteLine("That is not a valid input.");
                        Console.Write("Area: ");
                        tempAreaInput = Console.ReadLine();
                    }
                    while (!areaResponse.Success)
                    {
                        areaResponse = inputManager.AreaCheck(areaInput);
                        Console.WriteLine(areaResponse.Message);
                    }
                    order.Area = areaInput;
                }
                Console.Clear();



                if (stateInput == "" && productInput == "" && tempAreaInput == "")
                {
                    order = OrderCreation.EditedOrder(order.OrderDate, order.OrderNumber, order.CustomerName, order.State, order.StateAbv, order.TaxRate, order.ProductType, order.Area, order.CostPerSqaureFoot, order.LaborCostPerSquareFoot, order.MaterialCost, order.LaborCost, order.Tax, order.Total);
                }
                else
                {
                    order = OrderCreation.CreateOrder(order.OrderDate, order.OrderNumber, order.CustomerName, order.State, order.ProductType, order.Area);
                }
                ConsoleIO.DisplayOrder(order);
                Console.WriteLine();
                string answer = null;
                while (answer == null)
                {
                    Console.WriteLine("Do you want to save this order? (Y/N)");
                    answer = Console.ReadLine().ToUpper();
                    switch (answer)
                    {
                    case "Y":
                        manager.UpdateOrder(order);
                        Console.WriteLine("Order Saved");
                        break;

                    case "N":
                        Console.WriteLine("Order Not Saved");
                        break;

                    default:
                        Console.WriteLine("That is not a valid input, try again");
                        answer = null;
                        break;
                    }
                }
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey();
                return;
            }
            else
            {
                Console.WriteLine("That Order does not currently exist in our system");
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey();
                return;
            }
        }
        public void Execute()
        {
            OrderManager   orderManager   = OrderManagerFactory.Create();
            ProductManager productManager = ProductManagerFactory.Create();
            TaxManager     taxManager     = TaxManagerFactory.Create();

            Console.Clear();
            Console.WriteLine("Edit an order");
            Console.WriteLine(ConsoleIO.LineBar);
            Console.WriteLine();
            Console.WriteLine("Press any key to edit an order.");
            Console.ReadKey();
            Console.Clear();

            Order editOrder = new Order();

            editOrder.OrderDate   = EditOrderCheck.GetDate("Enter the order date (MMDDYYYY): ");
            editOrder.OrderNumber = int.Parse(EditOrderCheck.GetOrderNumber("Enter the order number you would like to edit: "));

            EditOrderResponse response = orderManager.EditOrder(editOrder.OrderDate, editOrder.OrderNumber);

            Console.Clear();

            if (response.Success && response.Order != null)
            {
                editOrder.CustomerName = EditOrderCheck.GetName($"Enter customer name ({response.Order.CustomerName}): ", response.Order.CustomerName);
                editOrder.State        = EditOrderCheck.GetState($"Enter your state location ({response.Order.State}): ", response.Order.State);
                editOrder.ProductType  = EditOrderCheck.GetProduct($"Enter product you would like to order ({response.Order.ProductType}): ", response.Order.ProductType);
                editOrder.Area         = decimal.Parse(EditOrderCheck.GetArea($"Enter area amount you would like to order (minimum of 100sq ft) ({response.Order.Area}sq ft): ", response.Order.Area));

                var productLookup = productManager.ReturnProduct(editOrder.ProductType);
                editOrder.CostPerSquareFoot     = productLookup.CostPerSquareFoot;
                editOrder.LaborCostPerSqareFoot = productLookup.LaborCostPerSqareFoot;

                var taxesLookup = taxManager.LoadTax(editOrder.State);
                editOrder.TaxRate = taxesLookup.TaxRate;

                editOrder.MaterialCost = editOrder.MaterialCostCalc(editOrder.Area, editOrder.CostPerSquareFoot);
                editOrder.LaborCost    = editOrder.LaborCostCalc(editOrder.Area, editOrder.LaborCostPerSqareFoot);
                editOrder.Tax          = editOrder.TaxCalc(editOrder.MaterialCost, editOrder.LaborCost, editOrder.TaxRate);
                editOrder.Total        = editOrder.TotalCalc(editOrder.MaterialCost, editOrder.LaborCost, editOrder.Tax);
            }

            if (response.Order == null || response.Orders.Count() == 0)
            {
                Console.WriteLine("An error occurred: ");
                Console.WriteLine($"Order date {editOrder.OrderDate} and / or Order # {editOrder.OrderNumber} does not exist.");
                Console.WriteLine();
                Console.WriteLine("Press any key to return to the main menu...");
                Console.ReadKey();
                Console.Clear();
                return;
            }

            Console.Clear();
            ConsoleIO.DisplayOrderDetails(editOrder);
            bool keepLooping = true;

            do
            {
                Console.WriteLine();
                Console.WriteLine("Would you like to save your edited order? Y for Yes or N for No: ");
                string input = Console.ReadLine();
                if (input.ToUpper() == "Y" || input.ToUpper() == "Yes")
                {
                    orderManager.ExportEditOrder(response.Orders, editOrder, editOrder.OrderDate, editOrder.OrderNumber);

                    Console.WriteLine();
                    Console.WriteLine("Your order has been edited.");
                    keepLooping = false;
                }
                else if (input.ToUpper() == "N" || input.ToUpper() == "No")
                {
                    Console.WriteLine();
                    Console.WriteLine("No edits were made to your order.");
                    keepLooping = false;
                }
                else
                {
                    Console.WriteLine();
                    Console.WriteLine("You pressed an incorrect key. Press enter to try again...");
                    Console.ReadKey();
                    keepLooping = true;
                }
            } while (keepLooping == true);

            Console.WriteLine();
            Console.WriteLine("Press any key to return to the main menu...");
            Console.ReadKey();
        }
예제 #29
0
        public void Execute()
        {
            OrderManager    manager        = OrderManagerFactory.Create();
            TaxStateManager stateManager   = TaxStateManagerFactory.Create();
            ProductManager  productManager = ProductManagerFactory.Create();
            InputRules      inputManager   = new InputRules();
            Order           order          = new Order();

            DateTime orderDate = DateTime.MinValue;

            Console.Clear();
            Console.WriteLine("Add an Order");
            Console.WriteLine("--------------------");


            //GET ORDER DATE
            OrderLookupResponse response     = new OrderLookupResponse();
            DateCheckResponse   dateResponse = new DateCheckResponse();

            dateResponse.Success = false;
            int orderNumber = 1;

            while (!dateResponse.Success)
            {
                Console.WriteLine("Please enter the Order Date you would like to add:");

                while (!DateTime.TryParse(Console.ReadLine(), out orderDate))
                {
                    Console.WriteLine("That is not a valid format, please try again");
                }
                dateResponse = inputManager.DateCheck(orderDate);
                Console.WriteLine(dateResponse.Message);
            }

            response = manager.AllOrderLookup(orderDate);

            if (response.Success)
            {
                foreach (Order entry in response.Orders)
                {
                    ConsoleIO.DisplayOrder(entry);
                }
                Console.WriteLine();
                Console.WriteLine("Here is the current status of this Order Date");
                if (response.Orders != null)
                {
                    orderNumber = response.Orders.LastOrDefault().OrderNumber + 1;
                }
            }


            //GET CUSTOMER NAME
            string            nameInput    = null;
            NameCheckResponse nameResponse = new NameCheckResponse();

            nameResponse.Success = false;

            while (!nameResponse.Success)
            {
                Console.Write("Enter the Customer's Name:  ");
                nameInput    = Console.ReadLine().Replace(',', '|').Trim();
                nameResponse = inputManager.NameCheck(nameInput);
                Console.WriteLine(nameResponse.Message);
            }
            Console.Clear();


            //GET STATE
            string stateInput = null;

            Console.WriteLine("These are the states in our system, please enter which state.");
            foreach (TaxState state in stateManager.GetTaxStates())
            {
                Console.WriteLine(state.StateName + ", " + state.StateCode);
            }

            TaxStateLookupResponse  stateResponse      = new TaxStateLookupResponse();
            StateInputCheckResponse stateInputResponse = new StateInputCheckResponse();

            stateResponse.Success      = false;
            stateInputResponse.Success = false;

            while (!stateResponse.Success)
            {
                while (!stateInputResponse.Success)
                {
                    Console.Write("Enter the State:  ");
                    stateInput         = Console.ReadLine();
                    stateInputResponse = inputManager.StateCheck(stateInput);
                    Console.WriteLine(stateInputResponse.Message);
                }

                stateResponse = stateManager.FindTaxState(stateInput);
                if (!stateResponse.Success)
                {
                    Console.WriteLine(stateResponse.Message);
                    Console.Write("Enter the State:  ");
                    stateInput = Console.ReadLine();
                }
            }
            Console.Clear();


            //GET PRODUCT MATERIAL
            string productInput = null;

            Console.WriteLine("These are the materials availbale to choose from:");
            foreach (Product product in productManager.GetProducts())
            {
                Console.WriteLine(string.Format("{0},  Labor Cost: {1},  Material Cost: {2}",
                                                product.ProductType,
                                                product.LaborCostPerSquareFoot,
                                                product.CostPerSquareFoot));
            }
            ProductLookupResposnse    productResponse      = new ProductLookupResposnse();
            ProductInputCheckResponse productInputResponse = new ProductInputCheckResponse();

            productResponse.Success      = false;
            productInputResponse.Success = false;

            while (!productResponse.Success)
            {
                while (!productInputResponse.Success)
                {
                    Console.Write("Enter the Type of materials:  ");
                    productInput         = Console.ReadLine();
                    productInputResponse = inputManager.ProductCheck(productInput);
                    Console.WriteLine(productInputResponse.Message);
                }

                productResponse = productManager.FindProduct(productInput);
                if (!productResponse.Success)
                {
                    Console.WriteLine(productResponse.Message);
                    Console.Write("Enter the Type of materials:  ");
                    productInput = Console.ReadLine();
                }
            }
            Console.Clear();


            //GET AREA
            decimal           areaInput    = 0;
            AreaCheckResponse areaResponse = new AreaCheckResponse();

            areaResponse.Success = false;
            while (!areaResponse.Success)
            {
                Console.Write("Enter the square footage of the Area:  ");
                while (!decimal.TryParse(Console.ReadLine(), out areaInput))
                {
                    Console.WriteLine("That is not a valid input.");
                }
                areaResponse = inputManager.AreaCheck(areaInput);
                Console.WriteLine(areaResponse.Message);
            }
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();


            order = OrderCreation.CreateOrder(orderDate, orderNumber, nameInput, stateInput, productInput, areaInput);
            Console.Clear();
            ConsoleIO.DisplayOrder(order);
            Console.WriteLine();
            string answer = null;

            while (answer == null)
            {
                Console.WriteLine("Do you want to save this order? (Y/N)");
                answer = Console.ReadLine().ToUpper();
                switch (answer)
                {
                case "Y":
                    manager.CreateOrder(order);
                    Console.WriteLine("Order Saved");
                    break;

                case "N":
                    Console.WriteLine("Order Not Saved");
                    break;

                default:
                    Console.WriteLine("That is not a valid input, try again");
                    answer = null;
                    break;
                }
            }
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
            return;
        }
        public void Execute()
        {
            OrderManager   orderManager   = OrderManagerFactory.Create();
            ProductManager productManager = ProductManagerFactory.Create();
            TaxManager     taxManager     = TaxManagerFactory.Create();

            Console.Clear();
            Console.WriteLine("Place an order");
            Console.WriteLine(ConsoleIO.LineBar);
            Console.WriteLine();
            Console.WriteLine("Press any key to start your order.");
            Console.ReadKey();
            Console.Clear();

            Order newOrder = new Order();

            newOrder.OrderDate    = AddOrderCheck.GetDate("Enter a future order date (MMDDYYYY): ");
            newOrder.CustomerName = AddOrderCheck.GetName("Enter customer name: ");
            newOrder.State        = AddOrderCheck.GetState("Enter your State location (ex. OH for Ohio): ");
            newOrder.ProductType  = AddOrderCheck.GetProduct("Enter product you would like to order: ");
            newOrder.Area         = decimal.Parse(AddOrderCheck.GetArea("Enter area amount you would like to order (minimum of 100sq ft): "));

            var productLookup = productManager.ReturnProduct(newOrder.ProductType);

            newOrder.CostPerSquareFoot     = productLookup.CostPerSquareFoot;
            newOrder.LaborCostPerSqareFoot = productLookup.LaborCostPerSqareFoot;

            var taxesLookup = taxManager.LoadTax(newOrder.State);

            newOrder.TaxRate = taxesLookup.TaxRate;

            newOrder.MaterialCost = newOrder.MaterialCostCalc(newOrder.Area, newOrder.CostPerSquareFoot);
            newOrder.LaborCost    = newOrder.LaborCostCalc(newOrder.Area, newOrder.LaborCostPerSqareFoot);
            newOrder.Tax          = newOrder.TaxCalc(newOrder.MaterialCost, newOrder.LaborCost, newOrder.TaxRate);
            newOrder.Total        = newOrder.TotalCalc(newOrder.MaterialCost, newOrder.LaborCost, newOrder.Tax);

            AddOrderResponse response = orderManager.AddOrder(newOrder, newOrder.OrderDate);

            Console.Clear();

            if (response.Success)
            {
                ConsoleIO.DisplayOrderDetails(response.NewOrder);
                bool keepLooping = true;

                do
                {
                    Console.WriteLine();
                    Console.WriteLine("Would you like to save your new order? Y for Yes or N for No: ");
                    string input = Console.ReadLine();
                    if (input.ToUpper() == "Y" || input.ToUpper() == "Yes")
                    {
                        Console.WriteLine();
                        Console.WriteLine("Your order has been placed.");
                        keepLooping = false;
                    }
                    else if (input.ToUpper() == "N" || input.ToUpper() == "No")
                    {
                        orderManager.RemoveOrder(newOrder, newOrder.OrderDate, newOrder.OrderNumber);
                        Console.WriteLine();
                        Console.WriteLine("Your order has been cancelled.");
                        keepLooping = false;
                    }
                    else
                    {
                        Console.WriteLine();
                        Console.WriteLine("You pressed an incorrect key. Press enter to try again...");
                        Console.ReadKey();
                        keepLooping = true;
                    }
                } while (keepLooping == true);
            }
            else
            {
                Console.WriteLine();
                Console.WriteLine("An error occurred: ");
                Console.WriteLine(response.Message);
            }
            Console.WriteLine();
            Console.WriteLine("Press any key to return to the main menu...");
            Console.ReadKey();
        }