예제 #1
0
 /// <summary>
 /// Adds the dishes to selected order.
 /// </summary>
 /// <param name="order">Order.</param>
 private void AddDishesTo(BusinessLogic.Order order)
 {
     Console.WriteLine("Меню: ");
     DisplayPredefinedDishes();
     Console.WriteLine("Виберіть страви (перелічуйте через один пустий символ) або створіть нову (+): ");
     do
     {
         CommandPromtWithColor(ConsoleColor.Cyan);
         try {
             var dishesToAdd = Console.ReadLine().Split(' ');
             IEnumerable <int> parsedDishesToAdd;
             if (dishesToAdd [0].Equals("+"))
             {
                 order.AddDish(CreateDish());
             }
             else
             {
                 parsedDishesToAdd = dishesToAdd.Select(x => int.Parse(x) - 1);
                 foreach (var i in parsedDishesToAdd)
                 {
                     order.AddDish(predefinedDishes [i]);
                 }
             }
         } catch (Exception) {
             Console.WriteLine("Помилка при доданні страви до замовлення. Спробуйте ще раз!");
             continue;
         }
         break;
     } while(true);
 }
예제 #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Restaurant.Controller"/> class.
        /// </summary>
        public Controller()
        {
            orderList             = new List <BusinessLogic.Order> ();
            predefinedDishes      = new List <BusinessLogic.Dish> ();
            predefinedIngredients = new List <BusinessLogic.Ingredient> ();
            CurrentOrder          = null;

            // Reading configuration file values
            try {
                // Data files
                ordersFile                = ConfigurationManager.AppSettings ["orders"];
                predefinedDishesFile      = ConfigurationManager.AppSettings ["predefinedDishes"];
                predefinedIngredientsFile = ConfigurationManager.AppSettings ["predefinedIngredients"];

                minimalCookTime    = Convert.ToDouble(ConfigurationManager.AppSettings ["minimalCookTime"]);
                dishMargin         = Convert.ToDouble(ConfigurationManager.AppSettings ["dishMargin"]);
                maximumTableNumber = Convert.ToInt32(ConfigurationManager.AppSettings ["maximumTableNumber"]);
                // Runtime store collections
                predefinedDishes      = FileManager.DeserializeCollectionFromFile <BusinessLogic.Dish> (predefinedDishesFile);
                predefinedIngredients = FileManager.DeserializeCollectionFromFile <BusinessLogic.Ingredient> (predefinedIngredientsFile);
                orderList             = FileManager.DeserializeCollectionFromFile <Order> (ordersFile);
            } catch (FormatException) {
                Console.WriteLine("Помилка при читанні конфігураційного файла.");
            } catch (Exception) {
                Console.WriteLine("Конфігураційні файли створені.");
                //Console.WriteLine ("{0} -> {1}", e.Message, e.InnerException.Message);
            }
        }
예제 #3
0
        public int InsertUserOrder(Order objRequest)
        {
            int objResponse = 0;
            try
            {
                SqlParameter[] sqlParams = new SqlParameter[3];
                sqlParams[0] = new SqlParameter("@USERID", SqlDbType.UniqueIdentifier);
                sqlParams[0].Value = objRequest.USERID;
                sqlParams[1] = new SqlParameter("@ORDERID", SqlDbType.VarChar);
                sqlParams[1].Value = objRequest.ORDERID;
                sqlParams[2] = new SqlParameter("@TRANSACTIONTYPE", SqlDbType.Int);
                sqlParams[2].Value = objRequest.TRANSACTIONTYPE;

                int result = Convert.ToInt32(CExecuteScalar("USP_INSERTUSERORDER", sqlParams));
                if (result > 0)
                {
                    objResponse = result;
                }
            }
            catch (Exception ex)
            {
                InsertWebsiteLog(Common.TOKEN, "Transaction.cs", "InsertUserOrder", JsonConvert.SerializeObject(objRequest), ex.ToString());
            }
            return objResponse;
        }
예제 #4
0
        /// <summary>
        /// Creates the order.
        /// </summary>
        /// <returns>Order.</returns>
        private BusinessLogic.Order CreateOrder()
        {
            Console.WriteLine("Створення замовлення...");
            var order = new BusinessLogic.Order();

            AddDishesTo(order);
            return(order);
        }
예제 #5
0
        /// <summary>
        /// Shows the main menu.
        /// </summary>
        /// <returns>Status.</returns>
        private int ShowMainMenu()
        {
            // Store order number
            int parsedInput = 0;

            if (orderList.Count == 0)
            {
                Console.WriteLine("Немає замовлень. Створюємо...");
                CurrentOrder = CreateOrder();
            }
            else
            {
                Console.WriteLine("Існуючі замовлення:");
                DisplayOrders();
                Console.WriteLine($"Виберіть номер замовлення або створіть нове (1-{orderList.Count}/+), подвійний Enter для виходу: ");
                CommandPromtWithColor(ConsoleColor.Cyan);

                var input = Console.ReadLine();
                try {
                    bool isNumber = int.TryParse(input.ToString(), out parsedInput);
                    if (isNumber)
                    {
                        CurrentOrder = orderList.ElementAt(parsedInput - 1);
                        orderList.RemoveAt(parsedInput - 1);
                    }
                    else
                    {
                        if (input.ToString().Equals("+"))
                        {
                            CurrentOrder = CreateOrder();
                            // Incrementing number of all orders to get new order index.
                            parsedInput = orderList.Count + 1;
                        }
                        else if (input.ToString().Equals(""))
                        {
                            // First Enter pressed
                            Console.WriteLine("Натисніть ще раз для виходу");
                            CurrentOrder = null;
                            if (Console.ReadLine().Equals(""))
                            {
                                // Second Enter pressed
                                return(0);
                            }
                            else
                            {
                                return(1);
                            }
                        }
                        else
                        {
                            throw new FormatException();
                        }
                    }
                } catch (ArgumentOutOfRangeException) {
                    Console.WriteLine("Такого замовлення не існує.");
                    return(1);
                } catch (FormatException) {
                    Console.WriteLine("Неправильні вхідні дані. Спробуйте ще раз!");
                    return(1);
                } catch (Exception e) {
                    Console.WriteLine($"Виникла помилка: {e.Message}");
                    return(1);
                }
            }
            return(OrderMenu(CurrentOrder, parsedInput));
        }
예제 #6
0
        /// <summary>
        /// Shows the specific dish menu in order.
        /// </summary>
        /// <param name="currentOrder">Order.</param>
        private void EditSpecificDishMenuIn(ref BusinessLogic.Order currentOrder)
        {
            bool done = false;

            Console.Write("Виберіть номер страви для редагування: ");
            try {
                var userOption = int.Parse(Console.ReadLine()) - 1;
                while (!done)
                {
                    if (userOption >= 0 && userOption < currentOrder.Dishes.Count)
                    {
                        Console.WriteLine(currentOrder.Dishes.ElementAt(userOption));
                        Console.WriteLine("1. Додати інгрідієнтів");
                        Console.WriteLine("2. Видалити інгрідієнти");
                        Console.WriteLine("3. Змінити інгредієнт");
                        Console.WriteLine("4. Змінити назву страви");
                        Console.WriteLine("5. Змінити ціну на страву");
                        Console.WriteLine("6. Змінити час приготування страви");
                        Console.WriteLine("7. Повернутися");
                        CommandPromtWithColor(ConsoleColor.Cyan);

                        switch (int.Parse(Console.ReadLine()))
                        {
                        case 1:
                            Console.WriteLine("Існуючі інгредієнти: ");
                            DisplayPredefinedIngredients();
                            do
                            {
                                Console.Write("Виберіть інгредінти для додавання (розділяйте через один пустий символ) або створіть свій (+): ");
                                var ingredientsInput = Console.ReadLine().Split(' ');
                                try {
                                    IEnumerable <int> parsedIngedientsInput;
                                    if (ingredientsInput [0].Equals("+"))
                                    {
                                        currentOrder.Dishes.ElementAt(userOption).AddIngredient(CreateIngredientUsing(predefinedIngredients));
                                    }
                                    else
                                    {
                                        parsedIngedientsInput = ingredientsInput.Select(x => int.Parse(x) - 1);
                                        foreach (var i in parsedIngedientsInput)
                                        {
                                            currentOrder.Dishes.ElementAt(userOption).AddIngredient(predefinedIngredients.ElementAt(i));
                                        }
                                    }
                                } catch (Exception) {
                                    Console.WriteLine("Помилка при додаванні інгредієнтів.");
                                    continue;
                                }
                                break;
                            } while(true);
                            break;

                        case 2:
                            do
                            {
                                Console.Write("Виберіть номера інгредієнтів для видалення (розділяйте через один пустий символ): ");
                                var ingredientsToRemove = Console.ReadLine().Split(' ');
                                try {
                                    IEnumerable <int> parsedIngredientsToRemove = ingredientsToRemove.Select(x => int.Parse(x) - 1);
                                    foreach (var i in parsedIngredientsToRemove)
                                    {
                                        currentOrder.Dishes.ElementAt(userOption).RemoveIngredientById(i);
                                    }
                                } catch (Exception) {
                                    Console.WriteLine("Помилка при введенні номерів інгредієнтів для видалення.");
                                    continue;
                                }
                                Console.WriteLine("Видалення успішне.");
                                break;
                            } while (true);
                            break;

                        case 3:
                            Console.WriteLine(currentOrder.Dishes.ElementAt(userOption).PrintIngredients());
                            Console.Write("Номер інгредієнта для зміни: ");

                            try {
                                var ingredientToChange = currentOrder.Dishes.ElementAt(userOption).Ingredients.ElementAt(int.Parse(Console.ReadLine()) - 1);

                                predefinedIngredients.Remove(ingredientToChange);
                                currentOrder.Dishes.ElementAt(userOption).RemoveIngredient(ingredientToChange);

                                Console.Write("Нове ім'я: ");
                                var newIngredientName = Console.ReadLine();
                                Console.Write("Нова ціна: ");
                                var newIngredientPrice = double.Parse(Console.ReadLine());

                                var newIngredient = new BusinessLogic.Ingredient(newIngredientName, newIngredientPrice);

                                predefinedIngredients.Add(newIngredient);
                                currentOrder.Dishes.ElementAt(userOption).AddIngredient(newIngredient);

                                Console.WriteLine("Інгредієнт успішно змінено!");
                            } catch (FormatException) {
                                Console.WriteLine("Невірний номер інгредієнта. Спробуйте ще раз!");
                            } catch (Exception) {
                                Console.WriteLine("Помилка при зміні інгрідієнта.");
                                continue;
                            }
                            break;

                        case 4:
                            Console.Write("Бажане ім'я для страви: ");
                            currentOrder.SetDishName(currentOrder.Dishes.ElementAt(userOption), Console.ReadLine());
                            break;

                        case 5:
                            do
                            {
                                Console.Write("Ціна на страву: ");
                                try {
                                    var dishPrice = double.Parse(Console.ReadLine());
                                    currentOrder.SetDishPrice(currentOrder.Dishes.ElementAt(userOption), dishPrice);
                                } catch (Exception) {
                                    continue;
                                }
                                break;
                            } while(true);
                            break;

                        case 6:
                            Console.Write("Час приготування: ");
                            var dishTime = double.Parse(Console.ReadLine());
                            currentOrder.SetDishCookTime(currentOrder.Dishes.ElementAt(userOption), dishTime);
                            Console.WriteLine("Успішне змінений час приготування!\n");
                            break;

                        case 7:
                            done = true;
                            break;

                        default:
                            throw new ArgumentOutOfRangeException("Немає такої опції.");
                        }
                        currentOrder.UpdateTotalCost();
                    }
                    else
                    {
                        throw new ArgumentOutOfRangeException("Немає такої опції.");
                    }
                }
            } catch (FormatException) {
                Console.WriteLine("На вході отримано не число.");
            } catch (ArgumentOutOfRangeException) {
                Console.WriteLine("Вихід за межі діапазону.");
            } catch (ArgumentNullException) {
                Console.WriteLine("Отримано пустий параметр.");
            }
        }
예제 #7
0
        /// <summary>
        /// Shows the edit dishes menu with selected order.
        /// </summary>
        /// <param name="order">Order.</param>
        private void EditOrderDishesMenu(BusinessLogic.Order order)
        {
            bool done = false;

            while (!done)
            {
                Console.WriteLine("Страви в замовленні:\n");
                Console.WriteLine(order.PrintDishes());

                Console.WriteLine("1. Додати страву");
                Console.WriteLine("2. Редагувати страву");
                Console.WriteLine("3. Видалити страву");
                Console.WriteLine("4. Повернутися");
                CommandPromtWithColor(ConsoleColor.Cyan);
                try {
                    var userOption = int.Parse(Console.ReadLine());

                    switch (userOption)
                    {
                    case 1:
                        AddDishesTo(order);
                        break;

                    case 2:
                        EditSpecificDishMenuIn(ref order);
                        break;

                    case 3:
                        do
                        {
                            Console.Write("Виберіть страви (розділяйте одним пустим символом): ");
                            try {
                                var dishesToRemove = Console.ReadLine().Split(' ');
                                IEnumerable <int> parsedDishesToRemove = dishesToRemove.Select(x => int.Parse(x) - 1);
                                foreach (var i in parsedDishesToRemove)
                                {
                                    order.RemoveDishById(i);
                                }
                                Console.WriteLine("Видалення успішне.");
                            } catch (Exception) {
                                Console.WriteLine("Проблема при видаленні страв(и)");
                                continue;
                            }
                            break;
                        } while(true);
                        break;

                    case 4:
                        done = true;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException("Немає такої опції.");
                    }
                } catch (FormatException) {
                    Console.WriteLine("На вході отримано не число.");
                } catch (ArgumentOutOfRangeException e) {
                    Console.WriteLine(e.ParamName);
                }
            }
        }
예제 #8
0
        /// <summary>
        /// Shows order menu with selected orderNumber.
        /// </summary>
        /// <returns>Status</returns>
        /// <param name="order">Order.</param>
        /// <param name="orderNumber">Order number.</param>
        private int OrderMenu(BusinessLogic.Order order, int orderNumber)
        {
            int  userOption = 0;
            bool finished   = false;

            while (!finished)
            {
                Console.WriteLine($"Працюємо із замовленням №{orderNumber}");
                Console.WriteLine(CurrentOrder.ToString());
                Console.WriteLine("Виберіть опцію:");
                Console.WriteLine("1. Видалити замовлення");
                Console.WriteLine("2. Редагувати замовлення");
                Console.WriteLine("3. Задати кінцеву ціну (???)");
                Console.WriteLine("4. Задати номер столика");
                Console.WriteLine("5. Оформити замовлення");
                CommandPromtWithColor(ConsoleColor.Cyan);
                try {
                    userOption = int.Parse(Console.ReadLine());
                } catch (FormatException) {
                    Console.WriteLine("На вході отримано не число.");
                }

                try {
                    switch (userOption)
                    {
                    case 1:
                        orderList.Remove(order);
                        Console.WriteLine("Поточне замовлення видалене. Повертаємось в головне меню");
                        finished = true;
                        break;

                    case 2:
                        EditOrderDishesMenu(order);
                        break;

                    case 3:
                        Console.Write("Введіть прийнятне число (в регіональній валюті): ");
                        var newOrderTotalCost = float.Parse(Console.ReadLine());
                        if (newOrderTotalCost > 0)
                        {
                            order.TotalCost = newOrderTotalCost;
                        }
                        else
                        {
                            throw new ArgumentException("Сума не може бути від'ємною.");
                        }
                        break;

                    case 4:
                        Console.Write($"Виберіть номер столика (1-{maximumTableNumber}): ");
                        var tableNumber = int.Parse(Console.ReadLine());
                        if (tableNumber > 0 && tableNumber <= maximumTableNumber)
                        {
                            order.TableNumber = tableNumber;
                        }
                        else
                        {
                            throw new ArgumentOutOfRangeException($"Немає столика №{tableNumber}.");
                        }
                        break;

                    case 5:
                        orderList.Add(order);
                        finished = true;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException("Немає такої опції.");
                    }
                } catch (FormatException) {
                    Console.WriteLine("В числове поле не можна записати таке значення.");
                } catch (ArgumentOutOfRangeException e) {
                    Console.WriteLine(e.ParamName);
                } catch (Exception e) {
                    Console.WriteLine(e.Message);
                }
            }
            return(1);
        }
예제 #9
0
 public void BeforeRun()
 {
     order = new BusinessLogic.Order ();
 }
예제 #10
0
 public void BeforeRun()
 {
     order = new BusinessLogic.Order();
 }
예제 #11
0
        private int InsertOrder()
        {
            int _result = 0;
            try
            {
                Order objOrder = new Order();
                objOrder.ORDERID = "O" + Convert.ToString(DateTime.Now.ToString("yyyyMMddHHmmss"));
                objOrder.USERID = new Guid(Common.TOKEN);
                objOrder.TRANSACTIONTYPE = 1;

                objTransaction = new Transaction();
                int result = objTransaction.InsertUserOrder(objOrder);
                if (result > 0)
                {
                    _result = result;
                }
            }
            catch (Exception ex)
            {
                objUser.InsertWebsiteLog(Common.TOKEN, "ucUserCart.ascx.cs", "InsertOrder", "", ex.ToString());
            }
            return _result;
        }
예제 #12
0
        /// <summary>
        /// Shows the main menu.
        /// </summary>
        /// <returns>Status.</returns>
        private int ShowMainMenu()
        {
            // Store order number
            int parsedInput = 0;

            if (orderList.Count == 0) {
                Console.WriteLine ("Немає замовлень. Створюємо...");
                CurrentOrder = CreateOrder ();
            } else {
                Console.WriteLine ("Існуючі замовлення:");
                DisplayOrders ();
                Console.WriteLine ($"Виберіть номер замовлення або створіть нове (1-{orderList.Count}/+), подвійний Enter для виходу: ");
                CommandPromtWithColor (ConsoleColor.Cyan);

                var input = Console.ReadLine ();
                try {
                    bool isNumber = int.TryParse (input.ToString (), out parsedInput);
                    if (isNumber) {
                        CurrentOrder = orderList.ElementAt (parsedInput - 1);
                        orderList.RemoveAt (parsedInput - 1);
                    } else {
                        if (input.ToString ().Equals ("+")) {
                            CurrentOrder = CreateOrder ();
                            // Incrementing number of all orders to get new order index.
                            parsedInput = orderList.Count + 1;
                        } else if (input.ToString ().Equals ("")) {
                            // First Enter pressed
                            Console.WriteLine ("Натисніть ще раз для виходу");
                            CurrentOrder = null;
                            if (Console.ReadLine ().Equals (""))
                                // Second Enter pressed
                                return 0;
                            else
                                return 1;
                        } else {
                            throw new FormatException ();
                        }
                    }
                } catch (ArgumentOutOfRangeException) {
                    Console.WriteLine ("Такого замовлення не існує.");
                    return 1;
                } catch (FormatException) {
                    Console.WriteLine ("Неправильні вхідні дані. Спробуйте ще раз!");
                    return 1;
                } catch (Exception e) {
                    Console.WriteLine ($"Виникла помилка: {e.Message}");
                    return 1;
                }
            }
            return OrderMenu (CurrentOrder, parsedInput);
        }
예제 #13
0
 /// <summary>
 /// Creates the order.
 /// </summary>
 /// <returns>Order.</returns>
 private BusinessLogic.Order CreateOrder()
 {
     Console.WriteLine ("Створення замовлення...");
     var order = new BusinessLogic.Order ();
     AddDishesTo (order);
     return order;
 }