Sha256: 5e72850eb493266fac5fdb66e039a5c71b00d67d3ee2d1700fd2ecf4e7355ee5

Contents?: true

Size: 1.46 KB

Versions: 62

Compression:

Stored size: 1.46 KB

Contents

module Workarea
  module Insights
    class ColdProducts < Base
      class << self
        def dashboards
          %w(catalog)
        end

        def generate_weekly!
          median = revenue_change_median
          standard_deviation = revenue_change_standard_deviation

          [2, 1, 0].each do |min_deviations|
            results = find_results(
              median: median,
              standard_deviation: standard_deviation,
              min_deviations: min_deviations
            )

            if results.present?
              create!(results: results.map(&:as_document))
              return
            end
          end
        end

        def find_results(median:, standard_deviation:, min_deviations:)
          max_revenue_change = median - (standard_deviation * min_deviations)
          max_revenue_change = max_revenue_change > 0 ? 0 : max_revenue_change

          Metrics::ProductByWeek
            .last_week
            .where(:revenue_change.lt => max_revenue_change)
            .order_by(revenue_change: :asc, prior_week_revenue: :desc, _id: :asc)
            .limit(Workarea.config.insights_products_list_max_results)
            .to_a
        end

        def revenue_change_median
          Metrics::ProductByWeek.last_week.declined_revenue.revenue_change_median
        end

        def revenue_change_standard_deviation
          Metrics::ProductByWeek.last_week.declined_revenue.revenue_change_standard_deviation
        end
      end
    end
  end
end

Version data entries

62 entries across 62 versions & 1 rubygems

Version Path
workarea-core-3.4.13 app/models/workarea/insights/cold_products.rb
workarea-core-3.4.12 app/models/workarea/insights/cold_products.rb