Example #1
0
        static void Main(string[] args)
        {
            #region Vendors, products & users
            //List<Product> list1 = new List<Product>
            //{
            //    new Product(0001, "Tuborg", 95.00M),
            //    new Product(0002, "Milka", 75.00M),
            //    new Product(0003, "Persil", 290.00M),
            //    new Product(0004, "Knorr", 45.00M),
            //    new Product(0005, "Wilkinson", 978.00M),
            //    new Product(0006, "Nivea", 210.00M),
            //    new Product(0007, "Lacalut", 195.00M),
            //    new Product(0008, "Johnnie Walker", 3247.00M),
            //    new Product(0009, "Nescafe", 75.00M)
            //};

            //List<Product> list2 = new List<Product>
            //{
            //    new Product(0010, "Heineken", 85.00M),
            //    new Product(0011, "Nestle", 65.00M),
            //    new Product(0012, "Tide", 270.00M),
            //    new Product(0013, "Maggi", 40.00M),
            //    new Product(0014, "Gillette", 835.00M),
            //    new Product(0015, "Dove", 105.00M),
            //    new Product(0016, "Colgate", 235.00M),
            //    new Product(0017, "Jack Daniel's", 2294.00M),
            //    new Product(0018, "Jacobs", 122.00M)
            //};

            //List<Product> list3 = new List<Product>
            //{
            //    new Product(0019, "Amstel", 90.00M),
            //    new Product(0020, "Toblerone", 70.00M),
            //    new Product(0021, "Ariel", 280.00M),
            //    new Product(0022, "Podravka", 35.00M),
            //    new Product(0023, "Balea", 435.00M),
            //    new Product(0024, "Old Spice", 105.00M),
            //    new Product(0025, "Oral-B", 249.00M),
            //    new Product(0026, "Jameson", 2337.00M),
            //    new Product(0027, "Franck", 79.00M)
            //};

            //Vendor market1 = new Vendor("TINEX", list1);
            //Vendor market2 = new Vendor("Vero", list2);
            //Vendor market3 = new Vendor("KAM", list3);

            //List<Vendor> vendors = new List<Vendor> { market1, market2, market3 };
            #endregion

            List <Vendor> vendorsDeserialized = new List <Vendor>();

            ////Json serialization
            string pathJsonSerialization = @"C:\Users\Master\Desktop\e-Shop\Products\Products.json";
            //string json = JsonConvert.SerializeObject(vendors, Formatting.Indented);
            //File.WriteAllText(pathJsonSerialization, json);

            //Json deserialization
            string readJson = File.ReadAllText(pathJsonSerialization);
            vendorsDeserialized = JsonConvert.DeserializeObject <List <Vendor> >(readJson);

            string          filePath  = @"C:\Users\Master\Desktop\e-Shop\Orders\Orders.txt";
            Customer        john      = new Customer("John Doe", "jdoe", "doe123");
            Customer        bob       = new Customer("Bob Bobsky", "bsky", "bob321");
            Customer        mike      = new Customer("Mike Tyson", "mike", "iron123");
            List <Customer> customers = new List <Customer>()
            {
                bob, john, mike
            };
            Orders[]       archive      = new Orders[1];
            string         loggedUser   = "";
            List <Product> ShoppingCart = new List <Product>();
            int            i            = 0;
            Customer       tempUserInfo = new Customer();
            tempUserInfo = customers[i];
            string  usrInput        = "";
            string  pwdInput        = "";
            decimal code            = 0M;
            string  userChoice      = "";
            int     userChoiceToInt = 0;
            string  searchOptions   = "";
            bool    loginIsOk       = false;
            bool    orderShipped    = false;
            bool    hasBeenCharged  = false;
            string  street          = "";
            string  number          = "";
            string  city            = "";

            try
            {
                while (true)
                {
                    Console.Clear();
                    ShopService.LogIn(ref usrInput, ref pwdInput);

                    if (usrInput != "" && pwdInput != "")
                    {
                        ShopService.LoginCheck(usrInput, pwdInput, ref loginIsOk, customers, ref i, ref loggedUser);
                    }

                    if (loginIsOk == false)
                    {
                        ShopService.BadLoginMsg();
                        Console.ReadKey();
                    }
                    else
                    {
                        if (loginIsOk == true)
                        {
                            while (true)
                            {
                                Console.Clear();
                                ShopService.Menu2(tempUserInfo);
                                CustomException.CheckInput4(ref userChoice, ref userChoiceToInt);
                                Console.Clear();

                                while (true)
                                {
                                    if (userChoiceToInt == 1)
                                    {
                                        Product.ListAllProducts(vendorsDeserialized[0].Products, vendorsDeserialized[1].Products, vendorsDeserialized[2].Products);
                                        ShopService.ExitBack(ref userChoice);
                                        if (userChoice.ToLower() == "e")
                                        {
                                            userChoice = "";
                                            Console.Clear();
                                            break;
                                        }
                                    }

                                    if (userChoiceToInt == 2)
                                    {
                                        while (true)
                                        {
                                            ShopService.Menu3();
                                            CustomException.CheckInput4(ref userChoice, ref userChoiceToInt);
                                            Console.Clear();


                                            if (userChoiceToInt == 1)
                                            {
                                                searchOptions   = "";
                                                userChoiceToInt = 0;
                                                Console.Clear();
                                                ShopService.Menu4();
                                                searchOptions = Console.ReadLine();
                                                ShopService.Menu5();
                                                searchOptions += Console.ReadLine();
                                                Vendor.ListVendors(vendorsDeserialized);
                                                searchOptions += Console.ReadLine();
                                                Console.Clear();
                                                Product.DisplayByOptions(searchOptions, vendorsDeserialized);
                                                Console.WriteLine();
                                                Console.WriteLine("Press any key to exit");
                                                Console.ReadKey();
                                                userChoiceToInt = 4;
                                                Console.Clear();
                                            }

                                            if (userChoiceToInt == 2)
                                            {
                                                Console.Clear();
                                                ShopService.Menu4();
                                                searchOptions = Console.ReadLine();
                                                ShopService.Menu5();
                                                searchOptions += Console.ReadLine();
                                                Console.Clear();
                                                Console.WriteLine("Enter the name of the product:");
                                                string searchPorduct = Console.ReadLine();
                                                CustomException.CheckInput2(searchPorduct);
                                                Console.Clear();
                                                Console.WriteLine("Result:");
                                                Product.FindProducts(vendorsDeserialized, searchOptions, searchPorduct);
                                                Console.WriteLine();
                                                Console.WriteLine("Press any key to exit.");
                                                Console.ReadKey();
                                                Console.Clear();
                                            }

                                            if (userChoiceToInt == 4)
                                            {
                                                userChoiceToInt = 2;
                                                break;
                                            }

                                            if (userChoiceToInt == 3)
                                            {
                                                Console.Clear();
                                                break;
                                            }
                                        }

                                        if (userChoiceToInt == 3)
                                        {
                                            userChoiceToInt = 0;
                                            Console.Clear();
                                            break;
                                        }
                                    }

                                    if (userChoiceToInt == 3)
                                    {
                                        Product orderedProduct = new Product();
                                        ShopService.Menu10();
                                        code = decimal.Parse(Console.ReadLine());
                                        Product.FindProduct2(code, vendorsDeserialized, ref orderedProduct);
                                        Console.WriteLine("Enter the quantity:");
                                        orderedProduct.Quantity = int.Parse(Console.ReadLine());
                                        ShoppingCart.Add(orderedProduct);
                                        orderedProduct = null;
                                        Console.WriteLine();
                                        Console.WriteLine("If you want to finish ordering press \"e\", to continue press any other key.");
                                        userChoice = Console.ReadLine();
                                        if (userChoice.ToLower() == "e")
                                        {
                                            Console.Clear();
                                            break;
                                        }
                                        Console.Clear();
                                    }

                                    if (userChoiceToInt == 4 && ShoppingCart.Count != 0)
                                    {
                                        Console.WriteLine("Your shopping cart status:");
                                        Console.WriteLine();
                                        Product.PrintList2(ShoppingCart);
                                        Console.WriteLine();
                                        Console.WriteLine($"Total cost : {Product.TotalCost(ShoppingCart)}");
                                        Console.WriteLine();
                                        Console.WriteLine("If you want to exit press \"e\".");
                                        userChoice = Console.ReadLine();
                                        if (userChoice.ToLower() == "e")
                                        {
                                            Console.Clear();
                                            break;
                                        }
                                    }
                                    else
                                    {
                                        if (userChoiceToInt == 4 && ShoppingCart.Count == 0)
                                        {
                                            ShopService.ExitBack2(ref userChoice);
                                            if (userChoice == "e")
                                            {
                                                break;
                                            }
                                        }
                                    }

                                    if (userChoiceToInt == 5 && ShoppingCart.Count != 0)
                                    {
                                        Console.Clear();
                                        if (ShoppingCart.Count != 0)
                                        {
                                            Product.DisplayOrderList(ShoppingCart);
                                            ShopService.Menu6();
                                            userChoice = Console.ReadLine();
                                            Product.DisplayOrderList(ShoppingCart);

                                            if (userChoice != "" && userChoice.All(char.IsDigit))
                                            {
                                                ShoppingCart.RemoveAt(int.Parse(userChoice) - 1);
                                            }
                                        }
                                        else
                                        {
                                            ShopService.Menu11();
                                            userChoice = Console.ReadLine();
                                        }

                                        if (userChoice.ToLower() == "e")
                                        {
                                            Console.Clear();
                                            break;
                                        }
                                        else
                                        {
                                            if (userChoice == "")
                                            {
                                                CustomException.ThrowCustomException();
                                            }
                                        }
                                    }
                                    else
                                    {
                                        if (userChoiceToInt == 5 && ShoppingCart.Count == 0)
                                        {
                                            ShopService.ExitBack2(ref userChoice);
                                            if (userChoice == "e")
                                            {
                                                break;
                                            }
                                        }
                                    }

                                    if (userChoiceToInt == 6)
                                    {
                                        Console.Clear();
                                        ShopService.Menu7();
                                        CustomException.CheckInput4(ref userChoice, ref userChoiceToInt);
                                        while (true)
                                        {
                                            if (userChoiceToInt == 1 && orderShipped != true && ShoppingCart.Count != 0)
                                            {
                                                Console.Clear();
                                                Console.WriteLine("Your shipping address info:");
                                                Console.Write("Street: ");
                                                userChoice = Console.ReadLine();
                                                CustomException.CheckInput2(userChoice);
                                                street = userChoice;
                                                Console.Write("Number: ");
                                                userChoice = Console.ReadLine();
                                                CustomException.CheckInput3(userChoice);
                                                number = userChoice;
                                                ShopService.Menu1();
                                                userChoice = Console.ReadLine();
                                                CustomException.CheckInput3(userChoice);
                                                city = Customer.YourCity(int.Parse(userChoice));
                                                ShopService.Menu8();
                                                userChoice = Console.ReadLine();
                                                CustomException.CheckInput2(userChoice);
                                                userChoiceToInt = int.Parse(userChoice);

                                                if (userChoiceToInt == 1)
                                                {
                                                    ShippingProvider MakedonskaPosta = new ShippingProvider("Makedonska Posta");
                                                    tempUserInfo.Subscribe(MakedonskaPosta);
                                                    Console.Clear();
                                                    MakedonskaPosta.Send(MakedonskaPosta, customers[i].Name, street, number, city);
                                                    orderShipped = true;
                                                    Console.WriteLine();
                                                    Console.WriteLine("Press any key to exit");
                                                    userChoiceToInt = 6;
                                                    Console.ReadKey();
                                                    break;
                                                }
                                                else
                                                {
                                                    if (userChoiceToInt == 2)
                                                    {
                                                        ShippingProvider DELCO = new ShippingProvider("DELCO");
                                                        tempUserInfo.Subscribe(DELCO);
                                                        Console.Clear();
                                                        DELCO.Send(DELCO, customers[i].Name, street, number, city);
                                                        orderShipped = true;
                                                        Console.WriteLine();
                                                        Console.WriteLine("Press any key to exit");
                                                        userChoiceToInt = 6;
                                                        Console.ReadKey();
                                                        break;
                                                    }
                                                }
                                            }

                                            if (userChoiceToInt == 2 && hasBeenCharged != true && orderShipped == true && ShoppingCart.Count != 0)
                                            {
                                                Console.Clear();
                                                ShopService.Menu9();
                                                CustomException.CheckInput4(ref userChoice, ref userChoiceToInt);

                                                if (userChoiceToInt == 1)
                                                {
                                                    Payment creditCard = new Payment("Credit Card");
                                                    tempUserInfo.Subscribe2(creditCard);
                                                    Console.Clear();
                                                    creditCard.Paying(creditCard, "Payment was executed successfully", Product.TotalCost(ShoppingCart));
                                                    Orders order = new Orders();
                                                    order.Customer    = customers[i];
                                                    order.Products    = ShoppingCart;
                                                    order.Date        = DateTime.Now;
                                                    order.TotalAmount = Product.TotalCost2(ShoppingCart);
                                                    string orderLog = Orders.SavingOrder(ref order);
                                                    File.AppendAllText(filePath, orderLog + Environment.NewLine);
                                                    hasBeenCharged = true;
                                                    Console.WriteLine();
                                                    Console.WriteLine("Press \"e\" to exit");
                                                    userChoice = Console.ReadLine();
                                                    if (userChoice.ToLower() == "e")
                                                    {
                                                        order = null;
                                                        ShoppingCart.Clear();
                                                        orderShipped    = false;
                                                        hasBeenCharged  = false;
                                                        userChoiceToInt = 4;
                                                        Console.Clear();
                                                        break;
                                                    }
                                                    else
                                                    {
                                                        if (userChoice == "")
                                                        {
                                                            CustomException.ThrowCustomException();
                                                        }
                                                    }
                                                }
                                                else
                                                {
                                                    if (userChoiceToInt == 2)
                                                    {
                                                        Payment payPal = new Payment("PayPal");
                                                        tempUserInfo.Subscribe2(payPal);
                                                        Console.Clear();
                                                        payPal.Paying(payPal, "Payment was executed successfully", Product.TotalCost(ShoppingCart));
                                                        //Customer.LogOrder(ref historyOfOrders, ShoppingCart);
                                                        //customers[i].OrderHistory = historyOfOrders;
                                                        //List<List<Product>> HistoryOfPurchased = new List<List<Product>>();
                                                        //HistoryOfPurchased = customers[i].Archive;
                                                        //HistoryOfPurchased.Add(ShoppingCart);
                                                        //customers[i].Archive = HistoryOfPurchased;

                                                        Orders order = new Orders();
                                                        order.Customer    = customers[i];
                                                        order.Products    = ShoppingCart;
                                                        order.Date        = DateTime.Now;
                                                        order.TotalAmount = Product.TotalCost2(ShoppingCart);

                                                        string orderLog = Orders.SavingOrder(ref order);

                                                        File.AppendAllText(filePath, orderLog + Environment.NewLine);

                                                        hasBeenCharged = true;
                                                        Console.WriteLine();
                                                        Console.WriteLine("Press \"e\" to exit");
                                                        userChoice = Console.ReadLine();
                                                        if (userChoice.ToLower() == "e")
                                                        {
                                                            order = null;
                                                            //Test code
                                                            ShoppingCart.Clear();
                                                            orderShipped   = false;
                                                            hasBeenCharged = false;
                                                            //End of test code
                                                            userChoiceToInt = 4;
                                                            Console.Clear();
                                                            break;
                                                        }
                                                        else
                                                        {
                                                            if (userChoice == "")
                                                            {
                                                                CustomException.ThrowCustomException();
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                if (userChoiceToInt != 4 && userChoiceToInt != 3 && hasBeenCharged != true && orderShipped != true)
                                                {
                                                    Console.Clear();
                                                    ShopService.Menu12();
                                                    Console.ReadKey();
                                                    userChoiceToInt = 6;
                                                    break;
                                                }
                                            }

                                            if ((orderShipped == true || hasBeenCharged == true) && userChoiceToInt != 4)
                                            {
                                                if (orderShipped == true && hasBeenCharged == false && ShoppingCart.Count != 0)
                                                {
                                                    Console.Clear();
                                                    ShopService.Menu13();
                                                    Console.WriteLine();
                                                    Console.ReadKey();
                                                    userChoiceToInt = 6;
                                                    break;
                                                }
                                                else
                                                {
                                                    if (orderShipped == false && hasBeenCharged == true)
                                                    {
                                                        Console.Clear();
                                                        ShopService.Menu14();
                                                        Console.WriteLine();
                                                        Console.ReadKey();
                                                        userChoiceToInt = 6;
                                                        break;
                                                    }
                                                    else
                                                    {
                                                        Console.Clear();
                                                        ShopService.Menu15();
                                                        Console.WriteLine();
                                                        Console.ReadKey();
                                                        userChoiceToInt = 6;
                                                        break;
                                                    }
                                                }
                                            }

                                            if (userChoiceToInt == 3)
                                            {
                                                Console.Clear();
                                                ShopService.Menu16();
                                                userChoice = Console.ReadLine();
                                                CustomException.CheckInput3(userChoice);
                                                userChoiceToInt = int.Parse(userChoice);

                                                if (userChoiceToInt == 1)
                                                {
                                                    Console.Clear();
                                                    Orders.PrintOrderHistory("$", filePath, loggedUser);
                                                    Console.WriteLine("Press any key to exit...");
                                                    Console.ReadKey();
                                                    userChoiceToInt = 4;
                                                    break;
                                                }
                                                else
                                                {
                                                    if (userChoiceToInt == 2)
                                                    {
                                                        Console.Clear();
                                                        Orders.PrintOrderHistory("#", filePath, loggedUser);
                                                        Console.WriteLine("Press any key to exit...");
                                                        Console.ReadKey();
                                                        userChoiceToInt = 4;
                                                        break;
                                                    }
                                                }
                                            }

                                            if (userChoiceToInt == 4)
                                            {
                                                Console.Clear();
                                                break;
                                            }
                                        }
                                        if (userChoiceToInt == 4)
                                        {
                                            Console.Clear();
                                            break;
                                        }
                                    }
                                    else
                                    {
                                        if (userChoiceToInt == 6 && ShoppingCart.Count == 0)
                                        {
                                            ShopService.ExitBack2(ref userChoice);
                                            if (userChoice == "e")
                                            {
                                                break;
                                            }
                                        }
                                    }

                                    if (userChoiceToInt == 7)
                                    {
                                        loggedUser = "";
                                        return;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (CustomException ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.HelpLink);
                Console.WriteLine(ex.StackTrace);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }

            Console.ReadLine();
        }