def view_cart(request): if request.method == 'POST' and "submit_order" in request.POST: user = User.objects.get(username=request.user.username) cart = Cart.objects.get(who_id=user) # Check that there are enough ingredients submitted_orders = Orden.objects.filter(cart_id=cart.id) ingredients = Ingrediente.objects.all() # Create dictonary of all ingredients you have ingredient_have_dict = dict() for ingredient in ingredients: ingredient_have_dict[ingredient.name] = ingredient.amount # Create dictionary of all the ingredients you need ingredient_need_dict = dict() for order in submitted_orders: for ing in order.item_id.ingredients.all(): if ing.name not in ingredient_need_dict.keys(): ingredient_need_dict[ing.name] = 1 else: ingredient_need_dict[ing.name] += 1 # Compare the two dictionaries for ingredient_needed in ingredient_need_dict.keys(): if ingredient_need_dict[ingredient_needed] > ingredient_have_dict[ ingredient_needed]: raise Http404("There are not enough " + ingredient_needed + " so this order cannot be processed") # Check that they have enough money if user.creditos != None and user.creditos > cart.order_total: # get the current active carts/order active_carts = Cart.objects.filter(active=True).order_by('when') orders_ahead = len(active_carts) # set this cart and make it active cart.active = True user.creditos -= cart.order_total cart.save() user.save() # estimate using active carts time_estimate = 0 for cart in active_carts: time_estimate += cart.time_total return render( request, 'order_submitted.html', { 'time_estimate': time_estimate, 'user': user, 'cart': cart, 'orders_ahead': orders_ahead }) else: raise Http404( "You do not have enough credits to order this. Please order in person at the Container" ) if request.method == 'POST' and "eliminar" in request.POST: item = str(request.POST.get('item')) # get the current cart of this person cart = Cart.objects.get(who_id=request.user) order_item = ElementosDelMenu.objects.get(name=item) order = Orden.objects.filter(cart_id=cart.id, item_id=order_item) order.delete() cart.save() # to display regular page again user = User.objects.get(username=request.user.username) try: cart = Cart.objects.get(who_id=user.id) orders = list(Orden.objects.filter(cart_id=cart.id)) return render(request, 'view_cart.html', { 'user': user, 'cart': cart, 'orders': orders }) except: cart = Cart(who_id=user) cart.save() return render(request, 'view_cart.html', { 'user': user, 'cart': cart }) else: user = User.objects.get(username=request.user.username) try: cart = Cart.objects.get(who_id=user.id) orders = list(Orden.objects.filter(cart_id=cart.id)) return render(request, 'view_cart.html', { 'user': user, 'cart': cart, 'orders': orders }) except: cart = Cart(who_id=user) cart.save() return render(request, 'view_cart.html', { 'user': user, 'cart': cart })