Beispiel #1
0
def create_order_detail(order: Order, order_detail_info: dict):
    """

    :param order:
    :param order_detail_info: {
            "product_id" product.id,
            "quantity_gross": decimal,
            "quantity_net": decimal,
            "price_gross": decimal,
            "price_net": decimal,
            "amount_gross": decimal,
            "amount_net": decimal,
            "promotion_id": groupon.id or null
        }
    :return:
    """
    order_info = {
        "order_id": order.id,
        "shop_id": order.shop.id,
        "customer_id": order.customer.id,
        "create_date": order.create_date,
        "status": order.order_status,
        "pay_type": order.pay_type,
    }
    order_detail_info.update(order_info)
    order_detail = OrderDetail(**order_detail_info)
    order_detail.save()
    return order_detail
Beispiel #2
0
    def post(self, request):
        json_data = json.loads(request.body.decode('utf-8'))
        print(json_data)
        current_user = User.objects.filter(id=json_data['user_id'])[0]
        order = Order(user_id=current_user,
                      address=json_data['address'],
                      area=json_data['area'],
                      mobile=json_data['mobile'],
                      token=json_data['token'])
        order.save()
        order_items = json_data['orderitems']
        for item in order_items:
            item = OrderDetail(order_id=order,
                               itemname=item['itemname'],
                               itemquantity=item['itemquantity'],
                               itemImage=item['itemImage'],
                               attribute=item['attribute'],
                               currency=item['currency'],
                               itemtotal=item['itemtotal'],
                               status=order.status,
                               itemprice=item['itemprice'],
                               total=item['itemtotal'])
            #order.totalamount = str(float(item.itemtotal) + float(order.totalamount))
            item.save()
        #order.save()
        products = []
        orders = []
        try:
            orders = Order.objects.filter(user_id=order.user_id)
            print(orders)
        except:
            pass

        # fetch all record in order related to orders
        for order in orders:
            temp = OrderDetail.objects.filter(order_id=order.id)
            for item in temp:
                products.append(item)

        print(products)
        try:
            # serialize data
            serialized = OrderDetailSerializer(products, many=True).data

        except Exception as e:
            print(e)

        return JsonResponse({
            "code": 200,
            "status": "success",
            "orders": serialized
        })
Beispiel #3
0
def shop_cart_checkout(request):
    current_user = request.user
    shopcart = ShopCart.objects.all().filter(user_id=current_user.id)
    carttotal = 0
    for rs in shopcart:
        carttotal += rs.quantity * rs.product.price

    form = OrderForm(request.POST or None)
    if request.method == 'POST':
        # check whether it's valid:
        if form.is_valid():

            # Send Credit card information to bank and get result
            # If payment accepted continue else send payment error to checkout page

            data = Order()
            data.name = form.cleaned_data[
                'name']  #get product quantity from form
            data.surname = form.cleaned_data['surname']
            data.address = form.cleaned_data['address']
            data.city = form.cleaned_data['city']
            data.phone = form.cleaned_data['phone']
            data.to = form.cleaned_data['name']
            data.user_id = current_user.id
            data.total = carttotal
            data.save()

            # Save Shopcart items to Order detail items
            for rs in shopcart:
                detail = OrderDetail()
                detail.order_id = data.id  # Order Id
                detail.product_id = rs.product_id
                detail.user_id = current_user.id
                detail.quantity = rs.quantity
                detail.price = rs.product.price
                detail.total = rs.amount
                detail.save()
                #  Reduce product Amount  (quantity)

            ShopCart.objects.filter(
                user_id=current_user.id).delete()  # Clear & Delete shopcart
            request.session['cart_items'] = 0
            messages.success(request, "Order has been completed. Thank You ")
            return HttpResponseRedirect("/order")

    context = {
        'page': 'checkout',
        'shopcart': shopcart,
        'carttotal': carttotal,
    }
    return render(request, 'shop_cart_checkout.html', context)
Beispiel #4
0
def add_order():
    # 定时( 00:00:00 )将 抢购的商品存入到订单
    # [{'user_id': 8, 'goods_id': 2}]
    qbuy_goods = get_all_qbuy()
    if not qbuy_goods:
        return '无数据,无法生成订单'

    for goods in qbuy_goods:
        user_id = goods.get('user_id')
        book_id = goods.get('goods_id')

        order = Order()
        order.title = '抢读%s' % Book.objects.get(pk=book_id).title
        order.price = 0
        order.user_id = user_id
        order.pay_status = 1  # 1 已支付
        order.save()

        order_detail = OrderDetail()
        order_detail.order = order
        order_detail.price = 0
        order_detail.cnt = 1
        order_detail.book_id = book_id

        order_detail.save()

    # 清空qbuy缓存
    clear_qbuy()

    return '定时生成订单成功'
Beispiel #5
0
def shop_cart_checkout(request):
    categoryList = Category.objects.all()
    current_user = request.user
    shopcart = ShopCart.objects.all().filter(user_id=current_user.id)
    carttotal = 0
    for rs in shopcart:
        carttotal += rs.quantity * rs.product.price

    form = OrderForm(request.POST or None)
    if request.method == 'POST':
        if form.is_valid():
            # Credit Card information section if bank accept payment then order==true
            data = Order()
            data.name = form.cleaned_data['name']
            data.surname = form.cleaned_data['surname']
            data.address = form.cleaned_data['address']
            data.city = form.cleaned_data['city']
            data.phone = form.cleaned_data['phone']
            data.to = form.cleaned_data['name']
            data.user_id = current_user.id
            data.total = carttotal
            data.save()
            for rs in shopcart:
                detail = OrderDetail()
                detail.order_id = data.id
                detail.product_id = rs.product.id
                detail.user_id = current_user.id
                detail.quantity = rs.quantity
                detail.price = rs.product.price
                detail.total = rs.amount
                detail.save()
            ShopCart.objects.filter(user_id=current_user.id).delete()
            request.session['cart_items'] = 0
            messages.success(request, "Order has been completed ")
            return HttpResponseRedirect("/order")

    context = {
        'page': 'checkout',
        'shopcart': shopcart,
        'carttotal': carttotal,
        'categoryList': categoryList,
    }
    return render(request, 'shop_cart_checkout.html', context)
Beispiel #6
0
def order_handle(request):
    """订单处理"""
    # 保存一个事物点
    tran_id = transaction.savepoint()
    # 接收购物车编号
    # 根据POST和session获取信息
    # cart_ids = post.get('cart_ids')
    try:
        post = request.POST
        order_list = post.getlist('id[]')
        total = post.get('total')
        address = post.get('address')

        order = Order()
        now = datetime.now()
        uid = request.session.get('user_id')
        order.order_id = '%s%d'%(now.strftime('%Y%m%d%H%M%S'),uid)
        order.order_user_id = uid
        order.order_date = now
        order.order_total = Decimal(total)
        order.order_address = address
        order.save()

        # 遍历购物车中提交信息,创建订单详情表
        for order_id in order_list:
            cart_o = Cart.objects.get(id=order_id)
            goods_o = Goods.objects.get(pk=cart_o.cart_goods_id)
            # 判断库存是否够
            if int(goods_o.goods_inventory) >= int(cart_o.count):
                # 库存够的话,减去购买的数量并保存
                goods_o.goods_inventory -= int(cart_o.count)
                goods_o.save()
                # 创建订单详情表
                detail = OrderDetail()
                detail.order_goods_id = int(goods_o.id)
                detail.order_id = int(order.order_id)
                detail.order_price = Decimal(int(goods_o.goods_price))
                detail.order_count = int(cart_o.count)
                detail.save()
                # 循环删除购物车对象
                cart_o.delete()
            else:
                # 库存不够触发事务回滚
                transaction.savepoint_rollback(tran_id)
                # 返回json供前台提示失败
                return JsonResponse({'status': 2})
    except Exception as e:
        transaction.savepoint_rollback(tran_id)
    # 返回json供前台提示成功
    return JsonResponse({'status': 1})
def shop_cart_checkout(request):
    current_user = request.user
    shopcart = ShopCart.objects.all().filter(user_id=current_user.id)
    carttotal = 0
    for rs in shopcart:
        carttotal += rs.quantity * rs.product.price
    form = OrderForm(request.POST or None)
    if request.method == 'POST':

        if form.is_valid():

            data = Order()
            data.shipname = form.cleaned_data['shipname']
            data.shipaddress = form.cleaned_data['shipaddress']
            data.shipphone = form.cleaned_data['shipphone']
            data.to = form.cleaned_data['shipname']
            data.user_id = current_user.id
            data.total = carttotal
            data.save()

            for rs in shopcart:
                detail = OrderDetail()
                detail.order_id = data.id
                detail.product_id = rs.product_id
                detail.user_id = current_user.id
                detail.quantity = rs.quantity
                detail.price = rs.product.price
                detail.total = rs.amount
                detail.save()
            ShopCart.objects.filter(user_id=current_user.id).delete()
            request.session['cart_items'] = 0
            messages.success(request, "Order has been completed. Thank You")
            return HttpResponseRedirect("/order")
    context = {
        'page': 'checkout',
        'shopcart': shopcart,
        'carttotal': carttotal,
    }
    return render(request, 'shop_cart_checkout.html', context)
Beispiel #8
0
def order_handle(request):
    # 可以通过request.POST.get来获取名为 xxx 的input标签的value值,前提是所有的元素都在表单内且表单以post或者get方式提交
    """
    对ordermain数据的处理
    :param request:
    :return:
    """
    address_id = request.POST.get('address')  # 默认提交的地址
    cart_id_list = request.POST.get('cart_id_list').split(',')
    sp = transaction.savepoint()

    try:
        order = OrderMain()
        order.address_id = address_id

        now_str = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
        order.id = "%s%s" % (now_str, random_str())

        order.user_id = request.session['uid']
        order.save()
        """
        对orderdetail表数据的处理
        """
        list = CartInfo.objects.filter(id__in=cart_id_list)
        total = 0  # 总价
        for cart in list:
            if cart.count <= cart.goods.inventory:
                detail = OrderDetail()
                detail.goods = cart.goods
                detail.order = order
                detail.count = cart.count
                detail.price = cart.goods.price * detail.count  # 一项商品的购物记录难道不要乘上它的数量???
                detail.save()

                goods = cart.goods
                goods.inventory -= cart.count
                goods.save()

                cart.delete()  # 订单每样商品处理结束后删除
                total += detail.price + 10
            else:
                raise Exception()
        order.total = total
        order.save()
        transaction.savepoint_commit(sp)
        return redirect('/user/order/')
    except Exception:
        transaction.savepoint_rollback(sp)
        return redirect('/cart/checkout/')
def shop_cart_checkout(request):
    current_user = request.user
    shopcart = ShopCart.objects.all().filter(user_id=current_user.id)
    carttotal = 0
    for rs in shopcart:
        carttotal += rs.quantity * rs.product.price

    if request.method == 'POST':
        data = Order()
        data.name = request.POST['name']
        data.surname = request.POST['surname']
        data.address = request.POST['address']
        data.city = request.POST['city']
        data.phone = request.POST['phone']
        data.user_id = current_user.id
        data.total = carttotal
        data.save()

        for rs in shopcart:
            detail = OrderDetail()
            detail.order_id = data.id
            detail.product_id = rs.product_id
            detail.user_id = current_user.id
            detail.quantity = rs.quantity
            detail.price = rs.product.price
            detail.total = rs.amount
            detail.save()

        ShopCart.objects.filter(user_id=current_user.id).delete()
        request.session['cart_items'] = 0
        return HttpResponseRedirect("/order")

    context = {
        'page': 'checkout',
        'shopcart': shopcart,
        'carttotal': carttotal,
    }
    return render(request, 'shop_cart_checkout.html', context)
def order_handle(request):
    # 获取多个id getlist
    pay = request.POST.get('pay')
    ids_str = request.POST.get('ids_str')

    ids_list = ids_str.split('#')
    # 查询购物车记录
    carts = Cart.objects.filter(id__in=ids_list)

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

    # print(pay,ids_str,'============================')
    # 2: 创建存档点 保存点
    save_point1 = transaction.savepoint()
    # 判断是否生成订单
    try:
        #     生成订单
        order = Order()
        order.num = str(user_id)+ str(int(time.time()))
        order.fee = 10
        order.status = 1
        order.payway = pay
        order.user_id = user_id
        order.save()

        for cart in carts:

            detail = OrderDetail()
            detail.order = order
            detail.good = cart.good
            detail.num = cart.amount
            detail.xiaoji = cart.xiaoji
            detail.save()

            #存到订单以后 把购物车对应的记录删除
            cart.delete()
        # 3: 订单事务执行成功 提交事务
        transaction.savepoint_commit(save_point1)
        return JsonResponse({'ret':1})
    except:
        # 4: 订单执行失败 ,滚回到保存点
        transaction.savepoint_rollback(save_point1)
        return JsonResponse({'ret':0})