From 5a6caa294ebe7fc5ec8fb177791505a3f27fd962 Mon Sep 17 00:00:00 2001 From: stveep Date: Mon, 28 Mar 2016 20:13:30 +0100 Subject: [PATCH] Revert to Arel query and separate filtering --- app/models/spree/user_decorator.rb | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/app/models/spree/user_decorator.rb b/app/models/spree/user_decorator.rb index a8177497b2..9684e86371 100644 --- a/app/models/spree/user_decorator.rb +++ b/app/models/spree/user_decorator.rb @@ -54,10 +54,22 @@ Spree.user_class.class_eval do self.orders.where(state: :complete).map(&:distributor_id).uniq end + # Returns orders and their associated payments for all distributors that have been ordered from + def get_orders_by_distributor + Enterprise.includes(distributed_orders: { payments: :payment_method }) + .where(enterprises: { id: self.enterprises_ordered_from }, + spree_orders: { state: 'complete', user_id: self.id }) + .order('spree_orders.completed_at DESC') + end + def orders_by_distributor - distributors_with_orders.to_a.sort! do |a, b| - b.distributed_orders.length <=> a.distributed_orders.length + # Remove uncompleted payments as these will not be reflected in order balance + data_array = self.get_orders_by_distributor.to_a.each do |enterprise| + enterprise.distributed_orders.each do |order| + order.payments.keep_if { |payment| payment.state == "completed" } + end end + data_array.sort! { |a, b| b.distributed_orders.length <=> a.distributed_orders.length } end private @@ -67,15 +79,4 @@ Spree.user_class.class_eval do errors.add(:owned_enterprises, "^#{email} is not permitted to own any more enterprises (limit is #{enterprise_limit}).") end end - - def distributors_with_orders - Enterprise - .select("DISTINCT enterprises.*") - .joins("LEFT OUTER JOIN spree_orders ON spree_orders.distributor_id = enterprises.id") - .joins("LEFT OUTER JOIN spree_payments ON spree_payments.order_id = spree_orders.id - AND spree_payments.state = 'completed'") - .joins("LEFT OUTER JOIN spree_payment_methods ON spree_payment_methods.id = spree_payments.payment_method_id") - .where(enterprises: { id: enterprises_ordered_from }, - spree_orders: { state: 'complete', user_id: id }) - end end