diff --git a/jdav_web/members/locale/de/LC_MESSAGES/django.po b/jdav_web/members/locale/de/LC_MESSAGES/django.po
index 108b36f..5ec8724 100644
--- a/jdav_web/members/locale/de/LC_MESSAGES/django.po
+++ b/jdav_web/members/locale/de/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-04-11 00:56+0200\n"
+"POT-Creation-Date: 2025-04-11 18:02+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -1411,6 +1411,18 @@ msgstr ""
"Um den zu erhalten, musst du den LJP-Antrag innerhalb von 3 Wochen nach der "
"Ausfahrt beim Jugendreferat einreichen und formal genehmigt bekommen."
+#: members/templates/admin/freizeit_finance_overview.html
+msgid "Seminar hours"
+msgstr "Seminar-Stunden"
+
+#: members/templates/admin/freizeit_finance_overview.html
+msgid "Seminar days"
+msgstr "Seminar-Tage"
+
+#: members/templates/admin/freizeit_finance_overview.html
+msgid "Sum"
+msgstr "Summe"
+
#: members/templates/admin/freizeit_finance_overview.html
msgid "The LJP contributions are configured to be paid to:"
msgstr "Die LJP-Zuschüsse werden ausgezahlt an:"
diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py
index aedcf49..a8b7bfb 100644
--- a/jdav_web/members/models.py
+++ b/jdav_web/members/models.py
@@ -8,7 +8,7 @@ import csv
from django.db import models
from django.db.models import TextField, ManyToManyField, ForeignKey, Count,\
Sum, Case, Q, F, When, Value, IntegerField, Subquery, OuterRef
-from django.db.models.functions import TruncDate
+from django.db.models.functions import Cast
from django.utils.translation import gettext_lazy as _
from django.utils import timezone
from django.utils.html import format_html
@@ -1293,20 +1293,37 @@ class Freizeit(CommonModel):
"""calculate seminar days based on intervention hours in every day"""
# TODO: add tests for this
if hasattr(self, 'ljpproposal'):
- hours_per_day = (
- self.ljpproposal.intervention_set
- .annotate(day=TruncDate('date_start')) # Extract the date (without time)
- .values('day') # Group by day
- .annotate(total_duration=Sum('duration')) # Sum durations for each day
- .order_by('day') # Sort results by date
- )
+ hours_per_day = self.seminar_time_per_day
# Calculate the total number of seminar days
# Each day is counted as 1 if total_duration is >= 5 hours, as 0.5 if total_duration is >= 2.5
# otherwise 0
- return sum([min(math.floor(h['total_duration']/cvt_to_decimal(2.5))/2, 1) for h in hours_per_day])
+ sum_days = sum([h['sum_days'] for h in hours_per_day])
+ print(hours_per_day)
+ print(sum_days)
+ return sum_days
else:
return 0
+
+ @property
+ def seminar_time_per_day(self):
+ if hasattr(self, 'ljpproposal'):
+ return (
+ self.ljpproposal.intervention_set
+ .annotate(day=Cast('date_start', output_field=models.DateField())) # Force it to date
+ .values('day') # Group by day
+ .annotate(total_duration=Sum('duration'))# Sum durations for each day
+ .annotate(
+ sum_days=Case(
+ When(total_duration__gt=5.0, then=Value(1.0)),
+ When(total_duration__gt=2.5, then=Value(0.5)),
+ default=Value(0.0),)
+ )
+ .order_by('day') # Sort results by date
+ )
+ else:
+ return []
+
@property
def ljp_duration(self):
"""calculate the duration in days for the LJP"""
diff --git a/jdav_web/members/templates/admin/freizeit_finance_overview.html b/jdav_web/members/templates/admin/freizeit_finance_overview.html
index aecc588..875b743 100644
--- a/jdav_web/members/templates/admin/freizeit_finance_overview.html
+++ b/jdav_web/members/templates/admin/freizeit_finance_overview.html
@@ -141,6 +141,26 @@ This results in a total contribution of {{ ljp_contributions }}€.
To receive them, you need to submit the LJP-Proposal within 3 weeks after your excursion and have it approved by the finance office.{% endblocktrans %}
+
+
+ |
+ {% trans "Seminar hours" %} |
+ {% trans "Seminar days" %} |
+
+{% for day in memberlist.seminar_time_per_day %}
+
+ | {{ day.day }} |
+ {{ day.total_duration }} |
+ {{ day.sum_days }} |
+
+ {% endfor %}
+
+ | {% trans "Sum" %} |
+ |
+ {{ total_seminar_days }} |
+
+
+
{% blocktrans %}The LJP contributions are configured to be paid to:{% endblocktrans %}