diff --git a/app/serializers/api/admin/order_cycle_serializer.rb b/app/serializers/api/admin/order_cycle_serializer.rb index a782c26048..bd8c6407f1 100644 --- a/app/serializers/api/admin/order_cycle_serializer.rb +++ b/app/serializers/api/admin/order_cycle_serializer.rb @@ -25,10 +25,7 @@ class Api::Admin::OrderCycleSerializer < ActiveModel::Serializer end def exchanges - scoped_exchanges = - OpenFoodNetwork::OrderCyclePermissions. - new(options[:current_user], object). - visible_exchanges.by_enterprise_name + scoped_exchanges = permissions.visible_exchanges.by_enterprise_name ActiveModel::ArraySerializer. new(scoped_exchanges, each_serializer: Api::Admin::ExchangeSerializer, @@ -39,9 +36,7 @@ class Api::Admin::OrderCycleSerializer < ActiveModel::Serializer # For each enterprise that the current user is able to see in this order cycle, # work out which variants should be editable within incoming exchanges from that enterprise editable = {} - permissions = OpenFoodNetwork::OrderCyclePermissions.new(options[:current_user], object) - enterprises = permissions.visible_enterprises - enterprises.each do |enterprise| + visible_enterprises.each do |enterprise| variants = permissions.editable_variants_for_incoming_exchanges_from(enterprise).pluck(:id) editable[enterprise.id] = variants if variants.any? end @@ -52,9 +47,7 @@ class Api::Admin::OrderCycleSerializer < ActiveModel::Serializer # For each enterprise that the current user is able to see in this order cycle, # work out which variants should be editable within incoming exchanges from that enterprise editable = {} - permissions = OpenFoodNetwork::OrderCyclePermissions.new(options[:current_user], object) - enterprises = permissions.visible_enterprises - enterprises.each do |enterprise| + visible_enterprises.each do |enterprise| variants = permissions.editable_variants_for_outgoing_exchanges_to(enterprise).pluck(:id) editable[enterprise.id] = variants if variants.any? end @@ -65,9 +58,7 @@ class Api::Admin::OrderCycleSerializer < ActiveModel::Serializer # For each enterprise that the current user is able to see in this order cycle, # work out which variants should be visible within outgoing exchanges from that enterprise visible = {} - permissions = OpenFoodNetwork::OrderCyclePermissions.new(options[:current_user], object) - enterprises = permissions.visible_enterprises - enterprises.each do |enterprise| + visible_enterprises.each do |enterprise| # This is hopefully a temporary measure, pending the arrival of multiple named inventories # for shops. We need this here to allow hubs to restrict visible variants to only those in # their inventory if they so choose @@ -84,4 +75,14 @@ class Api::Admin::OrderCycleSerializer < ActiveModel::Serializer end visible end + + private + + def permissions + @permissions ||= OpenFoodNetwork::OrderCyclePermissions.new(options[:current_user], object) + end + + def visible_enterprises + @visible_enterprises ||= permissions.visible_enterprises + end end