Modifier¶
Modifiers allow you to create different cart and cart item modifications on a specific set of Products. You can assign them to any Categorization model and to a Product.
There are 3 kind of Modifiers:
STANDARD
affects the product regardles. Usefull for taxing specific set of products.DISCOUNT
checks for a “Discountable” flag on a product and should be negative.CART
will affect an entire cart.
Modifiers allow you set either the amount or the percentage with what the price will be modified. Those values should be negative when creating discounts.
Modifier Conditions¶
Conditions can be created for a modifier that then must be met to make the modifier valid. You can use the default ones, or create custom conditions.
Default conditions¶
Shopit comes with a couple of simple conditions available for use. When creating a Modifier in admin, you’ll get to choose from:
PriceGreaterThanCondition
PriceLessThanCondition
QuantityGreaterThanCondition
QuantityLessThanCondition
They all accept a value. Quantity conditions control only modifiers on cart items.
Create custom conditions¶
To create a custom conditions you must extend from shopit.modifier_conditions.ModifierCondition
and then
you can implement methods cart_item_condition
and cart_condition
. They both accept an optional value
argument as decimal number that can be passed in when selecting the condition.
from datetime import datetime
from shopit.modifier_conditions import ModifierCondition
class DayIsOddCondition(ModifierCondition):
name = 'Day is odd'
def cart_item_condition(self, request, cart_item, value=None):
return self.day_is_odd()
def cart_condition(self, request, cart, value=None):
return self.day_is_odd()
def day_is_odd(self):
return datetime.today().day % 2 == 1
Now with the condition above, when selected on a modifier it will only be active when the day is odd.
Since both methods cart_item_condition
and cart_condition
are overriden, the condition will control the
modifier in cases both when it’s applied to a cart item, or an entire cart. By default when not overriden those methods
return True
.
Last thing do to is add the path to your condition to SHOPIT_MODIFIER_CONDITIONS
list.
SHOPIT_MODIFIER_CONDITIONS = [
'shopit.modifier_conditions.PriceGreaterThanCondition',
'shopit.modifier_conditions.PriceLessThanCondition',
'shopit.modifier_conditions.QuantityGreaterThanCondition',
'shopit.modifier_conditions.QuantityLessThanCondition',
'myapp.modifier_conditions.DayIsOddCondition',
]
Discount codes¶
Other than conditions, modifiers can be limited to a set of discount codes that makes them valid.
To achive that you need to create a DiscountCode
and assign it to a modifier. When active discount codes exist
on a modifier, it is no longer active without one of those codes applied to the cart.
Discount codes can also be limited for the specific customer to use only.