]> git.localhorst.tv Git - alttp.git/commitdiff
fix group self assignment
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Fri, 21 Nov 2025 16:36:50 +0000 (17:36 +0100)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Fri, 21 Nov 2025 16:36:50 +0000 (17:36 +0100)
app/Http/Controllers/TournamentController.php
app/Models/GroupAssignment.php
app/Models/Tournament.php
resources/js/components/protocol/Item.jsx
resources/js/helpers/Tournament.js
resources/js/i18n/de.js
resources/js/i18n/en.js

index 2f88af748c8b96019c931e4674b4d6b3259dbaef..d0641e6a2fb84459be597a2d0bc7fdbbb8a9a9fa 100644 (file)
@@ -198,13 +198,13 @@ class TournamentController extends Controller
                                        'round_number' => $pick['number'],
                                        'group' => $pick['group'],
                                ]);
-                               Protocol::groupAssignment($tournament, $user, $picks, $user);
                        }
+                       Protocol::groupAssignment($tournament, $user, $picks, $user);
                }
 
                return GroupAssignment::query()
                        ->whereBelongsTo($tournament)
-                       ->whereBelongsTo($$user)
+                       ->whereBelongsTo($user)
                        ->get()
                        ->toJson();
        }
index fd12c72bf41cc59ea050b81fed301c12385d11b2..a0fdfa261c641338a1fe1129741b2ff13519f9b0 100644 (file)
@@ -14,4 +14,15 @@ class GroupAssignment extends Model {
                return $this->belongsTo(User::class);
        }
 
+       protected $casts = [
+               'user_id' => 'string',
+       ];
+
+       protected $fillable = [
+               'group',
+               'round_number',
+               'tournament_id',
+               'user_id',
+       ];
+
 }
index a317c5c9ef9909a592096d7c9b15b88134f1353d..ed3836894eb3a5a27380050d466f5eaa0a4f132b 100644 (file)
@@ -70,7 +70,7 @@ class Tournament extends Model {
        }
 
        public function pickGroup($number, User $user) {
-               $available_rounds = $this->round()->where('number', '=', $number)->get();
+               $available_rounds = $this->rounds()->where('number', '=', $number)->get();
                $assigned_groups = $this->group_assignments()->where('round_number', '=', $number)->get();
                $weights = array();
                foreach ($available_rounds as $round) {
index eb875df1b0fa4adaec8301e732c0d565e8dd52b1..29bec88344c7019bddee870b0ea721f68fdd7a3c 100644 (file)
@@ -31,6 +31,13 @@ const getEntryResultComment = entry => {
        return entry.details.result.comment;
 };
 
+const getEntryDetailsPicks = entry => {
+       if (!entry?.details?.picks?.length) {
+               return '';
+       }
+       return entry.details.picks.map(p => `${p.number}${p.group}`).join(', ');
+}
+
 const getEntryResultTime = entry => {
        if (!entry || !entry.details || !entry.details.result) return 'ERROR';
        const result = entry.details.result;
@@ -50,6 +57,15 @@ const getEntryDescription = (entry, t) => {
                                        username: getEntryDetailsUsername(entry),
                                },
                        );
+               case 'group.assign':
+                       return t(
+                               `protocol.description.${entry.type}`,
+                               {
+                                       ...entry,
+                                       picks: getEntryDetailsPicks(entry),
+                                       username: getEntryDetailsUsername(entry),
+                               },
+                       );
                case 'result.comment': {
                        const comment = getEntryResultComment(entry);
                        const number = getEntryRoundNumber(entry);
index 93657ffff3233bfa7c945ec0338ca909bd78f4cd..6b77588113420b5b6825e1d9c5253f9c144ecff1 100644 (file)
@@ -109,8 +109,8 @@ const unique = (value, index, array) => array.indexOf(value) === index;
 
 export const missingGroupAssignment = (tournament, user) => {
        if (!user) return true;
-       if (!tournament?.group_assignments?.length) return false;
        if (!tournament.rounds?.length) return false;
+       if (!tournament?.group_assignments?.length) return true;
        const gas = tournament.group_assignments;
        const rns = tournament.rounds.map(r => r.number).filter(unique);
        for (let i = 0; i < rns.length; ++i) {
index dfe73e0fc0729045ec23bfb01100a419b2b3d704..1ddeee42409720af41d81f91c023eeea458f302b 100644 (file)
@@ -563,6 +563,9 @@ export default {
                                        received: 'Anmeldung von {{username}} erhalten',
                                        rejected: 'Anmeldung von {{username}} abgelehnt',
                                },
+                               group: {
+                                       assign: 'Gruppen {{picks}} für {{username}} zugewiesen',
+                               },
                                result: {
                                        comment: 'Ergebnis von Runde {{number}} kommentiert: <1>{{comment}}</1>',
                                        report: 'Ergebnis von <1>{{time}}</1> bei Runde {{number}} eingetragen',
index abdd40ec4a88ff71b0801b53e7db85add0e1441b..c3d4268071ff7fdd93d84faf66815ebaf1b3370e 100644 (file)
@@ -563,6 +563,9 @@ export default {
                                        received: 'Application from {{username}} received',
                                        rejected: 'Application from {{username}} rejected',
                                },
+                               group: {
+                                       assign: 'Assigned groups {{picks}} for {{username}}',
+                               },
                                result: {
                                        comment: 'Result of round {{number}} commented: <1>{{comment}}</1>',
                                        report: 'Result of <1>{{time}}</1> reported for round {{number}}',