public Result<List<OnlineShoppingCart.Model.Product>> GetProductList_GenericSearch(string productInfo, int categoryID)
        {
            var result = new Result<List<OnlineShoppingCart.Model.Product>>();
            result.Data = new List<Model.Product>();
            using (OnlineShoppingCartEntities entity = new OnlineShoppingCartEntities())
            {
                var listProd = (from prod in entity.Products.Include("ProductCategories")
                                where (((productInfo == null || productInfo.Trim() == "")
                                  || prod.ProductCode.Contains(productInfo)
                                  || prod.ProductName.Contains(productInfo)
                                  || prod.ProductDescription.Contains(productInfo)
                                  || prod.Brand.Contains(productInfo)
                                  || prod.Model.Contains(productInfo))) && (categoryID == prod.CategoryId)
                                select new OnlineShoppingCart.Model.Product
                                {
                                    ID = prod.Id,
                                    ProductCode = prod.ProductCode,
                                    ProductName = prod.ProductName,
                                    ProductDescription = prod.ProductDescription,
                                    CategoryID = prod.CategoryId,
                                    CategoryName = prod.ProductCategory.Category,
                                    Brand = prod.Brand,
                                    Model = prod.Model,
                                    UnitPrice = prod.UnitPrice,
                                    SKU = prod.SKU,
                                    CurrentStock = prod.CurrentStock,
                                    IsActive = prod.IsActive,
                                    CreatedOn = prod.CreatedOn,
                                    UpdatedOn = prod.UpdatedOn,
                                    CreatedByUserID = prod.CreatedByUserId,
                                    UpdatedByUserID = prod.UpdatedByUserId
                                }).ToList();

                if (listProd == null)
                {
                    result.Success = false;
                    result.Data = null;
                    result.Message = "No product found for given search criteria";
                }
                else
                {
                    foreach (var _product in listProd)
                    {
                        DAL.ProductImage productImage = new ProductImage();
                        var resultProductImageList = productImage.GetListProductImageFilePath(_product.ID);

                        if (resultProductImageList.Success)
                            _product.ProductImageInfoList = resultProductImageList.Data;

                        result.Data.Add(_product);
                    }
                    result.Success = true;
                }
            }
            return result;
        }
        public ValidationResult_OSC PostProductImageInfo([FromBody] List<OnlineShoppingCart.Model.ProductImageInfo> lstProductImageInfo)
        {
            var result = new ValidationResult_OSC();

            //validate that string path is not empty
            bool listNotValid = lstProductImageInfo.Any(cus => String.IsNullOrWhiteSpace(cus.ImageFilePath));
            if (listNotValid)
            {
                result.AddMessage("One or more image path are empty.");
                return result;
            }
            ProductImage productImageDAL = new ProductImage();
            result = productImageDAL.AddListProductImageFilePath(lstProductImageInfo);
            return result;
        }
        public Result<List<OnlineShoppingCart.Model.Product>> GetAllProduct()
        {
            var result = new Result<List<OnlineShoppingCart.Model.Product>>();
            result.Data = new List<Model.Product>();
            using (OnlineShoppingCartEntities entity = new OnlineShoppingCartEntities())
            {
                var listProd = entity.Products.ToList();

                if (listProd == null)
                {
                    result.Success = false;
                    result.Data = null;
                    result.Message = "No product found";
                }
                else
                {
                    foreach (var it in listProd)
                    {
                        OnlineShoppingCart.Model.Product _product = null;
                        it.ConvertToBusinessObject(out _product);

                        DAL.ProductImage productImage = new ProductImage();
                        var resultProductImageList = productImage.GetListProductImageFilePath(_product.ID);

                        if (resultProductImageList.Success)
                            _product.ProductImageInfoList = resultProductImageList.Data;

                        result.Data.Add(_product);
                    }
                    result.Success = true;
                }
            }
            return result;
        }
        public Result<OnlineShoppingCart.Model.Product> GetProduct(int id)
        {
            using (OnlineShoppingCartEntities entity = new OnlineShoppingCartEntities())
            {
                var result = new Result<OnlineShoppingCart.Model.Product>();
                OnlineShoppingCart.DataAccess.SQL.Product _product = (from prod in entity.Products
                                                                      where prod.Id == id
                                                                      select prod).FirstOrDefault();
                if (_product == null)
                {
                    result.Success = false;
                    result.Data = null;
                    result.Message = "No product found";
                }
                else
                {
                    OnlineShoppingCart.Model.Product _productModel = null;
                    _product.ConvertToBusinessObject(out _productModel);

                    DAL.ProductImage productImage = new ProductImage();
                    var resultProductImageList = productImage.GetListProductImageFilePath(_productModel.ID);

                    if (resultProductImageList.Success)
                        _productModel.ProductImageInfoList = resultProductImageList.Data;

                    result.Data = _productModel;
                }
                return result;
            }
        }