Skip to content

cloudsailor/spree-spl

Repository files navigation

Spree SPL (SpartaLoyalty)

Spree-spl is a plugin that provides a promotion switcher for Spree, enabling enhanced loyalty program functionality.

Installation

Add spree-spl to your Gemfile and run bundle install:

gem 'spree-seo'



After installation, add the following methods to CartControllerDecorator:

promotion_switcher(spree_current_order, spree_current_user, check_only)
spree_current_order.reload

These methods must be manually added to your repository in the Storefront endpoints:

  • add_item
  • set_quantity

Add the following method to AccountControllerDecorator:

module AccountControllerDecorator
  def user_update_params
    public_metadata = super['public_metadata']

    params = super
    if public_metadata['spl_no_card'].present? && public_metadata['spl_card_active'].nil?
      update_order(spl_card: public_metadata['spl_no_card'], active: true)
      params[:public_metadata] = params[:public_metadata].merge({ 'spl_card_active' => true })
    elsif public_metadata['spl_no_card'].present?
      update_order(spl_card: public_metadata['spl_no_card'], active: public_metadata['spl_card_active'])
    else
      update_order(spl_card: public_metadata['spl_no_card'])
    end

    public_metadata['spl_no_card'].present? ? params : super
  end
end

Additionally, the following methods must be manually added to your repository in the Storefront endpoint associate:

promotion_switcher(spree_current_order, spree_current_user, check_only)
spree_current_order.reload

For the Storefront endpoint apply_coupon_code, add the following method before the coupon_handler method:

switch_spl_active_param(spree_current_order, spree_current_user, check_only)

Then, before render_error_payload, include:

unless [:coupon_code_already_applied].include?(result.status_code)
    maintain_spl_adjustments(spree_current_order, spree_current_user)
end

Finally, for the Storefront endpoint remove_coupon_code, manually add the following methods to your repository:

switch_spl_active_param(spree_current_order, spree_current_user, check_only)
spree_current_order.reload



Next, add the following methods to CheckoutControllerDecorator:

promotion_switcher(result.value, spree_current_user, check_only)

These methods must be manually added to your repository in the Storefront endpoints before render_order:

  • update
  • complete



Also, add the following methods manually to AdjustmentUpdaterDecorator to method persist_totals:

set_spree_adjustments if shipment_with_adjustments? || order_with_adjustments?
recalculate_spl_adjustments(attributes, totals) if line_item_with_spl_adjustments?

Add these methods to any other endpoints involved in processing an order in your repository.

About

No description, website, or topics provided.

Resources

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •