Rewriting Spree::Taxons.distributed_taxons for better performance

This commit is contained in:
Rob Harrington
2017-03-30 12:19:43 +11:00
parent 630b8a2577
commit 5af8668560

View File

@@ -37,13 +37,14 @@ Spree::Taxon.class_eval do
#
# Format: {enterprise_id => [taxon_id, ...]}
def self.distributed_taxons(which_taxons=:all)
# TODO: Why can't we merge(Spree::Product.with_order_cycles_inner) here?
taxons = Spree::Taxon.
joins(products: {variants_including_master: {exchanges: :order_cycle}}).
merge(Exchange.outgoing).
select('spree_taxons.*, exchanges.receiver_id AS enterprise_id')
ents_and_vars = ExchangeVariant.joins(exchange: :order_cycle).merge(Exchange.outgoing)
.select("DISTINCT variant_id, receiver_id AS enterprise_id")
taxons = taxons.merge(OrderCycle.active) if which_taxons == :current
ents_and_vars = ents_and_vars.merge(OrderCycle.active) if which_taxons == :current
taxons = Spree::Taxon
.select("DISTINCT spree_taxons.id, ents_and_vars.enterprise_id").joins(products: :variants_including_master)
.joins("INNER JOIN (#{ents_and_vars.to_sql}) AS ents_and_vars ON spree_variants.id = ents_and_vars.variant_id")
taxons.inject({}) do |ts, t|
ts[t.enterprise_id.to_i] ||= Set.new