From 0eaa0a6a263f55428f09d6ae206d1a7c48d66bdd Mon Sep 17 00:00:00 2001 From: Thomas von Deyen Date: Mon, 24 Apr 2023 11:26:02 +0200 Subject: [PATCH 1/2] Allow to disable track inventory for product without variants We allow to disable track_inventory on the variant form, but not on the product form. This makes it impossible to change the value for sole products not having any variants, because the value is stored on the master variant. (cherry picked from commit 55920f30c53f877b8acdb3cf63c7e9dc88fc6cbc) --- .../views/spree/admin/products/_form.html.erb | 9 ++++++- .../features/admin/products/products_spec.rb | 24 +++++++++++++++++++ core/app/models/spree/product.rb | 1 + core/spec/models/spree/product_spec.rb | 18 ++++++++++++++ 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/backend/app/views/spree/admin/products/_form.html.erb b/backend/app/views/spree/admin/products/_form.html.erb index 793221ae7db..eda5749b569 100644 --- a/backend/app/views/spree/admin/products/_form.html.erb +++ b/backend/app/views/spree/admin/products/_form.html.erb @@ -142,7 +142,14 @@ <% end %> - +
+ <%= f.field_container :track_inventory do %> + + <% end %> +
<% end %>
diff --git a/backend/spec/features/admin/products/products_spec.rb b/backend/spec/features/admin/products/products_spec.rb index 3b7771c465c..bb11bc15ca8 100644 --- a/backend/spec/features/admin/products/products_spec.rb +++ b/backend/spec/features/admin/products/products_spec.rb @@ -270,6 +270,13 @@ def build_option_type_with_values(name, values) it "should show default tax category" do expect(page).to have_select('product_tax_category_id', selected: 'Alcohol taxes') end + + it "can disable track_inventory" do + expect(page).to have_field("product_track_inventory", checked: true) + uncheck "product_track_inventory" + click_button "Create" + expect(page).to have_field("product_track_inventory", checked: false) + end end context "cloning a product", js: true do @@ -343,6 +350,23 @@ def build_option_type_with_values(name, values) end end end + + it "can disable track_inventory" do + visit spree.admin_product_path(product) + expect(page).to have_field("product_track_inventory", checked: true) + uncheck "product_track_inventory" + click_button "Update" + expect(page).to have_field("product_track_inventory", checked: false) + end + + context "with variants" do + let(:product) { create(:variant).product } + + it "cannot disable track_inventory" do + visit spree.admin_product_path(product) + expect(page).to_not have_field("product_track_inventory") + end + end end context 'deleting a product', js: true do diff --git a/core/app/models/spree/product.rb b/core/app/models/spree/product.rb index 1543aa242df..51bddb710b7 100644 --- a/core/app/models/spree/product.rb +++ b/core/app/models/spree/product.rb @@ -83,6 +83,7 @@ def find_or_build_master :height, :price, :sku, + :track_inventory, :weight, :width, ] diff --git a/core/spec/models/spree/product_spec.rb b/core/spec/models/spree/product_spec.rb index 2f2cb36b87a..3cd890072cd 100644 --- a/core/spec/models/spree/product_spec.rb +++ b/core/spec/models/spree/product_spec.rb @@ -653,4 +653,22 @@ class Extension < Spree::Base end end end + + describe "inventory tracking" do + let(:product) { build(:product) } + + describe "#track_inventory=" do + it "delegates to master variant" do + expect(product.master).to receive(:track_inventory=).with(true) + product.track_inventory = true + end + end + + describe "#track_inventory" do + it "delegates to master variant" do + expect(product.master).to receive(:track_inventory) { true } + expect(product.track_inventory).to be(true) + end + end + end end From 05ec7777c9502078aeaeec2a78abf4922bd7a0dd Mon Sep 17 00:00:00 2001 From: Thomas von Deyen Date: Tue, 25 Apr 2023 09:10:21 +0200 Subject: [PATCH 2/2] Use Spree::Variant#track_inventory translation We actually delegate the value to the master variant and most stores will already have the translation present. (cherry picked from commit 32e41bff1ca7f55e2b9f95a59c5743998c121cac) --- backend/app/views/spree/admin/products/_form.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/app/views/spree/admin/products/_form.html.erb b/backend/app/views/spree/admin/products/_form.html.erb index eda5749b569..738f025670c 100644 --- a/backend/app/views/spree/admin/products/_form.html.erb +++ b/backend/app/views/spree/admin/products/_form.html.erb @@ -146,7 +146,7 @@ <%= f.field_container :track_inventory do %> <% end %>