public ActionResult SaveProduct(FormCollection fc, HttpPostedFileBase prodImage)
 {
     if (ModelState.IsValid)
     {
         string imagePath = uploadFile(prodImage);
         po.AddProduct(fc["productname"].ToString(), int.Parse(fc["productType"].ToString()), int.Parse(fc["supplier"].ToString()), int.Parse(fc["posGroup"].ToString()), fc["barcode"].ToString(), fc["description"].ToString(), imagePath);
     }
     return(RedirectToAction("Index"));
 }
        /*
         * Role Based Access Control:
         *
         * Implement a role based auth system. System should be able to assign a role to user and remove a user from the role.
         *
         * Entities are USER, ACTION TYPE, RESOURCE, ROLE
         *
         * ACTION TYPE defines the access level(Ex: READ, WRITE, DELETE)
         *
         * Access to resources for users are controlled strictly by the role.One user can have multiple roles. Given a user, action type and resource system should be able to tell whether user has access or not.
         */
        static void Main(string[] args)
        {
            ProductOperation productOperation = new ProductOperation();

            ResourceHandler resourceHandler = new ResourceHandler();

            Console.WriteLine("Please Login\nProvide Username and Password");
            string currentUserName = Console.ReadLine();
            string password        = Console.ReadLine();

            Login login = new Login(currentUserName, password);

            if (Login.CurrentUser == null)
            {
                Console.WriteLine("Incorrect Password!! Please restart Appication with correct login");
                Console.ReadKey();
                return;
            }


            string choice = "";

            Console.WriteLine("Data Operations\n1. Add Product\t2. Modify Product\t3. Delete product\t4.Print Products");
            while (choice != "exit")
            {
                Console.WriteLine("Make a Choice");
                int c = Convert.ToInt32(Console.ReadLine());
                switch (c)
                {
                    #region Product Cases
                case 1:
                    Console.WriteLine("Provide Id");
                    int id = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Provide Product Name");
                    string pName = Console.ReadLine();
                    Console.WriteLine("Provide Supplier");
                    string supplier = Console.ReadLine();
                    Console.WriteLine("Provide Quantity");
                    decimal quantity = Convert.ToDecimal(Console.ReadLine());
                    Console.WriteLine("Provide Unit Cost");
                    decimal uCost = Convert.ToDecimal(Console.ReadLine());

                    Product product = new Product(id, pName, supplier, quantity, uCost);
                    productOperation.AddProduct(product);
                    break;

                case 2:
                    Console.WriteLine("Provide Id");
                    id = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Provide Product Name");
                    pName = Console.ReadLine();
                    Console.WriteLine("Provide Supplier");
                    supplier = Console.ReadLine();
                    Console.WriteLine("Provide Quantity");
                    quantity = Convert.ToDecimal(Console.ReadLine());
                    Console.WriteLine("Provide Unit Cost");
                    uCost = Convert.ToDecimal(Console.ReadLine());

                    product = new Product(id, pName, supplier, quantity, uCost);
                    productOperation.UpdateProduct(product);
                    break;

                case 3:
                    Console.WriteLine("Provide Id");
                    id = Convert.ToInt32(Console.ReadLine());
                    productOperation.DeleteProduct(id);
                    break;

                case 4:
                    productOperation.PrintProducts();
                    break;

                    #endregion
                default:
                    choice = "exit";
                    break;
                }
            }
        }
        public static void ProductOperationMenu()
        {
            Console.WriteLine("Please Select Product Operation");
            Console.WriteLine("a. Add a Product");
            Console.WriteLine("b. List all Products");
            Console.WriteLine("c. Search a Product");
            Console.WriteLine("d. Delete a Product");
            Console.WriteLine("e. Main Menu");
            char ch1 = Convert.ToChar(Console.ReadLine());

            switch (ch1)
            {
            case 'a':
                Console.WriteLine("Enter Product Name");
                var ProductName = Console.ReadLine();
                while (string.IsNullOrWhiteSpace(ProductName) || int.TryParse(ProductName, out _))
                {
                    Console.WriteLine("Please Enter Only Char and It can not be Empty");
                    ProductName = Console.ReadLine();
                }
                Console.WriteLine("Enter Short Code");
                var shortCode = Console.ReadLine();

                Console.WriteLine("Enter Description");
                var desc = Console.ReadLine();
                while (string.IsNullOrWhiteSpace(desc) || int.TryParse(desc, out _))
                {
                    Console.WriteLine("Please Enter Only Char and It can not be Empty");
                    desc = Console.ReadLine();
                }
                Console.WriteLine("Enter Price");
                int  price = -1;
                bool flag  = Int32.TryParse(Console.ReadLine(), out price);
                while (!flag || price <= 0)
                {
                    Console.WriteLine("Please Enter Only Number and It can not be Empty/can not be negetive");
                    flag = Int32.TryParse(Console.ReadLine(), out price);
                }
                Console.WriteLine("Enter Manufacture Name");
                var manufactureName = Console.ReadLine();
                while (string.IsNullOrWhiteSpace(manufactureName) || int.TryParse(manufactureName, out _))
                {
                    Console.WriteLine("Please Enter Only Char and It can not be Empty");
                    manufactureName = Console.ReadLine();
                }
                Console.WriteLine("Enter Category Name");
                var category = Console.ReadLine();
                while (string.IsNullOrWhiteSpace(category) || int.TryParse(category, out _))
                {
                    Console.WriteLine("Please Enter Only Char and It can not be Empty");
                    category = Console.ReadLine();
                }
                ProductOperation.AddProduct(ProductName, shortCode, desc, price, manufactureName, category);
                break;

            case 'b':
                ProductOperation.GetAllProduct();
                break;

            case 'c':
                Console.WriteLine("Enter Product Name");
                var SearchProductName = Console.ReadLine();
                while (string.IsNullOrWhiteSpace(SearchProductName) || int.TryParse(SearchProductName, out _))
                {
                    Console.WriteLine("Please Enter Only Char and It can not be Empty");
                    ProductName = Console.ReadLine();
                }
                ProductOperation.SearchProduct(SearchProductName);
                break;

            case 'd':
                Console.WriteLine("Enter Product Name");
                var DeleteProductName = Console.ReadLine();
                while (string.IsNullOrWhiteSpace(DeleteProductName) || int.TryParse(DeleteProductName, out _))
                {
                    Console.WriteLine("Please Enter Only Char and It can not be Empty");
                    DeleteProductName = Console.ReadLine();
                }
                ProductOperation.DeleteProduct(DeleteProductName);
                break;

            case 'e':
                StartMenu.Menu();
                break;

            default:
                Console.WriteLine("Invalid Selection!!");
                ProductOperationMenu();
                break;
            }
        }