示例#1
0
def update(request, cart, variant_id):
    if not request.is_ajax():
        return redirect('cart:index')
    variant = get_object_or_404(ProductVariant, pk=variant_id)
    discounts = request.discounts
    status = None
    form = ReplaceCartLineForm(request.POST,
                               cart=cart,
                               variant=variant,
                               discounts=discounts)
    if form.is_valid():
        form.save()
        response = {'productId': variant_id, 'subtotal': 0, 'total': 0}
        updated_line = cart.get_line(form.cart_line.variant)
        if updated_line:
            response['subtotal'] = currencyfmt(
                updated_line.get_total(discounts=discounts).gross,
                updated_line.get_total(discounts=discounts).currency)
        if cart:
            cart_total = cart.get_total(discounts=discounts)
            response['total'] = currencyfmt(cart_total.gross,
                                            cart_total.currency)
            local_cart_total = to_local_currency(cart_total, request.currency)
            if local_cart_total:
                response['localTotal'] = currencyfmt(local_cart_total.gross,
                                                     local_cart_total.currency)
        status = 200
    elif request.POST is not None:
        response = {'error': form.errors}
        status = 400
    return JsonResponse(response, status=status)
示例#2
0
 def prepare_line_data(line):
     product_class = line.variant.product.product_class
     attributes = product_class.variant_attributes.all()
     first_image = line.variant.get_first_image()
     price_per_item = line.get_price_per_item(discounts=request.discounts)
     line_total = line.get_total(discounts=request.discounts)
     return {
         'variant':
         line.variant.name,
         'quantity':
         line.quantity,
         'attributes':
         line.variant.display_variant(attributes),
         'image':
         first_image.url if first_image else None,
         'price_per_item':
         currencyfmt(price_per_item.gross, price_per_item.currency),
         'line_total':
         currencyfmt(line_total.gross, line_total.currency),
         'update_url':
         reverse('cart:update-line', kwargs={'variant_id':
                                             line.variant_id}),
         'variant_url':
         line.variant.get_absolute_url()
     }
示例#3
0
def index(request, product_id=None):
    if product_id is not None:
        product_id = int(product_id)
    cart = Cart.for_session_cart(request.cart, discounts=request.discounts)
    if contains_unavailable_products(cart):
        msg = _("Sorry. We don't have that many items in stock. " "Quantity was set to maximum available for now.")
        messages.warning(request, msg)
        remove_unavailable_products(cart)
    for line in cart:
        data = None
        if line.product.pk == product_id:
            data = request.POST
        initial = {"quantity": line.get_quantity()}
        form = ReplaceCartLineForm(data, cart=cart, product=line.product, initial=initial)
        line.form = form
        if form.is_valid():
            form.save()
            if request.is_ajax():
                response = {
                    "product_id": line.product.pk,
                    "subtotal": currencyfmt(line.get_total().gross, line.get_total().currency),
                    "total": 0,
                }
                if cart:
                    response["total"] = currencyfmt(cart.get_total().gross, cart.get_total().currency)
                return JsonResponse(response)
            return redirect("cart:index")
        elif data is not None:
            if request.is_ajax():
                response = {"error": form.errors}
                return JsonResponse(response, status=400)
    cart_partitioner = cart.partition()
    return TemplateResponse(request, "cart/index.html", {"cart": cart_partitioner})
示例#4
0
def update(request, cart, variant_id):
    if not request.is_ajax():
        return redirect('cart:index')
    variant = get_object_or_404(ProductVariant, pk=variant_id)
    discounts = request.discounts
    status = None
    form = ReplaceCartLineForm(request.POST, cart=cart, variant=variant,
                               discounts=discounts)
    if form.is_valid():
        form.save()
        response = {'productId': variant_id,
                    'subtotal': 0,
                    'total': 0}
        updated_line = cart.get_line(form.cart_line.variant)
        if updated_line:
            response['subtotal'] = currencyfmt(
                updated_line.get_total(discounts=discounts).gross,
                updated_line.get_total(discounts=discounts).currency)
        if cart:
            cart_total = cart.get_total(discounts=discounts)
            response['total'] = currencyfmt(
                cart_total.gross,
                cart_total.currency)
            local_cart_total = to_local_currency(cart_total, request.currency)
            if local_cart_total:
                response['localTotal'] = currencyfmt(
                    local_cart_total.gross,
                    local_cart_total.currency)
        status = 200
    elif request.POST is not None:
        response = {'error': form.errors}
        status = 400
    return JsonResponse(response, status=status)
示例#5
0
文件: views.py 项目: arneb/saleor
def summary(request, cart):

    def prepare_line_data(line):
        product_class = line.variant.product.product_class
        attributes = product_class.variant_attributes.all()
        first_image = line.variant.get_first_image()
        price_per_item = line.get_price_per_item(discounts=request.discounts)
        line_total = line.get_total(discounts=request.discounts)
        return {
            'product': line.variant.product,
            'variant': line.variant.name,
            'quantity': line.quantity,
            'attributes': line.variant.display_variant(attributes),
            'image': first_image,
            'price_per_item': currencyfmt(
                price_per_item.gross, price_per_item.currency),
            'line_total': currencyfmt(line_total.gross, line_total.currency),
            'update_url': reverse('cart:update-line',
                                  kwargs={'variant_id': line.variant_id}),
            'variant_url': line.variant.get_absolute_url()}
    if cart.quantity == 0:
        data = {'quantity': 0}
    else:
        cart_total = cart.get_total(discounts=request.discounts)
        data = {
            'quantity': cart.quantity,
            'total': currencyfmt(cart_total.gross, cart_total.currency),
            'lines': [prepare_line_data(line) for line in cart.lines.all()]}

    return render(request, 'cart-dropdown.html', data)
示例#6
0
文件: views.py 项目: arneb/saleor
 def prepare_line_data(line):
     product_class = line.variant.product.product_class
     attributes = product_class.variant_attributes.all()
     first_image = line.variant.get_first_image()
     price_per_item = line.get_price_per_item(discounts=request.discounts)
     line_total = line.get_total(discounts=request.discounts)
     return {
         'product': line.variant.product,
         'variant': line.variant.name,
         'quantity': line.quantity,
         'attributes': line.variant.display_variant(attributes),
         'image': first_image,
         'price_per_item': currencyfmt(
             price_per_item.gross, price_per_item.currency),
         'line_total': currencyfmt(line_total.gross, line_total.currency),
         'update_url': reverse('cart:update-line',
                               kwargs={'variant_id': line.variant_id}),
         'variant_url': line.variant.get_absolute_url()}
示例#7
0
文件: views.py 项目: x4rMa/farmstand
def index(request, product_id=None):
    if product_id is not None:
        product_id = int(product_id)
    cart = Cart.for_session_cart(request.cart, discounts=request.discounts)
    if contains_unavailable_products(cart):
        msg = _('Sorry. We don\'t have that many items in stock. '
                'Quantity was set to maximum available for now.')
        messages.warning(request, msg)
        remove_unavailable_products(cart)
    for line in cart:
        data = None
        if line.product.pk == product_id:
            data = request.POST
        initial = {'quantity': line.get_quantity()}
        form = ReplaceCartLineForm(data,
                                   cart=cart,
                                   product=line.product,
                                   initial=initial)
        line.form = form
        if form.is_valid():
            form.save()
            if request.is_ajax():
                response = {
                    'productId':
                    line.product.pk,
                    'subtotal':
                    currencyfmt(line.get_total().gross,
                                line.get_total().currency),
                    'total':
                    0
                }
                if cart:
                    response['total'] = currencyfmt(cart.get_total().gross,
                                                    cart.get_total().currency)
                return JsonResponse(response)
            return redirect('cart:index')
        elif data is not None:
            if request.is_ajax():
                response = {'error': form.errors}
                return JsonResponse(response, status=400)
    cart_partitioner = cart.partition()
    return TemplateResponse(request, 'cart/index.html',
                            {'cart': cart_partitioner})
示例#8
0
def test_cart_summary_page(client, product_in_stock, request_cart):
    variant = product_in_stock.variants.get()
    request_cart.add(variant, 1)
    response = client.get('/cart/summary/')
    assert response.status_code == 200
    content = response.context
    assert content['quantity'] == request_cart.quantity
    cart_total = request_cart.get_total()
    assert content['total'] == currencyfmt(
        cart_total.gross, cart_total.currency)
    assert len(content['lines']) == 1
    cart_line = content['lines'][0]
    assert cart_line['variant'] == variant.name
    assert cart_line['quantity'] == 1
示例#9
0
def test_cart_summary_page(client, product_in_stock, request_cart):
    variant = product_in_stock.variants.get()
    request_cart.add(variant, 1)
    response = client.get('/cart/summary/')
    assert response.status_code == 200
    content = response.context
    assert content['quantity'] == request_cart.quantity
    cart_total = request_cart.get_total()
    assert content['total'] == currencyfmt(cart_total.gross,
                                           cart_total.currency)
    assert len(content['lines']) == 1
    cart_line = content['lines'][0]
    assert cart_line['variant'] == variant.name
    assert cart_line['quantity'] == 1
示例#10
0
def index(request, product_id=None):
    if product_id is not None:
        product_id = int(product_id)
    cart = Cart.for_session_cart(request.cart, discounts=request.discounts)
    # if contains_unavailable_products(cart):
    #     msg = _('Sorry. We don\'t have that many items in stock. '
    #             'Quantity was set to maximum available for now.')
    #     messages.warning(request, msg)
    #     remove_unavailable_products(cart)
    for line in cart:
        data = None
        if line.product.pk == product_id:
            data = request.POST
        initial = {'quantity': line.get_quantity()}
        form = ReplaceCartLineForm(data, cart=cart, product=line.product,
                                   initial=initial)
        line.form = form
        if form.is_valid():
            form.save()
            if request.is_ajax():
                response = {'product_id': line.product.pk,
                            'subtotal': currencyfmt(line.get_total().gross,
                            line.get_total().currency), 'total': 0}
                if cart:
                    response['total'] = currencyfmt(
                        cart.get_total().gross, cart.get_total().currency)
                return JsonResponse(response)
            return redirect('cart:index')
        elif data is not None:
            if request.is_ajax():
                response = {'error': form.errors}
                return JsonResponse(response, status=400)
    cart_partitioner = cart.partition()
    return TemplateResponse(
        request, 'cart/index.html', {
            'cart': cart_partitioner})
示例#11
0
文件: views.py 项目: mitcom/saleor
def update(request, cart, variant_id):
    if not request.is_ajax():
        return redirect("cart:index")
    variant = get_object_or_404(ProductVariant, pk=variant_id)
    discounts = request.discounts
    status = None
    form = ReplaceCartLineForm(request.POST, cart=cart, variant=variant, discounts=discounts)
    if form.is_valid():
        form.save()
        response = {"productId": variant_id, "subtotal": 0, "total": 0}
        updated_line = cart.get_line(form.cart_line.variant)
        if updated_line:
            response["subtotal"] = currencyfmt(
                updated_line.get_total(discounts=discounts).gross, updated_line.get_total(discounts=discounts).currency
            )
        if cart:
            response["total"] = currencyfmt(
                cart.get_total(discounts=discounts).gross, cart.get_total(discounts=discounts).currency
            )
        status = 200
    elif request.POST is not None:
        response = {"error": form.errors}
        status = 400
    return JsonResponse(response, status=status)
示例#12
0
文件: views.py 项目: zeus512/saleor
def summary(request, cart):
    def prepare_line_data(line):
        product_class = line.variant.product.product_class
        attributes = product_class.variant_attributes.all()
        first_image = line.variant.get_first_image()
        price_per_item = line.get_price_per_item(discounts=request.discounts)
        line_total = line.get_total(discounts=request.discounts)
        return {
            'product':
            line.variant.product,
            'variant':
            line.variant.name,
            'quantity':
            line.quantity,
            'attributes':
            line.variant.display_variant(attributes),
            'image':
            first_image,
            'price_per_item':
            currencyfmt(price_per_item.gross, price_per_item.currency),
            'line_total':
            currencyfmt(line_total.gross, line_total.currency),
            'update_url':
            reverse('cart:update-line', kwargs={'variant_id':
                                                line.variant_id}),
            'variant_url':
            line.variant.get_absolute_url()
        }

    if cart.quantity == 0:
        data = {'quantity': 0}
    else:
        cart_total = cart.get_total(discounts=request.discounts)
        data = {
            'quantity': cart.quantity,
            'total': currencyfmt(cart_total.gross, cart_total.currency),
            'lines': [prepare_line_data(line) for line in cart.lines.all()]
        }

    return render(request, 'cart-dropdown.html', data)
示例#13
0
def tax(price, html=False):
    if html:
        return format_price(price.tax, price.currency)
    return currencyfmt(price.tax, price.currency)
示例#14
0
def gross(price, html=False, normalize=False):
    if html or normalize:
        return format_price(price.gross, price.currency, html, normalize)
    return currencyfmt(price.gross, price.currency)
示例#15
0
def tax(price, html=False, normalize=False):
    if html or normalize:
        return format_price(price.tax, price.currency, html, normalize)
    return currencyfmt(price.tax, price.currency)
示例#16
0
def tax(price, html=False):
    if html:
        return format_price(price.tax, price.currency)
    return currencyfmt(price.tax, price.currency)
示例#17
0
def net(price, html=False):
    if html:
        return format_price(price.net, price.currency)
    return currencyfmt(price.net, price.currency)
示例#18
0
def net(price, html=False):
    if html:
        return format_price(price.net, price.currency)
    return currencyfmt(price.net, price.currency)
示例#19
0
def gross(price, html=False):
    if html:
        return format_price(price.gross, price.currency)
    return currencyfmt(price.gross, price.currency)
示例#20
0
def net(price):
    return currencyfmt(price.net, price.currency)
示例#21
0
def gross(price):
    return currencyfmt(price.gross, price.currency)
示例#22
0
def tax(price):
    return currencyfmt(price.tax, price.currency)