diff --git a/app/serializers/api/cached_enterprise_serializer.rb b/app/serializers/api/cached_enterprise_serializer.rb index 6198e28a6c..8da705a1b0 100644 --- a/app/serializers/api/cached_enterprise_serializer.rb +++ b/app/serializers/api/cached_enterprise_serializer.rb @@ -85,17 +85,34 @@ module Api def distributed_properties if active product_properties = Spree::Property.currently_sold_by(enterprise) - producer_properties = ProducerProperty.currently_sold_by(enterprise) else - product_properties = Spree::Property.ever_sold_by(enterprise) - producer_properties = ProducerProperty.ever_sold_by(enterprise) + product_properties = Spree::Property + .joins(products: { variants: { exchanges: :order_cycle } }) + .merge(Exchange.outgoing) + .merge(Exchange.to_enterprise(enterprise)) + .select('DISTINCT spree_properties.*') end - (product_properties + producer_properties).uniq do |property_object| + (product_properties + distributed_producer_properties).uniq do |property_object| property_object.property.presentation end end + def distributed_producer_properties + properties = Spree::Property + .joins( + producer_properties: { + producer: { supplied_products: { variants: { exchanges: :order_cycle } } } + } + ) + .merge(Exchange.outgoing) + .merge(Exchange.to_enterprise(enterprise)) + .select('DISTINCT spree_properties.*') + + return properties.merge(OrderCycle.active) if active + properties + end + def active data.active_distributors.andand.include? enterprise end diff --git a/spec/serializers/api/cached_enterprise_serializer_spec.rb b/spec/serializers/api/cached_enterprise_serializer_spec.rb index 39c3a5fde1..0d3cd642bf 100644 --- a/spec/serializers/api/cached_enterprise_serializer_spec.rb +++ b/spec/serializers/api/cached_enterprise_serializer_spec.rb @@ -33,10 +33,10 @@ describe Api::CachedEnterpriseSerializer do let(:property) { create(:property, presentation: 'One') } let(:duplicate_property) { create(:property, presentation: 'One') } + let(:producer) { create(:supplier_enterprise, properties: [duplicate_property]) } before do product = create(:product, properties: [property]) - producer = create(:supplier_enterprise, properties: [duplicate_property]) producer.supplied_products << product create( @@ -57,6 +57,14 @@ describe Api::CachedEnterpriseSerializer do properties = cached_enterprise_serializer.distributed_properties expect(properties).to eq([property]) end + + it 'fetches producer properties' do + distributed_producer_properties = cached_enterprise_serializer + .distributed_producer_properties + + expect(distributed_producer_properties) + .to eq(producer.producer_properties.map(&:property)) + end end context 'when the enterprise is an active distributor' do @@ -68,6 +76,14 @@ describe Api::CachedEnterpriseSerializer do properties = cached_enterprise_serializer.distributed_properties expect(properties).to eq([property]) end + + it 'fetches producer properties' do + distributed_producer_properties = cached_enterprise_serializer + .distributed_producer_properties + + expect(distributed_producer_properties) + .to eq(producer.producer_properties.map(&:property)) + end end end end