Files
empire/weirdlittleempire/modifiers.py
2021-02-23 23:00:01 +00:00

53 lines
2.0 KiB
Python

from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _
from shop.modifiers.pool import cart_modifiers_pool
from shop.modifiers.defaults import DefaultCartModifier
from shop.serializers.cart import ExtraCartRow
from shop.money import Money
from shop.shipping.modifiers import ShippingModifier
from shop_stripe import modifiers
class PrimaryCartModifier(DefaultCartModifier):
"""
Extended default cart modifier which handles the price for product variations
"""
def process_cart_item(self, cart_item, request):
variant = cart_item.product.get_product_variant(
product_code=cart_item.product_code)
cart_item.unit_price = variant.unit_price
cart_item.line_total = cart_item.unit_price * cart_item.quantity
# grandparent super
return super(DefaultCartModifier, self).process_cart_item(cart_item, request)
class PostalShippingModifier(ShippingModifier):
"""
This is just a demo on how to implement a shipping modifier, which when selected
by the customer, adds an additional charge to the cart.
"""
identifier = 'postal-shipping'
def get_choice(self):
return (self.identifier, _("Postal shipping"))
def add_extra_cart_row(self, cart, request):
shipping_modifiers = cart_modifiers_pool.get_shipping_modifiers()
if not self.is_active(cart.extra.get('shipping_modifier')) and len(shipping_modifiers) > 1:
return
# add a shipping flat fee
amount = Money('5')
instance = {'label': _("Shipping costs"), 'amount': amount}
cart.extra_rows[self.identifier] = ExtraCartRow(instance)
cart.total += amount
def ship_the_goods(self, delivery):
if not delivery.shipping_id:
raise ValidationError("Please provide a valid Shipping ID")
super().ship_the_goods(delivery)
class StripePaymentModifier(modifiers.StripePaymentModifier):
commision_percentage = 3