Class: Centra::OrderStats
- Inherits:
-
Object
- Object
- Centra::OrderStats
- Defined in:
- lib/centra/order_stats.rb
Instance Attribute Summary collapse
-
#order_filter ⇒ Object
readonly
Returns the value of attribute order_filter.
-
#result ⇒ Object
readonly
Returns the value of attribute result.
Class Method Summary collapse
Instance Method Summary collapse
- #calculate ⇒ Object
-
#initialize(centra_data, order_filter = OrderFilter.new) ⇒ OrderStats
constructor
A new instance of OrderStats.
Constructor Details
#initialize(centra_data, order_filter = OrderFilter.new) ⇒ OrderStats
Returns a new instance of OrderStats.
12 13 14 15 16 |
# File 'lib/centra/order_stats.rb', line 12 def initialize(centra_data, order_filter = OrderFilter.new) @data = centra_data @order_filter = order_filter @result = nil end |
Instance Attribute Details
#order_filter ⇒ Object (readonly)
Returns the value of attribute order_filter.
10 11 12 |
# File 'lib/centra/order_stats.rb', line 10 def order_filter @order_filter end |
#result ⇒ Object (readonly)
Returns the value of attribute result.
10 11 12 |
# File 'lib/centra/order_stats.rb', line 10 def result @result end |
Class Method Details
.calculate(centra_data) ⇒ Object
6 7 8 |
# File 'lib/centra/order_stats.rb', line 6 def self.calculate(centra_data) new(centra_data).calculate end |
Instance Method Details
#calculate ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/centra/order_stats.rb', line 18 def calculate return self if @result orders_per_email = Hash.new(0) currencies = Set.new payment_method_codes = Set.new billing_countries = Set.new total_revenue = 0 total_pcs = 0 first_order_date = Time.new(3000, 1, 1) last_order_date = Time.new(1, 1, 1) total_orders_in_stats = 0 @data.each_order do |order| next unless order_filter.allow?(order) total_orders_in_stats += 1 email = order.delivery_email orders_per_email[email] += 1 currencies << order.currency payment_method_codes << order.payment_method_code billing_countries << order.billing_country order_date = order.order_date first_order_date = order_date if first_order_date > order_date last_order_date = order_date if last_order_date < order_date total_revenue += order.total_order_value_sek total_pcs += order.pcs end total_orders = @data.rows.length total_unique_emails = orders_per_email.keys.length total_currencies = currencies.length @result = { orders_per_email: orders_per_email, currencies: currencies, payment_method_codes: payment_method_codes, billing_countries: billing_countries, first_order_date: first_order_date, last_order_date: last_order_date, total_revenue: total_revenue, total_pcs: total_pcs, total_orders: total_orders, total_orders_in_stats: total_orders_in_stats, total_unique_emails: total_unique_emails, total_currencies: total_currencies, avg_order_value: total_revenue / total_orders.to_f, avg_value_per_email: total_revenue / total_unique_emails.to_f, avg_order_per_email: total_orders / total_unique_emails.to_f, avg_pcs_per_order: total_pcs / total_orders.to_f, } self end |