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)