solidus

https://github.com/solidusio/solidus

Ruby

🛒 Solidus, the open-source eCommerce framework for industry trailblazers.

Spree::Promotion::Actions::CreateQuantityAdjustments#compute_amount

Computes the amount for the adjustment based on the line item and any
other applicable items in the order. The rules for this specific
adjustment are as follows:

= Setup

We have a quantity group promotion on t-shirts. If a user orders 3
t-shirts, they get $5 off of each. The shirts come in one size and three
colours: red, blue, and white.

== Scenario 1

User has 2 red shirts, 1 white shirt, and 1 blue shirt in their
order. We want to compute the adjustment amount for the white shirt.

*Result:* -$5

*Reasoning:* There are a total of 4 items that are eligible for the
promotion. Since that is greater than 3, we can discount the items. The
white shirt has a quantity of 1, therefore it will get discounted by
+adjustment_amount * 1+ or $5.

=== Scenario 1-1

What about the blue shirt? How much does it get discounted?

*Result:* $0

*Reasoning:* We have a total quantity of 4. However, we only apply the
adjustment to groups of 3. Assuming the white and red shirts have already
had their adjustment calculated, that means 3 units have been discounted.
Leaving us with a lonely blue shirt that isn't part of a group of 3.
Therefore, it does not receive the discount.

== Scenario 2

User has 4 red shirts in their order. What is the amount?

*Result:* -$15

*Reasoning:* The total quantity of eligible items is 4, so we the
adjustment will be non-zero. However, we only apply it to groups of 3,
therefore there is one extra item that is not eligible for the
adjustment. +adjustment_amount * 3+ or $15.

Source | Google | Stack overflow

Edit

git clone [email protected]:solidusio/solidus.git

cd solidus

open legacy_promotions/app/models/spree/promotion/actions/create_quantity_adjustments.rb

Contribute

# Make a new branch

git checkout -b -your-name--update-docs-Spree--Promotion--Actions--CreateQuantityAdjustments-compute_amount-for-pr


# Commit to git

git add legacy_promotions/app/models/spree/promotion/actions/create_quantity_adjustments.rbgit commit -m "better docs for Spree::Promotion::Actions::CreateQuantityAdjustments#compute_amount"


# Open pull request

gem install hub # on a mac you can `brew install hub`

hub fork

git push <your name> -your-name--update-docs-Spree--Promotion--Actions--CreateQuantityAdjustments-compute_amount-for-pr

hub pull-request


# Celebrate!