예제 #1
0
def ajax_basket(request):
	"""
	Show a mini-page with shopping basket, used for AJAX-tooltips.
	"""
	basket = get_or_create_basket(request)

	items = BasketItem.objects.filter(basket=basket)

	request_context = RequestContext(request, {
			'items': items,
			})
	return render(request, "ajax_basket.html", request_context)
예제 #2
0
def basket(request):
	"""
	Show a page with shopping basket information
	"""
	basket = get_or_create_basket(request)
	items = BasketItem.objects.filter(basket=basket)
	total = get_basket_total(items)

	request_context = RequestContext(request, {
		'items': items,
		'total': total,
	})

	return render(request, "basket.html", request_context)
예제 #3
0
def update_product_count(request, itemID, count):
	"""
	Change the number of instances of a specific product that exists in our database.
	"""
	basket = get_or_create_basket(request)

	count = int(count)
	item = BasketItem.objects.filter(basket=basket).get(asset__pk = itemID)
	if count <= 0:
		item.delete()
	else:
		item.count = count
		item.save()
	
	return redirect('/basket')
예제 #4
0
def ajax_addproduct(request, productID):
	"""
	Called using an AJAX call when adding a product to the shopping basket
	"""
	try:
		basket = get_or_create_basket(request)
		# Get the asset
		asset = Asset.objects.get(pk=productID)
	except Asset.DoesNotExist:
		print "Product not found!"
		return HttpResponse("Error: No such product")
	# Get or create a new BasketItem associated with the user and the product
	try:
		basket_item = BasketItem.objects.filter(basket=basket).get(asset__pk = productID)
	except:
		basket_item = BasketItem(basket=basket, asset=asset)
	basket_item.count += 1
	basket_item.save()
	return HttpResponse("OK")
예제 #5
0
def remove_product(request, itemID=-1):
	"""
	Remove all occurences of a product (or all products, if itemID = -1) from the shopping basket. 
	Redirects back to /basket since that is the only place it will be called from.
	"""
	basket = get_or_create_basket(request)

	if itemID == -1:
		# If itemID == -1 then all items will be removed.
		BasketItem.objects.filter(basket=basket).delete()
	else:
		try:
			# BasketItem.objects.get(pk=itemID).delete()
			item = BasketItem.objects.filter(basket=basket).get(asset__pk = itemID)
			item.delete()
		except BasketItem.DoesNotExist:
			# Since no BasketItem with this asset exists, our job is already done.
			pass

	return redirect('/basket')
예제 #6
0
def place_order(request):
	"""
	Places an order
	"""
	basket = get_or_create_basket(request)
	items = BasketItem.objects.filter(basket=basket)
	total = get_basket_total(items)

	problems = dict()

	if request.method == 'POST':
		form = PlaceOrder(request.POST)
		if form.is_valid():
			# User agreed to place the order, now check stock
			for item in items:
				if item.count > item.asset.stock:
					problems[item.asset.name] = "Only %d items in stock, you have ordered %d" % (item.asset.stock, item.count)

			if len(problems) == 0: # No problems, order can be placed
				# Decrease stock count, mark order as placed, a new shopping basket will automatically be created
				# Then redirect to /order/placed
				for item in items:
					item.asset.stock -= item.count
					item.asset.save()

				basket.active = False
				basket.date_placed = datetime.now()
				basket.save()

				return redirect('/order/placed')
	else:
		form = PlaceOrder()
	
	request_context = RequestContext(request, {
		'items': items,
		'total': total,
		'form': form,
		'problems': problems,
	})
	
	return render(request, "place_order.html", request_context)