public void CanEdit(string OrderDate, string NameInput, string StateInput, string ProductInput, decimal AreaInput, string NameEdit, string StateEdit, string ProductEdit, decimal AreaEdit, bool success)
        {
            OrderManager manager   = OrderManagerFactory.Create();
            DateTime     orderDate = DateTime.Parse(OrderDate);

            PlaceNewOrderResponse response = manager.NewOrder(orderDate, NameInput, StateInput, ProductInput, AreaInput);
            Order toEdit = new Order
            {
                OrderNumber            = response.Order.OrderNumber,
                OrderDate              = response.Order.OrderDate,
                CustomerName           = NameEdit,
                State                  = StateEdit,
                ProductType            = ProductEdit,
                Area                   = AreaEdit,
                CostPerSquareFoot      = 2.25m,
                LaborCostPerSquareFoot = 2.10m,
                MaterialCost           = 450.00m,
                LaborCost              = 420.00m,
                TotalTax               = 54.375m,
                Total                  = 924.375m
            };

            EditExistingOrderResponse editResponse = manager.EditOrder(toEdit);

            OrderLookupResponse loadResponse = manager.OrderLookup(response.Order.OrderNumber, orderDate);

            Assert.AreEqual(success, response.Success);
            Assert.AreEqual(loadResponse.Order.CustomerName, NameEdit);
            Assert.AreEqual(loadResponse.Order.State, StateEdit);
            Assert.AreEqual(loadResponse.Order.ProductType, ProductEdit);
            Assert.AreEqual(loadResponse.Order.Area, AreaEdit);
        }
        //Manager does not validate inputs for placing new order
        public void CanAddNew(string OrderDate, string NameInput, string StateInput, string ProductInput, decimal AreaInput, bool success)
        {
            OrderManager manager   = OrderManagerFactory.Create();
            DateTime     orderDate = DateTime.Parse(OrderDate);

            PlaceNewOrderResponse response       = manager.NewOrder(orderDate, NameInput, StateInput, ProductInput, AreaInput);
            OrderLookupResponse   responseLookup = manager.OrderLookup(response.Order.OrderNumber, orderDate);

            Assert.AreEqual(success, response.Success);
            Assert.AreEqual(responseLookup.Order.CustomerName, NameInput);
            Assert.AreEqual(responseLookup.Order.State, StateInput);
            Assert.AreEqual(responseLookup.Order.ProductType, ProductInput);
            Assert.AreEqual(responseLookup.Order.Area, AreaInput);
        }
        public void CanDelete(string OrderDate, string NameInput, string StateInput, string ProductInput, decimal AreaInput, bool success)
        {
            OrderManager manager   = OrderManagerFactory.Create();
            DateTime     orderDate = DateTime.Parse(OrderDate);

            PlaceNewOrderResponse response          = manager.NewOrder(orderDate, NameInput, StateInput, ProductInput, AreaInput);
            AllOrdersResponse     preDeleteResponse = manager.AllOrderLookup(orderDate);
            int placedCount = preDeleteResponse.ListOfOrders.Count;

            DeleteOrderResponse responseDelete     = manager.DeleteOrder(response.Order);
            AllOrdersResponse   postDeleteResponse = manager.AllOrderLookup(orderDate);
            int deleteCount = postDeleteResponse.ListOfOrders.Count;

            Assert.AreEqual(success, responseDelete.Success);
            Assert.AreEqual(deleteCount, (placedCount - 1));
        }
        public void Execute()
        {
            OrderManager manager = OrderManagerFactory.Create();

            Console.Clear();
            Console.WriteLine("Enter a new order");
            Console.WriteLine("-------------------");

            DateTime dateInput  = new DateTime();
            bool     dateVerify = false;

            do
            {
                Console.WriteLine("Enter the order date in the format MM/DD/YYYY");
                string stringDate = Console.ReadLine();

                try
                {
                    dateInput  = DateTime.Parse(stringDate);
                    dateVerify = true;
                }
                catch
                {
                    Console.WriteLine("Incorrect format");
                    Console.ReadKey();
                    Console.Clear();
                }
            } while (!dateVerify);

            Order orderToAdd = new Order();

            string nameInput;
            bool   validName = false;

            do
            {
                Console.Write("Enter the customer's name: ");
                nameInput = Console.ReadLine();

                validName = ValidateInput.CheckForInput(nameInput);
            } while (!validName);

            string productInput;
            bool   validProduct = false;

            do
            {
                Console.Write("Enter the product material being purchased: ");
                productInput = Console.ReadLine();

                validProduct = ValidateInput.CheckForInput(productInput);
            } while (!validProduct);

            string stateInput;
            bool   validState = false;

            do
            {
                Console.Write("Enter the customer's two letter state abbreviation: ");
                stateInput = Console.ReadLine().ToUpper();

                validState = ValidateInput.CheckForInput(stateInput);
            } while (!validState);

            decimal areaInput = -1.0m;

            do
            {
                Console.Write("Enter the square footage needed: ");
                string stringArea = Console.ReadLine();

                areaInput = ValidateInput.CheckForDecimal(stringArea);

                if (areaInput < 100)
                {
                    Console.WriteLine("Order minimum is 100 square feet");
                    areaInput = -1.0m;
                }
            } while (areaInput == -1.0m);

            PlaceNewOrderResponse response = manager.NewOrder(dateInput, nameInput, stateInput, productInput, areaInput);

            if (response.Success)
            {
                ConsoleIO.DisplayOrderDetails(response.Order);
            }
            else
            {
                Console.WriteLine("An error occurred");
                Console.WriteLine(response.Message);
            }

            Console.WriteLine("\nPress any key to continue");
            Console.ReadKey();
        }
Esempio n. 5
0
        public PlaceNewOrderResponse NewOrder(DateTime DateInput, string NameInput, string StateInput, string ProductInput, decimal AreaInput)
        {
            PlaceNewOrderResponse response = new PlaceNewOrderResponse();

            Order orderToAdd = new Order
            {
                OrderDate    = DateInput,
                CustomerName = NameInput
            };

            string stateInput   = StateInput;
            string productInput = ProductInput;

            orderToAdd.Area = AreaInput;

            bool failState = false;

            Product product = _productRepo.GetProduct(ProductInput);

            if (product == null)
            {
                response.Message = $"{ProductInput} is not a valid product";
                failState        = true;
            }
            else
            {
                orderToAdd.ProductType            = product.ProductType;
                orderToAdd.CostPerSquareFoot      = product.CostPerSquareFoot;
                orderToAdd.LaborCostPerSquareFoot = product.LaborCostPerSquareFoot;
            }

            Tax taxInfo = null;

            if (!failState)
            {
                taxInfo = _taxRepo.GetState(StateInput);
                if (taxInfo == null)
                {
                    response.Message = $"{StateInput} is not a valid state";
                    failState        = true;
                }
                else
                {
                    orderToAdd.State   = taxInfo.StateAbbreviation;
                    orderToAdd.TaxRate = taxInfo.TaxRate;
                }
            }

            if (!failState)
            {
                orderToAdd.CostPerSquareFoot      = product.CostPerSquareFoot;
                orderToAdd.LaborCostPerSquareFoot = product.LaborCostPerSquareFoot;
                orderToAdd.TaxRate = taxInfo.TaxRate;
            }

            if (!failState)
            {
                orderToAdd.MaterialCost = orderToAdd.Area * orderToAdd.CostPerSquareFoot;
                orderToAdd.LaborCost    = orderToAdd.Area * orderToAdd.LaborCostPerSquareFoot;
                orderToAdd.TotalTax     = (orderToAdd.MaterialCost + orderToAdd.LaborCost) * (orderToAdd.TaxRate / 100);
                orderToAdd.Total        = orderToAdd.MaterialCost + orderToAdd.LaborCost + orderToAdd.TotalTax;
            }

            if (!failState)
            {
                response.Order = _orderRepo.AddOrder(orderToAdd);
            }

            if (failState)
            {
                response.Success = false;
            }
            else if (response.Order == null)
            {
                response.Success = false;
                response.Message = "An error occurred while submitting the order";
            }
            else
            {
                response.Success = true;
            }

            return(response);
        }