Example #1
0
 def prepare_line_data(line):
     product_type = line.variant.product.product_type
     attributes = product_type.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(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()
     }
Example #2
0
def summary(request, cart):
    """Display a cart summary suitable for displaying on all pages."""
    def prepare_line_data(line):
        product_type = line.variant.product.product_type
        attributes = product_type.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(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)
Example #3
0
def summary(request, cart):
    """Display a cart summary suitable for displaying on all pages."""
    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)
Example #4
0
def amount(obj, format='text'):
    if format == 'text':
        return format_price(
            obj.amount, obj.currency, html=False)
    if format == 'html':
        return format_price(
            obj.amount, obj.currency, html=True)
    return currencyfmt(obj.amount, obj.currency)
Example #5
0
 def prepare_line_data(line):
     product_type = line.variant.product.product_type
     attributes = product_type.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(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()}
Example #6
0
def update(request, cart, variant_id):
    """Update the line quantities."""
    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 = {
            'variantId': variant_id,
            'subtotal': 0,
            'total': 0,
            'cart': {
                'numItems': cart.quantity,
                'numLines': len(cart)
            }
        }
        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)
Example #7
0
def test_cart_summary_page(client, product, request_cart):
    variant = product.variants.get()
    request_cart.add(variant, 1)
    response = client.get(reverse('cart: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.amount,
                                           cart_total.currency)
    assert len(content['lines']) == 1
    cart_line = content['lines'][0]
    assert cart_line['variant'] == variant.name
    assert cart_line['quantity'] == 1
Example #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
Example #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
Example #10
0
def test_cart_summary_page(client, product, request_cart):
    variant = product.variants.get()
    request_cart.add(variant, 1)
    response = client.get(reverse('cart: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.amount, cart_total.currency)
    assert len(content['lines']) == 1
    cart_line = content['lines'][0]
    assert cart_line['variant'] == variant.name
    assert cart_line['quantity'] == 1
Example #11
0
def update(request, cart, variant_id):
    """Update the line quantities."""
    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 = {
            'variantId': variant_id,
            'subtotal': 0,
            'total': 0,
            'cart': {
                'numItems': cart.quantity,
                'numLines': len(cart)}}
        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)
Example #12
0
def amount(obj, format="text"):
    if format == "text":
        return format_price(obj.amount, obj.currency, html=False)
    if format == "html":
        return format_price(obj.amount, obj.currency, html=True)
    return currencyfmt(obj.amount, obj.currency)
Example #13
0
def format_money(money):
    return currencyfmt(money.amount, money.currency)
Example #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)
Example #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)
Example #16
0
def amount(obj, format='text'):
    if format == 'text':
        return format_price(obj.value, obj.currency, html=False)
    if format == 'html':
        return format_price(obj.value, obj.currency, html=True)
    return currencyfmt(obj.value, obj.currency)
Example #17
0
def format_money(money):
    return currencyfmt(money.amount, money.currency)