public void Execute()
        {
            OrderManager     manager       = OrderManagerFactory.Create();
            Order            originalOrder = ConsoleIO.GetOrderToBeRemovedOrEditedInfo();
            Order            editedOrder   = new Order();
            OrderAddResponse response      = manager.FindOrder(originalOrder); //Could be refactored by using the ConsoleIO request creating originalOrder as the parameter.  ****Ask Alan his thoughts?****  AddOrderWorkflow is refactor a little more.

            if (!response.Success)
            {
                ConsoleIO.DisplayNegativeResponseMesssage(response.Message);
            }
            else
            {
                if (ConsoleIO.DisplayOrderToBeConfirmed(response))
                {
                    originalOrder = response.Order;
                    editedOrder   = ConsoleIO.GetOrderInfoFromCustomer(true, originalOrder);
                    manager.EditOrder(originalOrder, editedOrder);
                    ConsoleIO.DisplayOrderAddedSuccessfully();
                }
                else
                {
                    ConsoleIO.DisplayOrderEditCancelled();
                }
            }
        }
        public void CanAddOrder()
        {
            OrderManager manager     = OrderManagerFactory.Create();
            Order        cleanInputs = new Order()
            {
                CustomerName = "Doyle Hargrove", State = "TN", ProductType = "Wood", Area = 100
            };
            Order badStateInput = new Order()
            {
                CustomerName = "Doyle Hargrove", State = "FR", ProductType = "Wood", Area = 100
            };
            Order badProductInput = new Order()
            {
                CustomerName = "Doyle Hargrove", State = "TN", ProductType = "Gold", Area = 100
            };
            Order badAreaInput = new Order()
            {
                CustomerName = "Doyle Hargrove", State = "TN", ProductType = "Wood", Area = 50
            };

            OrderAddResponse response = manager.CreateNewOrder(cleanInputs);

            Assert.AreEqual(true, response.Success);
            OrderAddResponse responseBadState = manager.CreateNewOrder(badStateInput);

            Assert.AreEqual(false, responseBadState.Success);
            OrderAddResponse responseBadProduct = manager.CreateNewOrder(badProductInput);

            Assert.AreEqual(false, responseBadProduct.Success);
            OrderAddResponse responseBadArea = manager.CreateNewOrder(badAreaInput);

            Assert.AreEqual(false, responseBadArea.Success);
        }
        public OrderAddResponse Add(Orders passOrderAdd, string orderDate)
        {
            OrderAddResponse response = new OrderAddResponse();

            //response.Orders = _orderRepository.OrdersAdd(passOrderAdd, orderDate);

            if (passOrderAdd == null)
            {
                response.Success = false;
                response.Message = $"{orderDate} is not a valid date.";
                return(response);
            }
            else
            {
                response.Success = true;
            }
            IAddOrderRepo addOrderRule = AddOrderRulesFactory.Create();

            response = addOrderRule.OrdersAdd(passOrderAdd, orderDate);

            if (response.Success)
            {
                _orderRepository.SaveOrder(response.Orders, response.orderDate);
                //_orderRepository.SaveOrder(response.Orders, orderDate);
            }

            return(response);
        }
        public static bool DisplayOrderToBeConfirmed(OrderAddResponse response)
        {
            //display all order details and then ask if they want to proceed.  If yes then return true, else return false and return to menu
            Console.Clear();
            Console.WriteLine("Below is the order created.");
            Console.WriteLine();
            Console.WriteLine($"[{ response.Order.OrderNumber}] | [{response.Order.Date.ToShortDateString()}]"); // add response.Order.Date after date is added to order model
            Console.WriteLine($"[{response.Order.CustomerName }]");
            Console.WriteLine($"[{response.Order.State}]");
            Console.WriteLine($"Product: [{response.Order.ProductType}]");
            Console.WriteLine($"Materials: [{response.Order.MaterialCost:c}]");
            Console.WriteLine($"Labor: [{response.Order.LaborCost:c}]");
            Console.WriteLine($"Tax: [{response.Order.Tax:c}]");
            Console.WriteLine($"Total: [{response.Order.Total:c}]");
            Console.WriteLine();

            Console.Write("Confirm Order: Y or N: ");
            string answer = Console.ReadLine();

            if (answer == "Y" || answer == "y")
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public void CanRemoveOrder()
        {
            OrderManager     manager   = OrderManagerFactory.Create();
            OrderAddResponse response  = new OrderAddResponse();
            string           orderDate = "12202021";
            Order            addOrder  = new Order
            {
                CustomerName = "Bob",
                State        = "OH",
                ProductType  = "Wood",
                Area         = 150.00M
            };

            response = manager.AddOrder(orderDate, addOrder);

            Assert.AreEqual("Bob", response.OrderList.Orders[2].CustomerName);
            Assert.AreEqual("OH", response.OrderList.Orders[2].State);
            Assert.AreEqual("Wood", response.OrderList.Orders[2].ProductType);
            Assert.AreEqual(150.00M, response.OrderList.Orders[2].Area);

            OrderRemoveResponse removeResponse = new OrderRemoveResponse();

            removeResponse = manager.RemoveOrder(orderDate, 2);

            Assert.IsTrue(removeResponse.Success);
        }
        public void CanEditOrders()
        {
            OrderManager     manager   = OrderManagerFactory.Create();
            OrderAddResponse response  = new OrderAddResponse();
            string           orderDate = "12202021";
            Order            addOrder  = new Order
            {
                CustomerName = "Bob",
                State        = "OH",
                ProductType  = "Wood",
                Area         = 150.00M
            };

            response = manager.AddOrder(orderDate, addOrder);

            Assert.AreEqual("Bob", response.OrderList.Orders[2].CustomerName);
            Assert.AreEqual("OH", response.OrderList.Orders[2].State);
            Assert.AreEqual("Wood", response.OrderList.Orders[2].ProductType);
            Assert.AreEqual(150.00M, response.OrderList.Orders[2].Area);

            OrderEditResponse editedResponse = new OrderEditResponse();

            Order editedOrder = new Order
            {
                CustomerName = "Bob",
                State        = "PA",
                ProductType  = "Wood",
                Area         = 100.00M
            };

            editedResponse = manager.EditOrder(orderDate, editedOrder, 0);

            Assert.AreEqual(100.00, editedResponse.OrderList.Orders[0].Area);
        }
示例#7
0
        /// <summary>
        /// 添加订单信息
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public OrderAddResponse AddOrderInfo(OrderAddRequest request)
        {
            OrderAddResponse response  = new OrderAddResponse();
            OrderInfo        orderInfo = new OrderInfo()
            {
                BoughtTime   = request.BoughtTime,
                OrderName    = request.OrderName,
                CommodityImg = request.CommodityImg,
                OrderSize    = request.OrderSize,
                OrderCount   = request.OrderCount,
                YhId         = request.YhId,
                OrderPrice   = request.OrderPrice,
                OrderTypeId  = request.OrderTypeId,
                Consignee    = request.Consignee,
                ConsigneeTel = request.ConsigneeTel,
                Staus        = request.Staus,
                CreateId     = request.CreateId,
                UpdateId     = request.UpdateId,
                CreateTime   = request.CreateTime,
                UpdateTime   = request.UpdateTime
            };
            var res = dal.AddOrderInfo(orderInfo);

            if (res > 0)
            {
                response.IsAddSuccess = 1;
                response.Message      = "添加成功";
            }
            else
            {
                response.IsAddSuccess = 0;
                response.Message      = "注册失败";
            }
            return(response);
        }
示例#8
0
        public void CanAddOrder()
        {
            OrderManager manager   = OrderManagerFactory.Create();
            Order        testOrder = new Order()
            {
                Date                   = new DateTime(2019, 04, 30),
                OrderNumber            = 0,
                CustomerName           = "McFly",
                State                  = "KY",
                TaxRate                = 0,
                ProductType            = "Carpet",
                Area                   = 100m,
                CostPerSquareFoot      = 0,
                LaborCostPerSquareFoot = 0,
                MaterialCost           = 0,
                LaborCost              = 0,
                Tax   = 0,
                Total = 0
            };
            OrderAddResponse response = manager.CreateNewOrder(testOrder);

            manager.SaveOrderToRepo(response);
            Order responseOrder = response.Order;

            Assert.NotNull(manager.ListAllOrdersByDate(testOrder.Date));
            //Assert.AreEqual(manager.ListAllOrdersByDate(testOrder.Date).Where(o => o.CustomerName == "McFly"), response.Order);
            Order findOrder = new Order()
            {
                Date = new DateTime(2019, 04, 30), OrderNumber = 101
            };
            var   tempOrder   = manager.FindOrder(findOrder);
            Order orderInRepo = tempOrder.Order;

            Assert.AreEqual(orderInRepo, responseOrder);
        }
        public void EditOrder(Order original, Order edited)
        {
            OrderAddResponse response = CreateNewOrder(edited);

            var editedOrder = response.Order;

            _orderRepository.EditOrder(original, editedOrder);
        }
示例#10
0
        public static void AddOrder(Order order)
        {
            OrderManager manager = OrderManagerFactory.Create();

            OrderAddResponse response = manager.AddOrder(order);

            if (!response.Success)
            {
                Console.WriteLine("An error occured: ");
                Console.WriteLine(response.Message);
            }
        }
示例#11
0
        public OrderAddResponse AddOrder(string OrderDate, Order order)
        {
            OrderAddResponse response = new OrderAddResponse();

            response.OrderList = _orderRepository.List(OrderDate);
            int listCount = response.OrderList.Orders.Count();

            //Check if order can be sent to state
            //Load in Taxes and return the tax information for the order
            _Tax = _orderRepository.LoadTaxes();
            Tax taxRate = _Tax.FirstOrDefault(p => p.StateAbbreviation == order.State);

            order.TaxRate = taxRate.TaxRate;
            //Check if order is Empty
            if (order.TaxRate.Equals(null))
            {
                response.Success = false;
                response.Message = "Could not get Tax Rate from the State";
            }

            //Load in Products and return product type information
            _Products = _orderRepository.LoadProducts();
            Products orderProduct = (Products)_Products.FirstOrDefault(p => p.ProductType == order.ProductType);

            if (orderProduct == null)
            {
                response.Success = false;
                response.Message = "Could not get ProductType form order";
            }

            //Add the values to the different properties and Do Math
            order.CostPerSquareFoot      = orderProduct.CostPerSquareFoot;
            order.LaborCostPerSquareFoot = orderProduct.LaborCostPerSquareFoot;
            order.OrderNumber            = listCount++;

            order = OrderCalculations(order);
            //Add Order to list
            response.OrderList.Orders.Add(order);

            if (!response.OrderList.Orders.Contains(order))
            {
                response.Success = false;
                response.Message = "Order was not Added";
            }
            else
            {
                //_orderRepository.SaveOrder(order, listCount++);
                _orderRepository.SaveOrder(response.OrderList, response.OrderList.OrderDate);
                response.Success = true;
            }

            return(response);
        }
示例#12
0
        public void ManagerAddTest(int orderNumber, bool expected)
        {
            DateTime date = new DateTime(2013, 06, 01);

            repo.Create(date, order);

            OrderAddResponse response = manager.AddOrder(date, order);

            Assert.IsNotNull(response.Order);
            Assert.IsTrue(response.Success);
            Assert.AreEqual(date, response.Order.OrderDate);
            Assert.AreEqual(order.OrderNumber, response.Order.OrderNumber);
            Assert.AreEqual(order.CustomerName, response.Order.CustomerName);
        }
示例#13
0
        public void Execute()
        {
            OrderManager manager = OrderManagerFactory.Create();

            Console.Clear();
            Console.WriteLine("Add an order");
            Console.WriteLine(ConsoleIO.SeparatorBar);

            Orders orders = new Orders();

            date = IO.GetDateTimeFromUser();
            Console.Clear();
            orders.CustomerName = IO.GetNameFromUser("Name: ");
            Console.Clear();
            orders.State = IO.DisplayStateFromUser("State: ");
            Console.Clear();
            orders.ProductType = IO.DisplayProductFromUser("Product Type: ");
            Console.Clear();
            orders.Area = IO.GetDecimalFromUser("Area: ");
            orders      = manager.Calculate(orders);

            Console.WriteLine();
            Console.Clear();
            Console.WriteLine("This is your order");
            IO.DisplayOrder(orders);
            Console.WriteLine();

            if (IO.GetYesNoAnswerFromUser("Add the order") == "Y")
            {
                OrderAddResponse response = manager.AddOrder(date, orders);
                if (response.Success)
                {
                    Console.WriteLine("Order has been added");
                    Console.WriteLine("Press any key to continue");
                    Console.ReadKey();
                }
                else
                {
                    Console.WriteLine(response.Message);
                }
            }
            else
            {
                Console.WriteLine("Order Cancelled");
                Console.WriteLine("Press any key to continue");
                Console.ReadKey();
            }
        }
示例#14
0
        public OrderAddResponse AddOrder(DateTime date, Orders order)
        {
            OrderAddResponse response = new OrderAddResponse();

            response.Order = _order.Create(date, order);

            if (response.Order == null)
            {
                response.Success = false;
                response.Message = "Invalid";
            }
            else
            {
                response.Success = true;
            }
            return(response);
        }
        public void Execute()
        {
            OrderManager manager = OrderManagerFactory.Create();

            OrderAddResponse response = manager.FindOrder(ConsoleIO.GetOrderToBeRemovedOrEditedInfo());

            if (!response.Success)
            {
                ConsoleIO.DisplayNegativeResponseMesssage(response.Message);
            }

            //orderConfirmed = ;

            if (ConsoleIO.DisplayOrderToBeConfirmed(response))
            {
                manager.RemoveOrder(response.Order);
                ConsoleIO.DisplayOrderRemovedSuccessfully();
            }
        }
        public OrderAddResponse OrdersAdd(Orders orders, string orderDate)
        {
            OrderAddResponse response = new OrderAddResponse();

            /*  //decide to do verification here or in workflow??
             * if (account.Type != AccountType.Basic && account.Type != AccountType.Premium)
             * {
             *  response.Success = false;
             *  response.Message = "Error: Only basic and premium accounts can deposit with no limit. Contact IT";
             *  return response;
             * }
             *
             * if (amount <= 0)
             * {
             *  response.Success = false;
             *  response.Message = "Deposit amounts must be positive.";
             *  return response;
             * }
             */

            response.Orders    = orders;
            response.orderDate = orderDate;

            /*
             * response.Orders.OrderNumber = orders.OrderNumber;
             * response.Orders.CustomerName = orders.CustomerName;
             * response.Orders.State = orders.State;
             * response.Orders.TaxRate = orders.TaxRate;
             * response.Orders.ProductType = orders.ProductType;
             * response.Orders.Area = orders.Area;
             * response.Orders.CostPerSquareFoot = orders.CostPerSquareFoot;
             * response.Orders.LaborCostPerSquareFoot = orders.LaborCostPerSquareFoot;
             * response.Orders.MaterialCost = orders.MaterialCost;
             * response.Orders.LaborCost = orders.LaborCost;
             * response.Orders.Tax = orders.Tax;
             * response.Orders.Total = orders.Total;
             */

            response.Success = true;

            return(response);
        }
        [TestCase("Sir Edward Cumberton", "OH", "10/16/2016", ProductType.Carpet, 100, true)]                                    //Correct. Pass.

        public void AddOrderTest(string name, string state, string orderDateString, ProductType type, int area, bool expectedResult)
        {
            Order newOrder = new Order();

            DateTime orderDate;

            DateTime.TryParse(orderDateString, out orderDate);

            newOrder.Name      = name;
            newOrder.State     = state;
            newOrder.OrderDate = orderDate;
            newOrder.Type      = ProductType.Carpet;
            newOrder.Area      = area;

            OrderManager addTester = OrderManagerFactory.Create();

            OrderAddResponse response = addTester.AddOrder(newOrder);

            Assert.AreEqual(expectedResult, response.Success);
        }
        public OrderAddResponse Add(OrderInfo orderInfo)
        {
            OrderAddResponse response = DIContainer.Kernel.Get <OrderAddResponse>();

            response.Success = true;

            if (orderInfo.OrderDate != _orderRepository.GetOrderDate())
            {
                _orderRepository.FetchOrders(orderInfo.OrderDate);
            }

            var newOrderNumber = _orderRepository.NewOrderNumber;

            orderInfo.Order.OrderNumber = newOrderNumber;
            orderInfo.OrderNumber       = newOrderNumber;
            orderInfo.Order             = CalculateOrderFields(orderInfo.Order);

            response.OrderInfo = orderInfo;

            return(response);
        }
        public OrderAddResponse FindOrder(Order order)
        {
            int orderNumber           = order.OrderNumber;
            OrderAddResponse response = new OrderAddResponse();
            List <Order>     newList  = new List <Order>();

            newList        = _orderRepository.LoadAllOrdersByDate(order.Date);
            response.Order = newList.Find(o => o.OrderNumber == orderNumber);

            if (response.Order == null)
            {
                response.Success = false;
                response.Message = $"Order not found.";
                return(response);
            }
            else
            {
                response.Success = true;
            }
            return(response);
        }
示例#20
0
        public void Execute()
        {
            OrderManager manager = OrderManagerFactory.Create();

            ConsoleIO.DisplayListOfProducts(manager.ListAllProducts());
            ConsoleIO.DisplayListofStates(manager.ListAllStates());

            OrderAddResponse response = manager.CreateNewOrder(ConsoleIO.GetOrderInfoFromCustomer(false));

            if (!response.Success)
            {
                ConsoleIO.DisplayNegativeResponseMesssage(response.Message);
            }
            else
            {
                if (ConsoleIO.DisplayOrderToBeConfirmed(response))
                {
                    ConsoleIO.DisplayPositiveResponseMesssage(response.Message);
                    manager.SaveOrderToRepo(response);
                }
            }
        }
        public OrderAddResponse AddOrder(Order newOrder)
        {
            OrderAddResponse response = new OrderAddResponse();

            Validation(newOrder, response);
            if (response.Success == false)
            {
                return(response);
            }
            _orderRepository.Add(newOrder);
            response.newOrder = newOrder;

            if (response.newOrder.OrderNumber > 0)
            {
                response.Success = true;
            }
            else
            {
                response.Success = false;
            }

            return(response);
        }
示例#22
0
        public static void Main(string[] args)
        {
            ISoouuClient soouuClient = new DefaultSoouuClient("http://test.ccapi.soouu.cn/Interface/Method", "803683", "CC11F561EBF14204089A5C64DE61C8DF");
            //获取用户信息
            CustomerGetRequest  customerGetRequest  = new CustomerGetRequest();
            CustomerGetResponse customerGetResponse = soouuClient.Execute(customerGetRequest);

            Console.WriteLine(customerGetResponse.ToJson());
            //获取商品类目
            CatalogsGetRequest         catalogsGetRequest  = new CatalogsGetRequest();
            List <CatalogsGetResponse> catalogsGetResponse = soouuClient.QueryList(catalogsGetRequest);

            Console.WriteLine(catalogsGetResponse.ToJson());
            //获取商品列表
            GoodsGetRequest goodsGetRequest = new GoodsGetRequest {
                goodscatalogid = 1005
            };
            List <GoodsGetResponse> goodsGetResponse = soouuClient.QueryList(goodsGetRequest);

            Console.WriteLine(goodsGetResponse.ToJson());
            //话费直充
            PhoneOrderAddRequest phoneOrderAddRequest = new PhoneOrderAddRequest {
                chargephone     = "18888888888",
                chargeparvalue  = "50",
                customerorderno = "XXX2Q3111",
                notifyurl       = "http://www.baidu.com"
            };
            OrderAddResponse phoneOrderAddResponse = soouuClient.Execute(phoneOrderAddRequest);

            Console.WriteLine(phoneOrderAddResponse.ToJson());
            //流量直充
            TrafficGoodsAddRequest trafficGoodsAddRequest = new TrafficGoodsAddRequest {
                chargephone     = "18888888888",
                chargeparvalue  = "1024",
                areatype        = "1",
                customerorderno = "123456",
                notifyurl       = "http://www.baidu.com"
            };
            OrderAddResponse trafficGoodsAddResponse = soouuClient.Execute(phoneOrderAddRequest);

            Console.WriteLine(trafficGoodsAddResponse.ToJson());
            //网游直充
            OrderAddRequest orderAddRequest = new OrderAddRequest {
                customerorderno = DateTime.Now.ToString("yyyyMMddHHmmssfff"),
                productid       = 1204405,
                buyerip         = HttpUtils.GetAddressIP(),
                chargeaccount   = "18888888888",
                buynum          = 1
            };
            OrderAddResponse orderAddResponse = soouuClient.Execute(orderAddRequest);

            Console.WriteLine(orderAddResponse.ToJson());
            //卡密提卡
            CardOrderAddRequest cardOrderAddRequest = new CardOrderAddRequest {
                customerorderno = DateTime.Now.ToString("yyyyMMddHHmmssfff"),
                productid       = 1204406,
                buynum          = 1
            };
            CardOrderAddResponse cardOrderAddResponse = soouuClient.Execute(cardOrderAddRequest);

            Console.WriteLine(cardOrderAddResponse.ToJson());
        }
        public void Execute()
        {
            Console.Clear();
            OrderManager orderManager = OrderManagerFactory.Create();

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

            bool     goodDate = false;
            string   orderDate;
            DateTime orderDateCompare;

            do
            {
                //must be in the future
                Console.Write("Enter Date (MMDDYYYY): ");
                orderDate        = Console.ReadLine();
                orderDateCompare = DateTime.ParseExact(orderDate, "MMddyyyy", CultureInfo.InvariantCulture);
                DateTime todayDate = DateTime.Today;
                if (orderDateCompare >= todayDate)
                {
                    goodDate = true;
                    continue;
                }
                else
                {
                    Console.WriteLine("Please enter a date in the future.");
                    goodDate = false;
                }
            } while (goodDate == false);


            //This field may not be blank; it is allowed to contain [a-z][0-9] as well as periods and comma characters. “Acme, Inc.” is a valid name.
            bool   goodName = false;
            string customerName;

            do
            {
                Console.Write("\nEnter Customer Name: ");
                customerName = Console.ReadLine();
                if (customerName != null)
                {
                    goodName = true;
                    continue;
                }
                else
                {
                    Console.WriteLine("CustomerName cannot be empty.");
                    goodName = false;
                }
            } while (goodName == false);


            //Entered states must be checked against the tax file. If the state does not exist in the tax file, we cannot sell there. If a state is added to the tax file later, it should be included without changing the application code.
            string  state;
            decimal taxRate;
            bool    goodTax = false;

            do
            {
                Console.Write("\nEnter State (Enter full name of state): ");
                state = Console.ReadLine();
                //var taxdownload = new List<Tax>();
                var taxdownload = orderManager._orderRepository.LookUpTax(state);
                //state = "Texas";
                //create list
                //open file with tax info and put data in list (how to get data from list?)
                //foreach loop to figure out if stateName is in list
                //
                if (state == taxdownload.StateName)
                {
                    taxRate = taxdownload.TaxRate;
                    Console.Write($"{taxdownload.StateName} TaxRate is: {taxdownload.TaxRate}\n");
                    goodTax = true;
                }
                else
                {
                    Console.Write("Sorry, we cannot sell to this state at this time.");
                    taxRate = 0;
                    goodTax = false;
                }
            } while (goodTax == false);


            //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.
            Console.Write("\nChoose Product Type: \n");
            var productDown = orderManager._orderRepository.LookUpProducts();

            foreach (var product in productDown)
            {
                Console.WriteLine("{0}, {1}, {2}",
                                  product.ProductType, product.LaborCostPerSquareFoot, product.CostPerSquareFoot);
                Console.Write("");
            }

            bool     goodProduct = false;
            string   productType;
            Products confirmedChoice = null;

            do
            {
                //Products confirmedChoice;
                Console.WriteLine("");
                Console.Write("\nEnter your product selection (Enter full name productType): ");
                productType = Console.ReadLine();
                var productChoice = orderManager._orderRepository.ChooseProduct(productType);
                if (productChoice != null)
                {
                    confirmedChoice = productChoice;
                    goodProduct     = true;
                }
                else
                {
                    Console.Write("\n You have made an incorrect choice, please choose again.");
                    goodProduct = false;
                };
            } while (goodProduct == false);

            //string productType = Console.ReadLine();
            //string productType = "Hardwood";

            //The area must be a positive decimal.  Minimum order size is 100 square feet.
            bool    goodArea = false;
            decimal area;

            do
            {
                Console.Write("Area: ");
                area = Convert.ToDecimal(Console.ReadLine());
                if (area >= 100M)
                {
                    goodArea = true;
                    continue;
                }
                else
                {
                    Console.WriteLine("\nArea entered must be positive and greater than 100 sq feet.");
                    goodArea = false;
                }
            } while (goodArea == false);
            //Show input summary


            int     lastOrderNumber = 0;
            decimal costPerSquareFoot;
            decimal laborCostPerSquareFoot;
            decimal materialCost;
            decimal laborCost;
            decimal tax;
            decimal total;

            //int orderNumber;
            costPerSquareFoot      = confirmedChoice.CostPerSquareFoot;
            laborCostPerSquareFoot = confirmedChoice.LaborCostPerSquareFoot;
            materialCost           = area * confirmedChoice.CostPerSquareFoot;
            laborCost = area * confirmedChoice.LaborCostPerSquareFoot;
            tax       = ((area * confirmedChoice.CostPerSquareFoot) + (area * confirmedChoice.LaborCostPerSquareFoot)) * (taxRate / 100);
            total     = (area * confirmedChoice.CostPerSquareFoot) + (area * confirmedChoice.LaborCostPerSquareFoot) + (((area * confirmedChoice.CostPerSquareFoot) + (area * confirmedChoice.LaborCostPerSquareFoot)) * (taxRate / 100));
            //orderNumber = orderManager._orderRepository.LookUpOrderNumber(orderDate);

            Orders        passOrderAdd = new Orders();
            List <Orders> lastOrders   = new List <Orders>();

            lastOrders = orderManager._orderRepository.FindLastOrder(orderDate);
            if (lastOrders == null)
            {
                lastOrderNumber = 0;
            }
            else
            {
                lastOrderNumber = lastOrders.Count();  //Check Max()
            }
            passOrderAdd.OrderNumber            = lastOrderNumber + 1;
            passOrderAdd.CustomerName           = customerName;
            passOrderAdd.State                  = state;
            passOrderAdd.TaxRate                = taxRate;
            passOrderAdd.ProductType            = productType;
            passOrderAdd.Area                   = area;
            passOrderAdd.CostPerSquareFoot      = costPerSquareFoot;
            passOrderAdd.LaborCostPerSquareFoot = laborCostPerSquareFoot;
            passOrderAdd.MaterialCost           = materialCost;
            passOrderAdd.LaborCost              = laborCost;
            passOrderAdd.Tax   = tax;
            passOrderAdd.Total = total;

            Console.Write($"\nOrderDate is {orderDate}");
            Console.Write($"\nCustomerName is {customerName}");
            Console.Write($"\nStateName is {state}");
            Console.Write($"\nTaxRate is {taxRate}");
            Console.Write($"\nProductType is {productType}");
            Console.Write($"\nCostPerSquareFoot is {confirmedChoice.CostPerSquareFoot}");
            Console.Write($"\nLaborCostPerSquareFoot is {confirmedChoice.LaborCostPerSquareFoot}");
            Console.Write($"\nMaterialCost: {area * confirmedChoice.CostPerSquareFoot}");
            Console.Write($"\nLaborCost: {area * confirmedChoice.LaborCostPerSquareFoot}");
            Console.Write($"\nTax: {((area * confirmedChoice.CostPerSquareFoot) + (area * confirmedChoice.LaborCostPerSquareFoot)) * (taxRate / 100)}");
            Console.Write($"\nTotal: {(area * confirmedChoice.CostPerSquareFoot) + (area * confirmedChoice.LaborCostPerSquareFoot) + ((area * confirmedChoice.CostPerSquareFoot) + (area * confirmedChoice.LaborCostPerSquareFoot)) * (taxRate / 100)}");

            Console.Write("\nPlease review your order details. \nIf order seems right, please type Add to continue or anything else to go back to main menu.\n");
            string resp = Console.ReadLine();

            if (resp == "Add")
            {
                OrderAddResponse response = orderManager.Add(passOrderAdd, orderDate);

                if (response.Success)
                {
                    ConsoleIO.DisplayOrderDetails(response.Orders, orderDate);
                }
                else
                {
                    Console.WriteLine("An error occurred: ");
                    Console.WriteLine(response.Message);
                }
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey();
            }
            else
            {
                Menu.Start();
            }
        }
        public void Execute()
        {
            Order newOrder      = new Order();
            bool  orderComplete = true;

            do
            {
                newOrder.Name      = ConsoleIO.GetOrderNameFromUser("Please enter a name for the order: ");
                newOrder.State     = ConsoleIO.GetOrderStateFromUser("Please enter your state initials: ");
                newOrder.TaxRate   = TaxRepository.GetTaxRate(newOrder.State);
                newOrder.OrderDate = ConsoleIO.GetOrderDateFromUser("Please enter your order date (MM/DD/YYYY): ");
                newOrder.Type      = ConsoleIO.GetProductFromUser(newOrder.Type);
                newOrder.Area      = ConsoleIO.GetAreaFromUser("Please enter the area amount you want to purchase: ");

                newOrder.CostLabor    = Math.Round(Calculations.GetLaborCost(newOrder.Type, newOrder.Area), 2, MidpointRounding.AwayFromZero);
                newOrder.CostMaterial = Math.Round(Calculations.GetProductCost(newOrder.Type, newOrder.Area), 2, MidpointRounding.AwayFromZero);
                newOrder.Tax          = Math.Round(ConsoleIO.JustTax(newOrder.TaxRate, newOrder.Type, newOrder.Area, newOrder.State), 2, MidpointRounding.AwayFromZero);
                newOrder.TotalCost    = Math.Round(ConsoleIO.GetTotal(newOrder.TaxRate, newOrder.Type, newOrder.Area, newOrder.State), 2, MidpointRounding.AwayFromZero);

                string confirmFormat = "{0, -16} {1} \n{2, -16} {3} \n{4, -16} {5:d} \n{6, -16} {7} \n{8, -16} {9} \n \n{10, -16} {11} \n{12, -16} {13} \n{14, -16} {15} \n{16, -16} {17}";

                ConsoleIO.Header();

                while (true)
                {
                    Console.WriteLine(confirmFormat, "Customer Name:", newOrder.Name, "Customer State:", newOrder.State, "Order Date:", newOrder.OrderDate, "Flooring Type:", newOrder.Type, "Area:", newOrder.Area + "(sqft)", "Product Cost:", newOrder.CostMaterial, "Labor Cost:", newOrder.CostLabor, "Tax:", newOrder.Tax, "Total:", newOrder.TotalCost);
                    Console.WriteLine(ConsoleIO.Separator);
                    Console.WriteLine();
                    Console.WriteLine("Is this information correct? Y/N or Q to return to the main menu.");

                    string finishOrder = Console.ReadLine();

                    if ((finishOrder.ToUpper() == "Y") || (finishOrder.ToUpper() == "YES"))
                    {
                        OrderManager     orderManager = OrderManagerFactory.Create();
                        OrderAddResponse response     = orderManager.AddOrder(newOrder);

                        ConsoleIO.Header();
                        Console.WriteLine("Thank you for your order.");
                        Console.WriteLine("Press any key to continue.");
                        Console.ReadKey();
                        orderComplete = true;
                        break;
                    }
                    else if ((finishOrder.ToUpper() == "N") || (finishOrder.ToUpper() == "NO"))
                    {
                        orderComplete = false;
                        break;
                    }
                    else if ((finishOrder.ToUpper() == "Q") || (finishOrder.ToUpper() == "QUIT"))
                    {
                        return;
                    }
                    else
                    {
                        orderComplete = false;
                        ConsoleIO.Header();
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Please enter Y/N only. Or enter Q to return to the main menu.");
                        Console.ResetColor();
                        Console.WriteLine();
                    }
                }
            }while (!orderComplete);
        }
        public void Execute()
        {
            Console.Clear();

            OrderManager manager = DIContainer.Kernel.Get <OrderManager>();

            var state = Input.GetState(states.States);

            var tempTaxInfo = DIContainer.Kernel.Get <TaxInfo>();

            tempTaxInfo.State                  = state.StateAbbreviation;
            tempTaxInfo.ProductType            = product.ProductType;
            tempTaxInfo.Area                   = area;
            tempTaxInfo.TaxRate                = state.TaxRate;
            tempTaxInfo.CostPerSquareFoot      = product.CostPerSquareFoot;
            tempTaxInfo.LaborCostPerSquareFoot = product.LaborCostPerSquareFoot;

            var tempOrderInfo = DIContainer.Kernel.Get <OrderInfo>();

            tempOrderInfo.Order     = tempOrder;
            tempOrderInfo.OrderDate = orderDate;

            OrderAddResponse response = manager.Add(tempOrderInfo);

            if (response.Success)
            {
                Output.SendToConsole(response.OrderInfo);

                bool oKay = Input.GetOkayToContinue("Do you want to place the order (Y)es or (N)o? ");

                if (oKay)
                {
                    var fileresponse = manager.SaveOrder(response.OrderInfo);
                    Output.SendToConsole();
                    if (fileresponse.Success)
                    {
                        var fileresponse2 = manager.SaveOrders(response.OrderInfo);

                        if (fileresponse2.Success)
                        {
                            Output.SendToConsole($"Your order {response.OrderInfo.OrderNumber} has been accepted!\n");
                            Output.SendToConsole();
                            Output.SendToConsole("--------------------------------------------------");
                            Output.SendToConsole();
                        }
                        else
                        {
                            Output.SendToConsole("An error has occurred saving the order repository.");
                            Output.SendToConsole(fileresponse2.Message);
                            Output.SendToConsole("\nAdditional infomation:\n");
                            Output.SendToConsole(fileresponse2.Error);
                        }
                    }
                    else
                    {
                        Output.SendToConsole("An error has occurred saving the order.");
                        Output.SendToConsole(fileresponse.Message);
                        Output.SendToConsole("\nAdditional infomation:\n");
                        Output.SendToConsole(fileresponse.Error);
                    }
                }
                else
                {
                    Output.SendToConsole("Your order has been cancelled.\n");
                }
            }
            else
            {
                Output.SendToConsole("An error has occurred saving the order.");
                Output.SendToConsole(response.Message);
            }

            Output.SendToConsole("\nPress any key to continue...");
            Console.ReadKey();
        }
示例#26
0
        public void Execute()
        {
            string workflow = "Add";

            OrderManager orderManager = OrderManagerFactory.Create();

            Headers.DisplayHeader(workflow);

            //create order object
            Order newOrder = new Order();

            //get date
            newOrder.Date = ConsoleIO.GetNewOrderDate("Enter a date (MM/DD/YYYY):");

            //get order number
            newOrder.OrderNumber = OrderNumberValidation.CreateOrderNumber(newOrder.Date);

            Headers.DisplayHeader(workflow);

            //get customer name
            newOrder.CustomerName = ConsoleIO.GetCustomerName("Add", "none");

            Headers.DisplayHeader(workflow);

            //get state tax
            bool     validState = false;
            StateTax stateTax   = null;

            while (!validState)
            {
                string   stateAbbratiavtion = ConsoleIO.GetStateInputFromUser("Add");
                StateTax tempStateTax       = StateTaxValidation.CreateStateTax(stateAbbratiavtion).State;
                if (tempStateTax == null)
                {
                    validState = false;
                }
                else
                {
                    stateTax   = tempStateTax;
                    validState = true;
                }
            }

            Headers.DisplayHeader(workflow);

            //set state
            newOrder.State   = stateTax.StateAbbreviation;
            newOrder.TaxRate = stateTax.TaxRate;

            //get product
            List <Product> products = ProductListValidation.CreateProductList();
            Product        product  = ConsoleIO.DisplayProducts(products, "Add");

            newOrder.ProductType            = product.ProductType;
            newOrder.CostPerSquareFoot      = product.CostPerSquareFoot;
            newOrder.LaborCostPerSquareFoot = product.LaborCostPerSquareFoot;

            Headers.DisplayHeader(workflow);

            //get area
            newOrder.Area = ConsoleIO.GetArea("Add");

            Headers.DisplayHeader(workflow);

            //display new order
            ShowDetails.DisplayOrderDetails(newOrder);

            //--show message if add failed--
            if (ConsoleIO.GetYesOrNo("Add order? ") == "Y")
            {
                OrderAddResponse response = orderManager.AddOrder(newOrder);
                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 continue...");
                    Console.ReadKey();
                }
            }
            else
            {
                Console.WriteLine("Order cancelled :(");
                Console.ReadLine();
            }
        }
 public void SaveOrderToRepo(OrderAddResponse response)
 {
     _orderRepository.AddOrder(response.Order);
 }
示例#28
0
        public void Execute()
        {
            string       orderDate;
            string       format  = "MMddyyyy";
            OrderManager manager = OrderManagerFactory.Create();

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

            //Must be in the future
            while (true)
            {
                orderDate = ConsoleIO.GetRequiredStringFormuser("Enter Order Date (MMDDYYYY) ");
                //Validate the Date
                if (manager.validateDateTime(orderDate) == false)
                {
                    Console.WriteLine("Please put it in the Order Date Format with 8 numbers");
                    Console.ReadKey();
                }
                //Convert to Date Time
                DateTime userOrderDate = DateTime.ParseExact(orderDate, format, null);
                DateTime CurrentTime   = DateTime.Now;
                if (userOrderDate < CurrentTime)
                {
                    Console.WriteLine("Need to have an Order Date in the Future");
                }
                else
                {
                    break;
                }
            }

            Order newOrder = new Order();

            newOrder.CustomerName = ConsoleIO.GetRequiredStringFormuser("Customer Name:  ");
            while (true)
            {
                newOrder.State = ConsoleIO.GetRequiredStringFormuser("State:  ");
                bool stateCheck = manager.checkIfSoldInState(newOrder.State);
                if (stateCheck == false)
                {
                    Console.WriteLine("Sorry we do not ship to that state currently");
                    Console.WriteLine("Please choose a state that we can ship too");
                    Console.ReadKey();
                }
                else
                {
                    break;
                }
            }
            //Show Product List
            while (true)
            {
                ConsoleIO.DisplayProductList(manager.Products());
                newOrder.ProductType = ConsoleIO.GetRequiredStringFormuser("Product Type:  ");
                bool productCheck = manager.checkIfProductOnList(newOrder.ProductType);
                if (productCheck == false)
                {
                    Console.WriteLine("Sorry that product is not on the list");
                    Console.WriteLine("Please choose a product on the List");
                    Console.ReadKey();
                }
                else
                {
                    break;
                }
            }
            while (true)
            {
                newOrder.Area = Convert.ToDecimal(ConsoleIO.GetRequiredStringFormuser("Area:  "));
                if (newOrder.Area < 100)
                {
                    Console.WriteLine("Sorry you have to have a minium order size of 100 square feet");
                    Console.ReadKey();
                }
                else
                {
                    break;
                }
            }

            OrderAddResponse response = manager.AddOrder(orderDate, newOrder);

            if (response.Success)
            {
                //List<Order> orders = TestOrderList.LoadOrders();
                ConsoleIO.DisplayOrders(response.OrderList.Orders, orderDate);
            }
            else
            {
                Console.WriteLine("An Error Occured");
                Console.WriteLine(response.Message);
            }
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }
示例#29
0
        public OrderAddResponse AddOrder(Order order)
        {
            OrderAddResponse orderResponse = new OrderAddResponse();

            //valid order
            bool validOrder = false;

            //validate name
            bool validName = false;

            if (string.IsNullOrEmpty(order.CustomerName))
            {
                orderResponse.Message = "Name field is null";
                orderResponse.Success = false;
            }
            else
            {
                validName = true;
            }

            //validate area
            bool validArea = false;

            if (order.Area < 100)
            {
                orderResponse.Message = "Area cannot be less than 100 sq ft";
                orderResponse.Success = false;
            }
            else
            {
                validArea = true;
            }

            //validate product
            bool validProduct = false;

            List <Product> products = _productRepository.GetProductList();

            foreach (Product prod in products)
            {
                if (prod.ProductType == order.ProductType)
                {
                    validProduct = true;
                }
            }

            //validate state
            bool validState = false;

            List <StateTax> states = _stateTaxRepository.ListStates();

            foreach (StateTax state in states)
            {
                if (state.StateAbbreviation == order.State)
                {
                    validState = true;
                }
            }


            if (validName && validArea && validProduct && validState)
            {
                validOrder = true;
            }

            if (validOrder)
            {
                orderResponse.Success = _orderRepository.Add(order);

                if (!orderResponse.Success)
                {
                    orderResponse.Message = "Add failed";
                }
            }

            return(orderResponse);
        }
        public OrderAddResponse CreateNewOrder(Order order)
        {
            OrderAddResponse response = new OrderAddResponse();

            response.Order = order;

            if (stateTaxManager.CheckIfStateIsServiced(order.State))
            {
                response.Success     = true;
                response.Order.State = order.State;
            }
            else
            {
                response.Success = false;
                response.Message = $"We do not service {order.State} at this time.";
                return(response);
            }

            response.Order.TaxRate = stateTaxManager.GetTaxRate(order.State);

            if (productManager.CheckIfProductIsAvailable(order.ProductType))
            {
                response.Success           = true;
                response.Order.ProductType = order.ProductType;
            }
            else
            {
                response.Success = false;
                response.Message = $"{order.ProductType} is not an available product. Please reselect.";
                return(response);
            }

            response.Order.CostPerSquareFoot = productManager.GetMaterialCostPerSquareFoot(order.ProductType);

            response.Order.LaborCostPerSquareFoot = productManager.GetLaborCostPerSquareFoot(order.ProductType);

            if (order.Area >= 100)
            {
                response.Success    = true;
                response.Order.Area = order.Area;
            }
            else
            {
                response.Success = false;
                response.Message = "100 square feet is the minimum";
                return(response);
            }

            response.Order.MaterialCost = response.Order.Area * response.Order.CostPerSquareFoot;
            response.Order.LaborCost    = response.Order.Area * response.Order.LaborCostPerSquareFoot;

            response.Order.Tax   = response.Order.MaterialCost + response.Order.LaborCost * (response.Order.TaxRate / 100);
            response.Order.Total = response.Order.MaterialCost + response.Order.LaborCost + response.Order.Tax;

            if (_orderRepository.LoadAllOrdersByDate(response.Order.Date) == null)
            {
                response.Order.OrderNumber = 101;
            }
            else
            {
                if (order.OrderNumber != 0)
                {
                    response.Order.OrderNumber = order.OrderNumber;
                }
                else
                {
                    response.Order.OrderNumber = _orderRepository.LoadAllOrdersByDate(response.Order.Date).Select(n => n.OrderNumber).Max() + 1;
                }
            }
            response.Success = true;
            response.Message = "The order has been created/edited. ";
            return(response);
        }