Ensure producer properties are included in properties results

This commit is contained in:
Matt-Yorkley
2019-10-15 20:22:57 +01:00
parent cbe2477d04
commit 7b0c55e15a
3 changed files with 41 additions and 11 deletions

View File

@@ -57,7 +57,7 @@ Darkswarm.controller "ProductsCtrl", ($scope, $filter, $rootScope, Products, Ord
page: page || $scope.page,
per_page: $scope.per_page,
'q[name_or_meta_keywords_or_supplier_name_cont]': $scope.query,
'q[properties_id_in_any][]': $scope.activeProperties,
'q[properties_id_or_supplier_properties_id_in_any][]': $scope.activeProperties,
'q[primary_taxon_id_in_any][]': $scope.activeTaxons
}

View File

@@ -21,25 +21,38 @@ module Api
def taxons
taxons = Spree::Taxon.
joins(:products).
where(spree_products: { id: distributed_products(distributor, order_cycle, customer) }).
where(spree_products: { id: distributed_products }).
select('DISTINCT spree_taxons.*')
render json: ActiveModel::ArraySerializer.new(taxons, each_serializer: Api::TaxonSerializer)
end
def properties
properties = Spree::Property.
joins(:products).
where(spree_products: { id: distributed_products(distributor, order_cycle, customer) }).
select('DISTINCT spree_properties.*')
render json: ActiveModel::ArraySerializer.new(
properties, each_serializer: Api::PropertySerializer
product_properties | producer_properties, each_serializer: Api::PropertySerializer
)
end
private
def product_properties
Spree::Property.
joins(:products).
where(spree_products: { id: distributed_products }).
select('DISTINCT spree_properties.*')
end
def producer_properties
producers = Enterprise.
joins(:supplied_products).
where(spree_products: { id: distributed_products })
Spree::Property.
joins(:producer_properties).
where(producer_properties: { producer_id: producers }).
select('DISTINCT spree_properties.*')
end
def search_params
permitted_search_params = params.slice :q, :page, :per_page
@@ -52,7 +65,7 @@ module Api
def permitted_ransack_params
[:name_or_meta_keywords_or_supplier_name_cont,
:properties_id_in_any,
:properties_id_or_supplier_properties_id_in_any,
:primary_taxon_id_in_any]
end
@@ -68,7 +81,7 @@ module Api
@current_api_user.andand.customer_of(distributor) || nil
end
def distributed_products(distributor, order_cycle, customer)
def distributed_products
OrderCycleDistributedProducts.new(distributor, order_cycle, customer).products_relation
end
end

View File

@@ -63,7 +63,7 @@ module Api
context "with property filters" do
it "filters by product property" do
api_get :products, id: order_cycle.id, distributor: distributor.id,
q: { properties_id_in_any: [property1.id, property2.id] }
q: { properties_id_or_supplier_properties_id_in_any: [property1.id, property2.id] }
expect(product_ids).to include product1.id, product2.id
expect(product_ids).to_not include product3.id
@@ -168,6 +168,23 @@ module Api
expect(json_response.length).to be 2
expect(properties).to include property1.presentation, property2.presentation
end
context "with producer properties" do
let!(:property4) { create(:property) }
let!(:producer_property) {
create(:producer_property, producer_id: product1.supplier.id, property: property4)
}
it "loads producer properties for distributed products in the order cycle" do
api_get :properties, id: order_cycle.id, distributor: distributor.id
properties = json_response.map{ |property| property['name'] }
expect(json_response.length).to be 3
expect(properties).to include property1.presentation, property2.presentation,
producer_property.property.presentation
end
end
end
private