lingo: factor items to be paid queryset in a classmethod (#19383)
This commit is contained in:
parent
30ed33eaf4
commit
055151fc8b
|
@ -173,10 +173,7 @@ class Regie(models.Model):
|
|||
if not self.extra_fees_ws_url:
|
||||
return
|
||||
post_data = {'data': []}
|
||||
basketitems = BasketItem.objects.filter(
|
||||
user=user, regie=self,
|
||||
cancellation_date__isnull=True,
|
||||
payment_date__isnull=True)
|
||||
basketitems = BasketItem.get_items_to_be_paid(user).filter(regie=self)
|
||||
for basketitem in basketitems.filter(extra_fee=False):
|
||||
basketitem_data = {
|
||||
'subject': basketitem.subject,
|
||||
|
@ -226,6 +223,13 @@ class BasketItem(models.Model):
|
|||
class Meta:
|
||||
ordering = ['regie', 'extra_fee', 'subject']
|
||||
|
||||
@classmethod
|
||||
def get_items_to_be_paid(cls, user):
|
||||
return cls.objects.filter(
|
||||
user=user,
|
||||
payment_date__isnull=True,
|
||||
cancellation_date__isnull=True)
|
||||
|
||||
def notify(self, status):
|
||||
if not self.source_url:
|
||||
return
|
||||
|
@ -396,17 +400,12 @@ class LingoBasketCell(CellBase):
|
|||
def is_relevant(self, context):
|
||||
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated()):
|
||||
return False
|
||||
items = BasketItem.objects.filter(
|
||||
user=context['request'].user, payment_date__isnull=True
|
||||
).exclude(cancellation_date__isnull=False)
|
||||
return len(items) > 0
|
||||
return BasketItem.get_items_to_be_paid(context['request'].user).count() > 0
|
||||
|
||||
def get_badge(self, context):
|
||||
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated()):
|
||||
return
|
||||
items = BasketItem.objects.filter(
|
||||
user=context['request'].user, payment_date__isnull=True
|
||||
).exclude(cancellation_date__isnull=False)
|
||||
items = BasketItem.get_items_to_be_paid(context['request'].user)
|
||||
if not items:
|
||||
return
|
||||
total = sum([x.amount for x in items])
|
||||
|
@ -414,9 +413,7 @@ class LingoBasketCell(CellBase):
|
|||
|
||||
def render(self, context):
|
||||
basket_template = template.loader.get_template('lingo/combo/basket.html')
|
||||
items = BasketItem.objects.filter(
|
||||
user=context['request'].user, payment_date__isnull=True
|
||||
).exclude(cancellation_date__isnull=False)
|
||||
items = BasketItem.get_items_to_be_paid(context['request'].user)
|
||||
regies = {}
|
||||
for item in items:
|
||||
if not item.regie_id in regies:
|
||||
|
@ -473,10 +470,7 @@ class LingoBasketLinkCell(CellBase):
|
|||
def is_relevant(self, context):
|
||||
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated()):
|
||||
return False
|
||||
items = BasketItem.objects.filter(
|
||||
user=context['request'].user, payment_date__isnull=True
|
||||
).exclude(cancellation_date__isnull=False)
|
||||
return len(items) > 0
|
||||
return BasketItem.get_items_to_be_paid(context['request'].user).count() > 0
|
||||
|
||||
def render(self, context):
|
||||
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated()):
|
||||
|
@ -486,9 +480,7 @@ class LingoBasketLinkCell(CellBase):
|
|||
except IndexError:
|
||||
return ''
|
||||
basket_template = template.loader.get_template('lingo/combo/basket_link.html')
|
||||
context['items'] = BasketItem.objects.filter(
|
||||
user=context['request'].user, payment_date__isnull=True
|
||||
).exclude(cancellation_date__isnull=False)
|
||||
context['items'] = BasketItem.get_items_to_be_paid(user=context['request'].user)
|
||||
context['total'] = sum([x.amount for x in context['items']])
|
||||
return basket_template.render(context)
|
||||
|
||||
|
|
|
@ -307,9 +307,7 @@ class PayView(View):
|
|||
else:
|
||||
if not regie_id:
|
||||
# take all items but check they're from the same regie
|
||||
items = BasketItem.objects.filter(user=self.request.user,
|
||||
payment_date__isnull=True,
|
||||
cancellation_date__isnull=True)
|
||||
items = BasketItem.get_items_to_be_paid(user=self.request.user)
|
||||
regie_id = items[0].regie_id
|
||||
for item in items:
|
||||
if item.regie_id != regie_id:
|
||||
|
@ -319,10 +317,7 @@ class PayView(View):
|
|||
regie = Regie.objects.get(id=regie_id)
|
||||
|
||||
regie.compute_extra_fees(user=self.request.user)
|
||||
items = BasketItem.objects.filter(user=self.request.user,
|
||||
payment_date__isnull=True,
|
||||
cancellation_date__isnull=True,
|
||||
regie=regie)
|
||||
items = BasketItem.get_items_to_be_paid(user=self.request.user).filter(regie=regie)
|
||||
|
||||
transaction = Transaction()
|
||||
if request.user.is_authenticated():
|
||||
|
@ -491,9 +486,8 @@ class ReturnView(View):
|
|||
|
||||
# return to basket page if there are still items to pay
|
||||
if request.user.is_authenticated():
|
||||
remaining_basket_items = BasketItem.objects.filter(
|
||||
user=self.request.user, payment_date__isnull=True,
|
||||
cancellation_date__isnull=False).count()
|
||||
remaining_basket_items = BasketItem.get_items_to_be_paid(
|
||||
user=self.request.user).count()
|
||||
if remaining_basket_items:
|
||||
return HttpResponseRedirect(get_basket_url())
|
||||
return HttpResponseRedirect('/')
|
||||
|
@ -570,9 +564,7 @@ class CancelItemView(DetailView):
|
|||
return context
|
||||
|
||||
def get_queryset(self):
|
||||
return BasketItem.objects.filter(user=self.request.user.id,
|
||||
payment_date__isnull=True,
|
||||
cancellation_date__isnull=True)
|
||||
return BasketItem.get_items_to_be_paid(user=self.request.user)
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
if not request.user.is_authenticated():
|
||||
|
|
|
@ -134,14 +134,14 @@ def test_successfull_items_payment(regie, user):
|
|||
# make sure return url is the user return URL
|
||||
assert urlparse.urlparse(qs['return_url'][0]).path.startswith(
|
||||
reverse('lingo-return', kwargs={'regie_pk': regie.id}))
|
||||
# simulate successful return URL
|
||||
resp = client.get(qs['return_url'][0], args)
|
||||
assert resp.status_code == 302
|
||||
assert urlparse.urlparse(resp.url).path == '/'
|
||||
# simulate successful call to callback URL
|
||||
with mock.patch('combo.utils.RequestsSession.request') as request:
|
||||
resp = client.get(reverse('lingo-callback', kwargs={'regie_pk': regie.id}), args)
|
||||
assert resp.status_code == 200
|
||||
# simulate successful return URL
|
||||
resp = client.get(qs['return_url'][0], args)
|
||||
assert resp.status_code == 302
|
||||
assert urlparse.urlparse(resp.url).path == '/'
|
||||
|
||||
def test_add_amount_to_basket(key, regie, user):
|
||||
other_regie = Regie(label='test2', slug='test2')
|
||||
|
|
Loading…
Reference in New Issue