def create_order(request): cart = ShoppingCart.objects.get(SessionID=request.session.session_key) itemsincart = cart.ItemsInCart.all() user = None order_items = [] total_price = 0 for item in itemsincart: product = Items.objects.get(ItemID=item.ItemID_id) order_item = OrderContains(Quantity=item.Quantity, ItemID=product) product.Quantity_available -= item.Quantity total_price += item.Quantity * product.Price product.save() if cart.Promo is not None: order_item.Price = round( (product.Price * (1 - cart.Promo.Discount)), 2) else: order_item.Price = product.Price order_item.save() order_items.append(order_item) if cart.Promo is not None: total_price = int(round((total_price * (1 - cart.Promo.Discount)))) if request.user.is_authenticated: user = User.objects.get(id=request.user.id) try: # to get user info shippinginfo = UserInfo.objects.get(AccountConnected=user) except UserInfo.DoesNotExist: shippinginfo = create_shipping_info(request.POST, user=user) else: shippinginfo = create_shipping_info(request.POST, user=None) order = Order(ShippingInfoID=shippinginfo, TotalPrice=total_price) # 'total' may be subject to change order.save() for item in order_items: order.ItemsInOrder.add(item) if user is not None: order.AccountConnected = user order.SessionConnected = Session.objects.get( session_key=request.session.session_key) order.save() #delete from cart for item in itemsincart: cart.ItemsInCart.remove(item) item.delete() cart.delete() return order.id