public Order CalculateOrder(Order order)
        {
            List <Product> products = ProductRepository.GetProducts();

            foreach (var product in products)
            {
                if (order.ProductType == product.ProductType)
                {
                    order.CostPerSquareFoot      = product.CostPerSquareFoot;
                    order.LaborCostPerSquareFoot = product.LaborCostPerSquareFoot;
                    break;
                }
            }
            order.MaterialCost = order.Area * order.CostPerSquareFoot;
            order.LaborCost    = order.Area * order.LaborCostPerSquareFoot;

            List <Tax> taxes = TaxRepository.GetTaxes();

            foreach (var tax in taxes)
            {
                if (tax.StateAbbreviation == order.State)
                {
                    order.Tax     = (order.MaterialCost + order.LaborCost) * (tax.TaxRate / 100);
                    order.TaxRate = tax.TaxRate;
                }
            }
            order.Total                  = order.MaterialCost + order.LaborCost + order.Tax;
            order.Area                   = decimal.Round(order.Area, 2);
            order.CostPerSquareFoot      = decimal.Round(order.CostPerSquareFoot, 2);
            order.LaborCostPerSquareFoot = decimal.Round(order.LaborCostPerSquareFoot, 2);
            order.MaterialCost           = decimal.Round(order.MaterialCost, 2);
            order.LaborCost              = decimal.Round(order.LaborCost, 2);
            order.Total                  = decimal.Round(order.Total, 2);
            return(order);
        }
        public void Execute()
        {
            IUserIO userIO = new UserIO();

            userIO.Clear();
            FlooringManager manager = FlooringFactoryManager.Create();
            Order           order   = new Order();

            userIO.WriteLine("CREATE NEW ORDER: ");
            userIO.WriteLine("");
            userIO.WriteLine(new string('=', 60));
            userIO.WriteLine("");
            order.OrderDate    = HelperMethods.GetDateTime("Please enter the date of order: ");
            order.CustomerName = HelperMethods.GetCustomerName("Please enter the customers name: ");
            order.State        = HelperMethods.GetStateTax(TaxRepository.GetTaxes());
            order.ProductType  = HelperMethods.GetProductInformation(ProductRepository.GetProducts());
            order.Area         = HelperMethods.GetDecimalFromString("Enter the Area: ");

            order = manager.CalculateOrder(order);
            userIO.DisplayOrder(order);

            if (HelperMethods.GetYesNoAnswerFromUser("Would you like to create this order?"))
            {
                userIO.WriteLine("Order has succesfully been created.");
                AddOrderResponse response = manager.AddOrder(order);
            }
            else
            {
                userIO.WriteLine("Order was not created.");
            }
        }
        public void Execute()
        {
            IUserIO userIO = new UserIO();

            userIO.Clear();
            FlooringManager manager = FlooringFactoryManager.Create();

            userIO.WriteLine("EDIT ORDER:");
            userIO.WriteLine("");
            userIO.WriteLine(new string('=', 60));
            userIO.WriteLine("");
            DateTime          dateTime    = HelperMethods.GetDateTime("Enter the order date: ");
            int               OrderNumber = HelperMethods.GetIntFromUser("Enter the order number: ");
            EditOrderResponse response    = new EditOrderResponse();
            Order             oldOrder    = manager.GetOrderByOrderNumber(dateTime, OrderNumber);
            Order             order       = oldOrder;

            if (oldOrder == null)
            {
                response.Success = false;
                response.Message = "No orders exist with this date.";
            }
            else
            {
                order.CustomerName = HelperMethods.GetCustomerName($"Previous Name: {oldOrder.CustomerName}\n Please enter the customers name: ", oldOrder.CustomerName);
                Console.WriteLine($"Previous State: {oldOrder.State}");
                order.State = HelperMethods.GetStateTax(TaxRepository.GetTaxes(), oldOrder.State);
                Console.WriteLine($"Previous Product: {oldOrder.ProductType}");
                order.ProductType = HelperMethods.GetProductInformation(ProductRepository.GetProducts());
                order.Area        = HelperMethods.GetDecimalFromString($"Previous Area: {oldOrder.Area}\n Enter the Area: ", oldOrder.Area);
                userIO.DisplayOrder(order);
                if (HelperMethods.GetYesNoAnswerFromUser("Would you like to create this order?"))
                {
                    manager.DeleteOrder(oldOrder);
                    manager.AddOrder(order);
                    response.Success = true;
                    response.Message = "Order successfully added.";
                }
            }
        }
 public List <Tax> GetTaxList()
 {
     return(TaxRepository.GetTaxes());
 }