You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

103 lines
2.9 KiB

from store.models import ProductVariation
import uuid
class CartItem(object):
subtotal = 0
def __init__(self, item_variant, count, id=None):
self.item = item_variant
self.price = int(item_variant.get_price())
self.count = int(count)
self.subtotal = self.get_price() * self.count
if not id:
self.id = str(uuid.uuid4())
else:
self.id = id
def get_price(self):
return self.price
class Cart(object):
items = []
json_items = []
total = 0
weight = 0.1
items_format = {'items': [], 'total': 0}
def __init__(self, request):
self.items = []
self.request = request
self.total = 0
try:
self.json_items = request.session['store_cart']
if not self.json_items:
self.json_items = self.items_format
except:
self.json_items = self.items_format
self.deserialize_items()
def deserialize_items(self):
for j in self.json_items['items']:
variation = ProductVariation.objects.get(
pk=j['product'])
item = CartItem(
variation, j['count'], j['id'])
self.items.append(item)
self.total += int(item.subtotal)
self.weight += variation.weight
return self
def serialize_items(self):
cart = {}
cart['total'] = self.total
cart['items'] = []
for j in self.items:
cart['items'].append(
{'product': j.item.pk, 'count': j.count, 'id': j.id})
self.json_items = cart
self.request.session['store_cart'] = self.json_items
return self
def add_item(self, item):
self.items.append(item)
self.total += item.subtotal
self.serialize_items()
return self
def remove_item(self, item_id):
for i in self.items:
if i.id == item_id:
self.items.remove(i)
self.total -= i.subtotal
self.serialize_items()
return self
def update_items(self):
for item in self.items:
if item.id in self.request.POST:
try:
request_count = int(self.request.POST.get(item.id))
except:
request_count = 1
if request_count <= 0:
request_count = 1
if request_count > item.item.in_stock:
request_count = item.item.in_stock
if item.count != request_count:
self.total -= item.subtotal
item.count = request_count
item.subtotal = item.get_price() * item.count
self.total += item.subtotal
self.serialize_items()
def clear(self):
self.items = []
self.json_items = []
self.total = 0
self.request.session['store_cart'] = None