Fix qhasuery modification so that conditions are combined

Borrowed from the pyconau-2017 fork

To explain the impact of this - without this patch, if a user has
their invoice refunded, they are able to buy a new ticket; but
t-shirts, dinner tickets and so on do not become available to them
again because they are listed has already been in a cart for them.

Applying the patch now correctly checks to see if they currently have
a ticket.

From 731eee0a4c42a5013ee312b1ff50548e4d89a2ff Mon Sep 17 00:00:00 2001
From: Richard Jones <r1chardj0n3s@gmail.com>
Date: Sun, 4 Jun 2017 13:22:34 +1000
Subject: [PATCH] Fix query modification so that conditions are combined

Previously it was checking if the user has a product from the category
in a cart, and if there is no cart that is released (refunded).
Not *if the user has a product in a cart that is not released*.

This patch combines them. In the absence of a __ne operation in the
joining syntax, a double equality check is needed.

Signed-off-by: Richard Jones <r1chardj0n3s@gmail.com>
This commit is contained in:
James Polley 2017-09-29 09:25:01 +10:00
parent 105e6988e5
commit e546b7d814

View file

@ -152,16 +152,16 @@ class CategoryConditionController(IsMetByFilter, ConditionController):
product from a category invoking that item's condition in one of their
carts. '''
active = commerce.Cart.STATUS_ACTIVE
paid = commerce.Cart.STATUS_PAID
in_user_carts = Q(
enabling_category__product__productitem__cart__user=user
)
released = commerce.Cart.STATUS_RELEASED
in_released_carts = Q(
enabling_category__product__productitem__cart__status=released
enabling_category__product__productitem__cart__user=user,
enabling_category__product__productitem__cart__status=active
) | Q(
enabling_category__product__productitem__cart__user=user,
enabling_category__product__productitem__cart__status=paid
)
queryset = queryset.filter(in_user_carts)
queryset = queryset.exclude(in_released_carts)
return queryset