[chronojump-server] Implemented players profile image functionality and updates



commit bf9d417e0d7d8fd251d3609a5992bc153b6b539f
Author: Max Ros i Morejon <mros33 gmail com>
Date:   Sun Mar 31 23:03:56 2019 +0200

    Implemented players profile image functionality and updates

 .../chronojump_networks/organizations/api/views.py | 19 +++++++--
 .../chronojump_networks/organizations/models.py    |  8 ++--
 .../organizations/groups/group_players_list.html   |  5 ++-
 .../players/add_edit_player_form.html              | 27 ++----------
 .../organizations/players/players_list.html        | 48 +++++++++++++++-------
 .../chronojump_networks/templates/pages/index.html | 12 +++---
 6 files changed, 65 insertions(+), 54 deletions(-)
---
diff --git a/chronojumpserver-django/chronojump_networks/organizations/api/views.py 
b/chronojumpserver-django/chronojump_networks/organizations/api/views.py
index 43be9b4..73c09c8 100644
--- a/chronojumpserver-django/chronojump_networks/organizations/api/views.py
+++ b/chronojumpserver-django/chronojump_networks/organizations/api/views.py
@@ -4,6 +4,10 @@ from ..models import Player, GroupPlayer, Group, Station, Gym, Exercise, RFIDHis
 from ..decorators import check_user_organization
 from .serializers import PlayerSerializer, StationSerializer, ExerciseSerializer, GymStationsSerializer
 
+from django.core.files.storage import default_storage
+from django.core.files.base import ContentFile
+from django.conf import settings
+
 from django.http import HttpResponse, JsonResponse
 from django.shortcuts import get_object_or_404
 from rest_framework.response import Response
@@ -12,7 +16,7 @@ from rest_framework.mixins import ListModelMixin, CreateModelMixin, DestroyModel
 from rest_framework.permissions import IsAuthenticated
 
 from .permissions import IsCoachOfTheGroup
-from time import sleep
+from time import sleep, time
 
 class GroupPlayerListGenericAPIView(ListAPIView):
     permission_classes = (IsAuthenticated, IsCoachOfTheGroup)
@@ -118,29 +122,38 @@ class PlayerListView(ListCreateAPIView):
         print("crea player")
         data = dict(request.data)
         # TODO: Sure there is a better way to do this
+        photo = data['image'][0]
+        new_photo = photo.name + '_' + str(int(time()))
+        print(new_photo)
         o = Player.objects.create(
             name = str(data['name'][0]),
-            #image = str(data['image'][0]),
+            image = 'players/' + new_photo,
             number = int(data['number'][0]),
             height = float(data['height'][0]),
             weight = float(data['weight'][0]),
             rfid = str(data['rfid'][0]),
             organization_id = int(self.kwargs['organization_id'])
         )
+        full_path = os.path.join(settings.MEDIA_ROOT, 'players', new_photo)
+        path = default_storage.save(full_path, ContentFile(photo.read()))        
         s = PlayerSerializer(o)
         return Response(s.data)
     
     def put(self, request, *args, **kwars):
         print("update player view")
         data = dict(request.data)
+        photo = data['image'][0]
+        new_photo = photo.name + '_' + str(int(time()))
         o = Player.objects.get(id=int(data['id'][0]))
         o.name = str(data['name'][0])
-        #o.image = str(data['image'][0])
+        o.image = 'players/' + new_photo
         o.number = int(data['number'][0])
         o.height = float(data['height'][0])
         o.weight = float(data['weight'][0])
         o.rfid = str(data['rfid'][0])
         o.organization_id = int(self.kwargs['organization_id'])
+        full_path = os.path.join(settings.MEDIA_ROOT, 'players', new_photo)
+        path = default_storage.save(full_path, ContentFile(photo.read()))  
         o.save()
         return JsonResponse({}, status=200, safe=False)
     
diff --git a/chronojumpserver-django/chronojump_networks/organizations/models.py 
b/chronojumpserver-django/chronojump_networks/organizations/models.py
index 02150b5..88de1fd 100644
--- a/chronojumpserver-django/chronojump_networks/organizations/models.py
+++ b/chronojumpserver-django/chronojump_networks/organizations/models.py
@@ -219,7 +219,7 @@ class Player(ChronojumpBaseModel):
     height = models.FloatField(default=0)
     weight = models.FloatField(default=0)
     rfid = models.CharField(max_length=23, unique=True)
-    image = models.FileField(upload_to='players', null=True, blank=True)
+    image = models.FileField(upload_to='players', null=True, blank=True, 
default='chronojump_networks/static/images/no_image.png')
     is_available = models.BooleanField(default=True)
     number = models.IntegerField(null=True,blank=True)
 
@@ -242,11 +242,9 @@ class Group(ChronojumpBaseModel):
                                     db_column='responsibleId')
 
     gym = models.ForeignKey(Gym,
-                            on_delete=models.SET_NULL,
+                            on_delete=models.CASCADE,
                             related_name="gym_groups",
-                            db_column='gymId',
-                            blank=True,
-                            null=True)
+                            db_column='gymId')
 
 
 class GroupCoach(models.Model):
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 b350905..ce68fe3 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
@@ -496,8 +496,9 @@
     /* initials operations for task */
     function newTaskInitialOperations(player_id) {
       // Load station from assigned gym to group
-
-      console.log("initial gym is " + "{{ group.gym.name}}");
+      console.log("nom grup -{{ group.name}}-");
+      console.log("nom gym -{{ group.gym}}-");      
+      console.log("initial gym is -{{ group.gym.name}}-");
       $('#numSets').val('1');
       $('#numReps').val('1');
       $('#taskLoad').val('');
diff --git 
a/chronojumpserver-django/chronojump_networks/templates/organizations/players/add_edit_player_form.html 
b/chronojumpserver-django/chronojump_networks/templates/organizations/players/add_edit_player_form.html
index 124ec6b..ad76e85 100644
--- a/chronojumpserver-django/chronojump_networks/templates/organizations/players/add_edit_player_form.html
+++ b/chronojumpserver-django/chronojump_networks/templates/organizations/players/add_edit_player_form.html
@@ -19,7 +19,9 @@
           <div class="col-sm-4">
                                                <div class="form-group col-sm-4">
                                                        <label for="photo">{% trans 'Photography' %}</label>
-                                                       <img src="..." alt="..." class="img-thumbnail">
+                                                       <p>
+                                <input id="id_image" type="file" class="" name="image" 
enctype='multipart/form-data'>
+                            </p>
                                                </div>
                                                <div class="form-group">
                                                        <label for="number">{% trans 'Number' %}</label>
@@ -71,26 +73,3 @@
        <!-- /.modal-dialog -->
 </div>
 
-
-<!--
-<script>
-
-$(document).ready(function() {
-    $('#btn_read_rfid').click(function() {
-        $.ajax({
-            'url': "{% url 'api_organizations:register_rfid' %}",
-            'method': 'GET',
-            success: function(data) {
-            console.log(data);
-            $('#input_rfid').val(data.rfid);
-            }, 
-            error: function (request, status, error) {
-                alert(request.msg);
-            }
-
-        })
-    })
-
-}) //end of document ready
-
-</script>-->
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 5827e0a..c037953 100644
--- a/chronojumpserver-django/chronojump_networks/templates/organizations/players/players_list.html
+++ b/chronojumpserver-django/chronojump_networks/templates/organizations/players/players_list.html
@@ -16,7 +16,7 @@
 
 <div class="page-header row">
   <div class="col-sm-9">
-    <!--<img src="/media/{{ user.organization.image }}" class="img-fluid float-left" width="48px" 
height="48px" style="margin-top:12px;margin-right:10px;"/>-->
+    <img src="/media/{{ user.organization.image }}" class="img-fluid float-left" width="48px" height="48px" 
style="margin-top:12px;margin-right:10px;"/>
     <h1 class="display-4">{% trans 'Players list' %}</h1>
   </div>
 
@@ -77,11 +77,11 @@
                        data: 'image',
                        orderable: false,
                        render: function(value, type, row) {
-            if (value) {
+                    if (value) {
                                        var src = value;
                                } else {
                                        // Otherwise show the no_image icon
-                                       var src = '/static/images/no_image.png';
+                                       var src = 'chronojump_networks/static/images/no_image.png';
                                }
                                var html = '<img src="' + src + '" class="img-fluid rounded" width="32px" 
height="32px"/>';
                                return html;
@@ -221,7 +221,7 @@
       $('#weight').val('');
       $('#number').val('');
       $('#input_rfid').val('');
-      //$('image').val('');
+      $('#id_image').val('');
     }
     
     $('#btn_read_rfid').click(function() {
@@ -244,8 +244,7 @@
         if($('#input_rfid').val()=="" || $('#height').val()=="" || $('#weight').val()=="" || 
$('#fullname').val()=="") alert("{% trans 'All fields must be filled' %}");
         else {
             var player = serializePlayer();
-            console.log(player.id);
-            if(player.id) {
+            if($('#personId').val()) {
                 console.log("update");
                 //update player
                 updatePlayer(player);
@@ -259,24 +258,36 @@
     
      // Get all the values in the form into json object 
     function serializePlayer() {
+        console.log("id = " + $('#personId').val());
         let player_id = $('#personId').val();
         let player_name = $('#fullname').val();
         let player_height = $('#height').val();
         let player_weight = $('#weight').val();
-//         let player_image = $('#photo').val();
         let player_number = $('#number').val();
         let player_rfid = $('#input_rfid').val();
-        var player = {
+        var formdata = new FormData();
+        jQuery.each($('#id_image')[0].files, function(i, file) {
+            formdata.append('image', file);
+            console.log(file);
+        });
+        formdata.append('id',player_id);
+        formdata.append('name',player_name);
+        formdata.append('height',player_height);
+        formdata.append('weight',player_weight);
+        formdata.append('number',player_number);
+        formdata.append('rfid',player_rfid);
+        console.log(formdata);
+        //if(player_image=='') player_image = 'chronojump_networks/static/images/no_image.png'
+        /*var player = {
             'id': player_id,
             'name': player_name,
             'height': player_height,
             'weight': player_weight,
-//             'image': player_image,
+            'image': player_image,
             'number': player_number,
             'rfid': player_rfid
-        }
-        console.log(player);
-        return player;
+        }*/
+        return formdata;
     }
     
     // Dump values from player into Modal Form
@@ -288,8 +299,11 @@
       $('#weight').val(player.weight);
       $('#number').val(player.number);
       $('#input_rfid').val(player.rfid);
-      //$('image').val('');
+      console.log(player.image);      
+      /*if(player.image.url=='chronojump_networks/static/images/no_image.png') $('#id_image').val('');
+      else $('#id_image').val(player.image.url);*/
       
+      $('#image').val(player.image);
     }
     
     function putPlayer(player) {
@@ -299,6 +313,9 @@
             'url': "{% url 'api_organizations:players_list' organization_id=user.organization.id %}",
             'method': 'POST',
             'data': player,
+            'cache': false,
+            'contentType' : false, 
+            'processData' : false,
             success: function(data) {
                 alert("{% trans 'The player has been created' %}");
                 table_players.ajax.reload(enablePlayersTableFunctionality,false);
@@ -318,6 +335,9 @@
             'url': "{% url 'api_organizations:players_list' organization_id=user.organization.id %}",
             'method': 'PUT',
             'data': player,
+            'cache': false,
+            'contentType' : false, 
+            'processData' : false,
             success: function(data) {
                 alert("{% trans 'The player has been updated' %}");
                 table_players.ajax.reload(enablePlayersTableFunctionality, false);
@@ -330,7 +350,7 @@
 
         })
     }
-
+    
   });
 </script>
 {% endblock %}
diff --git a/chronojumpserver-django/chronojump_networks/templates/pages/index.html 
b/chronojumpserver-django/chronojump_networks/templates/pages/index.html
index 87910fc..445ac10 100644
--- a/chronojumpserver-django/chronojump_networks/templates/pages/index.html
+++ b/chronojumpserver-django/chronojump_networks/templates/pages/index.html
@@ -58,9 +58,9 @@
       <div class="col-sm-6">
         <a class="btn btn-outline-dark btn-block font-weight-bold text-uppercase" href="{% url 
'results:list' %}">{% trans 'Results' %}</a>
       </div>
-      <!--<div class="col-sm-6">
+      <div class="col-sm-6">
         <a class="btn btn-outline-dark btn-block font-weight-bold text-uppercase" href="#">{% trans 
'Sprints' %}</a>
-      </div>-->
+      </div>
     </div>
     {% if user.groups_by_coach %}
     <h2 class="text-center">{% trans 'My Groups' %}</h2>
@@ -87,18 +87,18 @@
     {% if user.id == user.organization.responsible.id %}
     <h2 class="text-center">{% trans 'Organization options' %}</h2>
     <div class="row buttons" >
-        <!--<div class="col-sm-6 col-md-3">
+        <div class="col-sm-6 col-md-3">
             <a class="btn btn-outline-primary btn-block font-weight-bold text-uppercase" href="">{% trans 
'Staff' %}</a>
-        </div>-->
+        </div>
         <div class="col-sm-6 col-md-3">
           <a class="btn btn-outline-primary btn-block font-weight-bold text-uppercase" href="{% url 
'organizations:players_list' organization_id=user.organization.id %}">{% trans 'Players' %}</a>
         </div>
-        <!--<div class="col-sm-6 col-md-3">
+        <div class="col-sm-6 col-md-3">
           <a class="btn btn-outline-primary btn-block font-weight-bold text-uppercase" href="">{% trans 
'Groups' %}</a>
         </div>
         <div class="col-sm-6 col-md-3">
           <a class="btn btn-outline-primary btn-block font-weight-bold text-uppercase" href="">{% trans 
'Gyms' %}</a>
-        </div>-->
+        </div>
     </div>
     {% endif %}
 


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