public ActionResult Index(ProductViewModel productViewModel)
        {
            var categories = _categoryManager.GetCategories();

            ViewBag.Categories = new SelectList(categories, "CategoryId", "CategoryName");
            if (productViewModel.ProductId > 0)
            {
                _product.ProductId = productViewModel.ProductId;
                _product           = _productManager.GetProductById(_product);
                ProductViewModel model       = _purchaseManager.LatestProduct(_product);
                int productAvailableQuantity = _salesManager.GetProductAvailableQuantity(_product);
                productViewModel.ProductId         = _product.ProductId;
                productViewModel.ProductName       = _product.ProductName;
                productViewModel.ProductCode       = _product.ProductCode;
                productViewModel.CategoryName      = _product.Category.CategoryName;
                productViewModel.ReorderLevel      = _product.ReorderLevel;
                productViewModel.ExpireDate        = model.ExpireDate;
                productViewModel.AvailableQuantity = productAvailableQuantity;
                productViewModel.ExpiredQuantity   = _stockManager.ExpiredProductQuantity(_product);
                productViewModel.OpeningBalance    = _stockManager.GetOpeningBalance(productViewModel);
                productViewModel.InBalance         = _stockManager.GetInBalance(productViewModel);
                productViewModel.OutBalance        = _stockManager.GetOutBalance(productViewModel);
                productViewModel.ClosingBalance    = (productViewModel.OpeningBalance + productViewModel.InBalance) - productViewModel.OutBalance;
                productViewModel.Products.Add(productViewModel);
                return(View(productViewModel));
            }
            if (productViewModel.StartDate != null && productViewModel.EndDate != null)
            {
                if (productViewModel.IsCheckExpireDate)
                {
                    var purchasesProducts = _purchaseManager.GetPurchaseProductsByExpireDate(productViewModel);
                    foreach (var purchaseProduct in purchasesProducts)
                    {
                        _product.ProductId = purchaseProduct.ProductId;
                        var aProduct = _purchaseManager.LatestProduct(_product);
                        if (aProduct.ExpireDate <= purchaseProduct.ExpireDate)
                        {
                            productViewModel.ProductId = purchaseProduct.ProductId;
                            int productAvailableQuantity = _salesManager.GetProductAvailableQuantity(_product);
                            if (productViewModel.Products.Count > 0)
                            {
                                int count      = 0;
                                int countValue = productViewModel.Products.Count;
                                foreach (var product in productViewModel.Products)
                                {
                                    count++;
                                    if (product.ProductName == purchaseProduct.Product.ProductName)
                                    {
                                        product.ProductName = purchaseProduct.Product.ProductName;
                                        break;
                                    }
                                    else
                                    {
                                        if (count == countValue)
                                        {
                                            ProductViewModel model1 = new ProductViewModel();
                                            model1.ProductId     = purchaseProduct.ProductId;
                                            model1.ProductCode   = purchaseProduct.Product.ProductCode;
                                            model1.ProductName   = purchaseProduct.Product.ProductName;
                                            _category.CategoryId = purchaseProduct.Product.CategoryId;
                                            var category1 = _categoryManager.CategoryGetById(_category);
                                            model1.CategoryName = category1.CategoryName;
                                            model1.ReorderLevel = purchaseProduct.Product.ReorderLevel;
                                            //model1.ExpireDate = purchaseProduct.ExpireDate;
                                            model1.ExpireDate        = aProduct.ExpireDate;
                                            model1.AvailableQuantity = productAvailableQuantity;
                                            model1.ExpiredQuantity   = _stockManager.ExpiredProductQuantityByExpiredDate(productViewModel);
                                            model1.OpeningBalance    = _stockManager.GetOpeningBalance(productViewModel);
                                            model1.InBalance         = _stockManager.GetInBalance(productViewModel);
                                            model1.OutBalance        = _stockManager.GetOutBalance(productViewModel);
                                            model1.ClosingBalance    = (model1.OpeningBalance + model1.InBalance) - model1.OutBalance;
                                            productViewModel.Products.Add(model1);
                                            break;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                ProductViewModel model = new ProductViewModel();
                                model.ProductId      = purchaseProduct.ProductId;
                                model.ProductCode    = purchaseProduct.Product.ProductCode;
                                model.ProductName    = purchaseProduct.Product.ProductName;
                                _category.CategoryId = purchaseProduct.Product.CategoryId;
                                var category = _categoryManager.CategoryGetById(_category);
                                model.CategoryName      = category.CategoryName;
                                model.AvailableQuantity = productAvailableQuantity;
                                model.ReorderLevel      = purchaseProduct.Product.ReorderLevel;
                                //model.ExpireDate = purchaseProduct.ExpireDate;
                                model.ExpireDate      = aProduct.ExpireDate;
                                model.ExpiredQuantity = _stockManager.ExpiredProductQuantityByExpiredDate(productViewModel);
                                model.OpeningBalance  = _stockManager.GetOpeningBalance(productViewModel);
                                model.InBalance       = _stockManager.GetInBalance(productViewModel);
                                model.OutBalance      = _stockManager.GetOutBalance(productViewModel);
                                model.ClosingBalance  = (model.OpeningBalance + model.InBalance) - model.OutBalance;
                                productViewModel.Products.Add(model);
                            }
                        }
                    }
                    return(View(productViewModel));
                }
                else
                {
                    ViewBag.Message = "Please select your action from checkbox!";
                }
            }
            if (productViewModel.IsCheckReorderLevel)
            {
                List <ProductViewModel> productViewModels = new List <ProductViewModel>();
                var purchaseProducts = _purchaseManager.GetPurchaseProducts();
                foreach (var purchaseProduct in purchaseProducts)
                {
                    _product.ProductId = purchaseProduct.ProductId;
                    var product           = _productManager.GetProductById(_product);
                    var aProduct          = _purchaseManager.LatestProduct(_product);
                    int availableQuantity = _salesManager.GetProductAvailableQuantity(_product);
                    if (availableQuantity <= product.ReorderLevel)
                    {
                        if (productViewModels.Count > 0)
                        {
                            int c      = 0;
                            int cValue = productViewModels.Count;
                            foreach (var pro in productViewModels)
                            {
                                c++;
                                if (pro.ProductId == product.ProductId)
                                {
                                    break;
                                }
                                else
                                {
                                    if (c == cValue)
                                    {
                                        ProductViewModel model = new ProductViewModel();
                                        model.ProductId         = product.ProductId;
                                        model.ProductName       = product.ProductName;
                                        model.ProductCode       = product.ProductCode;
                                        model.CategoryName      = product.Category.CategoryName;
                                        model.ReorderLevel      = product.ReorderLevel;
                                        model.ExpireDate        = aProduct.ExpireDate;
                                        model.AvailableQuantity = availableQuantity;
                                        model.ExpiredQuantity   = _stockManager.ExpiredProductQuantity(_product);
                                        model.OpeningBalance    = _stockManager.GetOpeningBalance(aProduct);
                                        model.InBalance         = _stockManager.GetInBalance(aProduct);
                                        model.OutBalance        = _stockManager.GetOutBalance(aProduct);
                                        model.ClosingBalance    = (model.OpeningBalance + model.InBalance) - model.OutBalance;
                                        productViewModels.Add(model);
                                        break;
                                    }
                                }
                            }
                        }
                        else
                        {
                            ProductViewModel model = new ProductViewModel();
                            model.ProductId         = product.ProductId;
                            model.ProductName       = product.ProductName;
                            model.ProductCode       = product.ProductCode;
                            model.CategoryName      = product.Category.CategoryName;
                            model.ReorderLevel      = product.ReorderLevel;
                            model.ExpireDate        = aProduct.ExpireDate;
                            model.AvailableQuantity = availableQuantity;
                            model.ExpiredQuantity   = _stockManager.ExpiredProductQuantity(_product);
                            model.OpeningBalance    = _stockManager.GetOpeningBalance(aProduct);
                            model.InBalance         = _stockManager.GetInBalance(aProduct);
                            model.OutBalance        = _stockManager.GetOutBalance(aProduct);
                            model.ClosingBalance    = (model.OpeningBalance + model.InBalance) - model.OutBalance;
                            productViewModels.Add(model);
                        }
                    }
                }

                foreach (var product in productViewModels)
                {
                    ProductViewModel model = new ProductViewModel();
                    model.ProductId         = product.ProductId;
                    model.ProductName       = product.ProductName;
                    model.ProductCode       = product.ProductCode;
                    model.CategoryName      = product.CategoryName;
                    model.ReorderLevel      = product.ReorderLevel;
                    model.ExpireDate        = product.ExpireDate;
                    model.AvailableQuantity = product.AvailableQuantity;
                    model.ExpiredQuantity   = product.ExpiredQuantity;
                    model.OpeningBalance    = product.OpeningBalance;
                    model.InBalance         = product.InBalance;
                    model.OutBalance        = product.OutBalance;
                    model.ClosingBalance    = product.ClosingBalance;
                    productViewModel.Products.Add(model);
                }
                return(View(productViewModel));
            }
            else
            {
                ViewBag.Message = "Please select your action!";
            }

            return(View(productViewModel));
        }