示例#1
0
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)
示例#2
0
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
示例#3
0
 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