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)
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 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')
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")
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')
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)