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)