diff --git a/app/controllers/api/products_controller.rb b/app/controllers/api/products_controller.rb index 8068c6f82..e4acbcbb9 100644 --- a/app/controllers/api/products_controller.rb +++ b/app/controllers/api/products_controller.rb @@ -9,7 +9,7 @@ class API::ProductsController < API::ApiController MOVEMENTS_PER_PAGE = 10 def index - @products = ProductService.list(params) + @products = ProductService.list(params, current_user) end def show diff --git a/app/frontend/src/javascript/components/store/store.tsx b/app/frontend/src/javascript/components/store/store.tsx index cb1912b22..b969bc464 100644 --- a/app/frontend/src/javascript/components/store/store.tsx +++ b/app/frontend/src/javascript/components/store/store.tsx @@ -89,8 +89,8 @@ const Store: React.FC = ({ onError, onSuccess, currentUser, uiRouter }, []); useEffect(() => { - fetchProducts().then(scrollToProducts); if (resources.filters.ready) { + fetchProducts().then(scrollToProducts); uiRouter.stateService.transitionTo(uiRouter.globals.current, ProductLib.indexFiltersToRouterParams(resources.filters.data)); } }, [resources.filters]); @@ -188,7 +188,10 @@ const Store: React.FC = ({ onError, onSuccess, currentUser, uiRouter ...draft, filters: { ...draft.filters, - data: initFilters + data: { + ...initFilters, + categories: draft.filters.data.categories + } } }; }); diff --git a/app/services/product_service.rb b/app/services/product_service.rb index 645eb148a..52de843d6 100644 --- a/app/services/product_service.rb +++ b/app/services/product_service.rb @@ -5,13 +5,13 @@ class ProductService class << self PRODUCTS_PER_PAGE = 12 - def list(filters) + def list(filters, operator) products = Product.includes(:product_images) products = filter_by_active(products, filters) products = filter_by_categories(products, filters) products = filter_by_machines(products, filters) products = filter_by_keyword_or_reference(products, filters) - products = filter_by_stock(products, filters) + products = filter_by_stock(products, filters, operator) products = products_ordering(products, filters) total_count = products.count @@ -110,7 +110,9 @@ class ProductService { sku: filters[:keywords], query: "%#{filters[:keywords]}%" }) end - def filter_by_stock(products, filters) + def filter_by_stock(products, filters, operator) + filters[:stock_type] = 'external' unless operator.privileged? + products.where("(stock ->> '#{filters[:stock_type]}')::int >= #{filters[:stock_from]}") if filters[:stock_from].to_i.positive? products.where("(stock ->> '#{filters[:stock_type]}')::int <= #{filters[:stock_to]}") if filters[:stock_to].to_i.positive?