diff --git a/lib/open_food_network/order_cycle_form_applicator.rb b/lib/open_food_network/order_cycle_form_applicator.rb index 3d46bf4022..3e81d6c9f1 100644 --- a/lib/open_food_network/order_cycle_form_applicator.rb +++ b/lib/open_food_network/order_cycle_form_applicator.rb @@ -157,7 +157,7 @@ module OpenFoodNetwork variants[variant_id.to_i] = value if permitted.include?(variant_id.to_i) end - variants.select { |k, v| v }.keys.map { |k| k.to_i }.sort + variants_to_a variants end def outgoing_exchange_variant_ids(attrs) @@ -167,27 +167,36 @@ module OpenFoodNetwork sender = @order_cycle.coordinator receiver = exchange.andand.receiver || Enterprise.find(attrs[:enterprise_id]) permitted = editable_variant_ids_for_outgoing_exchange_between(sender, receiver) - incoming = incoming_variant_ids # Only change visibility for variants I have permission to edit attrs[:variants].each do |variant_id, value| variant_id = variant_id.to_i - if !incoming.include? variant_id - # When a variant has been removed from incoming but remains - # in outgoing, remove it from outgoing too - variants[variant_id] = false - - elsif permitted.include? variant_id - variants[variant_id] = value - end + variants = update_outgoing_variants(variants, permitted, variant_id, value) end - variants.select { |k, v| v }.keys.map(&:to_i).sort + variants_to_a variants + end + + def update_outgoing_variants(variants, permitted, variant_id, value) + if !incoming_variant_ids.include? variant_id + # When a variant has been removed from incoming but remains + # in outgoing, remove it from outgoing too + variants[variant_id] = false + + elsif permitted.include? variant_id + variants[variant_id] = value + end + + variants end def incoming_variant_ids @order_cycle.supplied_variants.map &:id end + + def variants_to_a(variants) + variants.select { |k, v| v }.keys.map(&:to_i).sort + end end end