Class: Effective::Datatables::OrderItems

Inherits:
Effective::Datatable
  • Object
show all
Defined in:
app/models/effective/datatables/order_items.rb

Instance Method Summary collapse

Instance Method Details

#collectionObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'app/models/effective/datatables/order_items.rb', line 43

def collection
  collection = Effective::OrderItem.unscoped
    .joins(:order => :user)
    .select('order_items.*, orders.*, users.email AS email')
    .select("#{query_subtotal} AS subtotal, #{query_tax} AS tax, #{query_total} AS total")
    .group('order_items.id, orders.id, users.email')

  if EffectiveOrders.require_billing_address && defined?(EffectiveAddresses)
    addresses_tbl = EffectiveAddresses.addresses_table_name

    collection = collection
      .joins("LEFT JOIN (SELECT addressable_id, string_agg(#{addresses_tbl}.full_name, '!!SEP!!') AS buyer_name FROM #{addresses_tbl} WHERE #{addresses_tbl}.category = 'billing' AND #{addresses_tbl}.addressable_type = 'Effective::Order' GROUP BY #{addresses_tbl}.addressable_id) #{addresses_tbl} ON orders.id = #{addresses_tbl}.addressable_id")
      .group("#{addresses_tbl}.buyer_name")
      .select("#{addresses_tbl}.buyer_name AS buyer_name")
  end

  attributes[:user_id].present? ? collection.where("#{EffectiveOrders.orders_table_name.to_s}.user_id = ?", attributes[:user_id]) : collection
end

#query_subtotalObject



62
63
64
# File 'app/models/effective/datatables/order_items.rb', line 62

def query_subtotal
  'SUM(price * quantity)'
end

#query_taxObject



70
71
72
# File 'app/models/effective/datatables/order_items.rb', line 70

def query_tax
  '(CASE tax_exempt WHEN true THEN 0 ELSE ((price * quantity) * tax_rate) END)'
end

#query_totalObject



66
67
68
# File 'app/models/effective/datatables/order_items.rb', line 66

def query_total
  'SUM((price * quantity) + (CASE tax_exempt WHEN true THEN 0 ELSE ((price * quantity) * tax_rate) END))'
end

#search_column(collection, table_column, search_term) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'app/models/effective/datatables/order_items.rb', line 74

def search_column(collection, table_column, search_term)
  if table_column[:name] == 'order'
    collection.where("#{EffectiveOrders.order_items_table_name.to_s}.order_id = ?", Effective::Order.deobfuscate(search_term))
  elsif table_column[:name] == 'purchase_state' && search_term == 'abandoned'
    collection.where("#{EffectiveOrders.orders_table_name.to_s}.purchase_state IS NULL")
  elsif table_column[:name] == 'subtotal'
    collection.having("#{query_subtotal} = ?", (search_term.gsub(/[^0-9.]/, '').to_f * 100.0).to_i)
  elsif table_column[:name] == 'tax'
    collection.having("#{query_tax} = ?", (search_term.gsub(/[^0-9.]/, '').to_f * 100.0).to_i)
  elsif table_column[:name] == 'total'
    collection.having("#{query_total} = ?", (search_term.gsub(/[^0-9.]/, '').to_f * 100.0).to_i)
  else
    super
  end
end