Esempio n. 1
0
        public static void RequestingToSaveOrder(string orderDate, Order order)
        {
            string placeOrder = "";

            while (true)
            {
                Console.Clear();

                Output.DisplayIO.DisplayOrderSummary(orderDate, order);

                Console.Write("Do you want to save this order (Y/N): ");

                switch (placeOrder = Console.ReadLine())
                {
                case "Y":
                    //Saved order number for the next availabe order #


                    SaveOrderResponse response = OrderManagerFactory.Create().SaveOrder(orderDate, order);
                    Console.WriteLine("Saving to repository: {0}", response.Success ? "Successful" : "Failed");
                    Console.ReadKey();
                    return;

                case "N":
                    Console.WriteLine("You Didn't save the new order to repository");
                    Console.ReadKey();
                    return;
                }
            }
        }
Esempio n. 2
0
        public string CreateNewOrder([FromBody] string req)
        {
            var result   = String.Empty;
            var request  = new SaveOrderRequest();
            var response = new SaveOrderResponse();

            try
            {
                OrderService service = new OrderService();

                request = JsonConvert.DeserializeObject <SaveOrderRequest>(req);

                ClaimsIdentity identity = (ClaimsIdentity)User.Identity;
                int            userID   = Int32.Parse(identity.Claims.Where(x => x.Type == "UserID").First().Value);

                if (request.Order.OrderTypeID == (byte)EOrderTypes.Online)
                {
                    request.Order.CustomerID = userID;
                }

                response = service.PerformCreateNewOrder(request);
            }
            catch (Exception ex)
            {
                response = new SaveOrderResponse()
                {
                    MessageString   = ex.Message,
                    MessageStatusID = (byte)EMessageStatus.Success
                };
            }

            result = JsonConvert.SerializeObject(response);

            return(result);
        }
Esempio n. 3
0
        public string UpdateOrderStatus([FromBody] string req)
        {
            var result   = String.Empty;
            var request  = new UpdateOrderRequest();
            var response = new SaveOrderResponse();

            try
            {
                using (var db = new CuddlyWombatEntities())
                {
                    db.Configuration.LazyLoadingEnabled   = false;
                    db.Configuration.ProxyCreationEnabled = false;

                    request = JsonConvert.DeserializeObject <UpdateOrderRequest>(req);

                    OrderService service = new OrderService();

                    response = service.PerformUpdateOrderStatus(request);
                }
            }
            catch (Exception ex)
            {
                response = new SaveOrderResponse()
                {
                    MessageString   = ex.Message,
                    MessageStatusID = (byte)EMessageStatus.Success
                };
            }

            result = JsonConvert.SerializeObject(response);

            return(result);
        }
Esempio n. 4
0
        public SaveOrderResponse PerformCreateNewOrder(SaveOrderRequest request)
        {
            SaveOrderResponse response = new SaveOrderResponse();

            try
            {
                using (var db = new CuddlyWombatEntities())
                {
                    db.Configuration.LazyLoadingEnabled   = false;
                    db.Configuration.ProxyCreationEnabled = false;

                    db.Orders.Add(request.Order);
                    db.SaveChanges();

                    foreach (var o in request.OrderMenuItems)
                    {
                        o.OrderID = request.Order.OrderID;
                        db.OrderMenuItems.Add(o);
                    }

                    db.SaveChanges();

                    response.MessageString   = "New Order is successfully created";
                    response.MessageStatusID = (byte)EMessageStatus.Success;
                }
            }
            catch (Exception ex)
            {
                response.MessageStatusID = (byte)EMessageStatus.Exception;
                response.MessageString   = ex.Message;
            }

            return(response);
        }
Esempio n. 5
0
        public void SaveOrderTest()
        {
            OrderManager manager = OrderManagerFactory.Create();

            SaveOrderResponse response = manager.SaveOrder("01012020", "Ima Customer", "OH", "Tile", "99");

            Assert.AreEqual(response.Order.CustomerName, "Ima Customer");
        }
Esempio n. 6
0
        public SaveOrderResponse SaveOrder(SaveOrderRequest request)
        {
            var response = new SaveOrderResponse();

            try
            {
                var basketRecord = new BasketRecord
                {
                    DeliveryType = request.DeliveryType,
                    Total        = request.GrandTotal,
                    Voucher      = request.Voucher,
                    User         = _database.Query <UserRecord>().First(x => x.Id == request.UserId),
                    Status       = request.Status
                };

                _database.Save(basketRecord);

                var basketId = _database.Query <BasketRecord>().OrderByDescending(x => x.Id).FirstOrDefault()?.Id;

                foreach (var order in request.Orders)
                {
                    var orderRecord = new OrderRecord
                    {
                        Basket = _database.Query <BasketRecord>().First(x => x.Id == basketId),
                        Pizza  = _database.Query <PizzaRecord>().First(x => x.Id == order.PizzaId),
                        Size   = _database.Query <SizeRecord>().First(x => x.Id == order.SizeId),
                        Total  = order.SubTotal
                    };

                    _database.Save(orderRecord);

                    var orderId = _database.Query <OrderRecord>().OrderByDescending(x => x.Id).FirstOrDefault()?.Id;

                    foreach (var toppingId in order.ExtraToppingIds)
                    {
                        var basketToppingRecord = new OrderToppingRecord
                        {
                            Order   = _database.Query <OrderRecord>().First(x => x.Id == orderId),
                            Topping = _database.Query <ToppingRecord>().First(x => x.Id == toppingId)
                        };
                        _database.Save(basketToppingRecord);
                    }
                }
            }
            catch (Exception exception)
            {
                response.AddError(new Error
                {
                    Code             = ErrorCodes.DatabaseError,
                    UserMessage      = "Something went wrong when saving Order to database.",
                    TechnicalMessage = $"Following exception was thrown: {exception.Message}"
                });
            }

            return(response);
        }
        public void SetUp()
        {
            var database = new Mock <IDatabase>();

            database.Setup(x => x.Query <UserRecord>()).Throws(new Exception("Something went wrong"));

            var subject = new OrderRepository(database.Object);

            _result = subject.SaveOrder(new SaveOrderRequest());
        }
Esempio n. 8
0
        public void CanOnlySaveValidOrders(string name, decimal area, string productType, string state, bool expected)
        {
            Order order = new Order();

            order.CustomerName = name;
            order.Area         = area;
            order.ProductType  = productType;
            order.State        = state;

            OrderValidator    validator = new OrderValidator();
            SaveOrderResponse actual    = validator.SaveOrder(order);

            Assert.AreEqual(expected, actual.EverythingIsAlright);
        }
Esempio n. 9
0
        public async Task <SaveOrderResponse> SaveAsync(Order order)
        {
            try
            {
                await _orderRepository.AddAsync(order);

                await _unitOfWork.CompleteAsync();

                return(SaveOrderResponse.Successful(order));
            }
            catch (Exception ex)
            {
                return(SaveOrderResponse.Error($"An error occured while saving the order: {ex.Message}"));
            }
        }
Esempio n. 10
0
        public SaveOrderResponse SaveOrder(string date, Order order)
        {
            SaveOrderResponse response = new SaveOrderResponse();


            if (!_orderRepository.SaveOrder(date, order))
            {
                response.Success = false;
                response.Message = $"Unable to save {order.OrderNumber} on {date}";
            }
            else
            {
                response.Success = true;
            }


            return(response);
        }
Esempio n. 11
0
        public SaveOrderResponse SaveOrder(Order order)
        {
            SaveOrderResponse response = new SaveOrderResponse();

            //Validation
            if (order.Area < 100)
            {
                response.Success = false;
                response.Message = "Order area MUST be greater than 100sqft!";
                return(response);
            }
            ProductManager        productManager  = ProductManagerFactory.Create();
            ProductLookupResponse productResponse = productManager.GetProduct(order.ProductType);

            if (!productResponse.Success)
            {
                response.Success = false;
                response.Message = $"Product type: {order.ProductType} does not exist!";
                return(response);
            }
            StateTaxManager     stateTaxManager = StateTaxManagerFactory.Create();
            StateLookupResponse taxResponse     = stateTaxManager.GetStateTax(order.State);

            if (!taxResponse.Success)
            {
                response.Success = false;
                response.Message = $"No state tax data found for: {order.State}";
                return(response);
            }

            //Save order
            _orderRepository.SaveOrder(order);
            if (!order.AreEqualOrders(order, _orderRepository.LoadOrder(order.OrderNumber, order.OrderDate)))
            {
                response.Success = false;
                response.Message = "Failed to save order!";
            }
            else
            {
                response.Success = true;
            }
            return(response);
        }
        public SaveOrderResponse SaveOrder(Order order)
        {
            SaveOrderResponse finalResponse = new SaveOrderResponse();

            AddNameRule     nameRule     = new AddNameRule();
            GetNameResponse nameResponse = new GetNameResponse();

            nameResponse = nameRule.GetName(order.CustomerName);

            AddAreaRule     areaRule     = new AddAreaRule();
            GetAreaResponse areaResponse = new GetAreaResponse();

            areaResponse = areaRule.GetArea(order.Area.ToString());

            AddProductRule     productRule     = new AddProductRule();
            GetProductResponse productResponse = new GetProductResponse();

            productResponse = productRule.GetProduct(order.ProductType);

            AddTaxesRule     taxesRule     = new AddTaxesRule();
            GetTaxesResponse taxesResponse = new GetTaxesResponse();

            taxesResponse = taxesRule.GetTaxes(order.State);

            finalResponse.NameIsOkay    = nameResponse.Success;
            finalResponse.AreaIsOkay    = areaResponse.Success;
            finalResponse.ProductIsOkay = productResponse.Success;
            finalResponse.TaxIsOkay     = taxesResponse.Success;

            if (finalResponse.NameIsOkay && finalResponse.AreaIsOkay && finalResponse.ProductIsOkay && finalResponse.TaxIsOkay)
            {
                finalResponse.EverythingIsAlright = true;
            }
            else
            {
                finalResponse.EverythingIsAlright = false;
            }

            return(finalResponse);
        }
Esempio n. 13
0
        public void Execute()
        {
            OrderManager manager = OrderManagerFactory.Create();

            Console.Clear();
            Console.WriteLine("Add an Order");
            Console.WriteLine("--------------------------");
            Console.Write("Enter the order date (DDMMYYYY): ");
            string orderDate = Console.ReadLine();

            Console.Write("Enter the customer name: ");
            string customerName = Console.ReadLine();

            Console.Write("Enter the state abbreviation: ");
            string stateAbbreviation = Console.ReadLine();

            Console.Write("Enter the product type: ");
            string prodType = Console.ReadLine();

            Console.Write("Enter the area: ");
            string area = Console.ReadLine();

            SaveOrderResponse response = manager.SaveOrder(orderDate, customerName, stateAbbreviation, prodType, area);

            if (response.Success)
            {
                Console.WriteLine("The order has been saved.");
            }
            else
            {
                Console.WriteLine("An error occurred: ");
                Console.WriteLine(response.Message);
            }

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }
Esempio n. 14
0
        public void SaveOrdersToFile(List <Order> orders, string filePath)
        {
            SaveOrderResponse[] response = new SaveOrderResponse[orders.Count];

            OrderValidator validator = new OrderValidator();
            int            iterator  = 0;

            foreach (Order o in orders)
            {
                response[iterator] = validator.SaveOrder(o);
                iterator++;
            }

            bool justDandy = true;

            for (int i = 0; i < response.Length; i++)
            {
                if (response[i].EverythingIsAlright)
                {
                    continue;
                }
                else
                {
                    justDandy = false;
                }
            }

            if (justDandy)
            {
                OrderRepository.SaveOrders(orders, filePath);
            }
            else
            {
                throw new Exception("GOD HAS ABANDONED US, THE PROGRAM IS FOR NAUGHT, THE DEVIL HAS TAKEN HUMAN FORM");
            }
        }
Esempio n. 15
0
        public void SetUp()
        {
            _database = new Mock <IDatabase>();
            _database.Setup(x => x.Query <UserRecord>()).Returns(new List <UserRecord> {
                new UserRecord {
                    Id = 1
                }
            });
            _database.Setup(x => x.Query <BasketRecord>()).Returns(new List <BasketRecord> {
                new BasketRecord {
                    Id = 1
                }
            });
            _database.Setup(x => x.Query <PizzaRecord>()).Returns(new List <PizzaRecord> {
                new PizzaRecord {
                    Id = 2
                }
            });
            _database.Setup(x => x.Query <SizeRecord>()).Returns(new List <SizeRecord> {
                new SizeRecord {
                    Id = 3
                }
            });
            _database.Setup(x => x.Query <OrderRecord>()).Returns(new List <OrderRecord> {
                new OrderRecord {
                    Id = 2
                }
            });
            _database.Setup(x => x.Query <ToppingRecord>())
            .Returns(new List <ToppingRecord> {
                new ToppingRecord {
                    Id = 4
                }
            });

            _database.Setup(x => x.Save(It.IsAny <BasketRecord>())).Returns(new BasketRecord {
                Id = 1
            });
            _database.Setup(x => x.Save(It.IsAny <OrderRecord>())).Returns(new OrderRecord {
                Id = 2
            });
            _database.Setup(x => x.Save(It.IsAny <OrderToppingRecord>())).Returns(new OrderToppingRecord {
                Id = 3
            });

            var subject          = new OrderRepository(_database.Object);
            var saveOrderRequest = new SaveOrderRequest
            {
                DeliveryType = DeliveryType.Collection.ToString(),
                GrandTotal   = 1200,
                Voucher      = "SOME_VOUCHER",
                UserId       = 1,
                Status       = OrderStatus.Complete.ToString(),
                Orders       = new List <Data.Order.Order>
                {
                    new Data.Order.Order
                    {
                        SubTotal        = 1000,
                        PizzaId         = 2,
                        SizeId          = 3,
                        ExtraToppingIds = new List <int> {
                            4
                        }
                    }
                }
            };

            _result = subject.SaveOrder(saveOrderRequest);
        }
Esempio n. 16
0
        public SaveOrderResponse SaveOrder(
            string stringOrderDate,
            string customerName,
            string state,
            string productType,
            string area)
        {
            SaveOrderResponse response = new SaveOrderResponse();

            DateTime orderDate;

            if (!DateTime.TryParseExact(stringOrderDate, "ddMMyyyy", CultureInfo.InvariantCulture,
                                        DateTimeStyles.None, out orderDate))
            {
                response.Success = false;
                response.Message = ($"{stringOrderDate} is not a valid date.");
                return(response);
            }
            if (orderDate.Date <= DateTime.Today)
            {
                response.Success = false;
                response.Message = "The Order Date must be later than today. ";
                return(response);
            }
            else if (customerName == "")
            {
                response.Success = false;
                response.Message = "The Customer Name must not be blank.";
                return(response);
            }
            else if (taxRep.LoadTax(state) == null)
            {
                response.Success = false;
                response.Message = $"There is no tax rate for {state}.";
                return(response);
            }
            else if (productRep.LoadProduct(productType) == null)
            {
                response.Success = false;
                response.Message = $"There is no {productType} Product Type.";
                return(response);
            }
            else
            {
                response.Success = true;
                Tax     tax         = taxRep.LoadTax(state);
                Product product     = productRep.LoadProduct(productType);
                decimal taxRate     = Convert.ToDecimal(tax.TaxRate);
                decimal areaDecimal = Convert.ToDecimal(area);
                decimal material    = areaDecimal * product.CostPerSquareFoot;
                decimal labor       = areaDecimal * product.LaborCostPerSquareFoot;
                decimal taxTotal    = ((material + labor) * (taxRate / 100));
                decimal total       = material + labor + taxTotal;

                Order order = new Order
                {
                    OrderNumber            = GetOrderNumber(stringOrderDate),
                    CustomerName           = customerName,
                    State                  = state,
                    TaxRate                = taxRate,
                    ProductType            = productType,
                    Area                   = Convert.ToInt16(area),
                    CostPerSquareFoot      = product.CostPerSquareFoot,
                    LaborCostPerSquareFoot = product.LaborCostPerSquareFoot,
                    MaterialCost           = material,
                    LaborCost              = labor,
                    Tax   = taxTotal,
                    Total = total
                };

                response.Order = order;
                _orderRepository.AddOrder(response.Order, stringOrderDate);
            }
            return(response);
        }
        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();
        }
Esempio n. 18
0
        public SaveOrderResponse PerformUpdateOrderStatus(UpdateOrderRequest request)
        {
            SaveOrderResponse response = new SaveOrderResponse();
            var modifiedDate           = DateTime.Now;

            try
            {
                using (var db = new CuddlyWombatEntities())
                {
                    db.Configuration.LazyLoadingEnabled   = false;
                    db.Configuration.ProxyCreationEnabled = false;

                    var orderToUpdate = (from o in db.Orders
                                         where o.OrderID == request.OrderID
                                         select o).FirstOrDefault();

                    if (orderToUpdate != null)
                    {
                        var orderHistory = new OrderHistory()
                        {
                            OrderID       = orderToUpdate.OrderID,
                            TableID       = orderToUpdate.TableID,
                            CustomerID    = orderToUpdate.CustomerID,
                            OrderTypeID   = orderToUpdate.OrderTypeID,
                            OrderStatusID = orderToUpdate.OrderStatusID,
                            TotalPrice    = orderToUpdate.TotalPrice,
                            PickUpTime    = orderToUpdate.PickUpTime,
                            IsPaid        = orderToUpdate.IsPaid,
                            DateCreated   = orderToUpdate.DateCreated,
                            DateModified  = modifiedDate
                        };

                        db.OrderHistories.Add(orderHistory);
                        orderToUpdate.OrderStatusID = request.OrderStatusID;
                        orderToUpdate.DateModified  = modifiedDate;
                    }
                    else
                    {
                        response.MessageString   = "Please select an order";
                        response.MessageStatusID = (byte)EMessageStatus.Fail;

                        return(response);
                    }

                    db.SaveChanges();

                    if (request.OrderStatusID == (byte)EOrderStatus.Canceled)
                    {
                        response.MessageString = "Order is cancelled";
                    }
                    else if (request.OrderStatusID == (byte)EOrderStatus.Completed)
                    {
                        response.MessageString = "Order Status updated to Completed";
                    }
                    response.MessageStatusID = (byte)EMessageStatus.Success;
                }
            }
            catch (Exception ex)
            {
                response.MessageStatusID = (byte)EMessageStatus.Exception;
                response.MessageString   = ex.Message;
            }

            return(response);
        }