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)
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)
def show_account(request):
	"""
	Show a page with account information and order history.
	"""
	cust = Customer.objects.get(user=request.user)

	baskets = Basket.objects.filter(customer=cust).filter(active=False).order_by('-date_placed')
	orders = []
	for order in baskets:
		items = BasketItem.objects.filter(basket=order)
		orderinfo = dict()
		orderinfo['items'] = items
		orderinfo['basket'] = order
		orderinfo['total'] = get_basket_total(items) # This is not a good solution, since cost could have changed since order was placed
		orders.append(orderinfo)

	request_context = RequestContext(request, {
				'cust': cust,
				'orders': orders,
		})

	return render(request, "account.html", request_context)