diff --git a/website/events/helpers/sponsoring_pending.py b/website/events/helpers/sponsoring_pending.py
new file mode 100644
index 0000000..6ecb1b7
--- /dev/null
+++ b/website/events/helpers/sponsoring_pending.py
@@ -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)
diff --git a/website/events/templates/events_home.html b/website/events/templates/events_home.html
index 8c1de0a..2a47030 100644
--- a/website/events/templates/events_home.html
+++ b/website/events/templates/events_home.html
@@ -90,6 +90,32 @@
{% endif %}
+
+
+
Tareas {{tasks|length}}
diff --git a/website/events/tests.py b/website/events/tests.py
index 632f2c7..f077604 100644
--- a/website/events/tests.py
+++ b/website/events/tests.py
@@ -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,
@@ -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)
diff --git a/website/events/views.py b/website/events/views.py
index a1a4a76..ae7eaee 100644
--- a/website/events/views.py
+++ b/website/events/views.py
@@ -71,6 +71,9 @@
SponsorCategory,
Sponsoring
)
+from events.helpers.sponsoring_pending import (
+ calculate_sponsoring_pending,
+)
from pyar_auth.forms import PasswordResetForm
@@ -78,13 +81,19 @@
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')