public bool?ArchiveProduct(string userId, int productId)
        {
            try
            {
                // Check if product exists
                Product Product = _productRepo.Get(productId);
                if (Product == null)
                {
                    return(false);
                }

                // Veridy user's product
                string prductOwnerId = _outletManagerRepo.Get(_categoryRepo.AsQueryable().FirstOrDefault(x => x.CategoryId == _productRepo.Get(productId).CategoryId).OutletId).UserId;
                if (prductOwnerId != userId)
                {
                    return(false);
                }

                // Archive the product
                Product.Status = CommonConstants.StatusTypes.Archived;
                _productRepo.Update(Product);
                return(true);
            }
            catch (Exception ex)
            {
                int pk;
                _productRepo.Rollback();

                if (!_crashLogRepo.AsQueryable().Any())
                {
                    pk = 0;
                }
                else
                {
                    pk = _crashLogRepo.GetMaxPK("CrashLogId") + 1;
                }

                string msg = (string.IsNullOrEmpty(ex.Message) || ex.Message.ToLower().Contains(CommonConstants.MsgInInnerException.ToLower()))
                            ? ex.InnerException.Message
                            : ex.Message;
                _crashLogRepo.Add(new Crashlog
                {
                    CrashLogId   = pk,
                    ClassName    = "ProductService",
                    MethodName   = "ArchiveProduct",
                    ErrorMessage = ex.Message,
                    ErrorInner   = msg,
                    Data         = JsonSerializer.Serialize("string userId = " + userId + ", int? productId = " + productId),
                    TimeStamp    = DateTime.Now
                });

                return(null);
            }
        }
        public List <CategoryModel> GetCategoriesByOutlets(int OutletId)
        {
            try
            {
                List <CategoryModel> response = new List <CategoryModel>();
                response = _categoryRepo.AsQueryable().Where(x => x.OutletId == OutletId && x.Status == CommonConstants.StatusTypes.Active)
                           .Select(x => new CategoryModel
                {
                    CategoryId       = x.CategoryId,
                    CategoryName     = x.CategoryName,
                    outletId         = x.OutletId,
                    ParentCategoryId = x.ParentCategoryId,
                    UserId           = x.Outlet.UserId
                }).OrderBy(x => x.ParentCategoryId).ToList();

                return(response);
            }
            catch (Exception ex)
            {
                _categoryRepo.Rollback();

                int pk = _crashLogRepo.AsQueryable().Count() + 1;

                _crashLogRepo.Add(new DataLayer.Entities.Crashlog
                {
                    CrashLogId   = pk,
                    ClassName    = "CategoryService",
                    MethodName   = "GetCategoriesByOutlets",
                    ErrorMessage = ex.Message.ToString(),
                    ErrorInner   = (string.IsNullOrEmpty(ex.Message) || ex.Message == CommonConstants.MsgInInnerException ? ex.InnerException.Message : ex.Message).ToString(),
                    Data         = "",
                    TimeStamp    = DateTime.Now
                });

                return(null);
            }
        }