From 6937a133ae71cf8d0c2be3bd45a4462257b15dd5 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 2 Jul 2025 15:35:46 +1000 Subject: [PATCH] Move inventory enabled check to OpenFoodNetwork::ScopeVariantToHub --- .../admin/subscription_line_items_controller.rb | 6 +++--- app/controllers/api/v0/shipments_controller.rb | 7 ++++--- app/models/order_cycle.rb | 9 ++++++--- app/models/spree/line_item.rb | 7 ++++--- app/models/spree/shipment.rb | 7 ++++--- app/services/cart_service.rb | 7 ++++--- app/services/orders/factory_service.rb | 6 +++--- app/services/variants_stock_levels.rb | 6 +++--- .../app/services/order_management/stock/packer.rb | 8 +++++--- .../services/order_management/subscriptions/estimator.rb | 7 ++++--- lib/open_food_network/scope_variant_to_hub.rb | 4 +++- spec/lib/open_food_network/scope_variant_to_hub_spec.rb | 8 ++++++++ 12 files changed, 51 insertions(+), 31 deletions(-) diff --git a/app/controllers/admin/subscription_line_items_controller.rb b/app/controllers/admin/subscription_line_items_controller.rb index 90a5005757..172445836e 100644 --- a/app/controllers/admin/subscription_line_items_controller.rb +++ b/app/controllers/admin/subscription_line_items_controller.rb @@ -54,9 +54,9 @@ module Admin fee_calculator = OpenFoodNetwork::EnterpriseFeeCalculator.new(@shop, @order_cycle) - if OpenFoodNetwork::FeatureToggle.enabled?(:inventory, @shop) - OpenFoodNetwork::ScopeVariantToHub.new(@shop).scope(@variant) - end + OpenFoodNetwork::ScopeVariantToHub.new(@shop).scope( + @variant, inventory_enabled: OpenFoodNetwork::FeatureToggle.enabled?(:inventory, @shop) + ) @variant.price + fee_calculator.indexed_fees_for(@variant) end diff --git a/app/controllers/api/v0/shipments_controller.rb b/app/controllers/api/v0/shipments_controller.rb index dc6be43345..be14069b5e 100644 --- a/app/controllers/api/v0/shipments_controller.rb +++ b/app/controllers/api/v0/shipments_controller.rb @@ -113,9 +113,10 @@ module Api def scoped_variant(variant_id) variant = Spree::Variant.find(variant_id) - if OpenFoodNetwork::FeatureToggle.enabled?(:inventory, @order.distributor) - OpenFoodNetwork::ScopeVariantToHub.new(@order.distributor).scope(variant) - end + OpenFoodNetwork::ScopeVariantToHub.new(@order.distributor).scope( + variant, + inventory_enabled: OpenFoodNetwork::FeatureToggle.enabled?(:inventory, @order.distributor) + ) variant end diff --git a/app/models/order_cycle.rb b/app/models/order_cycle.rb index b8e70ae1eb..91967e6bdc 100644 --- a/app/models/order_cycle.rb +++ b/app/models/order_cycle.rb @@ -289,9 +289,12 @@ class OrderCycle < ApplicationRecord items = Spree::LineItem.includes(:variant).joins(:order).merge(orders) - if OpenFoodNetwork::FeatureToggle.enabled?(:inventory, distributor) - scoper = OpenFoodNetwork::ScopeVariantToHub.new(distributor) - items.each { |li| scoper.scope(li.variant) } + scoper = OpenFoodNetwork::ScopeVariantToHub.new(distributor) + items.each do |li| + scoper.scope( + li.variant, + inventory_enabled: OpenFoodNetwork::FeatureToggle.enabled?(:inventory, distributor) + ) end items diff --git a/app/models/spree/line_item.rb b/app/models/spree/line_item.rb index 900bcdf8a1..18fcd3f5ac 100644 --- a/app/models/spree/line_item.rb +++ b/app/models/spree/line_item.rb @@ -296,9 +296,10 @@ module Spree end def scope_variant - if OpenFoodNetwork::FeatureToggle.enabled?(:inventory, order.distributor) - scoper.scope(variant) - end + scoper.scope( + variant, + inventory_enabled: OpenFoodNetwork::FeatureToggle.enabled?(:inventory, order.distributor) + ) variant end diff --git a/app/models/spree/shipment.rb b/app/models/spree/shipment.rb index f5fd7c9a47..8b664e2dc3 100644 --- a/app/models/spree/shipment.rb +++ b/app/models/spree/shipment.rb @@ -195,9 +195,10 @@ module Spree states = {} units.group_by(&:state).each { |state, iu| states[state] = iu.count } - if OpenFoodNetwork::FeatureToggle.enabled?(:inventory, order.distributor) - scoper.scope(variant) - end + scoper.scope( + variant, + inventory_enabled: OpenFoodNetwork::FeatureToggle.enabled?(:inventory, order.distributor) + ) OpenStruct.new(variant:, quantity: units.length, states:) end diff --git a/app/services/cart_service.rb b/app/services/cart_service.rb index e61db51939..0cbd3acfb5 100644 --- a/app/services/cart_service.rb +++ b/app/services/cart_service.rb @@ -59,9 +59,10 @@ class CartService end def attempt_cart_add(variant, quantity, max_quantity = nil) - if OpenFoodNetwork::FeatureToggle.enabled?(:inventory, order.distributor) - scoper.scope(variant) - end + scoper.scope( + variant, + inventory_enabled: OpenFoodNetwork::FeatureToggle.enabled?(:inventory, order.distributor) + ) return unless valid_variant?(variant) diff --git a/app/services/orders/factory_service.rb b/app/services/orders/factory_service.rb index 55ae75cad5..8e3066f0cb 100644 --- a/app/services/orders/factory_service.rb +++ b/app/services/orders/factory_service.rb @@ -51,9 +51,9 @@ module Orders attrs[:line_items].each do |li| next unless variant = Spree::Variant.find_by(id: li[:variant_id]) - if OpenFoodNetwork::FeatureToggle.enabled?(:inventory, shop) - scoper.scope(variant) - end + scoper.scope( + variant, inventory_enabled: OpenFoodNetwork::FeatureToggle.enabled?(:inventory, shop) + ) li[:quantity] = stock_limited_quantity(variant.on_demand, variant.on_hand, li[:quantity]) li[:price] = variant.price diff --git a/app/services/variants_stock_levels.rb b/app/services/variants_stock_levels.rb index df725a0933..8abdf3990f 100644 --- a/app/services/variants_stock_levels.rb +++ b/app/services/variants_stock_levels.rb @@ -39,9 +39,9 @@ class VariantsStockLevels def scoped_variant(distributor, variant) return variant if distributor.blank? - if OpenFoodNetwork::FeatureToggle.enabled?(:inventory, distributor) - scoper(distributor).scope(variant) - end + scoper(distributor).scope( + variant, inventory_enabled: OpenFoodNetwork::FeatureToggle.enabled?(:inventory, distributor) + ) variant end diff --git a/engines/order_management/app/services/order_management/stock/packer.rb b/engines/order_management/app/services/order_management/stock/packer.rb index 7ad24c6b27..0979dcf532 100644 --- a/engines/order_management/app/services/order_management/stock/packer.rb +++ b/engines/order_management/app/services/order_management/stock/packer.rb @@ -15,9 +15,11 @@ module OrderManagement variant = line_item.variant next unless variant.stock_item - if OpenFoodNetwork::FeatureToggle.enabled?(:inventory, order.distributor) - OpenFoodNetwork::ScopeVariantToHub.new(order.distributor).scope(variant) - end + OpenFoodNetwork::ScopeVariantToHub.new(order.distributor).scope( + variant, + inventory_enabled: OpenFoodNetwork::FeatureToggle.enabled?(:inventory, + order.distributor) + ) on_hand, backordered = variant.fill_status(line_item.quantity) package.add variant, on_hand, :on_hand if on_hand.positive? diff --git a/engines/order_management/app/services/order_management/subscriptions/estimator.rb b/engines/order_management/app/services/order_management/subscriptions/estimator.rb index 8f3744a7d6..ac1fef8638 100644 --- a/engines/order_management/app/services/order_management/subscriptions/estimator.rb +++ b/engines/order_management/app/services/order_management/subscriptions/estimator.rb @@ -34,9 +34,10 @@ module OrderManagement def price_estimate_for(variant, fallback) return fallback unless fee_calculator && variant - if OpenFoodNetwork::FeatureToggle.enabled?(:inventory, shop) - scoper.scope(variant) - end + scoper.scope( + variant, inventory_enabled: OpenFoodNetwork::FeatureToggle.enabled?(:inventory, shop) + ) + fees = fee_calculator.indexed_fees_for(variant) (variant.price + fees).to_d end diff --git a/lib/open_food_network/scope_variant_to_hub.rb b/lib/open_food_network/scope_variant_to_hub.rb index 03c9ec3408..f9dee9a080 100644 --- a/lib/open_food_network/scope_variant_to_hub.rb +++ b/lib/open_food_network/scope_variant_to_hub.rb @@ -7,7 +7,9 @@ module OpenFoodNetwork @variant_overrides = variant_overrides || VariantOverride.indexed(@hub) end - def scope(variant) + def scope(variant, inventory_enabled: true) + return unless inventory_enabled + variant.extend(OpenFoodNetwork::ScopeVariantToHub::ScopeVariantToHub) variant.instance_variable_set :@hub, @hub variant.instance_variable_set :@variant_override, @variant_overrides[variant] diff --git a/spec/lib/open_food_network/scope_variant_to_hub_spec.rb b/spec/lib/open_food_network/scope_variant_to_hub_spec.rb index 75c4de8c00..a35d5efdd4 100644 --- a/spec/lib/open_food_network/scope_variant_to_hub_spec.rb +++ b/spec/lib/open_food_network/scope_variant_to_hub_spec.rb @@ -233,5 +233,13 @@ RSpec.describe OpenFoodNetwork::ScopeVariantToHub do end end end + + context "with inventory is disabled" do + it "doesn't override the variant" do + vo + scoper.scope(v, inventory_enabled: false) + expect(v.price).to eq(11.11) + end + end end end