def place_order(request): if request.method == 'GET': total_amount = round( sum([ product.price for product in Product.objects.filter(cart__user=request.user) ]), 2) order = Order() order.amount = total_amount context = { 'form': OrderForm(instance=order), } return render(request, 'orders/order_details.html', context) else: form = OrderForm(request.POST) if form.is_valid(): order = form.save(commit=False) order.buyer = request.user order.order_date = datetime.datetime.now() order.save() set_sold_products_unavailable(request.user, order) update_raised_money(order.amount) empty_user_cart(request.user) return redirect('successful donation', order.id) context = { 'form': form, } return render(request, 'orders/order_details.html', context)
def create_random_order(): customer = random.choice(Customer.objects.all()) if customer.username == 'admin': shops = Shop.objects.all() else: shops = customer.shops.all() products = Product.objects.all() shop = random.choice(shops) price_type = shop.price_type current_date = datetime.datetime.now(datetime.timezone.utc).astimezone() rows_count = random.randint(1, 10) order_sum = 0 order = Order() order.buyer = shop.buyer order.date = current_date order.customer = customer order.shop = shop order.sum = 0 with transaction.atomic(): order.num = customer.number() customer.save() order.save() for _ in range(rows_count): product = random.choice(products) orders_product = OrdersProduct() orders_product.order = order orders_product.product = product orders_product.quantity = random.randint(1, 10) orders_product.price = Price.objects.filter( product=product, price_type=price_type, date__lte=current_date).order_by('date').last().price orders_product.sum = orders_product.quantity * orders_product.price order_sum += orders_product.sum orders_product.save() order.sum = order_sum order.save() return order
def get_context_data(self, **kwargs): '''Hooks into request lifecycle and processes the order''' # Get cart from the current session cart = Cart(self.request.session) if not cart.products: raise SuspiciousOperation("Cart is empty") # Create order for each author orders = [] for product in cart.products: # Save new instance of product to the database product.order_copy = True # Backup reference to images from photoseries if isinstance(product, Photoseries): original_images = product.images.all() product.pk = None product.save() # Set reference to images again if isinstance(product, Photoseries): product.images.set(original_images) product.save() # Check if order for seller exists existing_order = [ order for order in orders if order.seller == product.owner ] if len(existing_order) != 1: order = Order() order.buyer = auth.get_user(self.request) order.seller = product.owner orders.append(order) order.save() else: order = existing_order[0] # Put product inside order if isinstance(product, Photo): order.photos.add(product) else: order.photoseries.add(product) order.save() # 4. Versende für jede Order zwei Mails # 4.1 Bestätigungsmail buyer = User.objects.get(id=order.buyer_id) send_mail( 'Order Confirmation', 'Your order was confirmed. The owner will contact you for the payment.', settings.EMAIL_HOST_USER, [buyer.email], fail_silently=True, auth_user=settings.EMAIL_HOST_USER, auth_password=settings.EMAIL_HOST_PASSWORD) # 4.2 Mail mit Info für den Verkäufer send_mail( 'New Order', 'You got a new order. Please login to accept the incoming order', settings.EMAIL_HOST_USER, [order.seller.email], fail_silently=True, auth_user=settings.EMAIL_HOST_USER, auth_password=settings.EMAIL_HOST_PASSWORD) # Show success message to user context = super(checkoutView, self).get_context_data(**kwargs) context['orders'] = orders cart.clear() return context