Sha256: d12961597ec6cf68c9fd9eddd040423f8d18bf9be7863fad3ee729f244bc2b29

Contents?: true

Size: 1.38 KB

Versions: 3

Compression:

Stored size: 1.38 KB

Contents

module Spree
  class UsersNotConvertedReport < Spree::Report
    DEFAULT_SORTABLE_ATTRIBUTE = :user_email
    HEADERS                    = { user_email: :string, signup_date: :date }
    SEARCH_ATTRIBUTES          = { start_date: :users_created_from, end_date: :users_created_till, email_cont: :email }
    SORTABLE_ATTRIBUTES        = [:user_email, :signup_date]

    def paginated?
      true
    end

    class Result < Spree::Report::Result
      class Observation < Spree::Report::Observation
        observation_fields [:user_email, :signup_date]

        def signup_date
          @signup_date.to_date.strftime("%B %d, %Y")
        end
      end
    end

    def paginated_report_query
      report_query
        .limit(records_per_page)
        .offset(current_page)
    end

    def record_count_query
      Spree::Report::QueryFragments.from_subquery(report_query).project(Arel.star.count)
    end

    def report_query
      Spree::User
        .where(created_at: reporting_period)
        .where(Spree::User.arel_table[:email].matches(email_search))
        .left_joins(:spree_orders)
        .where(spree_orders: { completed_at: nil, number: nil })
        .select(
          "spree_users.email       as  user_email",
          "spree_users.created_at  as signup_date")
    end

    private def email_search
      search[:email_cont].present? ? "%#{ search[:email_cont] }%" : '%'
    end

  end
end

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
spree_admin_insights-3.2.0 app/reports/spree/users_not_converted_report.rb
solidus_admin_insights-2.1.1 app/reports/spree/users_not_converted_report.rb
solidus_admin_insights-2.1.0 app/reports/spree/users_not_converted_report.rb