[chronojump-server] Added group table for player in players page



commit 58c2c79306bcb392a5ffa458a7c45f903db90371
Author: Max Ros i Morejon <mros33 gmail com>
Date:   Mon Jul 8 11:04:39 2019 +0200

    Added group table for player in players page

 .../organizations/api/serializers.py               | 21 ++++---
 .../chronojump_networks/organizations/api/urls.py  |  5 ++
 .../chronojump_networks/organizations/api/views.py | 16 ++++++
 .../organizations/groups/group_players_list.html   |  5 +-
 .../organizations/players/players_list.html        | 66 +++++++++++++++++++++-
 5 files changed, 101 insertions(+), 12 deletions(-)
---
diff --git a/chronojumpserver-django/chronojump_networks/organizations/api/serializers.py 
b/chronojumpserver-django/chronojump_networks/organizations/api/serializers.py
index f2711bc..81d57b5 100644
--- a/chronojumpserver-django/chronojump_networks/organizations/api/serializers.py
+++ b/chronojumpserver-django/chronojump_networks/organizations/api/serializers.py
@@ -1,6 +1,6 @@
 from rest_framework import serializers
 
-from ..models import Player, Station, Exercise, Gym, Group, User
+from ..models import Player, Station, Exercise, Gym, Group, User, GroupPlayer
 
 from chronojump_networks.tasks.api.serializers import PlayerTaskSerializer
 
@@ -8,12 +8,6 @@ class UserSerializer(serializers.ModelSerializer):
     class Meta:
         model = User
         fields = [ 'id', 'name']
-
-class PlayerSerializer(serializers.ModelSerializer):
-    player_tasks = PlayerTaskSerializer(many=True)
-    class Meta:
-        model = Player
-        fields = [ 'id', 'name', 'number', 'height', 'weight', 'imageName', 'player_tasks', 'rfid']
         
 class GymTableSerializer(serializers.ModelSerializer):
     responsible = UserSerializer(many=False)
@@ -33,6 +27,19 @@ class GroupTableSerializer(serializers.ModelSerializer):
         model = Group
         fields = [ 'id', 'name', 'gym', 'responsible' ]
         
+class GroupPlayerSerializer(serializers.ModelSerializer):
+    group = GroupTableSerializer(many=False)
+    class Meta:
+        model = GroupPlayer
+        fields = [ 'id', 'player', 'group' ]
+        
+class PlayerSerializer(serializers.ModelSerializer):
+    player_tasks = PlayerTaskSerializer(many=True)
+    groups = GroupPlayerSerializer(many=True)
+    class Meta:
+        model = Player
+        fields = [ 'id', 'name', 'number', 'height', 'weight', 'imageName', 'player_tasks', 'rfid', 'groups']
+        
 class StationSerializer(serializers.ModelSerializer):
     class Meta:
         model = Station
diff --git a/chronojumpserver-django/chronojump_networks/organizations/api/urls.py 
b/chronojumpserver-django/chronojump_networks/organizations/api/urls.py
index 72087bc..4555e7e 100644
--- a/chronojumpserver-django/chronojump_networks/organizations/api/urls.py
+++ b/chronojumpserver-django/chronojump_networks/organizations/api/urls.py
@@ -61,6 +61,11 @@ urlpatterns = [
         view=views.GymStationsListView.as_view(),
         name='gym_stations'
     ),
+    url(
+        regex=r'^(?P<organization_id>\d+)/(?P<player_id>\d+)/groups/$',
+        view=views.PlayerGroupsListView.as_view(),
+        name='player_groups'
+    ),
     url(
         regex=r'^register_rfid/$',
         view=views.register_rfid,
diff --git a/chronojumpserver-django/chronojump_networks/organizations/api/views.py 
b/chronojumpserver-django/chronojump_networks/organizations/api/views.py
index 5da3ffc..a5bc704 100644
--- a/chronojumpserver-django/chronojump_networks/organizations/api/views.py
+++ b/chronojumpserver-django/chronojump_networks/organizations/api/views.py
@@ -285,6 +285,22 @@ class GymListView(ListCreateAPIView):
             setattr(gym, 'responsible_name', resp_n[0])
         return gyms
 
+class PlayerGroupsListView(ListCreateAPIView):
+    """Groups of the player"""
+    permission_classes = (IsAuthenticated, )
+    serializer_class = GroupTableSerializer
+
+    def get_queryset(self):
+        organization_id = int(self.kwargs['organization_id'])
+        player_id = int(self.kwargs['player_id'])
+        player = Player.objects.filter(id=player_id)
+        groups_id = [g.id for g in player.groups.all()]
+        groups = Group.objects.filter(id__in = groups_id)
+        for group in groups:
+            resp = User.objects.filter(id__exact = group.responsible.id)
+            resp_n = [r.name for r in resp]
+            setattr(group, 'responsible_name', resp_n[0])
+        return groups
 
 def register_rfid(request):
     """Call an external program to read rfid and return the value read."""
diff --git 
a/chronojumpserver-django/chronojump_networks/templates/organizations/groups/group_players_list.html 
b/chronojumpserver-django/chronojump_networks/templates/organizations/groups/group_players_list.html
index 28d35de..5457e41 100644
--- a/chronojumpserver-django/chronojump_networks/templates/organizations/groups/group_players_list.html
+++ b/chronojumpserver-django/chronojump_networks/templates/organizations/groups/group_players_list.html
@@ -303,6 +303,7 @@
             '</tr>'+
         '</table>';*/
     }
+    
     // Add event listener for opening and closing details
     $('#players tbody').on('click', 'td.details-control', function () {
         var tr = $(this).closest('tr');
@@ -414,8 +415,8 @@
           title: "{% trans 'Number' %}"
         },
         {
-          data: "name",
-                       title: "{% trans 'Player name' %}",
+          "data": "name",
+          title: "{% trans 'Player name' %}",
         }
       ],
       "order": [ 
diff --git a/chronojumpserver-django/chronojump_networks/templates/organizations/players/players_list.html 
b/chronojumpserver-django/chronojump_networks/templates/organizations/players/players_list.html
index f9e353b..c67599f 100644
--- a/chronojumpserver-django/chronojump_networks/templates/organizations/players/players_list.html
+++ b/chronojumpserver-django/chronojump_networks/templates/organizations/players/players_list.html
@@ -109,6 +109,13 @@
           "data": "weight",
           title: "{% trans 'Weight' %}"
         },
+        { /* Column to show the groups */
+            "className":      'details-control',
+            "orderable":      false,
+            "data":           null,
+            "defaultContent": '',
+            title: "Player groups",
+        },
         {% if user.groups_resp %}
             {
             "type": "html",
@@ -124,7 +131,7 @@
                 html += '<i class="material-icons" style="margin-top:3px;font-size:16px;">edit</i></button>';
                 return html;
             }
-            }
+            },
         {% endif %}
       ],
       "dom": "<'row'<'col-sm-6'B><'col-sm-6'f>>rtip",
@@ -180,6 +187,60 @@
       }
     });
     
+    
+    /* Task child rows */
+    function format ( d ) {
+        var player_id = d.id
+        console.log(player_id);
+        console.log(d);
+//         $.ajax({
+//             'url': " url 'api_organizations:player_groups' organization_id=user.organization.id 
player_id=player_id ",
+//             'method': 'GET',
+//             success:function(data) {
+//                 if(data) {
+        if(d.groups.length > 0) {
+            var html = '<table cellpadding="5" cellspacing="10" style="margin-left:50px;">';
+            html += "<thead><th></th><th>{% trans 'Group name' %}<th>{% trans 'Responsible' %}</th><th></th>"
+            $.each(d.groups, function(index, group) {
+                //data.group
+                console.log(group);
+                html += '<tbody align="center"><tr>';
+                html += '<td>' + (index + 1) + '</td>';
+                html += '<td>' + group.group.name + '</td>';
+                html += '<td>' + group.group.responsible.name + '</td>';
+                html += '<td>';
+                html += '&nbsp;';
+                html += '</td></tr>';
+            });
+            html += "</tbody></table>";
+            return html;
+        } else {
+            return '<h6 class="text-center font-weight-bold font-italic">' + "{% trans 'Player has not 
groups' %}" +'</h6>';
+        }
+//             },
+//             error: function(request, status, error) {
+//                 alert(request.responseText);
+//             }
+//         });
+    }
+    
+    // Add event listener for opening and closing details
+    $('#players tbody').on('click', 'td.details-control', function () {
+        var tr = $(this).closest('tr');
+        var row = table_players.row( tr );
+
+        if ( row.child.isShown() ) {
+            // This row is already open - close it
+            row.child.hide();
+            tr.removeClass('shown');
+        }
+        else {
+            // Open this row
+            row.child( format(row.data()) ).show();
+            tr.addClass('shown');
+        }
+    } );
+    
     /* Buttons operation */
     function removePlayersFromGroup(player_ids) {
         console.log("gonna remova player");
@@ -207,11 +268,10 @@
       // Enanble checkboxes
       $('.removePlayerBtn').removeClass('disabled').addClass('disabled');
       enableCheckboxSelection('selectPlayerCheckbox', 'removePlayerBtn');
-      
+            
       $('.editPlayerBtn').on('click', function(){
         image_changed = "False";
         var player = table_players.row($(this).parents('tr')).data();
-
         // Set the title for new player task
         var title = "{% trans 'Edit player '%}" + player.name;
         $('#playerModalTitle').text(title);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]