0001-lingo-factor-items-to-be-paid-queryset-in-a-classmet.patch
combo/apps/lingo/models.py | ||
---|---|---|
226 | 226 |
class Meta: |
227 | 227 |
ordering = ['regie', 'extra_fee', 'subject'] |
228 | 228 | |
229 |
@classmethod |
|
230 |
def get_items_to_be_paid(cls, user): |
|
231 |
return cls.objects.filter( |
|
232 |
user=user, payment_date__isnull=True |
|
233 |
).exclude(cancellation_date__isnull=False) |
|
234 | ||
229 | 235 |
def notify(self, status): |
230 | 236 |
if not self.source_url: |
231 | 237 |
return |
... | ... | |
395 | 401 |
def is_relevant(self, context): |
396 | 402 |
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated()): |
397 | 403 |
return False |
398 |
items = BasketItem.objects.filter( |
|
399 |
user=context['request'].user, payment_date__isnull=True |
|
400 |
).exclude(cancellation_date__isnull=False) |
|
404 |
items = BasketItem.get_items_to_be_paid(context['request'].user) |
|
401 | 405 |
return len(items) > 0 |
402 | 406 | |
403 | 407 |
def get_badge(self, context): |
404 | 408 |
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated()): |
405 | 409 |
return |
406 |
items = BasketItem.objects.filter( |
|
407 |
user=context['request'].user, payment_date__isnull=True |
|
408 |
).exclude(cancellation_date__isnull=False) |
|
410 |
items = BasketItem.get_items_to_be_paid(context['request'].user) |
|
409 | 411 |
if not items: |
410 | 412 |
return |
411 | 413 |
total = sum([x.amount for x in items]) |
... | ... | |
413 | 415 | |
414 | 416 |
def render(self, context): |
415 | 417 |
basket_template = template.loader.get_template('lingo/combo/basket.html') |
416 |
items = BasketItem.objects.filter( |
|
417 |
user=context['request'].user, payment_date__isnull=True |
|
418 |
).exclude(cancellation_date__isnull=False) |
|
418 |
items = BasketItem.get_items_to_be_paid(context['request'].user) |
|
419 | 419 |
regies = {} |
420 | 420 |
for item in items: |
421 | 421 |
if not item.regie_id in regies: |
combo/apps/lingo/views.py | ||
---|---|---|
307 | 307 |
else: |
308 | 308 |
if not regie_id: |
309 | 309 |
# take all items but check they're from the same regie |
310 |
items = BasketItem.objects.filter(user=self.request.user, |
|
311 |
payment_date__isnull=True, |
|
312 |
cancellation_date__isnull=True) |
|
310 |
items = BasketItem.get_items_to_be_paid(user=self.request.user) |
|
313 | 311 |
regie_id = items[0].regie_id |
314 | 312 |
for item in items: |
315 | 313 |
if item.regie_id != regie_id: |
... | ... | |
319 | 317 |
regie = Regie.objects.get(id=regie_id) |
320 | 318 | |
321 | 319 |
regie.compute_extra_fees(user=self.request.user) |
322 |
items = BasketItem.objects.filter(user=self.request.user, |
|
323 |
payment_date__isnull=True, |
|
324 |
cancellation_date__isnull=True, |
|
325 |
regie=regie) |
|
320 |
items = BasketItem.get_items_to_be_paid(user=self.request.user).filter(regie=regie) |
|
326 | 321 | |
327 | 322 |
transaction = Transaction() |
328 | 323 |
if request.user.is_authenticated(): |
... | ... | |
491 | 486 | |
492 | 487 |
# return to basket page if there are still items to pay |
493 | 488 |
if request.user.is_authenticated(): |
494 |
remaining_basket_items = BasketItem.objects.filter( |
|
495 |
user=self.request.user, payment_date__isnull=True, |
|
496 |
cancellation_date__isnull=False).count() |
|
489 |
remaining_basket_items = BasketItem.get_items_to_be_paid( |
|
490 |
user=self.request.user).count() |
|
497 | 491 |
if remaining_basket_items: |
498 | 492 |
return HttpResponseRedirect(get_basket_url()) |
499 | 493 |
return HttpResponseRedirect('/') |
... | ... | |
570 | 564 |
return context |
571 | 565 | |
572 | 566 |
def get_queryset(self): |
573 |
return BasketItem.objects.filter(user=self.request.user.id, |
|
574 |
payment_date__isnull=True, |
|
575 |
cancellation_date__isnull=True) |
|
567 |
return BasketItem.get_items_to_be_paid(user=self.request.user) |
|
576 | 568 | |
577 | 569 |
def post(self, request, *args, **kwargs): |
578 | 570 |
if not request.user.is_authenticated(): |
tests/test_lingo_payment.py | ||
---|---|---|
134 | 134 |
# make sure return url is the user return URL |
135 | 135 |
assert urlparse.urlparse(qs['return_url'][0]).path.startswith( |
136 | 136 |
reverse('lingo-return', kwargs={'regie_pk': regie.id})) |
137 |
# simulate successful return URL |
|
138 |
resp = client.get(qs['return_url'][0], args) |
|
139 |
assert resp.status_code == 302 |
|
140 |
assert urlparse.urlparse(resp.url).path == '/' |
|
141 | 137 |
# simulate successful call to callback URL |
142 | 138 |
with mock.patch('combo.utils.RequestsSession.request') as request: |
143 | 139 |
resp = client.get(reverse('lingo-callback', kwargs={'regie_pk': regie.id}), args) |
144 | 140 |
assert resp.status_code == 200 |
141 |
# simulate successful return URL |
|
142 |
resp = client.get(qs['return_url'][0], args) |
|
143 |
assert resp.status_code == 302 |
|
144 |
assert urlparse.urlparse(resp.url).path == '/' |
|
145 | 145 | |
146 | 146 |
def test_add_amount_to_basket(key, regie, user): |
147 | 147 |
other_regie = Regie(label='test2', slug='test2') |
148 |
- |