From 125bea954c48d083cdfde0d82bec4b5c544e4693 Mon Sep 17 00:00:00 2001 From: Matthias Nagel Date: Thu, 2 Oct 2025 12:50:47 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Implementierung=20der=20'Spiel=20=C3=B6?= =?UTF-8?q?ffnen'-Funktionalit=C3=A4t=20und=20erweiterte=20Dashboard-Anzei?= =?UTF-8?q?ge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/__pycache__/views.cpython-313.pyc | Bin 4435 -> 4769 bytes dashboard/templates/dashboard/dashboard.html | 18 ++- dashboard/views.py | 10 +- db.sqlite3 | Bin 303104 -> 303104 bytes docs/traceback/trace8.log | 118 +++++++++++++++++++ templates/base.html | 3 +- 6 files changed, 146 insertions(+), 3 deletions(-) create mode 100644 docs/traceback/trace8.log diff --git a/dashboard/__pycache__/views.cpython-313.pyc b/dashboard/__pycache__/views.cpython-313.pyc index d9b5c1830b3499ecc61edd44fa27f854d8ad60f6..572cd02ea36a88e9193f3fbbcf81a701dde6edb0 100644 GIT binary patch delta 1248 zcmZuxO>7%Q6n?Y2wv+hZn|Qt1b#3RTByDi46qBY6Aq^?9s{U!W1A<6c3wDT6x;C>3 zP$8ruE=WjKVT1%Her_CEQB{Hy7fzh2T9N9?l1sUP)I*|FLgK{RBr8{KM%wrHeKT*~ zo0;7l`e8J(6At$Q4)wJMtL5;Qkv4gF>z`R73RZ-V33ny4uPE}neoYP*iOU19gET0^ z5-EMb$HZ4ih_8vioLCn3KmZyt{Y7EV8`}?BB{yyy_BdT_Oz?u356Mu<;>rmcrwP6# z781_~(2buP0tiADXxz~FP2V8TN`Z0N5enc4IAstyGL?;dcRkO-Xn|jp(pEn*;>bOQ z+yUBepniJL0po?IV*qB@tHMswm@)k+{qrtr|^ z8DRsD-A>zwsCr<#LNsmm^S1(udQdY{R5b_qwSa0q(YS67&l-Z_zG)`&qMcb@@(>E9 zLNmqvi#UQ;B#WOdufTYU{}=d#BzdMMdHaK&R|!%0Z@up&Spw&d3vFq`sWO(?by$X9 z?0cV#@ZbAdOR;*RYF8`el{zc0SFOuVJK$2wwF*;^-4@@iuD69+rR}#G$gD6KqpZgj zM_pX1SXUf2!tVsrB+DNKt>bQzcBEmk_1ZhNhP7U++YZaR6LPM=`ws1po2uMcv#wN` z!`#=&RDLz21P{5Uo0tvrA498B7EK-x>pUBlG={GM+PxLaS$(^1u?jQL$5#Z-r@R#I z9Nq#b3m*zQ0Ev%;e^H(iw|6B13*vdv1ulquF|vB;u^(c}^^I>C!6}od-_Y)7w->G{yg&Q#I1?e)IxJ=VRLG+IlTDQ*=-Thb6bAU$68vU zsTDT0sn5^;#cxEu4opH)e>_iam!f&%`=d8^;VAz&_Sx(1PJaU209LkJMbGTzdSzp+ wI>+9`nET&xj-c2Q2_YRA?!e5S@L~tj9mqW-(QV;0A@gKM1R=I>vp10bKN7L$S^xk5 delta 1099 zcmZ`&&rcIU6rPzaEzs=`wxwI>Pe2R>Qc+SPq!J7F2JYt)lC< zXDf!$iM2!=#33BUF*TU)YFAu@%cHHDCBap}Pz||zA3F>#Lfs1hhRU4F0)XE2PWa?A zz=~s;zVNCES@E<{ccq4Bpfy0p(KM9lAMcSE4;*8H=hkgBq;0R?v}(NsA4!?y~acg zBC#mx=4OK99z)->$q0QbreKEdiuyE{bb>XV)GI5MnqIF|Et_O`LYA8$4vTyjT5Vn5 zG>J{(v=)&4DUR}*WSBk-ls!C!!eA8~`BQ zL_e8bL;Fqp9e^^bBMvkWEr!bQ3;h*(?9G5!^2gN9qi`N}y~_+;f%JXf{ZTHr4H%gf oZ{{ item.event.title }} {{ item.event.start_time|localize }} +

Team: {{ item.event.team.name }}

{% if item.event.game %}

Opponent: {{ item.event.game.opponent }}

+ {% if item.event.game.opened_for_teams.all %} +

Supporter Teams: + {% for team in item.event.game.opened_for_teams.all %} + {{ team.name }}{% if not forloop.last %}, {% endif %} + {% endfor %} +

+ {% endif %} {% endif %}

{{ item.event.description }}

Location: {{ item.event.location_address }} @@ -50,6 +58,7 @@
    {% for p in item.player_participations %} + {% if not p.player.team in item.event.game.opened_for_teams.all or p.status != 'maybe' %}
  • {{ p.player.first_name }} {{ p.player.last_name }}
  • + "> + {{ 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 %} + + {% endif %} {% endfor %}
@@ -92,6 +107,7 @@
{{ item.event.title }}
{{ item.event.start_time|localize }} +

Team: {{ item.event.team.name }}

{% if item.event.game %}

Opponent: {{ item.event.game.opponent }}

{% endif %} diff --git a/dashboard/views.py b/dashboard/views.py index 2ed8004..95a08c4 100644 --- a/dashboard/views.py +++ b/dashboard/views.py @@ -22,7 +22,7 @@ def dashboard(request): if all_teams: user_events = Event.objects.filter(team__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: participations = event.eventparticipation_set.all() @@ -31,6 +31,14 @@ def dashboard(request): player_participations = [] 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} for player in team_players: diff --git a/db.sqlite3 b/db.sqlite3 index 94aeee36883dc4750109f2cc23fe5a0f1eb559d0..bdf6883157800c58bf553fca1dd8f1930f4f7f19 100644 GIT binary patch delta 1291 zcma)4Z)h837=QoV-E!Bv_vz~T2iua{v_o-eE|;W9>(rJ~6y|Vqn-rbsB|U2)OGA6$%c9AG%p=hZDL@bh0X}tyrg4&?iY->Oe3DdG6l# z_x%1m?>jVEGc;K<+DMO$HFeWtAHDpZ|G~Ei2#di5xCJ9{PRxr>VK-cbAiNC*91@l| zBK8(SrY0o6!Mn%z2Dgl#Z}lnc0pPo+H~G5cSGXy75A{Yp-XtqxmY8E*O>(2cAEjP; zAFZd__-yNFvkD&BL3GJ)V50K{I*@W`7f&0wykq zya*US8fT1Nbg5(;Vvv;$G0$py_XUF z@hY0D-i)7Hx}+}>*e(tlXZ1x)ep5d<+$L)zS|1K~4+rV~!Boo4nSI%Td>-q*%z&Fp zIryw+ZZku%j!3M-vNkToD@%I@b8gzr=JMHAGh{_}cw<4{)6m*tTlm#tcjL>mZoiw( zB@So%dGTz3zrcJ9CJ0=I33PiNwwX+!VOmS&-Csb&oE=Z32J7uW$!$Bk4D5Ban-CKIB`>n)itUCkb4H z1(<_R;3S+bY|Uh#vs#vkpHc^-r~3xd{jyrE+_U0?t3=>EU;XKlOzJ5;AUPJ|3YHl@Htp!hw0TDfD zO2HKrl6nvV0g=V7&`S=vmJ&>ge=w~F3!#uyt2UZK9NSaz`riA^dmoc5bS4X(X+NEq z=^3IEuSZ@4j#LQbu!aSEMGARYlW%bj%jm~*2way><&+$@2M0pZbr|fdVHF8QoIhsD8!y+AokbNfWqhq7v@x-;!o42mU zr{al8Zm0TF16{fqAqdG!VoRjOar3+R#EjU3LBDB7#!HOrm?O65#zV}+V9!mDWxEZL zA!^`boPj16g`+G_L7}%oAC`9Y+q(+j2JM?Q`-c=*7F;1{Mjnv5sHr z+6}DW1KwfL_9bmt8({o?X^A?eB`p%|(oy~wUBwo@sqjaXvHs=|FTi>qU?C3^If7n! zMdVcRGvVaI?6T&js1j7wdu3SFldRX_S*-=9eV(~u9)>!>AN)XF1y*+oUC!n!hM>7j z7>Wc%H1JuO^RS95EUJhaQSHA`Q{pFBwFdJmu|e... + 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 + diff --git a/templates/base.html b/templates/base.html index 140cc5d..121de5b 100644 --- a/templates/base.html +++ b/templates/base.html @@ -15,7 +15,8 @@ border-left: 5px solid #6c757d; /* gray */ } .support-game { - border: 2px solid #ffc107; /* yellow */ + background-color: #fff3cd; /* light yellow background */ + border-color: #ffc107; /* yellow border */ }