diff --git a/app/controllers/admin/variant_overrides_controller.rb b/app/controllers/admin/variant_overrides_controller.rb index 8e8213f61c..d88c25da10 100644 --- a/app/controllers/admin/variant_overrides_controller.rb +++ b/app/controllers/admin/variant_overrides_controller.rb @@ -71,6 +71,12 @@ module Admin def load_collection collection_hash = Hash[variant_overrides_params.each_with_index.map { |vo, i| [i, vo] }] + + # Reset count_on_hand when switching to producer settings: + collection_hash.each_value do |vo| + vo["count_on_hand"] = nil if vo.fetch("on_demand", :unchanged).nil? + end + @vo_set = Sets::VariantOverrideSet.new(@variant_overrides, collection_attributes: collection_hash) end diff --git a/app/serializers/api/admin/variant_override_serializer.rb b/app/serializers/api/admin/variant_override_serializer.rb index f1663c9b94..f221d6295c 100644 --- a/app/serializers/api/admin/variant_override_serializer.rb +++ b/app/serializers/api/admin/variant_override_serializer.rb @@ -6,6 +6,12 @@ module Api attributes :id, :hub_id, :variant_id, :sku, :price, :count_on_hand, :on_demand, :default_stock, :resettable, :tag_list, :tags, :import_date + def count_on_hand + return if object.on_demand + + object.count_on_hand + end + def tag_list object.tag_list.join(",") end diff --git a/app/serializers/api/admin/variant_simple_serializer.rb b/app/serializers/api/admin/variant_simple_serializer.rb index 3a2944aff0..29425309f5 100644 --- a/app/serializers/api/admin/variant_simple_serializer.rb +++ b/app/serializers/api/admin/variant_simple_serializer.rb @@ -19,6 +19,7 @@ module Api end def on_hand + return if object.on_demand return 0 if object.on_hand.nil? object.on_hand diff --git a/spec/system/admin/variant_overrides_spec.rb b/spec/system/admin/variant_overrides_spec.rb index a121f1f707..2c132f8de2 100644 --- a/spec/system/admin/variant_overrides_spec.rb +++ b/spec/system/admin/variant_overrides_spec.rb @@ -254,9 +254,12 @@ RSpec.describe " context "with overrides" do let!(:vo) { - create(:variant_override, :on_demand, variant:, hub:, price: 77.77, - default_stock: 1000, resettable: true, - tag_list: ["tag1", "tag2", "tag3"]) + create( + :variant_override, + on_demand: true, count_on_hand: -5, + variant:, hub:, price: 77.77, default_stock: 1000, resettable: true, + tag_list: ["tag1", "tag2", "tag3"] + ) } let!(:vo_no_auth) { create(:variant_override, variant:, hub: hub2, price: 1, count_on_hand: 2)