Example #1
0
        static int Main(string[] args)
        {
            try
            {
                List <Tags>      tags       = GetTags();
                List <Inventory> inventory  = GetInventory();
                List <Products>  products   = GetProducts();
                bool             isGoingApp = true;
                while (isGoingApp)
                {
                    Console.Clear();
                    Console.WriteLine("'ERP Report Bot' made by Roman Holub");
                    Console.WriteLine("Short rules:\n1)Move through the menu by numbers on your NumPad or under F keys.\n2)Enter correct data, otherwise you'll have warning\n");
                    Console.WriteLine("1. Exit\n2. Products\n3. Leftovers");
                    var key = Console.ReadKey().Key;
                    Console.Clear();
                    switch (key)
                    {
                    //Exit
                    case ConsoleKey.D1:
                    case ConsoleKey.NumPad1:
                        isGoingApp = false;
                        break;

                    //Products
                    case ConsoleKey.D2:
                    case ConsoleKey.NumPad2:
                        bool isGoing2 = true;
                        while (isGoing2)
                        {
                            Console.Clear();
                            Console.WriteLine("1. Go to main menu\n2. Search product\n3. Products list ASC\n4. Product list DESC");
                            var key2 = Console.ReadKey().Key;
                            switch (key2)
                            {
                            //Main menu
                            case ConsoleKey.D1:
                            case ConsoleKey.NumPad1:
                                isGoing2 = false;
                                break;

                            //Search product
                            case ConsoleKey.D2:
                            case ConsoleKey.NumPad2:
                                Console.Clear();
                                Console.Write("Enter keyword->");
                                string keyWord            = Console.ReadLine().ToLower();
                                var    searchById         = products.Distinct().Where(x => x.Id.ToLower() == keyWord).ToList();
                                var    searchByModelBrand = products.Distinct().Where(x => x.Brand.ToLower().Contains(keyWord) || x.Model.ToLower().Contains(keyWord)).ToList();
                                var    searchByTags       = products.Distinct().Join(tags,
                                                                                     x => x.Id,
                                                                                     y => y.ProductId,
                                                                                     (x, y) => new { x, y }
                                                                                     ).Where(o => o.y.Value.ToLower().Contains(keyWord)).Select(x => x.x).ToList();
                                var generalCollection = searchByModelBrand.Union(searchById).Union(searchByTags);
                                Console.WriteLine($"|{"Id",-10}|{"Brand",-20}|{"Model",-20}|{"Price",-10}|");
                                Console.WriteLine("------------------------------------------------------------------");
                                foreach (var item in generalCollection)
                                {
                                    Console.WriteLine($"|{item.Id,-10}|{item.Brand,-20}|{item.Model,-20}|{item.Price,-10}|");
                                }
                                Console.WriteLine("Press any key to continue...");
                                Console.ReadKey();


                                break;

                            //Product list ASC
                            case ConsoleKey.D3:
                            case ConsoleKey.NumPad3:
                                Console.Clear();
                                Console.WriteLine($"|{"Id",-10}|{"Brand",-20}|{"Model",-20}|{"Price",-10}|{"Tags",-40}|");
                                Console.WriteLine("----------------------------------------------------------------------------------------------------------");
                                var ASCSort = products.GroupJoin(tags,
                                                                 x => x.Id,
                                                                 y => y.ProductId,
                                                                 (x, y) => new { x, y }
                                                                 ).OrderBy(o => o.x.Price).ToList();
                                foreach (var item in ASCSort)
                                {
                                    string tagsA = "";
                                    foreach (var tag in item.y)
                                    {
                                        tagsA += tag.Value + " ";
                                    }
                                    Console.WriteLine($"|{item.x.Id,-10}|{item.x.Brand,-20}|{item.x.Model,-20}|{item.x.Price,-10}|{tagsA,-40}|");
                                }
                                Console.WriteLine("Press any key to continue...");
                                Console.ReadKey();
                                break;

                            //Product list DESC
                            case ConsoleKey.D4:
                            case ConsoleKey.NumPad4:
                                Console.Clear();
                                Console.WriteLine($"|{"Id",-10}|{"Brand",-20}|{"Model",-20}|{"Price",-10}|{"Tags",-40}|");
                                Console.WriteLine("----------------------------------------------------------------------------------------------------------");
                                var DESCSort = products.GroupJoin(tags,
                                                                  x => x.Id,
                                                                  y => y.ProductId,
                                                                  (x, y) => new { x, y }
                                                                  ).OrderByDescending(o => o.x.Price).ToList();
                                foreach (var item in DESCSort)
                                {
                                    string tagsA = "";
                                    foreach (var tag in item.y)
                                    {
                                        tagsA += tag.Value + " ";
                                    }
                                    Console.WriteLine($"|{item.x.Id,-10}|{item.x.Brand,-20}|{item.x.Model,-20}|{item.x.Price,-10}|{tagsA,-40}|");
                                }
                                Console.WriteLine("Press any key to continue...");
                                Console.ReadKey();
                                break;
                            }
                        }
                        break;

                    //Leftovers
                    case ConsoleKey.D3:
                    case ConsoleKey.NumPad3:
                        bool isGoing3 = true;
                        while (isGoing3)
                        {
                            Console.Clear();
                            Console.WriteLine("1. Go to main menu\n2. Missing products\n3. Leftovers ASC\n4. Leftovers DESC");
                            var key2 = Console.ReadKey().Key;
                            switch (key2)
                            {
                            //Main menu
                            case ConsoleKey.D1:
                            case ConsoleKey.NumPad1:
                                isGoing3 = false;
                                break;

                            //Missing products
                            case ConsoleKey.D2:
                            case ConsoleKey.NumPad2:
                                Console.Clear();
                                var prod = (from p in products
                                            join i in inventory on p.Id equals i.ProductId into inv
                                            from i in inv.DefaultIfEmpty()
                                            where i?.ProductId == null || i?.Balance == 0
                                            select p).OrderBy(k => k.Id).ToList();
                                Console.WriteLine($"|{"Id",-10}|{"Brand",-20}|{"Model",-20}|{"Price",-10}|");
                                Console.WriteLine("-----------------------------------------------------------------");
                                foreach (var item in prod)
                                {
                                    Console.WriteLine($"|{item.Id,-10}|{item.Brand,-20}|{item.Model,-20}|{item.Price,-10}|");
                                }
                                Console.WriteLine("Press any key to continue...");
                                Console.ReadKey();
                                break;

                            //Leftovers ASC
                            case ConsoleKey.D3:
                            case ConsoleKey.NumPad3:
                                Console.Clear();
                                var productsLeftAsc = products.GroupJoin(
                                    inventory,
                                    p => p.Id,
                                    t => t.ProductId,
                                    (p, t) => new
                                {
                                    Id    = p.Id,
                                    Brand = p.Brand,
                                    Model = p.Model,
                                    Price = p.Price,
                                    Left  = t.Sum(x => x.Balance)
                                }
                                    ).OrderBy(x => x.Left).ToList();
                                Console.WriteLine($"|{"Id",-10}|{"Brand",-20}|{"Model",-20}|{"Price",-10}|{"Left",-10}|");
                                Console.WriteLine("----------------------------------------------------------------------------");
                                foreach (var item in productsLeftAsc)
                                {
                                    Console.WriteLine($"|{item.Id,-10}|{item.Brand,-20}|{item.Model,-20}|{item.Price,-10}|{item.Left,-10}|");
                                }
                                Console.WriteLine("Press any key to continue...");
                                Console.ReadKey();
                                break;

                            //Leftovers DESC
                            case ConsoleKey.D4:
                            case ConsoleKey.NumPad4:
                                Console.Clear();
                                var productsLeftDesc = products.GroupJoin(
                                    inventory,
                                    p => p.Id,
                                    t => t.ProductId,
                                    (p, t) => new
                                {
                                    Id    = p.Id,
                                    Brand = p.Brand,
                                    Model = p.Model,
                                    Price = p.Price,
                                    Left  = t.Sum(x => x.Balance)
                                }
                                    ).OrderByDescending(x => x.Left).ToList();
                                Console.WriteLine($"|{"Id",-10}|{"Brand",-20}|{"Model",-20}|{"Price",-10}|{"Left",-10}|");
                                Console.WriteLine("----------------------------------------------------------------------------");
                                foreach (var item in productsLeftDesc)
                                {
                                    Console.WriteLine($"|{item.Id,-10}|{item.Brand,-20}|{item.Model,-20}|{item.Price,-10}|{item.Left,-10}|");
                                }
                                Console.WriteLine("Press any key to continue...");
                                Console.ReadKey();
                                break;
                            }
                        }
                        break;

                    default:
                        Console.WriteLine("Try to select correct menu option. Press any key to continue...");
                        Console.ReadKey();
                        break;
                    }
                }
                return(0);
            }
            catch
            {
                Console.WriteLine("Something went wrong. Try to check your files.");
                Console.ReadKey();
                return(-1);
            }
        }