Implemented stats for ordergroups on startpage. Annotated models.
This commit is contained in:
parent
709425855e
commit
d848831fea
65 changed files with 407 additions and 338 deletions
|
|
@ -1,29 +1,29 @@
|
|||
# == Schema Information
|
||||
# Schema version: 20090120184410
|
||||
#
|
||||
# Table name: groups
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# id :integer(4) not null, primary key
|
||||
# type :string(255) default(""), not null
|
||||
# name :string(255) default(""), not null
|
||||
# description :string(255)
|
||||
# account_balance :decimal(, ) default(0.0), not null
|
||||
# account_balance :decimal(8, 2) default(0.0), not null
|
||||
# account_updated :datetime
|
||||
# created_on :datetime not null
|
||||
# role_admin :boolean not null
|
||||
# role_suppliers :boolean not null
|
||||
# role_article_meta :boolean not null
|
||||
# role_finance :boolean not null
|
||||
# role_orders :boolean not null
|
||||
# weekly_task :boolean
|
||||
# weekday :integer
|
||||
# role_admin :boolean(1) not null
|
||||
# role_suppliers :boolean(1) not null
|
||||
# role_article_meta :boolean(1) not null
|
||||
# role_finance :boolean(1) not null
|
||||
# role_orders :boolean(1) not null
|
||||
# weekly_task :boolean(1)
|
||||
# weekday :integer(4)
|
||||
# task_name :string(255)
|
||||
# task_description :string(255)
|
||||
# task_required_users :integer default(1)
|
||||
# task_required_users :integer(4) default(1)
|
||||
# deleted_at :datetime
|
||||
# contact_person :string(255)
|
||||
# contact_phone :string(255)
|
||||
# contact_address :string(255)
|
||||
# stats :text
|
||||
#
|
||||
|
||||
# Ordergroups can order, they are "children" of the class Group
|
||||
|
|
@ -34,6 +34,7 @@
|
|||
class Ordergroup < Group
|
||||
acts_as_paranoid # Avoid deleting the ordergroup for consistency of order-results
|
||||
extend ActiveSupport::Memoizable # Ability to cache method results. Use memoize :expensive_method
|
||||
serialize :stats
|
||||
|
||||
has_many :financial_transactions, :order => "created_on DESC"
|
||||
has_many :group_orders
|
||||
|
|
@ -41,6 +42,8 @@ class Ordergroup < Group
|
|||
|
||||
validates_numericality_of :account_balance, :message => 'ist keine gültige Zahl'
|
||||
|
||||
after_create :update_stats!
|
||||
|
||||
def contact
|
||||
"#{contact_phone} (#{contact_person})"
|
||||
end
|
||||
|
|
@ -76,6 +79,23 @@ class Ordergroup < Group
|
|||
end
|
||||
end
|
||||
|
||||
def update_stats!
|
||||
time = 6.month.ago
|
||||
jobs = users.collect { |u| u.tasks.done.all(:conditions => ["updated_on > ?", time]).size }.sum
|
||||
orders_sum = group_orders.collect { |go| go.price if go.order.ends > time }.sum
|
||||
update_attribute(:stats, {:jobs_size => jobs, :orders_sum => orders_sum})
|
||||
end
|
||||
|
||||
def avg_jobs_per_euro
|
||||
stats[:orders_sum] != 0 ? stats[:jobs_size].to_f / stats[:orders_sum].to_f : 0
|
||||
end
|
||||
|
||||
# Global average
|
||||
def self.avg_jobs_per_euro
|
||||
stats = Ordergroup.all.collect(&:stats)
|
||||
stats.collect {|s| s[:jobs_size].to_f }.sum / stats.collect {|s| s[:orders_sum].to_f }.sum
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# If this order group's account balance is made negative by the given/last transaction,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue