Example #1
0
def add_product_in_cart(request, product_id):
    product = Product.objects.get(id=product_id)
    new_item, _ = CartItem.objects.get_or_create(product=product, item_total=product.price)

    try:
        cart_id = request.session['cart_id']
        cart = Cart.objects.get(id=cart_id)
        request.session['total'] = cart.items.count()
    except DoesNotExist:
        cart = Cart()
        cart.save()
        cart_id = cart.id
        request.session['cart_id'] = cart_id
        cart = Cart.objects.get(id=cart_id)

    if new_item not in cart.items.all():
        cart.items.add(new_item)
        cart.save()
        return HttpResponseRedirect(reverse('index'))
    else:
        for cart_items in cart.items.all():
            if cart_items.product == product:
                cart_items.qty += 1
                cart_items.item_total += cart_items.item_total
                cart_items.save()
                return HttpResponseRedirect(reverse('index'))
Example #2
0
def addcart(request):
    token = request.session.get('token')
    response_data = {}
    if token:
        userid = cache.get(token)
        user = User.objects.filter(pk=userid)
        if user.exists():
            user = user.first()
            goodsid = request.GET.get('goodsid')
            good = Goods.objects.filter(pk=goodsid).first()
            cart = Cart.objects.filter(user=user).filter(goods=good)
            if cart.exists():
                cart = cart.first()
                cart.number += 1
                cart.save()
            else:
                cart = Cart()
                cart.user = user
                cart.goods = good
                cart.number = 1
                cart.save()
            response_data['status'] = 1
            response_data['num'] = cart.number
            return JsonResponse(response_data)

    response_data['status'] = -1
    return JsonResponse(response_data)
Example #3
0
def add_to_cart(request):
    user = request.user
    product_id = request.GET.get('prod_id')
    product = Product.objects.get(id=product_id)
    data_for_cart = Cart(user=user, product=product)
    data_for_cart.save()
    return redirect('/show-cart')
Example #4
0
def addcart(request):
    goodsid = request.GET.get('goodsid')
    goods = Goods.objects.get(pk=goodsid)
    print(goodsid)
    token = request.session.get('token')
    userid = cache.get(token)
    response_data = {}
    if userid:
        user = User.objects.get(pk=userid)
        carts = user.cart_set.filter(goods=goods).filter(user=user)
        response_data['status'] = 1
        if carts:
            cart = carts.first()
            print('cart exist')
            cart.number = cart.number +1
            cart.save()
            response_data['goodsnumber'] = cart.number
            return JsonResponse(response_data)
        else:
            print('cart is not exist')
            cart = Cart()
            cart.user = user
            cart.goods = goods
            cart.number = 1
            cart.save()

        return JsonResponse(response_data)
    else:
        response_data['status'] = 0
        return JsonResponse(response_data)
Example #5
0
def addcart(request):
    token = request.session.get('token')
    userid = cache.get(token)
    goodsid = request.GET.get('goodsid')
    goodsnum = request.GET.get('goodsnum')
    # print(goodsid)
    response_data={
        'user':None,
    }
    if userid:
        user = User.objects.get(pk=userid)
        goods = Goods.objects.get(pk=goodsid)
        cart = Cart.objects.filter(goods=goods).filter(user=user)
        if cart.exists():
            cart=cart.first()
            cart.num = cart.num + int(goodsnum)
            cart.save()
        else:
            cart=Cart()
            cart.goods=goods
            cart.user=user
            cart.num = int(goodsnum)
            cart.save()
        # response_data['user'] = user
        response_data['user_status'] = 1
        response_data['cart_num']=cart.num

        # response_data['goodsid'] = goodsid
    else:
        response_data['user_status'] = 0

    return JsonResponse(response_data)
Example #6
0
def add_to_cart(request):
    product_id = request.POST.get('product_id')
    if request.user.is_authenticated == False:
        return redirect(f'/login/?redirect_to=/products/{product_id}/')

    product = Product.objects.get(pk=product_id)
    carts = Cart.objects.filter(
        user_id=request.user.id).order_by('-created_on')
    if carts.exists():
        cart = carts[0]
    else:
        cart = Cart(user_id=request.user.id)
        cart.save()
    cartItems = cart.cartitem_set.filter(product_id=product_id)
    if cartItems.exists():
        cartItem = cartItems[0]
        cartItem.quantity = cartItem.quantity + 1
        cartItem.total = product.unit_price * cartItem.quantity
    else:
        cartItem = CartItem(cart=cart,
                            product=product,
                            quantity=1,
                            unit_price=product.unit_price,
                            total=product.unit_price * 1)
    cartItem.save()
    return redirect(product_detail, id=product_id)
Example #7
0
def addcart(request):
    #获取token
    token = request.session.get('token')
    #响应数据
    response_data = {}
    # 缓存
    if token:
        userid = cache.get(token)
        if userid:
            user = User.objects.get(pk=userid)
            goodsid = request.GET.get('goodsid')
            goods = Goods.objects.get(pk=goodsid)
            carts = Cart.objects.filter(user=user).filter(goods=goods)
            if carts.exists():
                cart = carts.first()
                cart.number = cart.number + 1
                cart.save()
            else:
                cart = Cart()
                cart.user = user
                cart.goods = goods
                cart.number = 1
                cart.save()
            response_data['status'] = 1
            response_data['number'] = cart.number
            response_data['msg'] = '添加{} 购物车成功,数量为:{}'.format(
                cart.goods.productlongname, cart.number)
            return JsonResponse(response_data)
    response_data['status'] = -1
    response_data['msg'] = '请登录后操作'
    return JsonResponse(response_data)
Example #8
0
def addcart(request):
    token = request.session.get('token')

    goodsid = request.GET.get('goodsid')

    data = {}

    if token:
        user = User.objects.get(token=token)

        goods = Goods.objects.get(pk=goodsid)

        carts = Cart.objects.filter(user=user).filter(goods=goods)

        if carts.exists():
            cart = carts.first()
            cart.number = cart.number + 1
            cart.save()

        else:
            cart = Cart()
            cart.user = user
            cart.goods = goods
            cart.number = 1
            cart.save()
        return JsonResponse({
            'msg': '{},添加购物车成功'.format(goods.productlongname),
            'number': cart.number,
            'status': 1
        })

    else:
        data['msg'] = '请登录后操作!'
        data['status'] = -1
        return JsonResponse(data)
Example #9
0
def addcart(request):
    token = request.session.get('token')
    userid = cache.get(token)
    user = None
    if userid:
        user = User.objects.get(pk=userid)
        goodsid = request.GET.get('goodsid')

        goods = Goods.objects.get(pk=goodsid)
        cart = Cart()
        carts = Cart.objects.filter(goods=goods).filter(user=user)
        if carts.exists():
            cart = carts.first()
            cart.number = int(cart.number) + int(request.GET.get('num'))
            cart.total = float(cart.goods.price[1:]) * int(cart.number)
            cart.save()
        else:
            cart.user = user
            cart.goods = goods
            cart.number = request.GET.get('num')
            cart.total = float(goods.price[1:]) * int(cart.number)
            cart.save()
        # 统计
        carts = Cart.objects.filter(user=user)
        sum = 0
        num = 0
        for cart in carts:
            sum += float(cart.goods.price[1:]) * int(cart.number)
            num += cart.number

        data = {'status': 1, 'msg': '加入购物车成功!', 'num': num, "sum": sum}
    else:
        data = {'status': 0, 'msg': '未登录!'}
    return JsonResponse(data)
Example #10
0
def addcart(request):
    goodsid = request.GET.get('goodsid')
    token = request.session.get('token')

    responseData = {'msg': '添加购物车成功', 'status': 1}

    if token:  # 已登录
        user = User.objects.get(token=token)
        goods = Goods.objects.get(pk=goodsid)

        # 判断商品是否在购物车中
        carts = Cart.objects.filter(user=user).filter(goods=goods)
        if carts.exists():
            cart = carts.first()
            cart.number = cart.number + 1
            cart.save()
            responseData['number'] = cart.number
        else:
            cart = Cart()
            cart.user = user
            cart.goods = goods
            cart.number = 1
            cart.save()

            responseData['number'] = cart.number

        return JsonResponse(responseData)
    else:  # 未登录
        responseData['msg'] = '请登录后操作'
        responseData['status'] = -1
        return JsonResponse(responseData)
Example #11
0
def addcart(request):
    goodsid = request.GET.get('goodsid')
    token = request.session.get('token')
    userid = cache.get(token)

    if userid:
        user = User.objects.get(pk=userid)
        goods = Goods.objects.get(id=goodsid)
        carts = Cart.objects.filter(user=user).filter(goods=goods)
        if carts.exists():
            cart = carts.first()
            cart.number = cart.number + 1
            cart.save()
        else:
            cart = Cart()
            cart.user = user
            cart.goods = goods
            cart.number = 1
            cart.save()

        response_data = {'msg': '成功添加商品', 'status': 1, 'number': cart.number}

    else:
        response_data = {'msg': '未登录', 'status': -1}

    return JsonResponse(response_data)
Example #12
0
def addCart(request):
    gid = request.GET.get('gid')

    #获取用户是否登录
    uid = request.session.get('uid')

    data = {
        'code': 0,
        'msg': 'ok',
    }
    if not uid:  #  用户未登录
        data['code'] = '-1'  #用户未登录
        data['msg'] = '用户未登录'
    else:

        # 查询购物车中是否由该商品,如果有,数量加1
        carts = Cart.objects.filter(goods_id=gid).filter(user_id=uid)
        if carts.exists():
            cart = carts.first()
            cart.num += 1
        else:
            # 没有则创建
            cart = Cart()
            cart.user_id = uid
            cart.goods_id = gid
            cart.num += 1
        cart.save()
        data['num'] = cart.num

    return JsonResponse(data)
Example #13
0
def addcart(request):
    booksid=request.GET.get('booksid')
    token=request.session.get('token')
    print(booksid)
    data={}
    if token:
        user=User.objects.get(token=token)
        books = Books.objects.get(pk=booksid)
        carts=Cart.objects.filter(user=user).filter(books=books)
        if carts.exists():

            cart=carts.first()
            cart.number=cart.number+1
            cart.save()

        else:
            cart=Cart()
            cart.user=user
            cart.books=books
            cart.number=1
            cart.save()
        return JsonResponse({'msg':'{},添加购物车成功'.format(books.productname),'number':cart.number,'status':1})

    else:
        data['msg']="please login!"
        data['status']=-1
        return JsonResponse(data)
Example #14
0
def addtocart(request):
    username = request.session.get('username')
    data = {'status': '200', 'msg': 'ok'}
    # ajax请求的,则返回的也是返回到ajax,判断用户是否登录
    if not username:
        data['status'] = '302'
        data['msg'] = '用户未登录'
        return JsonResponse(data)
    # 获取到商品的id
    goodsid = request.GET.get('goodsid')
    # 找到对应的商品
    goods = MarketGoods.objects.filter(pk=goodsid).first()
    user = User.objects.filter(u_name=username).first()
    # 从购物车里检索这个商品,如果有的话,数量加1,如果没有就新建一个
    cart_item = Cart.objects.filter(c_user=user).filter(c_goods=goods).filter(
        c_belong=False).first()
    if not cart_item:
        cart_item = Cart()
    else:
        cart_item.c_num = cart_item.c_num + 1
    cart_item.c_goods = goods
    cart_item.c_user = user
    cart_item.save()
    data['c_num'] = cart_item.c_num
    return JsonResponse(data)
Example #15
0
def add_cart(request):
    token = request.session.get('token')
    userid = cache.get(token)

    goodsid = request.GET.get('goodsid')

    number = int(request.GET.get('number'))
    print(number)

    if userid:

        user = User.objects.get(pk=userid)

        goods = Goods.objects.get(pk=goodsid)

        cart = Cart.objects.filter(user=user).filter(goods=goods)

        if cart.exists():
            cart = cart.first()
            cart.number = cart.number + number

            cart.save()
        else:
            cart = Cart()
            cart.user = user
            cart.goods = goods
            cart.number = number
            cart.save()

        return JsonResponse({'msg': '{}-添加购物车成功,数量为-{}'.format(cart.goods.name, cart.number), 'status': 1})
    else:
        return JsonResponse({'msg': '请先登录,后操作', 'status': 0})
Example #16
0
def quicklybuy(request):
    token = request.session.get('token')
    response_data = {}
    if token:
        userid = cache.get(token)
        if userid:  # 已经登录
            user = User.objects.get(pk=userid)
            goodsid = request.GET.get('goodsid')
            num = int(request.GET.get('number1'))
            goods = Goods.objects.get(pk=goodsid)
            carts = Cart.objects.filter(user=user).filter(goods=goods)
            if carts.exists():
                cart = carts.first()
                cart.number = cart.number + num
                cart.save()
            else:
                cart = Cart()
                cart.user = user
                cart.goods = goods
                cart.number = num
                cart.save()

            response_data['status'] = 1
            response_data['number'] = cart.number
            response_data['msg'] = '添加 {} 购物车成功: {}'.format(cart.goods.productname, cart.number)
            return JsonResponse(response_data)
    response_data['status'] = -1
    response_data['msg'] = '请登录后操作'
    return JsonResponse(response_data)
Example #17
0
def addcart(request):

    token = request.session.get('token')

    # 响应数据
    response_data = {}

    if token:
        userid = cache.get(token)

        if userid:  # 已经登录
            user = User.objects.get(pk=userid)
            goodsid = request.GET.get('goodsid')
            goods = Goods.objects.get(pk=goodsid)
            number = request.GET.get('number')
            print(number)
            # 商品不存在: 添加新记录
            # 商品存在: 修改number
            carts = Cart.objects.filter(user=user).filter(goods=goods)
            cart = Cart()
            cart.user = user
            cart.goods = goods
            cart.number = number
            cart.save()

            response_data = '添加 {} 购物车成功: {}'.format(cart.goods, cart.number)

            return JsonResponse(response_data)
Example #18
0
def addgoods(request):
    token = request.session.get('token')
    response_data = {}
    if token:
        userid = cache.get(token)
        if userid:
            user = User.objects.get(pk=userid)
            goodsid = request.GET.get('goodsid')
            goodsnum = int(request.GET.get('goodsNum'))
            goods = GOODs.objects.get(pk=goodsid)
            # 判断需要添加的商品是否已经存在
            carts = Cart.objects.filter(user=user).filter(goods=goods)

            if carts.exists():
                cart = carts.first()
                cart.number += goodsnum
                cart.save()
            else:
                cart = Cart()
                cart.user = user
                cart.goods = goods
                cart.number = goodsnum
                cart.save()

            response_data['status'] = 1
            response_data['number'] = cart.number
            response_data['msg'] = '添加{}购物车成功:{}'.format(
                cart.goods.productlongname, cart.number)
            return JsonResponse(response_data)

    response_data['status'] = -1
    response_data['msg'] = '请登录后操作'
    return JsonResponse(response_data)
Example #19
0
def change_item_qty(request):
    try:
        cart_id = request.session[
            'cart_id']  # Получение значения сессии при помощи ключа(то есть, '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)

    qty = request.GET.get('qty')
    item_id = request.GET.get('item_id')
    cart.change_qty(qty, item_id)
    cart_item = CartItem.objects.get(id=int(item_id))
    cart_item.qty = int(qty)
    cart_item.item_total = int(qty) * Decimal(cart_item.product.price)
    cart_item.save()
    return JsonResponse({
        'cart_total': cart.items.count(),
        'item_total': cart_item.item_total,
        'cart_total_price': cart.cart_total
    })
Example #20
0
def cart_session(request):
    try:
        cart_id = request.session['cart_id']
        cart = Cart.objects.get(pk=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)
    return cart
Example #21
0
def addcart(request):
    # 思路
    # 将ajax请求的goodsid获取
    # 即当前用户点击的那个商品
    # goodsid
    # 找到对应的商品
    goodsid = request.GET.get('goodsid')
    print(goodsid)
    # 用户---
    token = request.session.get('token')

    responseData = {'msg': '', 'status': ''}

    if token:  # 登录
        user = User.objects.get(token=token)
        print(user.name)
        goods = Goods.objects.get(pk=goodsid)
        print(goods.productname)

        carts = Cart.objects.filter(goods=goods).filter(user=user)
        if carts.exists():  # 存在
            # 取第一个
            cart = carts.first()
            cart.number = cart.number + 1
            # 如果库存数量比我添加的数据还要小
            # 那么添加的数据只能为库存数量
            if goods.storenums < cart.number:
                cart.number = goods.storenums
            cart.save()
            responseData['msg'] = '添加购物车成功'
            responseData['status'] = 1
            responseData['number'] = cart.number
            return JsonResponse(responseData)
        else:  # 不存在
            cart = Cart()
            cart.user = user
            cart.goods = goods
            cart.number = 1
            cart.save()

            responseData['msg'] = '添加购物车成功'
            responseData['status'] = 1
            responseData['number'] = cart.number
            return JsonResponse(responseData)

    else:  # 未登录
        # ajax请求操作,是重定向不了的!
        # return redirect('axf:login')

        responseData['msg'] = '请登录后操作'
        responseData['status'] = '-1'

        return JsonResponse(responseData)
Example #22
0
def get_cart(request):
    try:
        cart_id = request.session['cart_id']
        cart = Cart.objects.get(id=int(cart_id))
        request.session['count'] = cart.items.count()
        return cart
    except:
        cart = Cart()
        cart.save()
        request.session['cart_id'] = cart.id
        cart = Cart.objects.get(id=cart.id)
        return cart
Example #23
0
def checkout_view(request):
    try:
        cart_id = request.session[
            'cart_id']  # Получение значения сессии при помощи ключа(то есть, '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)
    context = {'cart': cart}
    return render(request, 'app/checkout.html', context)
Example #24
0
def addcart(request):

    token = request.session.get('token')

    goodid = request.GET.get('goodid')

    if token:

        userid = cache.get(token)
        user = User.objects.get(pk=userid)

        goods = Goods.objects.get(pk=goodid)

        carts = Cart.objects.filter(user=user).filter(goods=goods)

        # print(user,goods,carts)
        # print(type(user))

        if carts.exists():
            # print(111111111)
            cart = carts.first()
            # print(222222222)
            cart.number = cart.number + 1
            # print(333333333)
            cart.save()

        else:
            # print(4444444444444)
            cart = Cart()
            # print(5555555555)
            cart.user = user
            # print(6666666666)
            cart.goods = goods
            # print(7777777777777777)
            cart.number = 1
            # print(888888888888)
            cart.save()

        return JsonResponse({
            'msg':
            '{}-加入购物车-数量为-{}'.format(cart.goods.productlongname, cart.number),
            'status':
            1,
            'number':
            cart.number
        })
    else:

        return JsonResponse({'msg': '请先登录,再进行操作', 'status': 0})
Example #25
0
def shopping(request):
    data = {}
    if request.method == 'GET':
        token = request.session.get('token')
        if token:
            user = User.objects.get(token=token)
            cart = Cart.objects.filter(user=user).filter(is_delete=0)
            data['cart_num'] = cart.count()
            data['user_name'] = user.name
            data['cart'] = cart
            return render(request, 'shopping.html', context=data)
        else:
            return render(request, 'shopping.html')

    else:
        token = request.session.get('token')
        if token:
            user = User.objects.get(token=token)

            name = request.POST.get('name')
            number = request.POST.get('number')
            price = request.POST.get('price')
            size = request.POST.get('size')
            smallimg = request.POST.get('smallimg')

            carts = Cart.objects.filter(user=user).filter(name=name).filter(
                smallimg=smallimg)
            if carts.filter(size=size).filter(is_delete=0).exists():
                cart = carts.first()
                cart.number += eval(number)
                cart.save()
            else:
                cart = Cart()
                cart.user = user
                cart.name = name
                cart.price = price
                cart.size = size
                cart.smallimg = smallimg
                cart.number = number
                cart.is_delete = 0
                cart.save()
            # 1、 第一次添加的商品是不存在的,要往数据库中添加一条新记录
            return JsonResponse({
                'msg': '{},添加购物车成功'.format(name),
                'number': cart.number,
                'status': 1
            })
        else:
            return JsonResponse({'msg': '添加购物车失败,请先登录', 'status': 0})
Example #26
0
def order_create_view(request):
    try:
        cart_id = request.session[
            'cart_id']  # Получение значения сессии при помощи ключа(то есть, '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)
    context = {'form': form, 'cart': cart}
    return render(request, 'app/order.html', context)
Example #27
0
 def post(self,request,*args,**kwargs):
     form = self.form_class(request.POST)
     if form.is_valid():
         form.save()
         user = get_object_or_404(User, username = form.cleaned_data.get('username'))
         # Create the cart for the user
         cart = Cart(user = user)
         cart.save()
         # Add the user's email to the news letters
         try:
             get_object_or_404(NewsLetters,email = form.cleaned_data.get('email'))
         except NewsLetters.DoesNotExist:
             news_letters = NewsLetters(email = form.cleaned_data.get('username'))
             news_letters.save()
         messages.success(request,f'You account has been succesfully created, you can sign in now.')
         return HttpResponseRedirect(reverse('user:signin'))
     return render(request,self.template_name,{'form':form})
Example #28
0
def addtocart(request):
    token = request.session.get('token')
    response_data = {}
    if token:
        userid = cache.get(token)
        if userid:  # 已经登录
            user = User.objects.get(pk=userid)
            goodsid = request.GET.get('goodid')
            color = request.GET.get('color')
            size = request.GET.get('size')
            number = request.GET.get('number')
            goods = Goods.objects.get(pk=goodsid)
            carts = Cart.objects.filter(user=user).filter(goods=goods)

            if carts.exists():
                carts1 = carts.filter(color=color).filter(size=size)
                if carts1.exists():
                    cart = carts1.first()
                    cart.number = int(number) + cart.number
                    cart.save()
                else:
                    cart = Cart()
                    cart.goods = goods
                    cart.user = user
                    cart.number = number
                    cart.size = size
                    cart.color = color
                    cart.save()

            else:
                cart = Cart()
                cart.goods = goods
                cart.user = user
                cart.number = number
                cart.size = size
                cart.color = color
                cart.save()
            response_data['status'] = 1
            response_data['msg'] = '添加 购物车成功'

            return JsonResponse(response_data)
    else:
        response_data['status'] = -1
        response_data['msg'] = '请登录后操作'

        return JsonResponse(response_data)
Example #29
0
def addcart(request):
    # 获取token  >> user
    token = request.session.get('token')

    # 获取商品id
    goodsid = request.GET.get('goodsid')
    print(goodsid)

    data = {}

    if token:  # 登录
        # 获取用户
        user = User.objects.get(token=token)
        # 获取商品
        goods = Goods.objects.get(pk=goodsid)

        # 1、 第一次添加的商品是不存在的,要往数据库中添加一条新记录
        # 2、 商品已存在,即修改商品数量

        # 判断需要添加的商品是否存在
        carts = Cart.objects.filter(user=user).filter(goods=goods)
        if carts.exists():  # 存在
            cart = carts.first()
            cart.number = cart.number + 1
            cart.save()
        else:  # 不存在
            cart = Cart()
            cart.user = user
            cart.goods = goods
            cart.number = 1
            cart.save()

        return JsonResponse({
            'msg': '{},添加购物车成功'.format(goods.productlongname),
            'number': cart.number,
            'status': 1
        })

    else:  # 没登录
        # ajax操作中,不能重定向
        # ajax异步请求操作,数据的传输
        # 即ajax请求,如果想页面跳转(服务器重定向不了),客户端处理
        # return redirect('axf:login')
        data['msg'] = '请登录后操作!'
        data['status'] = -1
        return JsonResponse(data)
Example #30
0
def addcart(request):
    # 获取token
    token = request.session.get('token')

    # 响应数据
    response_data = {}

    # 缓存
    if token:
        userid = cache.get(token)

        if userid:  # 已经登录
            user = User.objects.get(pk=userid)
            goodsid = request.GET.get('goodsid')
            goods = Goods.objects.get(pk=goodsid)

            # 商品不存在: 添加新记录
            # 商品存在: 修改number
            carts = Cart.objects.filter(user=user).filter(goods=goods)
            if carts.exists():
                cart = carts.first()
                cart.number = cart.number + 1
                cart.save()
            else:
                cart = Cart()
                cart.user = user
                cart.goods = goods
                cart.number = 1
                cart.save()

            response_data['status'] = 1
            response_data['number'] = cart.number
            response_data['msg'] = '添加 {} 购物车成功: {}'.format(
                cart.goods.productlongname, cart.number)

            return JsonResponse(response_data)

    # 未登录
    # 因为是ajax操作,所以重定向是不可以的!
    # return redirect('axf:login')

    response_data['status'] = -1
    response_data['msg'] = '请登录后操作'

    return JsonResponse(response_data)
def process_order(request):
    print "placing order"

    try:
        phone_number = request.POST.get("phone_number")
        user_name = request.POST.get("userName")
        email = request.POST.get("email")
        app_version = request.POST.get("app_version")
        device_id = request.POST.get("device_id")
        app_id = request.POST.get("app_id")
        bring_change_of = int(request.POST.get("bring_change_of", "0"))
        address_str = request.POST.get("address")
        landmark = request.POST.get("landmark")
        location_show = request.POST.get("location_show")
        location_id = request.POST.get("location_id")
        api_key = request.POST.get("api_key")
        products = request.POST.get("products")
        tomorrow = request.POST.get("tomorrow")
        delivery_time = request.POST.get("delivery_time")
        # print request
        coupon_id = int(request.POST.get("coupon_id", "0"))

        coupon = None

        print "coupon"
        print phone_number
        user = User.objects.get(username=phone_number)
        if user:
            user.email = email
            user.first_name = user_name.title()
            user.save()
            user_profile = user.userprofile
            user_profile.app_version = app_version
            user_profile.app_id = app_id
            user_profile.device_id = device_id
            user_profile.save()
            if user.api_key.key != api_key:
                print "api key is not valid"
                data = simplejson.dumps({"status": "Not Valid Request"})
                return HttpResponse(data, content_type="application/json", status=403)
        else:
            print "User not found"
            data = simplejson.dumps({"status": "Not Valid Request"})
            return HttpResponse(data, content_type="application/json", status=403)

        print "user obj created"
        print coupon_id

        if coupon_id > 0:
            coupon = Coupon.objects.get(pk=coupon_id)
            coupon.used_count += 1
            coupon.save()
            print coupon
            prev_order = Order.objects.filter(coupon_applied=coupon, user=user)
            print user
            if prev_order:
                if prev_order[0].status != 1:
                    print "coupon invalidation1"
                    coupon = None
            print coupon
        print "check for coupon"
        location = Location.objects.get(pk=location_id)
        address = Address.objects.filter(user=user, address=address_str, landmark=landmark)
        if address:
            address = address[0]
            address.location = location
            address.save()
        else:
            address = Address(
                user=user, address=address_str, landmark=landmark, location_show=location_show, location=location
            )
            address.save()
        print "address done"

        # print products
        products = products.split(",")
        product_ids = map(lambda x: x.split("::")[0], products)
        product_qns = map(lambda x: x.split("::")[1], products)
        print product_ids
        print product_qns
        order = Order(user=user, total_amount=0, address=address, status=3)
        if tomorrow == "1":
            print delivery_time
            if dt.datetime.now().hour > 20:
                order.delivery_time = dt.datetime.strptime(
                    str((dt.datetime.now() + dt.timedelta(days=1)).date()) + " " + delivery_time, "%Y-%m-%d %I:%M %p"
                )
            else:
                order.delivery_time = dt.datetime.strptime(
                    str(dt.datetime.now().date()) + " " + delivery_time, "%Y-%m-%d %I:%M %p"
                )
        else:
            order.delivery_time = dt.datetime.now() + dt.timedelta(hours=1)
        if bring_change_of:
            order.change_requested = bring_change_of
        order.save()
        invoice = Invoice(order=order, product_json="")
        invoice.save()
        print "order obj saved"
        total_amount = 0
        index = 0

        ordered_services = {}
        products_json = []
        for p_id in product_ids:
            prd = StoreProductMapping.objects.get(pk=p_id)
            products_json.append(
                {
                    "spid": prd.id,
                    "pid": prd.product.product.id,
                    "name": prd.product.product.name,
                    "price": prd.price,
                    "discount": prd.discount,
                    "qn": product_qns[index],
                    "size_id": prd.product.size.id,
                }
            )
            service = prd.product.product.category.service
            if "offer" in service.name.lower():
                OfferDeviceId(device_id=device_id).save()
                OfferProductOrderMapping(
                    device_id=device_id, order=order, offer_product=prd.offerproductmapping_set.all()[0]
                ).save()
            if str(service.id) not in ordered_services:
                ordered_services[str(service.id)] = 0
            total_amount += int(product_qns[index]) * (prd.price - prd.discount)
            ordered_services[str(service.id)] += int(product_qns[index]) * (prd.price - prd.discount)
            store = prd.store
            cart = Cart.objects.filter(order=order, store=store)
            if cart:
                cart = cart[0]
            else:
                cart = Cart(order=order, store=store)
                cart.save()

            OrderedProduct(product=prd, cart=cart, quantity=product_qns[index]).save()
            index += 1
        products_json = simplejson.dumps(products_json)
        invoice.product_json = products_json
        invoice.save()

        service_amount_ordered = []
        for key in ordered_services:
            service_amount_ordered.append(str(key) + ":" + str(ordered_services[key]))
        service_amount_ordered = ";;".join(service_amount_ordered)
        print total_amount

        final_amount = total_amount

        if coupon:
            if total_amount >= coupon.min_total:
                order.coupon_applied = coupon
                print "found coupon"
                print coupon.code
                print coupon
                print user
                print location_id
                print int(app_version)
                print final_amount
                print service_amount_ordered
                discount = verify_coupon(
                    coupon, user, location_id, int(app_version), final_amount, service_amount_ordered
                )["discount"]
                print "discount" + str(discount)
                final_amount -= discount

        print "passed coupon part"

        delivery_charges = {}
        for key in ordered_services:
            service = Service.objects.get(pk=key)
            lsm = LocationServiceMapping.objects.filter(service=service, location=location)
            if lsm:
                lsm = lsm[0]
                stl = StoreTimingInLocation.objects.filter(store__is_active=True, is_active=True, lsm=lsm)
                print "done"
                if stl:
                    stl = stl[0]
                    if key not in delivery_charges:
                        delivery_charges[key] = {"delivery_charges": 0, "delivery_amount_min": stl.delivery_min_amount}
                    if ordered_services[key] < stl.delivery_min_amount:
                        final_amount += -stl.delivery_charges
                        total_amount += stl.delivery_charges
                        delivery_charges[key]["delivery_charges"] = stl.delivery_charges
                else:
                    delivery_charges[key] = {"delivery_charges": 0, "delivery_amount_min": 0}
            else:
                delivery_charges[key] = {"delivery_charges": 0, "delivery_amount_min": 0}

        print "passed delivery part"

        order.total_amount = total_amount
        order.final_amount = final_amount
        order.delivery_charges = simplejson.dumps(delivery_charges)
        order.save()
        OrderActivity(order=order, user=order.user, actions=0, comment=" ").save()

        data = simplejson.dumps({"status": "done"})
        return HttpResponse(data, content_type="application/json", status=201)
    except Exception as process_order_function_error:
        print "process_order: " + str(process_order_function_error)
        data = simplejson.dumps({"status": "Server Error"})
        send_mail(
            "Order placing Error " + str(process_order_function_error),
            str(request) + "\n\n\n" + str(simplejson.dumps(request.POST)),
            "*****@*****.**",
            ["*****@*****.**"],
            fail_silently=False,
        )
        return HttpResponse(data, content_type="application/json", status=500)
    def obj_create(self, bundle, request=None, **kwargs):
        # data={'status':'cant place order'}
        # return HttpResponse(data, content_type='application/json')
        print bundle.data
        phone_number =  bundle.data['phone_number']
        userName =  bundle.data['userName']
        email =  bundle.data['email']
        app_version =  bundle.data['app_version']
        device_id =  bundle.data['device_id']
        app_id =  bundle.data['app_id']
        bring_change_of =  int(bundle.data['bring_change_of'])

        address_str = bundle.data['address']
        landmark = bundle.data['landmark']
        location_show = bundle.data['location_show']
        location_id = bundle.data['location_id']
        coupon_id =""
        try:
            coupon_id = int(bundle.data['coupon_id'])
        except:
            pass

        coupon=None

        print 'coupon'
        print phone_number
        user = User.objects.filter(username=phone_number)
        print user
        print '----'
        if user:
            user=user[0]
            user.email = email
            user.first_name=userName.title()
            user.save()
            print 'user saved'
            userProfile =UserProfile.objects.filter(user=user)
            print 'userprofile'
            print userProfile
            print '----'
            if userProfile:
                userProfile = userProfile[0]
                userProfile.app_version=app_version
                userProfile.app_id=app_id
                userProfile.device_id=device_id
                userProfile.save()
            else:
                UserProfile(user=user,contact=int(phone_number),app_id=app_id,app_version=app_version,device_id=device_id).save()
        else:
            user=User.objects.create_user(phone_number,email,phone_number)
            user.first_name=userName.title()
            user.save()
            UserProfile(user=user,contact=int(phone_number),app_id=app_id,app_version=app_version,device_id=device_id).save()
        print 'user obj created'
        print coupon_id
        if coupon_id>0:
            coupon = Coupon.objects.get(pk=coupon_id)
            coupon.used_count+=1
            coupon.save()
            print coupon
            prev_order = Order.objects.filter(coupon_applied=coupon,user=user)
            print user
            if prev_order:
                if prev_order[0].status!=1:
                    print 'coupon invalidation1'
                    coupon=None
            print coupon
        print 'check for coupon'
        location = Location.objects.get(pk=location_id)
        address  = Address.objects.filter(user =user ,address=address_str,landmark=landmark)
        if address:
            address=address[0]
        else:
            address  = Address(user =user ,address=address_str,landmark=landmark,location_show=location_show,location=location )
            address.save()
        print 'address done'
        products = bundle.data['products']
        # print products
        products = products.split(',')
        product_ids = map(lambda x:x.split('::')[0],products)
        product_qns = map(lambda x:x.split('::')[1],products)
        print product_ids
        print product_qns
        order = Order(user = user,total_amount=0,address=address,status=3)
        order.delivery_time=dt.datetime.now()+dt.timedelta(hours=1)
        order.save()
        print 'order obj saved'
        total_amount = 0
        index=0

        ordered_services={}
        products_json=[]
        for p_id in product_ids:
            prd = StoreProductMapping.objects.get(pk=p_id)
            products_json.append({'spid':prd.id,'pid':prd.product.product.id,'name':prd.product.product.name,'price':prd.price,'discount':prd.discount,'qn':product_qns[index],'size_id':prd.product.size.id})
            service = prd.product.product.category.service
            if 'offer' in service.name.lower():
                OfferProductOrderMapping(device_id=device_id,order=order,offer_product=prd.offerproductmapping_set.all()[0]).save()
                OfferDeviceId(device_id=device_id).save()
            if str(service.id) not in ordered_services:
                ordered_services[str(service.id)]= 0
            total_amount+= int(product_qns[index])*(prd.price- prd.discount)
            ordered_services[str(service.id)]+= int(product_qns[index])*(prd.price- prd.discount)
            store = prd.store
            cart = Cart.objects.filter(order=order,store=store)
            if cart:
                cart=cart[0]
            else:
                cart = Cart(order=order,store=store)
                cart.save()

            OrderedProduct(product=prd,cart=cart,quantity=product_qns[index]).save()
            index+=1
        service_amount_ordered=[]
        for key in ordered_services:
            service_amount_ordered.append(str(key)+":"+str(ordered_services[key]))
        service_amount_ordered=';;'.join(service_amount_ordered)
        print total_amount

        final_amount=total_amount
        if coupon:
            if total_amount>=coupon.min_total:
                order.coupon_applied=coupon
                print 'found coupon'
                print coupon.code
                print coupon
                print user
                print location_id
                print int(app_version)
                print final_amount
                print service_amount_ordered
                discount = verify_coupon(coupon,user,location_id,int(app_version),final_amount,service_amount_ordered)['discount']
                print "discount" + str(discount)
                final_amount-=discount
        print "passed coupon part"
        delivery_charges = 0
        delivery_charges_to_save_in_order={}
        for key in ordered_services:
            service=Service.objects.get(pk=key)
            lsm = LocationServiceMapping.objects.filter(service=service,location=location)
            if lsm:
                lsm=lsm[0]
                stl = StoreTimingInLocation.objects.filter(store__is_active=True,is_active=True,lsm=lsm)
                print 'done'
                if stl:
                    stl=stl[0]
                    # print 'done1'
                    if key not in delivery_charges_to_save_in_order:
                        # print 'done10'
                        delivery_charges_to_save_in_order[key]={'delivery_charges':0,'delivery_amount_min':stl.delivery_min_amount}
                        # print 'done11'
                    if ordered_services[key]<stl.delivery_min_amount:
                        # print 'done20'
                        final_amount+=-stl.delivery_charges
                        total_amount+=stl.delivery_charges
                        # print 'done21'
                        delivery_charges_to_save_in_order[key]['delivery_charges']=stl.delivery_charges
                        # print 'done22'
                else:
                    delivery_charges_to_save_in_order[key]={'delivery_charges':0,'delivery_amount_min':0}
            else:
                delivery_charges_to_save_in_order[key]={'delivery_charges':0,'delivery_amount_min':0}
        print "passed delivery part"
        order.total_amount=total_amount
        order.final_amount=final_amount
        if bring_change_of:
            order.change_requested=bring_change_of
        order.delivery_charges = simplejson.dumps(delivery_charges_to_save_in_order)
        order.save()
        products_json=simplejson.dumps(products_json)
        Invoice(order=order,product_json=products_json).save()
        bundle.obj=order
        OrderActivity(order=order,user=order.user,actions=0,comment=" ").save()
        print bundle
        return bundle