Skip to content

Commit

Permalink
Merge pull request #168 from samsagaz/#137-pending-sponsoring
Browse files Browse the repository at this point in the history
#137 pending sponsoring
  • Loading branch information
facundobatista committed Apr 5, 2020
2 parents 3ad399d + b64f90b commit aed1c09
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 1 deletion.
49 changes: 49 additions & 0 deletions website/events/helpers/sponsoring_pending.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
"""Sponsoring helper.
This module is to help on construct the list of pending sponsoring.
Organizer Tasks:
* calculate_sponsoring_pending_by_organizer
Superuser Tasks:
* calculate_all_sponsoring_pending
"""
from collections import namedtuple
from operator import attrgetter

from django.urls import reverse
from events.constants import SPONSOR_STATE_CHECKED, SPONSOR_STATE_PARTIALLY_PAID
from events.models import Organizer, Sponsoring


PendingSponsoring = namedtuple('PendingSponsoring', 'description, amount, url')


def pending_sponsoring(sponsoring):
description = f"{sponsoring} - {sponsoring.state.upper()}"
amount = sponsoring.sponsorcategory.amount
url = reverse('sponsoring_detail', kwargs={'pk': sponsoring.pk})
return PendingSponsoring(description, amount, url)


def calculate_sponsoring_pending(organizer_user=False):
"""Calculates all pending sponsoring.
Returns:
list(PendingSponsoring): List of all pending sponsoring
"""
pending = []
if organizer_user:
organizer = Organizer.objects.get(user=organizer_user)
sponsorings = Sponsoring.objects.filter(
sponsorcategory__event__in=organizer.get_associate_events())
else:
sponsorings = Sponsoring.objects.all()

open_sponsorings = (
SPONSOR_STATE_PARTIALLY_PAID,
SPONSOR_STATE_CHECKED,
)

for sponsoring in sponsorings:
if sponsoring.state in open_sponsorings:
pending.append(pending_sponsoring(sponsoring))
return sorted(pending, key=attrgetter('amount'), reverse=True)
26 changes: 26 additions & 0 deletions website/events/templates/events_home.html
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,32 @@
{% endif %}
</div>
</div>

<div class="sponsoring-pending">
<h4>Patrocinios Pendientes <span class="badge">{{sponsoring_pending|length}}</span></h4>
<div class="list-group">
{% for pending in sponsoring_pending %}
<div class="list-group-item">
<div class="row task-element">
<div class="col-md-8 task-description">
{{ pending.description }}
</div>
<div class="col-md-2 task-amount">
{{ pending.amount }}
</div>
<div class="col-md-2 task-action">
<a class="btn btn-success" href="{{pending.url}}">Ir</a>
</div>
</div>
</div>
{% empty %}
<div class="alert alert-info" role="alert">
No hay patrocinios pendientes.
</div>
{% endfor %}
</div>
</div>

<div class="user-pending">
<h4>Tareas <span class="badge">{{tasks|length}}</span></h4>
<div class="list-group">
Expand Down
36 changes: 36 additions & 0 deletions website/events/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@
calculate_super_user_task,
Task
)
from events.helpers.sponsoring_pending import (
PendingSponsoring,
pending_sponsoring,
calculate_sponsoring_pending,
)
from events.helpers.tests import (
associate_events_organizers,
CustomAssertMethods,
Expand Down Expand Up @@ -1056,3 +1061,34 @@ def test_organizer_refund_switch_state(self):
response = self.client.post(url)
refund.refresh_from_db()
self.assertEqual(refund.is_cancelled, False)


class PendindSponsoringTest(TestCase, CustomAssertMethods):

def setUp(self):
create_organizer_set(auto_create_user_set=True)
self.user = User.objects.first()
create_event_set(self.user)
associate_events_organizers()
self.invoice = create_sponsoring_invoice(auto_create_sponsoring_and_sponsor=True)
create_invoice_affect_set(self.invoice, total_amount=False)
self.invoice.invoice_ok = True
self.invoice.partial_payment = True
self.invoice.save()

def test_pending_sponsoring_method(self):
sponsoring = Sponsoring.objects.first()
sponsoring_namedtuple = pending_sponsoring(sponsoring)
self.assertIsInstance(sponsoring_namedtuple, PendingSponsoring)

def test_calculate_all_sponsoring_pending(self):
sponsoring = calculate_sponsoring_pending()
self.assertEqual(len(sponsoring), 1)

def test_calculate_all_sponsoring_pending_by_organizer(self):
user = User.objects.get(username="organizer01")
sponsoring = calculate_sponsoring_pending(user)
self.assertEqual(len(sponsoring), 1)
user = User.objects.get(username="organizer03")
sponsoring = calculate_sponsoring_pending(user)
self.assertEqual(len(sponsoring), 0)
11 changes: 10 additions & 1 deletion website/events/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,20 +71,29 @@
SponsorCategory,
Sponsoring
)
from events.helpers.sponsoring_pending import (
calculate_sponsoring_pending,
)
from pyar_auth.forms import PasswordResetForm


@login_required()
def events_home(request):
user = request.user
tasks = []
sponsoring_pending = []
if Organizer.objects.filter(user=user).exists():
tasks = calculate_organizer_task(user)
sponsoring_pending = calculate_sponsoring_pending(user)
else:
if user.is_superuser:
tasks = calculate_super_user_task()
sponsoring_pending = calculate_sponsoring_pending()

return render(request, 'events_home.html', {'tasks': tasks})
return render(request, 'events_home.html', {
'tasks': tasks,
'sponsoring_pending': sponsoring_pending,
})


@permission_required('events.add_organizer')
Expand Down

0 comments on commit aed1c09

Please sign in to comment.