0001-lingo-factor-items-to-be-paid-queryset-in-a-classmet.patch
combo/apps/lingo/models.py | ||
---|---|---|
173 | 173 |
if not self.extra_fees_ws_url: |
174 | 174 |
return |
175 | 175 |
post_data = {'data': []} |
176 |
basketitems = BasketItem.objects.filter( |
|
177 |
user=user, regie=self, |
|
178 |
cancellation_date__isnull=True, |
|
179 |
payment_date__isnull=True) |
|
176 |
basketitems = BasketItem.get_items_to_be_paid(user).filter(regie=self) |
|
180 | 177 |
for basketitem in basketitems.filter(extra_fee=False): |
181 | 178 |
basketitem_data = { |
182 | 179 |
'subject': basketitem.subject, |
... | ... | |
226 | 223 |
class Meta: |
227 | 224 |
ordering = ['regie', 'extra_fee', 'subject'] |
228 | 225 | |
226 |
@classmethod |
|
227 |
def get_items_to_be_paid(cls, user): |
|
228 |
return cls.objects.filter( |
|
229 |
user=user, |
|
230 |
payment_date__isnull=True, |
|
231 |
cancellation_date__isnull=True) |
|
232 | ||
229 | 233 |
def notify(self, status): |
230 | 234 |
if not self.source_url: |
231 | 235 |
return |
... | ... | |
397 | 401 |
def is_relevant(self, context): |
398 | 402 |
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated()): |
399 | 403 |
return False |
400 |
items = BasketItem.objects.filter( |
|
401 |
user=context['request'].user, payment_date__isnull=True |
|
402 |
).exclude(cancellation_date__isnull=False) |
|
403 |
return len(items) > 0 |
|
404 |
return BasketItem.get_items_to_be_paid(context['request'].user).count() > 0 |
|
404 | 405 | |
405 | 406 |
def get_badge(self, context): |
406 | 407 |
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated()): |
407 | 408 |
return |
408 |
items = BasketItem.objects.filter( |
|
409 |
user=context['request'].user, payment_date__isnull=True |
|
410 |
).exclude(cancellation_date__isnull=False) |
|
409 |
items = BasketItem.get_items_to_be_paid(context['request'].user) |
|
411 | 410 |
if not items: |
412 | 411 |
return |
413 | 412 |
total = sum([x.amount for x in items]) |
... | ... | |
415 | 414 | |
416 | 415 |
def render(self, context): |
417 | 416 |
basket_template = template.loader.get_template('lingo/combo/basket.html') |
418 |
items = BasketItem.objects.filter( |
|
419 |
user=context['request'].user, payment_date__isnull=True |
|
420 |
).exclude(cancellation_date__isnull=False) |
|
417 |
items = BasketItem.get_items_to_be_paid(context['request'].user) |
|
421 | 418 |
regies = {} |
422 | 419 |
for item in items: |
423 | 420 |
if not item.regie_id in regies: |
... | ... | |
474 | 471 |
def is_relevant(self, context): |
475 | 472 |
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated()): |
476 | 473 |
return False |
477 |
items = BasketItem.objects.filter( |
|
478 |
user=context['request'].user, payment_date__isnull=True |
|
479 |
).exclude(cancellation_date__isnull=False) |
|
480 |
return len(items) > 0 |
|
474 |
return BasketItem.get_items_to_be_paid(context['request'].user).count() > 0 |
|
481 | 475 | |
482 | 476 |
def render(self, context): |
483 | 477 |
if not (getattr(context['request'], 'user', None) and context['request'].user.is_authenticated()): |
... | ... | |
487 | 481 |
except IndexError: |
488 | 482 |
return '' |
489 | 483 |
basket_template = template.loader.get_template('lingo/combo/basket_link.html') |
490 |
context['items'] = BasketItem.objects.filter( |
|
491 |
user=context['request'].user, payment_date__isnull=True |
|
492 |
).exclude(cancellation_date__isnull=False) |
|
484 |
context['items'] = BasketItem.get_items_to_be_paid(user=context['request'].user) |
|
493 | 485 |
context['total'] = sum([x.amount for x in context['items']]) |
494 | 486 |
return basket_template.render(context) |
495 | 487 |
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 |
- |