Beispiel #1
0
        private static void PromptAddOrder()
        {
            string      customerName = "";
            string      state        = "";
            ProductType productType  = null;
            decimal     area         = 0M;

            while (string.IsNullOrEmpty(customerName))
            {
                OffsetTop();
                Console.ForegroundColor = PromptColor;
                Console.Write("\tEnter the customer name: ");
                Console.ForegroundColor = EmphasisColor;
                customerName            = Console.ReadLine();
                Console.ResetColor();
                Console.Clear();
            }

            state       = PromptForValidState("Enter the customer state: ", true);
            productType = PromptForValidProductType("Enter the product type: ", true);
            area        = PromptForValidArea(productType, true);

            Order orderToAdd = new Order()
            {
                CustomerName = customerName,
                State        = state,
                ProductType  = productType.Type,
                Area         = area
            };

            //calculate remaining fields and assign order number
            orderToAdd = OrderOperations.CalculateRemainingOrderFields(orderToAdd);
            orderToAdd = OrderOperations.AssignOrderNumber(orderToAdd);
            if (PromptConfirmOrder(orderToAdd, "Would you like to add the order? "))
            {
                OrderOperations.AddOrder(orderToAdd);
                Console.Clear();
                DisplayOrder(orderToAdd);
                Console.ForegroundColor = SuccessColor;
                Console.WriteLine("\tOrder added successfully.");
                Console.WriteLine();
                PressEnterToContinueToMain();
            }
            else
            {
                Console.Clear();
                orderToAdd = EditOrder(orderToAdd); //TODO: Check what happens if an error occurs during edit?
                if (orderToAdd != null)             //if it's null, they chose to cancel and return to the main menu
                {
                    OrderOperations.AddOrder(orderToAdd);
                    DisplayOrder(orderToAdd);
                    Console.ForegroundColor = SuccessColor;
                    Console.WriteLine("\tOrder added successfully.");
                    PressEnterToContinueToMain();
                }
                Console.Clear();
            }
        }
        public void CalculateRemainingOrderFieldsTest(string state, string productType, decimal area, decimal expectedTotal)
        {
            Order orderToTest = new Order();

            orderToTest.State       = state;
            orderToTest.ProductType = productType;
            orderToTest.Area        = area;
            orderToTest             = OrderOperations.CalculateRemainingOrderFields(orderToTest);

            Assert.AreEqual(expectedTotal, decimal.Round(orderToTest.Total, 2));
        }
Beispiel #3
0
        private static Order EditOrder(Order orderToEdit)
        {
            bool doneEditing  = false;
            bool hadError     = false;
            int  fieldChanged = 0;

            while (!doneEditing)
            {
                //display order info with edit options, coloring items that have been changed
                OffsetTop();
                int fieldNameFormatter = -18;
                int fieldValueLength   = 0;
                Console.ForegroundColor = EmphasisColor;
                Console.WriteLine("\tEdit Order");
                Console.WriteLine("\t-----------------------------------");
                Console.ResetColor();
                Console.WriteLine("\t" + "   {0," + fieldNameFormatter + "}{1," + fieldValueLength + "}", "Order Date:", orderToEdit.Date.ToString("d"));
                Console.WriteLine("\t" + "   {0," + fieldNameFormatter + "}{1," + fieldValueLength + "}", "Order #:", orderToEdit.Number);
                Console.ForegroundColor = EmphasisColor;
                Console.Write("\t1. ");
                Console.ResetColor();
                if (fieldChanged == 1)
                {
                    Console.ForegroundColor = SuccessColor;
                }
                Console.WriteLine("{0," + fieldNameFormatter + "}{1," + fieldValueLength + "}", "Customer Name:", orderToEdit.CustomerName);
                Console.ForegroundColor = EmphasisColor;
                Console.Write("\t2. ");
                Console.ResetColor();
                if (fieldChanged == 2)
                {
                    Console.ForegroundColor = SuccessColor;
                }
                Console.WriteLine("{0," + fieldNameFormatter + "}{1," + fieldValueLength + "}", "State:", orderToEdit.State);
                Console.WriteLine("\t" + "   {0," + fieldNameFormatter + "}{1," + fieldValueLength + ":P}", "Tax Percent:", orderToEdit.TaxPercent * 0.01M);
                Console.ForegroundColor = EmphasisColor;
                Console.Write("\t3. ");
                Console.ResetColor();
                if (fieldChanged == 3)
                {
                    Console.ForegroundColor = SuccessColor;
                }
                Console.WriteLine("{0," + fieldNameFormatter + "}{1," + fieldValueLength + "}", "Product Type:", orderToEdit.ProductType);
                Console.ForegroundColor = EmphasisColor;
                Console.Write("\t4. ");
                Console.ResetColor();
                if (fieldChanged == 4)
                {
                    Console.ForegroundColor = SuccessColor;
                }
                Console.WriteLine("{0," + fieldNameFormatter + "}{1," + fieldValueLength + ":n0}" + " sq feet", "Area:", orderToEdit.Area);
                Console.ResetColor();
                if (fieldChanged == 3)
                {
                    Console.ForegroundColor = SuccessColor;
                }
                Console.WriteLine("\t" + "   {0," + fieldNameFormatter + "}{1," + fieldValueLength + ":C}", "Cost per sq ft:", orderToEdit.CostPerSquareFoot);
                Console.WriteLine("\t" + "   {0," + fieldNameFormatter + "}{1," + fieldValueLength + ":C}", "Labor cost/sq ft:", orderToEdit.LaborCostPerSquareFoot);
                if (fieldChanged == 4)
                {
                    Console.ForegroundColor = SuccessColor;
                }
                Console.WriteLine("\t" + "   {0," + fieldNameFormatter + "}{1," + fieldValueLength + ":C}", "Material Cost:", orderToEdit.MaterialCost);
                Console.WriteLine("\t" + "   {0," + fieldNameFormatter + "}{1," + fieldValueLength + ":C}", "Labor Cost:", orderToEdit.LaborCost);
                if (fieldChanged == 2)
                {
                    Console.ForegroundColor = SuccessColor;
                }
                Console.WriteLine("\t" + "   {0," + fieldNameFormatter + "}{1," + fieldValueLength + ":C}", "Tax:", orderToEdit.Tax);
                Console.WriteLine("\t" + "   {0," + fieldNameFormatter + "}{1," + fieldValueLength + ":C}", "Total:", orderToEdit.Total);
                Console.ResetColor();
                Console.ForegroundColor = EmphasisColor;
                Console.WriteLine("\t-----------------------------------");

                //display confirm/cancel options
                Console.ForegroundColor = EmphasisColor;
                Console.Write("\t5. ");
                Console.WriteLine("Confirm edit");
                Console.Write("\t6. ");
                Console.WriteLine("Cancel and return to menu");
                Console.ResetColor();
                Console.WriteLine();

                //display error message
                if (hadError)
                {
                    Console.ForegroundColor = ErrorColor;
                    Console.WriteLine("\tInvalid entry.");
                    Console.WriteLine();
                    Console.ResetColor();
                }

                // get user input
                Console.ForegroundColor = PromptColor;
                Console.Write("\tEnter an option: ");
                Console.ForegroundColor = EmphasisColor;
                string userInput = Console.ReadLine().Trim();
                Console.ResetColor();

                switch (userInput)
                {
                case "1":
                case "1.":
                    //enter new name
                    Console.Clear();
                    string newName = "";
                    while (string.IsNullOrEmpty(newName))
                    {
                        Console.WriteLine();
                        Console.WriteLine();
                        Console.ForegroundColor = PromptColor;
                        Console.Write("\tEnter the new customer name: ");
                        Console.ForegroundColor = EmphasisColor;
                        newName = Console.ReadLine();
                        Console.ResetColor();
                        Console.Clear();
                    }
                    orderToEdit.CustomerName = newName;
                    fieldChanged             = 1;
                    hadError = false;
                    break;

                case "2":
                case "2.":
                    //enter new state
                    Console.Clear();
                    orderToEdit.State = PromptForValidState("Enter the new state: ");
                    orderToEdit       = OrderOperations.CalculateRemainingOrderFields(orderToEdit, false);
                    Console.Clear();
                    fieldChanged = 2;
                    hadError     = false;
                    break;

                case "3":
                case "3.":
                    //enter new product type
                    Console.Clear();
                    orderToEdit.ProductType = PromptForValidProductType("Enter the new product type: ").Type;
                    orderToEdit             = OrderOperations.CalculateRemainingOrderFields(orderToEdit, false);
                    Console.Clear();
                    fieldChanged = 3;
                    hadError     = false;
                    break;

                case "4":
                case "4.":
                    //enter new area
                    Console.Clear();
                    ProductType currentProductType = ProductTypeOperations.GetProductType(orderToEdit.ProductType);
                    orderToEdit.Area = PromptForValidArea(currentProductType);
                    orderToEdit      = OrderOperations.CalculateRemainingOrderFields(orderToEdit, false);
                    Console.Clear();
                    fieldChanged = 4;
                    hadError     = false;
                    break;

                case "5":
                case "5.":
                    //confirm order
                    Console.Clear();
                    doneEditing = true;
                    break;

                case "6":
                case "6.":
                    //cancel and return to main menu
                    Console.Clear();
                    return(null);

                default:
                    //invalid input
                    Console.Clear();
                    hadError = true;
                    break;
                }
            }

            return(orderToEdit);
        }