Beispiel #1
0
def checkout(request):
    cart = []

    if request.POST:
        cj = request.POST.get("cart")
    else:
        cj = request.GET.get("cart")
        # Open cash drawer

    fail = False
    for f in json.loads(cj):
        try:
            product = Product.objects.get(pk=f['id'])
            if f['num'] > product.stocked:
                fail = True
            cart.append({
                'product': product,
                'amount': f['num'],
                'price': f['num'] * product.price,
            })
        except Product.DoesNotExist:
            continue

    if request.POST:
        purchase = Purchase()
        purchase.salesperson = request.user
        purchase.total = sum([i['product'].price * i['amount'] for i in cart])
        purchase.save()
        for i in cart:
            i['product'].stocked -= i['amount']
            i['product'].save()
            ProductPurchase.objects.create(
                purchase=purchase,
                product=i['product'],
                amount=i['amount'])
        template = loader.get_template('cashdesk/bon.txt')
        context = RequestContext(
            request,
            {
                'purchase': purchase,
                'productpurchases': ProductPurchase.objects.filter(
                    purchase=purchase),
            }
        )
        bon = template.render(context)
        printer.print_and_cut(
            request.session['printer'],
            bon, True)
        return HttpResponseRedirect("/")

    ctx = {
        'cart': cart,
        'fail': fail,
        'cartjson': request.GET.get("cart"),
        'total': sum([i['product'].price * i['amount'] for i in cart]),
    }
    return render(request, 'cashdesk/checkout.html', ctx)