From 8e8878e43a0fbba4fd5e5ed3ae1dfba731902270 Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Sun, 15 Jun 2025 18:10:55 +0500 Subject: [PATCH] Add search_variants_as parameter to variant search functionality --- .../admin/orders/controllers/order_controller.js.coffee | 1 + .../admin/utils/directives/variant_autocomplete.js.coffee | 1 + app/controllers/spree/admin/variants_controller.rb | 2 +- lib/open_food_network/scope_variants_for_search.rb | 2 +- spec/controllers/spree/admin/variants_controller_spec.rb | 7 +++++++ .../open_food_network/scope_variants_for_search_spec.rb | 2 +- 6 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/admin/orders/controllers/order_controller.js.coffee b/app/assets/javascripts/admin/orders/controllers/order_controller.js.coffee index 6107ad2345..e99cbf3bbd 100644 --- a/app/assets/javascripts/admin/orders/controllers/order_controller.js.coffee +++ b/app/assets/javascripts/admin/orders/controllers/order_controller.js.coffee @@ -5,6 +5,7 @@ angular.module("admin.orders").controller "orderCtrl", ($scope, shops, orderCycl $scope.distributor_id = parseInt($attrs.ofnDistributorId) $scope.order_cycle_id = parseInt($attrs.ofnOrderCycleId) + $scope.search_variants_as = $attrs.ofnSearchVariantsAs $scope.validOrderCycle = (oc) -> $scope.orderCycleHasDistributor oc, parseInt($scope.distributor_id) diff --git a/app/assets/javascripts/admin/utils/directives/variant_autocomplete.js.coffee b/app/assets/javascripts/admin/utils/directives/variant_autocomplete.js.coffee index 49a5b0fe59..efc3b0042f 100644 --- a/app/assets/javascripts/admin/utils/directives/variant_autocomplete.js.coffee +++ b/app/assets/javascripts/admin/utils/directives/variant_autocomplete.js.coffee @@ -26,6 +26,7 @@ angular.module("admin.utils").directive "variantAutocomplete", ($timeout) -> order_cycle_id: scope.order_cycle_id eligible_for_subscriptions: scope.eligible_for_subscriptions include_out_of_stock: scope.include_out_of_stock + search_variants_as: scope.search_variants_as results: (data, page) -> window.variants = data # this is how spree auto complete JS code picks up variants results: data diff --git a/app/controllers/spree/admin/variants_controller.rb b/app/controllers/spree/admin/variants_controller.rb index deda271867..d78cb60427 100644 --- a/app/controllers/spree/admin/variants_controller.rb +++ b/app/controllers/spree/admin/variants_controller.rb @@ -117,7 +117,7 @@ module Spree def variant_search_params params.permit( :q, :distributor_id, :order_cycle_id, :schedule_id, :eligible_for_subscriptions, - :include_out_of_stock + :include_out_of_stock, :search_variants_as, ).to_h.with_indifferent_access end diff --git a/lib/open_food_network/scope_variants_for_search.rb b/lib/open_food_network/scope_variants_for_search.rb index 465e501c10..875b68ba5a 100644 --- a/lib/open_food_network/scope_variants_for_search.rb +++ b/lib/open_food_network/scope_variants_for_search.rb @@ -21,7 +21,7 @@ module OpenFoodNetwork scope_to_schedule if params[:schedule_id] scope_to_order_cycle if params[:order_cycle_id] scope_to_distributor if params[:distributor_id] - scope_to_supplier if spree_current_user.can_manage_line_items_in_orders_only? + scope_to_supplier if params[:search_variants_as] == 'supplier' @variants end diff --git a/spec/controllers/spree/admin/variants_controller_spec.rb b/spec/controllers/spree/admin/variants_controller_spec.rb index 21f0413bcd..0eb2350265 100644 --- a/spec/controllers/spree/admin/variants_controller_spec.rb +++ b/spec/controllers/spree/admin/variants_controller_spec.rb @@ -137,6 +137,13 @@ RSpec.describe Spree::Admin::VariantsController do expect(variant).to have_received(:destroy) end + describe "#search" do + it "filters by distributor and supplier1 products" do + spree_get :search, q: 'Prod', distributor_id: d.id.to_s, search_variants_as: 'supplier' + expect(assigns(:variants)).to eq([v1]) + end + end + it 'shows a success flash message' do spree_delete :destroy, id: variant.id, product_id: variant.product.id, format: 'html' diff --git a/spec/lib/open_food_network/scope_variants_for_search_spec.rb b/spec/lib/open_food_network/scope_variants_for_search_spec.rb index 35453826bf..943539c169 100644 --- a/spec/lib/open_food_network/scope_variants_for_search_spec.rb +++ b/spec/lib/open_food_network/scope_variants_for_search_spec.rb @@ -185,7 +185,7 @@ RSpec.describe OpenFoodNetwork::ScopeVariantsForSearch do end context "when search is done by the producer allowing to edit orders" do - let(:params) { { q: "product" } } + let(:params) { { q: "product", search_variants_as: 'supplier' } } let(:producer) { create(:supplier_enterprise) } let!(:spree_current_user) { instance_double('Spree::User', enterprises: Enterprise.where(id: producer.id),