Performance improvements for ordergroup.update_stats!
As I have learned today. Let mysql do the counting, calculation stuff. In most of the cases, it will be much faster!
This commit is contained in:
parent
8074fedefd
commit
b86172bc62
2 changed files with 6 additions and 3 deletions
|
@ -28,7 +28,7 @@ class Order < ActiveRecord::Base
|
||||||
|
|
||||||
# Finders
|
# Finders
|
||||||
scope :open, where(state: 'open').order('ends DESC')
|
scope :open, where(state: 'open').order('ends DESC')
|
||||||
scope :finished, where("state = 'finished' OR state = 'closed'").order('ends DESC')
|
scope :finished, where("orders.state = 'finished' OR orders.state = 'closed'").order('ends DESC')
|
||||||
scope :finished_not_closed, where(state: 'finished').order('ends DESC')
|
scope :finished_not_closed, where(state: 'finished').order('ends DESC')
|
||||||
scope :closed, where(state: 'closed').order('ends DESC')
|
scope :closed, where(state: 'closed').order('ends DESC')
|
||||||
scope :stockit, where(supplier_id: 0).order('ends DESC')
|
scope :stockit, where(supplier_id: 0).order('ends DESC')
|
||||||
|
|
|
@ -57,8 +57,11 @@ class Ordergroup < Group
|
||||||
|
|
||||||
def update_stats!
|
def update_stats!
|
||||||
time = 6.month.ago
|
time = 6.month.ago
|
||||||
jobs = users.collect { |u| u.tasks.done.sum('duration', :conditions => ["updated_on > ?", time]) }.sum
|
# Get hours for every job of each user in period
|
||||||
orders_sum = group_orders.select { |go| !go.order.ends.nil? && go.order.ends > time }.collect(&:price).sum
|
jobs = users.sum { |u| u.tasks.done.sum(:duration, :conditions => ["updated_on > ?", time]) }
|
||||||
|
# Get group_order.price for every finished order in this period
|
||||||
|
orders_sum = group_orders.includes(:order).merge(Order.finished).where('orders.ends >= ?', time).sum(:price)
|
||||||
|
|
||||||
update_attribute(:stats, {:jobs_size => jobs, :orders_sum => orders_sum})
|
update_attribute(:stats, {:jobs_size => jobs, :orders_sum => orders_sum})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue