Class: Spree::ProductViewsToPurchasesReport

Inherits:
Report
  • Object
show all
Defined in:
app/reports/spree/product_views_to_purchases_report.rb

Defined Under Namespace

Classes: Result

Constant Summary collapse

DEFAULT_SORTABLE_ATTRIBUTE =
:product_name
HEADERS =
{ product_name: :string, views: :integer, purchases: :integer, purchase_to_view_ratio: :integer }
SEARCH_ATTRIBUTES =
{ start_date: :product_view_from, end_date: :product_view_till }
SORTABLE_ATTRIBUTES =
[:product_name, :views, :purchases]

Constants inherited from Report

Report::TIME_SCALES

Instance Attribute Summary

Attributes inherited from Report

#current_page, #paginate, #records_per_page, #reporting_period, #search, #sortable_attribute, #sortable_type, #total_records

Instance Method Summary collapse

Methods inherited from Report

#active_record_sort, deeplink, #deeplink_properties, #generate, #get_results, #header_sorted?, #initialize, #name, #paginated?, #pagination_required?, #set_sortable_attributes, #time_scale_columns, #time_scale_columns_to_s, #time_scale_selects, #total_pages

Constructor Details

This class inherits a constructor from Spree::Report

Instance Method Details

#report_queryObject



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'app/reports/spree/product_views_to_purchases_report.rb', line 20

def report_query
  page_events_ar         = Arel::Table.new(:spree_page_events)
  purchase_line_items_ar = Arel::Table.new(:purchase_line_items)

  Spree::Report::QueryFragments.from_subquery(purchase_line_items, as: :purchase_line_items)
    .join(page_events_ar)
    .on(page_events_ar[:target_id].eq(purchase_line_items_ar[:product_id]))
    .where(page_events_ar[:target_type].eq(Arel::Nodes::Quoted.new('Spree::Product')))
    .where(page_events_ar[:activity].eq(Arel::Nodes::Quoted.new('view')))
    .group(purchase_line_items_ar[:product_id], purchase_line_items_ar[:product_name],
           purchase_line_items_ar[:product_slug], purchase_line_items_ar[:purchases])
    .project(
      'product_name',
      'product_slug',
      'COUNT(*) as views',
      'purchases'
    )
end