Sha256: 850d832d6d6c6eaf786edb32bac6cb626e04056931fab657e76c5d26856b964d

Contents?: true

Size: 959 Bytes

Versions: 5

Compression:

Stored size: 959 Bytes

Contents

# frozen_string_literal: true

module SolidusPromotions
  module Conditions
    class FirstRepeatPurchaseSince < Condition
      include OrderLevelCondition

      preference :days_ago, :integer, default: 365
      validates :preferred_days_ago, numericality: { only_integer: true, greater_than: 0 }

      # This is never eligible if the order does not have a user, and that user does not have any previous completed orders.
      #
      # This is eligible if the user's most recently completed order is more than the preferred days ago
      # @param order [Spree::Order]
      def eligible?(order, _options = {})
        return false unless order.user

        last_order = last_completed_order(order.user)
        return false unless last_order

        last_order.completed_at < preferred_days_ago.days.ago
      end

      private

      def last_completed_order(user)
        user.orders.complete.order(:completed_at).last
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
solidus_promotions-4.5.1 app/models/solidus_promotions/conditions/first_repeat_purchase_since.rb
solidus_promotions-4.5.0 app/models/solidus_promotions/conditions/first_repeat_purchase_since.rb
solidus_promotions-4.4.2 app/models/solidus_promotions/conditions/first_repeat_purchase_since.rb
solidus_promotions-4.4.1 app/models/solidus_promotions/conditions/first_repeat_purchase_since.rb
solidus_promotions-4.4.0 app/models/solidus_promotions/conditions/first_repeat_purchase_since.rb