Module: SolidusPromotions

Defined in:
app/models/solidus_promotions/calculators/distributed_amount.rb,
lib/solidus_promotions.rb,
lib/solidus_promotions/engine.rb,
lib/solidus_promotions/configuration.rb,
lib/solidus_promotions/promotion_map.rb,
app/models/solidus_promotions/benefit.rb,
app/models/solidus_promotions/condition.rb,
app/models/solidus_promotions/promotion.rb,
lib/solidus_promotions/promotion_migrator.rb,
lib/solidus_promotions/migrate_adjustments.rb,
app/models/solidus_promotions/item_discount.rb,
app/models/solidus_promotions/condition_user.rb,
app/models/solidus_promotions/order_adjuster.rb,
app/models/solidus_promotions/promotion_code.rb,
app/models/solidus_promotions/condition_store.rb,
app/models/solidus_promotions/condition_taxon.rb,
app/models/solidus_promotions/conditions/user.rb,
app/models/solidus_promotions/order_promotion.rb,
app/models/solidus_promotions/conditions/store.rb,
app/models/solidus_promotions/conditions/taxon.rb,
app/models/solidus_promotions/promotion_finder.rb,
app/models/solidus_promotions/condition_product.rb,
lib/solidus_promotions/migrate_order_promotions.rb,
app/models/solidus_promotions/conditions/product.rb,
app/models/solidus_promotions/eligibility_result.rb,
app/models/solidus_promotions/promotion_category.rb,
app/models/solidus_promotions/calculators/percent.rb,
app/models/solidus_promotions/eligibility_results.rb,
app/patches/models/solidus_promotions/order_patch.rb,
app/models/solidus_promotions/conditions/nth_order.rb,
app/models/solidus_promotions/conditions/user_role.rb,
app/models/solidus_promotions/promotion_advertiser.rb,
app/models/solidus_promotions/promotion_code_batch.rb,
lib/solidus_promotions/testing_support/factory_bot.rb,
app/models/solidus_promotions/calculators/flat_rate.rb,
app/models/solidus_promotions/conditions/item_total.rb,
app/helpers/solidus_promotions/admin/benefits_helper.rb,
app/jobs/solidus_promotions/promotion_code_batch_job.rb,
app/models/solidus_promotions/calculators/flexi_rate.rb,
app/models/solidus_promotions/conditions/first_order.rb,
app/models/solidus_promotions/promotion_handler/page.rb,
app/models/solidus_promotions/shipping_rate_discount.rb,
app/patches/models/solidus_promotions/shipment_patch.rb,
app/models/solidus_promotions/conditions/option_value.rb,
app/patches/models/solidus_promotions/line_item_patch.rb,
app/helpers/solidus_promotions/admin/conditions_helper.rb,
app/helpers/solidus_promotions/admin/promotions_helper.rb,
app/models/solidus_promotions/benefits/adjust_shipment.rb,
app/models/solidus_promotions/promotion_handler/coupon.rb,
app/patches/models/solidus_promotions/adjustment_patch.rb,
app/models/solidus_promotions/benefits/adjust_line_item.rb,
app/models/solidus_promotions/conditions/user_logged_in.rb,
app/models/solidus_promotions/calculators/tiered_percent.rb,
app/models/solidus_promotions/conditions/line_item_taxon.rb,
app/models/solidus_promotions/conditions/shipping_method.rb,
app/models/solidus_promotions/conditions/minimum_quantity.rb,
app/models/solidus_promotions/conditions/one_use_per_user.rb,
app/models/solidus_promotions/distributed_amounts_handler.rb,
app/patches/models/solidus_promotions/shipping_rate_patch.rb,
app/mailers/solidus_promotions/promotion_code_batch_mailer.rb,
app/models/concerns/solidus_promotions/discountable_amount.rb,
app/models/solidus_promotions/calculators/tiered_flat_rate.rb,
app/models/solidus_promotions/conditions/line_item_product.rb,
app/models/solidus_promotions/promotion_code/batch_builder.rb,
app/models/solidus_promotions/order_adjuster/discount_order.rb,
lib/generators/solidus_promotions/install/install_generator.rb,
app/models/solidus_promotions/order_adjuster/load_promotions.rb,
app/models/concerns/solidus_promotions/benefits/order_benefit.rb,
app/models/solidus_promotions/benefits/create_discounted_item.rb,
app/models/solidus_promotions/order_adjuster/choose_discounts.rb,
app/subscribers/solidus_promotions/order_promotion_subscriber.rb,
app/models/solidus_promotions/conditions/discounted_item_total.rb,
app/patches/models/solidus_promotions/order_recalculator_patch.rb,
lib/controllers/admin/solidus_promotions/promotions_controller.rb,
app/models/solidus_promotions/conditions/line_item_option_value.rb,
app/models/concerns/solidus_promotions/benefits/shipment_benefit.rb,
lib/controllers/backend/solidus_promotions/admin/base_controller.rb,
app/models/concerns/solidus_promotions/benefits/line_item_benefit.rb,
app/models/solidus_promotions/conditions/first_repeat_purchase_since.rb,
lib/controllers/backend/solidus_promotions/admin/benefits_controller.rb,
app/models/solidus_promotions/order_adjuster/persist_discounted_order.rb,
app/models/solidus_promotions/migration_support/order_promotion_syncer.rb,
lib/controllers/backend/solidus_promotions/admin/conditions_controller.rb,
lib/controllers/backend/solidus_promotions/admin/promotions_controller.rb,
app/models/concerns/solidus_promotions/calculators/promotion_calculator.rb,
app/models/concerns/solidus_promotions/conditions/order_level_condition.rb,
app/models/solidus_promotions/benefits/adjust_line_item_quantity_groups.rb,
lib/controllers/admin/solidus_promotions/promotion_categories_controller.rb,
app/models/concerns/solidus_promotions/conditions/shipment_level_condition.rb,
app/models/solidus_promotions/permission_sets/solidus_promotion_management.rb,
app/models/concerns/solidus_promotions/conditions/line_item_level_condition.rb,
lib/controllers/backend/solidus_promotions/admin/promotion_codes_controller.rb,
lib/controllers/backend/solidus_promotions/admin/promotion_categories_controller.rb,
app/models/solidus_promotions/calculators/tiered_percent_on_eligible_item_quantity.rb,
lib/controllers/backend/solidus_promotions/admin/promotion_code_batches_controller.rb,
app/models/concerns/solidus_promotions/conditions/line_item_applicable_order_level_condition.rb

Overview

This is a calculator for line item adjustment benefits. It accepts a line item and calculates its weighted adjustment amount based on the value of the preferred amount and the price of the other line items. More expensive line items will receive a greater share of the preferred amount.

Defined Under Namespace

Modules: AdjustmentPatch, Admin, Benefits, Calculators, Conditions, DiscountableAmount, Generators, LineItemPatch, MigrationSupport, OrderPatch, OrderRecalculatorPatch, PermissionSets, PromotionHandler, ShipmentPatch, ShippingRatePatch, TestingSupport Classes: Benefit, Condition, ConditionProduct, ConditionStore, ConditionTaxon, ConditionUser, Configuration, DistributedAmountsHandler, EligibilityResult, EligibilityResults, Engine, ItemDiscount, MigrateAdjustments, MigrateOrderPromotions, OrderAdjuster, OrderPromotion, OrderPromotionSubscriber, Promotion, PromotionAdvertiser, PromotionCategoriesController, PromotionCategory, PromotionCode, PromotionCodeBatch, PromotionCodeBatchJob, PromotionCodeBatchMailer, PromotionFinder, PromotionMigrator, PromotionsController, ShippingRateDiscount

Constant Summary collapse

PROMOTION_MAP =

Note that the key in both the conditions and actions hash should be the class of the rule or action you want to map, while the value can be either a class or a lambda that returns a class. If you use a lambda, it will be called with the old action or rule as an argument.

{
  conditions: {
    Spree::Promotion::Rules::ItemTotal =>
      SolidusPromotions::Conditions::ItemTotal,
    Spree::Promotion::Rules::Product =>
      SolidusPromotions::Conditions::Product,
    Spree::Promotion::Rules::User =>
      SolidusPromotions::Conditions::User,
    Spree::Promotion::Rules::FirstOrder =>
      SolidusPromotions::Conditions::FirstOrder,
    Spree::Promotion::Rules::UserLoggedIn =>
      SolidusPromotions::Conditions::UserLoggedIn,
    Spree::Promotion::Rules::OneUsePerUser =>
      SolidusPromotions::Conditions::OneUsePerUser,
    Spree::Promotion::Rules::Taxon =>
      SolidusPromotions::Conditions::Taxon,
    Spree::Promotion::Rules::NthOrder =>
      SolidusPromotions::Conditions::NthOrder,
    Spree::Promotion::Rules::OptionValue =>
      SolidusPromotions::Conditions::OptionValue,
    Spree::Promotion::Rules::FirstRepeatPurchaseSince =>
      SolidusPromotions::Conditions::FirstRepeatPurchaseSince,
    Spree::Promotion::Rules::UserRole =>
      SolidusPromotions::Conditions::UserRole,
    Spree::Promotion::Rules::Store =>
      SolidusPromotions::Conditions::Store
  },
  actions: {
    Spree::Promotion::Actions::CreateAdjustment => ->(old_action) {
      calculator = case old_action.calculator
                   when Spree::Calculator::FlatRate
        SolidusPromotions::Calculators::DistributedAmount.new(preferences: old_action.calculator.preferences)
                   when Spree::Calculator::FlatPercentItemTotal
        SolidusPromotions::Calculators::Percent.new(preferred_percent: old_action.calculator.preferred_flat_percent)
      end

      SolidusPromotions::Benefits::AdjustLineItem.new(
        calculator: calculator
      )
    },
    Spree::Promotion::Actions::CreateItemAdjustments => ->(old_action) {
      preferences = old_action.calculator.preferences
      calculator = case old_action.calculator
                   when Spree::Calculator::FlatRate
        SolidusPromotions::Calculators::FlatRate.new(preferences: preferences)
                   when Spree::Calculator::PercentOnLineItem
        SolidusPromotions::Calculators::Percent.new(preferences: preferences)
                   when Spree::Calculator::FlexiRate
        SolidusPromotions::Calculators::FlexiRate.new(preferences: preferences)
                   when Spree::Calculator::DistributedAmount
        SolidusPromotions::Calculators::DistributedAmount.new(preferences: preferences)
                   when Spree::Calculator::TieredFlatRate
        SolidusPromotions::Calculators::TieredFlatRate.new(preferences: preferences)
                   when Spree::Calculator::TieredPercent
        SolidusPromotions::Calculators::TieredPercent.new(preferences: preferences)
      end

      SolidusPromotions::Benefits::AdjustLineItem.new(
        calculator: calculator
      )
    },
    Spree::Promotion::Actions::CreateQuantityAdjustments => ->(old_action) {
      preferences = old_action.calculator.preferences
      calculator = case old_action.calculator
                   when Spree::Calculator::FlatRate
        SolidusPromotions::Calculators::FlatRate.new(preferences: preferences)
                   when Spree::Calculator::PercentOnLineItem
        SolidusPromotions::Calculators::Percent.new(preferences: preferences)
                   when Spree::Calculator::FlexiRate
        SolidusPromotions::Calculators::FlexiRate.new(preferences: preferences)
                   when Spree::Calculator::DistributedAmount
        SolidusPromotions::Calculators::DistributedAmount.new(preferences: preferences)
                   when Spree::Calculator::TieredFlatRate
        SolidusPromotions::Calculators::TieredFlatRate.new(preferences: preferences)
                   when Spree::Calculator::TieredPercent
        SolidusPromotions::Calculators::TieredPercent.new(preferences: preferences)
      end

      SolidusPromotions::Benefits::AdjustLineItemQuantityGroups.new(
        preferred_group_size: old_action.preferred_group_size,
        calculator: calculator
      )
    },
    Spree::Promotion::Actions::FreeShipping => ->(_old_action) {
      SolidusPromotions::Benefits::AdjustShipment.new(
        calculator: SolidusPromotions::Calculators::Percent.new(
          preferred_percent: 100
        )
      )
    }
  }
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#importmapObject

JS Importmap instance



32
33
34
# File 'lib/solidus_promotions.rb', line 32

def importmap
  @importmap
end

Class Method Details

.configurationObject Also known as: config



115
116
117
# File 'lib/solidus_promotions/configuration.rb', line 115

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



121
122
123
# File 'lib/solidus_promotions/configuration.rb', line 121

def configure
  yield configuration
end

.table_name_prefixObject



27
28
29
# File 'lib/solidus_promotions.rb', line 27

def self.table_name_prefix
  "solidus_promotions_"
end