diff --git a/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee b/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee index 65426a0422..871cbb9b03 100644 --- a/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee +++ b/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee @@ -1,8 +1,27 @@ -angular.module("ofn.admin").controller "AdminOverrideVariantsCtrl", ($scope, Indexer, hubs, producers, products) -> +angular.module("ofn.admin").controller "AdminOverrideVariantsCtrl", ($scope, Indexer, SpreeApiAuth, PagedFetcher, hubs, producers) -> $scope.hubs = hubs $scope.hub = null - $scope.products = products + $scope.products = [] $scope.producers = Indexer.index producers + + $scope.initialise = -> + SpreeApiAuth.authorise() + .then -> + $scope.spree_api_key_ok = true + $scope.fetchProducts() + .catch (message) -> + $scope.api_error_msg = message + + + $scope.fetchProducts = -> + url = "/api/products/distributable?page=::page::;per_page=100" + PagedFetcher.fetch url, (data) => $scope.addProducts data.products + + + $scope.addProducts = (products) -> + $scope.products = $scope.products.concat products + + $scope.selectHub = -> - $scope.hub = (hub for hub in hubs when hub.id == $scope.hub_id)[0] \ No newline at end of file + $scope.hub = (hub for hub in hubs when hub.id == $scope.hub_id)[0] diff --git a/app/controllers/spree/admin/products_controller_decorator.rb b/app/controllers/spree/admin/products_controller_decorator.rb index cfd4649fc1..d44df1ffb5 100644 --- a/app/controllers/spree/admin/products_controller_decorator.rb +++ b/app/controllers/spree/admin/products_controller_decorator.rb @@ -4,7 +4,7 @@ Spree::Admin::ProductsController.class_eval do include OpenFoodNetwork::SpreeApiKeyLoader include OrderCyclesHelper before_filter :load_form_data, :only => [:bulk_edit, :new, :create, :edit, :update] - before_filter :load_spree_api_key, :only => :bulk_edit + before_filter :load_spree_api_key, :only => [:bulk_edit, :override_variants] alias_method :location_after_save_original, :location_after_save @@ -52,7 +52,6 @@ Spree::Admin::ProductsController.class_eval do def override_variants @hubs = order_cycle_hub_enterprises(without_validation: true) @producers = order_cycle_producer_enterprises - @products = Spree::Product.not_deleted.where(supplier_id: @producers).by_producer.by_name end diff --git a/app/controllers/spree/api/products_controller_decorator.rb b/app/controllers/spree/api/products_controller_decorator.rb index 111f36962c..733ce365a2 100644 --- a/app/controllers/spree/api/products_controller_decorator.rb +++ b/app/controllers/spree/api/products_controller_decorator.rb @@ -9,6 +9,7 @@ Spree::Api::ProductsController.class_eval do respond_with(@products, default_template: :index) end + # TODO: This should be named 'managed'. Is the action above used? Maybe we should remove it. def bulk_products @products = OpenFoodNetwork::Permissions.new(current_api_user).managed_products. merge(product_scope). @@ -19,6 +20,20 @@ Spree::Api::ProductsController.class_eval do render text: { products: ActiveModel::ArraySerializer.new(@products, each_serializer: Spree::Api::ProductSerializer), pages: @products.num_pages }.to_json end + def distributable + producers = OpenFoodNetwork::Permissions.new(current_api_user). + order_cycle_enterprises.is_primary_producer.by_name + + @products = Spree::Product.scoped. + merge(product_scope). + where(supplier_id: producers). + by_producer.by_name. + ransack(params[:q]).result. + page(params[:page]).per(params[:per_page]) + + render text: { products: ActiveModel::ArraySerializer.new(@products, each_serializer: Spree::Api::ProductSerializer), pages: @products.num_pages }.to_json + end + def soft_delete authorize! :delete, Spree::Product @product = find_product(params[:product_id]) diff --git a/app/views/spree/admin/products/override_variants/_data.html.haml b/app/views/spree/admin/products/override_variants/_data.html.haml index 09d8aca54e..d96db0edb9 100644 --- a/app/views/spree/admin/products/override_variants/_data.html.haml +++ b/app/views/spree/admin/products/override_variants/_data.html.haml @@ -1,3 +1,3 @@ += admin_inject_spree_api_key = admin_inject_hubs = admin_inject_producers -= admin_inject_products diff --git a/app/views/spree/admin/products/override_variants/_products.html.haml b/app/views/spree/admin/products/override_variants/_products.html.haml index a5abae6ba1..f5081e54bd 100644 --- a/app/views/spree/admin/products/override_variants/_products.html.haml +++ b/app/views/spree/admin/products/override_variants/_products.html.haml @@ -7,7 +7,7 @@ %th On hand %tbody %tr{ng: {repeat: 'product in products'}} - %td {{ producers[product.producer].name }} + %td {{ producers[product.producer_id].name }} %td {{ product.name }} %td {{ product.price }} %td {{ product.on_hand }} diff --git a/config/routes.rb b/config/routes.rb index 75380a55f5..fd891fbb9c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -132,8 +132,11 @@ Spree::Core::Engine.routes.prepend do end resources :products do - get :managed, on: :collection - get :bulk_products, on: :collection + collection do + get :managed + get :bulk_products + get :distributable + end delete :soft_delete resources :variants do diff --git a/spec/javascripts/unit/admin/controllers/override_variants_controller_spec.js.coffee b/spec/javascripts/unit/admin/controllers/override_variants_controller_spec.js.coffee index 8c5144454b..f3c796cd51 100644 --- a/spec/javascripts/unit/admin/controllers/override_variants_controller_spec.js.coffee +++ b/spec/javascripts/unit/admin/controllers/override_variants_controller_spec.js.coffee @@ -7,6 +7,9 @@ describe "OverrideVariantsCtrl", -> beforeEach -> module 'ofn.admin' + module ($provide) -> + $provide.value 'SpreeApiKey', 'API_KEY' + null scope = {} inject ($controller, Indexer) -> @@ -16,6 +19,13 @@ describe "OverrideVariantsCtrl", -> expect(scope.hubs).toEqual hubs expect(scope.hub).toBeNull + it "adds products", -> + expect(scope.products).toEqual [] + scope.addProducts ['a', 'b'] + expect(scope.products).toEqual ['a', 'b'] + scope.addProducts ['c', 'd'] + expect(scope.products).toEqual ['a', 'b', 'c', 'd'] + describe "selecting a hub", -> it "sets the chosen hub", -> scope.hub_id = 1