Esempio n. 1
0
def get_cart(request):
    message = ''

    if request.POST:
        # 下单食物数量减少,创建order,购物车清空
        cart_id = request.session.get('CART-ID')

        # 下单的食物count数量减少
        items = models.Item.objects.filter(cart_id=cart_id).values(
            'quantity', 'unit_price', 'object_id')
        total_price = 0
        food_list = []
        rest_set = set()  # check if there more than one restaurant
        for item in items:
            food_id = item['object_id']
            total_price += item['quantity'] * item['unit_price']
            food = Food.objects.get(food_id=food_id)
            rest_set.add(food.RName)

        if len(rest_set) != 1:
            message = '商家必须相同'
        else:
            for item in items:
                food_id = item['object_id']
                food = Food.objects.get(food_id=food_id)
                food.count -= 1
                food_list.append(food)
                food.save()

            # 成功下单的cart
            cart = models.Cart.objects.get(id=cart_id)
            cart.checked_out = True
            cart.save()

            # 创建order
            new_order = Order()
            customer_id = Customer.objects.get(
                AName=request.session['user_name'])
            new_order.total_price = total_price
            new_order.save()
            new_order.foods.add(*food_list)
            new_order.restaurant_id = list(rest_set)[0]
            new_order.customer_id = customer_id
            new_order.address = Customer.objects.filter(
                AName=request.session['user_name']).values(
                    'address')[0]['address']
            new_order.save()

            # 购物车清空
            request.session['CART-ID'] = False
            new_cart = Cart(request)

            return redirect('/index/customer_order/')

    context = {'cart': Cart(request), 'message': message}

    return render(request, 'cart.html', context=context)
Esempio n. 2
0
def make_order_view(request):
    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)
    comp_id = 0
    for i in cart.items.all():
        comp_id = i.product.owner.id
        break
    form = OrderForm(request.POST or None)
    if form.is_valid():
        name = form.cleaned_data['name']
        phone = form.cleaned_data['phone']
        comments = form.cleaned_data['comments']
        new_order = Order()
        new_order.user = request.user
        new_order.owner = Company.objects.get(id=comp_id)
        new_order.save()
        new_order.items.add(cart)
        new_order.name = name
        new_order.phone = phone
        new_order.comments = comments
        new_order.total = cart.cart_total
        new_order.save()
        slug = slugify(
            translit(unicode('заказ' + str(new_order.id)), reversed=True))
        new_order.slug = slug
        new_order.save()
        path = 'media/files/' + new_order.slug + '.xlsx'
        new_order.path = path
        new_order.save()
        del request.session['cart_id']
        del request.session['total']
        return HttpResponseRedirect(reverse('thanks'))
Esempio n. 3
0
def BasketResidentConvert(request, pk):
    product = Product.objects.all()
    instance = get_object_or_404(Resident, pk=pk)
    order_list = BasketResident.objects.filter(user_basket=instance)
    verifpoint = request.POST.get('verifpoint')
    date = datetime.date.today()
    start_week = date - datetime.timedelta(date.weekday())
    end_week = start_week + datetime.timedelta(7)
    family = Resident.objects.filter(badge=instance.badge)
    pklist = []
    for f in family:
        pklist.append(f.id)
    entries = Order.objects.filter(date__range=[start_week, end_week],
                                   order_user__in=pklist)
    point = 0

    for p in entries:
        point += p.points
    pts = 0
    can_save = True
    error = []
    if not BasketResident.objects.filter(user_basket=instance).exists():
        error.append("panier vide")
        can_save = False
    else:
        for p in order_list:
            pts += p.product.prod_limit * p.qty
            if p.qty > p.product.prod_stock:
                error.append("Stock insuffisant de : " + p.product.prod_name +
                             " - Stock restant :" + str(p.product.prod_stock))
                p.save()
                can_save = False

        if verifpoint:
            instance = get_object_or_404(Resident, pk=pk)
            family = Resident.objects.filter(badge=instance.badge)
            familynumber = family.count()
            user_points = get_object_or_404(
                LimitFamily, compo_family=str(familynumber)).point_by_week
            restant = user_points - point
            if pts > restant:
                error.append("limite de point dépassé, point restant :" +
                             str(restant))
                can_save = False
        else:
            pts = 0

    if can_save:

        #for p in order_list :

        id = Order.objects.latest('id')
        title = "AMC_Shop_" + datetime.datetime.now().strftime(
            "%d%m%Y") + "_" + str((id.id + 1))
        instance_order = Order(order_user=instance, title=title, points=pts)
        instance_order.save()
        for p in order_list:
            instance_item = OrderItem(product=p.product,
                                      order=instance_order,
                                      qty=p.qty)
            instance_item.save()
            p.delete()
    responseData = {
        'error': error,
        'verifpoint': verifpoint,
        #'entries':list(entries.values()),
        'point': point,
    }
    return JsonResponse(responseData)