feat: Implementierung der 'Spiel öffnen'-Funktionalität und erweiterte Dashboard-Anzeige
This commit is contained in:
parent
0d5357793e
commit
125bea954c
Binary file not shown.
@ -31,8 +31,16 @@
|
|||||||
<h5 class="mb-1">{{ item.event.title }}</h5>
|
<h5 class="mb-1">{{ item.event.title }}</h5>
|
||||||
<small>{{ item.event.start_time|localize }}</small>
|
<small>{{ item.event.start_time|localize }}</small>
|
||||||
</div>
|
</div>
|
||||||
|
<p class="mb-1"><strong>Team:</strong> {{ item.event.team.name }}</p>
|
||||||
{% if item.event.game %}
|
{% if item.event.game %}
|
||||||
<p class="mb-1"><strong>Opponent:</strong> {{ item.event.game.opponent }}</p>
|
<p class="mb-1"><strong>Opponent:</strong> {{ item.event.game.opponent }}</p>
|
||||||
|
{% if item.event.game.opened_for_teams.all %}
|
||||||
|
<p class="mb-1"><strong>Supporter Teams:</strong>
|
||||||
|
{% for team in item.event.game.opened_for_teams.all %}
|
||||||
|
{{ team.name }}{% if not forloop.last %}, {% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<p class="mb-1">{{ item.event.description }}</p>
|
<p class="mb-1">{{ item.event.description }}</p>
|
||||||
<small>Location: {{ item.event.location_address }}</small>
|
<small>Location: {{ item.event.location_address }}</small>
|
||||||
@ -50,6 +58,7 @@
|
|||||||
<div style="column-count: 3;">
|
<div style="column-count: 3;">
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
{% for p in item.player_participations %}
|
{% for p in item.player_participations %}
|
||||||
|
{% if not p.player.team in item.event.game.opened_for_teams.all or p.status != 'maybe' %}
|
||||||
<li class="
|
<li class="
|
||||||
{% if p.status == 'attending' %}
|
{% if p.status == 'attending' %}
|
||||||
text-success
|
text-success
|
||||||
@ -58,7 +67,13 @@
|
|||||||
{% else %} {# status is 'maybe' #}
|
{% else %} {# status is 'maybe' #}
|
||||||
text-warning
|
text-warning
|
||||||
{% endif %}
|
{% endif %}
|
||||||
">{{ p.player.first_name }} {{ p.player.last_name }}</li>
|
">
|
||||||
|
{{ p.player.first_name }} {{ p.player.last_name }}
|
||||||
|
{% if p.player.team in item.event.game.opened_for_teams.all and p.status != 'maybe' %}
|
||||||
|
*
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -92,6 +107,7 @@
|
|||||||
<h5 class="mb-1">{{ item.event.title }}</h5>
|
<h5 class="mb-1">{{ item.event.title }}</h5>
|
||||||
<small>{{ item.event.start_time|localize }}</small>
|
<small>{{ item.event.start_time|localize }}</small>
|
||||||
</div>
|
</div>
|
||||||
|
<p class="mb-1"><strong>Team:</strong> {{ item.event.team.name }}</p>
|
||||||
{% if item.event.game %}
|
{% if item.event.game %}
|
||||||
<p class="mb-1"><strong>Opponent:</strong> {{ item.event.game.opponent }}</p>
|
<p class="mb-1"><strong>Opponent:</strong> {{ item.event.game.opponent }}</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@ -22,7 +22,7 @@ def dashboard(request):
|
|||||||
if all_teams:
|
if all_teams:
|
||||||
user_events = Event.objects.filter(team__in=all_teams)
|
user_events = Event.objects.filter(team__in=all_teams)
|
||||||
opened_games = Event.objects.filter(game__opened_for_teams__in=all_teams)
|
opened_games = Event.objects.filter(game__opened_for_teams__in=all_teams)
|
||||||
events = (user_events | opened_games).distinct().select_related('game', 'training').prefetch_related('team__players', 'eventparticipation_set__user').order_by('start_time')
|
events = (user_events | opened_games).distinct().select_related('game', 'training').prefetch_related('team__players', 'eventparticipation_set__user', 'game__opened_for_teams').order_by('start_time')
|
||||||
|
|
||||||
for event in events:
|
for event in events:
|
||||||
participations = event.eventparticipation_set.all()
|
participations = event.eventparticipation_set.all()
|
||||||
@ -31,6 +31,14 @@ def dashboard(request):
|
|||||||
|
|
||||||
player_participations = []
|
player_participations = []
|
||||||
team_players = event.team.players.all()
|
team_players = event.team.players.all()
|
||||||
|
|
||||||
|
# Add players from opened teams
|
||||||
|
if hasattr(event, 'game'):
|
||||||
|
for team in event.game.opened_for_teams.all():
|
||||||
|
team_players = team_players | team.players.all()
|
||||||
|
|
||||||
|
team_players = team_players.distinct()
|
||||||
|
|
||||||
participation_map = {p.user_id: p.status for p in participations}
|
participation_map = {p.user_id: p.status for p in participations}
|
||||||
|
|
||||||
for player in team_players:
|
for player in team_players:
|
||||||
|
|||||||
BIN
db.sqlite3
BIN
db.sqlite3
Binary file not shown.
118
docs/traceback/trace8.log
Normal file
118
docs/traceback/trace8.log
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
Internal Server Error: /
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/smartif.py", line 180, in translate_token
|
||||||
|
op = OPERATORS[token]
|
||||||
|
~~~~~~~~~^^^^^^^
|
||||||
|
KeyError: '(p.player.team'
|
||||||
|
|
||||||
|
During handling of the above exception, another exception occurred:
|
||||||
|
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/core/handlers/exception.py", line 55, in inner
|
||||||
|
response = get_response(request)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/core/handlers/base.py", line 197, in _get_response
|
||||||
|
response = wrapped_callback(request, *callback_args, **callback_kwargs)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/contrib/auth/decorators.py", line 59, in _view_wrapper
|
||||||
|
return view_func(request, *args, **kwargs)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/dashboard/views.py", line 77, in dashboard
|
||||||
|
return render(request, 'dashboard/dashboard.html', context)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/shortcuts.py", line 25, in render
|
||||||
|
content = loader.render_to_string(template_name, context, request, using=using)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/loader.py", line 61, in render_to_string
|
||||||
|
template = get_template(template_name, using=using)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/loader.py", line 15, in get_template
|
||||||
|
return engine.get_template(template_name)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/backends/django.py", line 79, in get_template
|
||||||
|
return Template(self.engine.get_template(template_name), self)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/engine.py", line 177, in get_template
|
||||||
|
template, origin = self.find_template(template_name)
|
||||||
|
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/engine.py", line 159, in find_template
|
||||||
|
template = loader.get_template(name, skip=skip)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/loaders/cached.py", line 57, in get_template
|
||||||
|
template = super().get_template(template_name, skip)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/loaders/base.py", line 28, in get_template
|
||||||
|
return Template(
|
||||||
|
contents,
|
||||||
|
...<2 lines>...
|
||||||
|
self.engine,
|
||||||
|
)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 154, in __init__
|
||||||
|
self.nodelist = self.compile_nodelist()
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~^^
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 196, in compile_nodelist
|
||||||
|
nodelist = parser.parse()
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 518, in parse
|
||||||
|
raise self.error(token, e)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 516, in parse
|
||||||
|
compiled_result = compile_func(self, token)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/loader_tags.py", line 299, in do_extends
|
||||||
|
nodelist = parser.parse()
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 518, in parse
|
||||||
|
raise self.error(token, e)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 516, in parse
|
||||||
|
compiled_result = compile_func(self, token)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/loader_tags.py", line 234, in do_block
|
||||||
|
nodelist = parser.parse(("endblock",))
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 518, in parse
|
||||||
|
raise self.error(token, e)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 516, in parse
|
||||||
|
compiled_result = compile_func(self, token)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/defaulttags.py", line 962, in do_if
|
||||||
|
nodelist = parser.parse(("elif", "else", "endif"))
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 518, in parse
|
||||||
|
raise self.error(token, e)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 516, in parse
|
||||||
|
compiled_result = compile_func(self, token)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/defaulttags.py", line 862, in do_for
|
||||||
|
nodelist_loop = parser.parse(
|
||||||
|
(
|
||||||
|
...<2 lines>...
|
||||||
|
)
|
||||||
|
)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 518, in parse
|
||||||
|
raise self.error(token, e)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 516, in parse
|
||||||
|
compiled_result = compile_func(self, token)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/defaulttags.py", line 962, in do_if
|
||||||
|
nodelist = parser.parse(("elif", "else", "endif"))
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 518, in parse
|
||||||
|
raise self.error(token, e)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 516, in parse
|
||||||
|
compiled_result = compile_func(self, token)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/defaulttags.py", line 862, in do_for
|
||||||
|
nodelist_loop = parser.parse(
|
||||||
|
(
|
||||||
|
...<2 lines>...
|
||||||
|
)
|
||||||
|
)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 518, in parse
|
||||||
|
raise self.error(token, e)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 516, in parse
|
||||||
|
compiled_result = compile_func(self, token)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/defaulttags.py", line 961, in do_if
|
||||||
|
condition = TemplateIfParser(parser, bits).parse()
|
||||||
|
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/defaulttags.py", line 894, in __init__
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/smartif.py", line 171, in __init__
|
||||||
|
mapped_tokens.append(self.translate_token(token))
|
||||||
|
~~~~~~~~~~~~~~~~~~~~^^^^^^^
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/smartif.py", line 182, in translate_token
|
||||||
|
return self.create_var(token)
|
||||||
|
~~~~~~~~~~~~~~~^^^^^^^
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/defaulttags.py", line 897, in create_var
|
||||||
|
return TemplateLiteral(self.template_parser.compile_filter(value), value)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 609, in compile_filter
|
||||||
|
return FilterExpression(token, self)
|
||||||
|
File "/home/mnagel/Projekte/baseball_organisator/venv/lib64/python3.13/site-packages/django/template/base.py", line 710, in __init__
|
||||||
|
raise TemplateSyntaxError(
|
||||||
|
...<2 lines>...
|
||||||
|
)
|
||||||
|
django.template.exceptions.TemplateSyntaxError: Could not parse the remainder: '(p.player.team' from '(p.player.team'
|
||||||
|
[02/Oct/2025 10:39:16] "GET / HTTP/1.1" 500 431175
|
||||||
|
|
||||||
@ -15,7 +15,8 @@
|
|||||||
border-left: 5px solid #6c757d; /* gray */
|
border-left: 5px solid #6c757d; /* gray */
|
||||||
}
|
}
|
||||||
.support-game {
|
.support-game {
|
||||||
border: 2px solid #ffc107; /* yellow */
|
background-color: #fff3cd; /* light yellow background */
|
||||||
|
border-color: #ffc107; /* yellow border */
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user