def cart_pay_success(request):
    '''Logics after a successful payment was made
    '''
    items = []
    order = None

    cart = get_object_or_404(Cart, owner=request.user)
    cart_items = CartItem.objects.filter(cart=cart)
    d_result = CartItem.objects.filter(cart_id=cart.cart_id).aggregate(
        Sum('quantity'), Sum('price'))

    # This is also to prevent resubmit when user refreshes the payment sucessful page
    if (not d_result['quantity__sum']) or (not d_result['price__sum']):
        return HttpResponseRedirect(reverse("shop:shop_home"))

    #with transaction.Atomic():

    # Create a payment record
    payment = Payment.objects.create(
        description="Credit payment",
        amount=d_result['price__sum'] if d_result['price__sum'] else 0,
        comment="stripe payment")

    # Create an order
    order = Order(owner=request.user)
    order.description = "Online purchase"
    order.quantity = d_result['quantity__sum'] if d_result[
        'quantity__sum'] else 0
    order.total = d_result['price__sum'] if d_result['price__sum'] else 0
    order.payment = payment
    order.comment = "paid by stripe"
    order.save()

    # Populate order items to OrderItem table (?? using map())
    for item in cart_items:
        OrderItem.objects.create(order_id=order.order_id,
                                 product_id=item.product.id,
                                 quantity=item.quantity,
                                 price=item.price)

    # Remove all items from the cart
    CartItem.objects.filter(cart=cart).delete()

    # codeset 2 is Product Category
    categories = CodeValue.objects.filter(
        code_set_id=2).order_by('display_sequence')

    items = OrderItem.objects.filter(order=order)
    o_result = OrderItem.objects.filter(order=order).aggregate(Sum('price'))

    context = {
        'items': items,
        'categories': categories,
        'page_title': "Payment Successful",
        'order_total': o_result['price__sum'] if o_result['price__sum'] else 0,
    }

    return render(request, "shop/cart_pay_success.html", context)
Esempio n. 2
0
def make_order_view(request):
    '''Page order'''
    try:
        cart_id = request.session['cart_id']
        cart = Cart.objects.get(id=cart_id)
        request.session['total'] = cart.items.count()
    except:
        cart = Cart()
        cart.save()
        cart_id = cart.id
        request.session['cart_id'] = cart_id
        cart = Cart.objects.get(id=cart_id)
    form = OrderForm(request.POST or None)
    images = ThemeFront.objects.all()
    categories = Category.objects.filter(priority=True)
    context = {
        'cart': cart,
        'images': images,
        'categories': categories,
    }
    context = {**context, **context_1}
    if form.is_valid():
        name = form.cleaned_data['name']
        last_name = form.cleaned_data['last_name']
        phone = form.cleaned_data['phone']
        buying_type = form.cleaned_data['buying_type']
        sail = form.cleaned_data['sail']
        date_delivery = form.cleaned_data['date_delivery']
        address_true = form.cleaned_data['address_true']
        comment = form.cleaned_data['comment']

        new_order = Order()
        new_order.user = request.user
        new_order.save()
        new_order.items.add(cart)
        new_order.first_name = name
        new_order.last_name = last_name
        new_order.phone = phone
        new_order.buying_type = buying_type
        new_order.sail = sail
        new_order.date_delivery = date_delivery
        new_order.address = address_true
        new_order.comment = comment
        new_order.total = cart.cart_total
        new_order.save()
        del request.session['cart_id']
        del request.session['total']
        return HttpResponseRedirect(reverse('thank_you'))
    return render(request, 'thank_you.html', context=context)
Esempio n. 3
0
def create_order(req):
    if req.method != 'POST':
        return nl_render(req, 'pages/access_denied.html')

    p = dict(req.POST)
    cart = Cart(req)
    order = Order()
    order.first_name = p['first_name'][0]
    order.phone = p['phone_number'][0]
    order.city = p['city'][0]
    order.street = p['street'][0]
    order.building = p['building'][0]
    order.comment = p['comment'][0]

    last_order = Order.objects.all().order_by('-id')[0]
    if last_order:
        order.number = last_order.number + 1

    order.save()

    for item in cart:
        order.items.add(item.product)

    cart.check_out()

    subj = 'Получен заказ #%s на сумму %s' % (
        order.number,
        order.total_price(),
    )
    message = '''
        Поступил заказ #{number} на сумму {price}.
        ФИО: {name}
        Телефон: {phone}
        Адрес: {address}
        Комментарий: {comment}
    '''.format(number=order.number,
               price=order.total_price(),
               name=order.first_name[0],
               phone=order.phone[0],
               comment=order.comment,
               address=order.address())

    send_mail(subj,
              message,
              settings.DEFAULT_FROM_EMAIL, [settings.ADMIN_EMAIL],
              fail_silently=True)

    return nl_render(req, 'pages/order_success.html')