]> git.atlas4tour.it Git - pia_atlas.git/commitdiff
- Implementazione API
authorCostantino Vitale <costantino.vitale@dyrecta.com>
Wed, 5 Oct 2022 10:43:00 +0000 (12:43 +0200)
committerCostantino Vitale <costantino.vitale@dyrecta.com>
Wed, 5 Oct 2022 10:43:00 +0000 (12:43 +0200)
api/urls.py
api/views.py
sistema/models.py
sistema/templates/add_mod_percorso.html
sistema/views.py
socoin_atlas/urls.py
utenti/mixins.py

index fca688d44ea8941043d4b0fff160773423355ce2..d566f9623b068252fe632f7613db15c314179c37 100644 (file)
@@ -2,9 +2,10 @@ from django.contrib import admin
 from django.urls import path, include
 from django.contrib.auth import views as auth_views
 
-from api.views import Login_v2, RegistrationAPI
+from api.views import Login_v2, RegistrationAPI, ListaPercorsiAPI
 
 urlpatterns = [
     path('api-login/', Login_v2.as_view(), name='api_login'),
     path('api-registration/', RegistrationAPI.as_view(), name='api_registration'),
+    path('lista_percorsi/', ListaPercorsiAPI.as_view(), name='lista_percorsi'),
 ]
index a07eb904059129b8c3e5168473c8445a7c7fcb33..03dc0eefdb2ed6ba8f5853720e6c129b6a11b55c 100644 (file)
@@ -4,6 +4,7 @@ from django.utils.translation import ugettext as _
 from rest_framework import status
 from django.contrib.auth import authenticate
 from rest_framework import serializers
+from rest_framework.permissions import IsAuthenticated
 from rest_framework.response import Response
 from rest_framework.views import APIView
 from rest_framework_simplejwt.serializers import PasswordField
@@ -11,9 +12,13 @@ from rest_framework_simplejwt.tokens import RefreshToken
 from rest_framework_simplejwt.views import TokenViewBase
 from rest_framework_simplejwt.exceptions import AuthenticationFailed
 
+from sistema.models import Percorso, PercorsoSerializer
+from socoin_atlas import settings
+from utenti.mixins import AuthorizationRequiredMixin
+
 
 class TokenObtainLoginSerializer(serializers.Serializer):
-    login = 'login'
+    login = 'username'
 
     default_error_messages = {
         'no_active_account': _('Credenziali errate')
@@ -69,15 +74,11 @@ class TokenObtainPairLoginSerializer(TokenObtainLoginSerializer):
         refresh = self.get_token(self.user)
 
         data['refresh'] = str(refresh)
-        #data['access'] = str(refresh.access_token)
         data['token'] = str(refresh.access_token)
-        data['change_password'] = self.user.change_password
         if self.user.last_login:
             data['last_login'] = self.user.last_login.strftime('%Y-%M-%d %H:%M:%S')
         else:
             data['last_login'] = None
-        data['gender'] = self.user.gender
-        data['birth_date'] = self.user.birth_date
         data['pk'] = self.user.pk
 
         return data
@@ -121,4 +122,18 @@ class RegistrationAPI(APIView):
             #
             # role = Role.objects.filter(name='Paziente').first()
 
-            return Response({'errors': '', 'error': False, 'data': '', 'messages': ['OK']}, status=status.HTTP_200_OK)
\ No newline at end of file
+            return Response({'errors': '', 'error': False, 'data': '', 'messages': ['OK']}, status=status.HTTP_200_OK)
+
+
+class ListaPercorsiAPI(APIView):
+    def get(self, request):
+        errors = []
+        error = False
+
+        filter = Percorso.objects.filter(is_active=True)
+        percorsi_serialize = PercorsoSerializer(filter, many=True)
+
+        if error:
+            return Response({'errors': errors, 'error': error, 'data': '', 'messages': ['KO']})
+        else:
+            return Response({'errors': errors, 'error': error, 'data': percorsi_serialize.data, 'messages': ['OK']})
\ No newline at end of file
index 3c0bb0a7679fd0823effed53128058598ec4703f..2d8ff1c25d517c6c0b9957599c867a215692acf1 100644 (file)
@@ -1,7 +1,7 @@
 from django.db import models
 from django.contrib.auth.models import User
 from django.utils import timezone
-
+from rest_framework import serializers
 
 class Localita(models.Model):
     descrizione = models.CharField(max_length=255, null=False)
@@ -13,6 +13,7 @@ class Localita(models.Model):
     def __str__(self):
         return self.descrizione + ', ' + self.provincia + ' (' + self.regione + ')'
 
+
 class Gestisce(models.Model):
     utente = models.ForeignKey(User, on_delete=models.DO_NOTHING)
     localita = models.ForeignKey(Localita, on_delete=models.DO_NOTHING)
@@ -21,6 +22,13 @@ class Gestisce(models.Model):
     is_active = models.BooleanField(default=True)
 
 
+class PointOfInterest(models.Model):
+    nome = models.CharField(max_length=255, null=False)
+    lat = models.FloatField()
+    long = models.FloatField()
+    is_active = models.BooleanField(default=True)
+
+
 class Percorso(models.Model):
     nome = models.CharField(max_length=255, null=False)
     descrizione = models.CharField(max_length=255, null=False)
@@ -28,11 +36,10 @@ class Percorso(models.Model):
     is_active = models.BooleanField(default=True)
 
 
-class PointOfInterest(models.Model):
-    nome = models.CharField(max_length=255, null=False)
-    lat = models.FloatField()
-    long = models.FloatField()
-    is_active = models.BooleanField(default=True)
+class PercorsoSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Percorso
+        fields = ('id', 'nome', 'descrizione', 'testo')
 
 
 class Tappa(models.Model):
index e2436c441c729b431b9e4ea3bd67983f3434a0da..ac79df829ffb2171b3889452f158ca750ec75ec5 100644 (file)
@@ -52,7 +52,7 @@
 
                                 <br>
                                 <br>
-                                <button class="btn-sm btn-success" onclick="saveItinerary()">Salva</button>
+                                <button class="btn-sm btn-success" type="button" onclick="saveItinerary()">Salva</button>
 
                             </div>
                         </div>
         var list_tappe = [];
         var selected_items = []
 
+
         $(document).ready(function () {
             updateSelect();
+
+            {% if associated_tappe %}
+                list_tappe = {{ associated_tappe|safe }}
+                selected_items = {{ associated_tappe|safe }}
+
+                $('#select-start').val(selected_items[0]);
+                $('#select-end').val(selected_items[selected_items.length - 1]);
+
+                tappe = []
+                for(var i=1; i<selected_items.length-1; i++){
+                    tappe.push(selected_items[i])
+                }
+
+                $('#select-tappe').val(tappe);
+
+                getCoordinates();
+
+
+            {% endif %}
+
         });
 
         function objectifyForm(formArray) {
         }
 
         $("#select-tappe").on('click','option',function(){
-            list_tappe.push($(this).val())
+            value = Number($(this).val());
+            list_tappe.push(value);
         });
 
 
 
 
         function getCoordinates(){
-            selected_items = $("#select-tappe").val()
+            selected_items_str = $("#select-tappe").val()
+            selected_items = selected_items_str.map(str => {
+              return Number(str);
+            });
+
             selected_items_list = list_tappe.filter(value => selected_items.includes(value));
 
             $.ajax({
 
             method = ''
             pk_percorso_form = ''
+
+            selected_list = []
+            selected_list.push($("#select-start").val())
+
+            tappe_intermedie = $("#select-tappe").val()
+            for(k in tappe_intermedie){
+                selected_list.push(tappe_intermedie[k])
+            }
+            selected_list.push($("#select-end").val())
+
             {% if form.instance.pk %}
                 method = 'mod'
                 pk_percorso_form = {{ form.instance.pk }}
                 data: {
                     'percorso_form': JSON.stringify(percorso_form),
                     'pk_percorso_form': pk_percorso_form,
-                    'tappe': list_tappe.filter(value => selected_items.includes(value)),
+                    'tappe': selected_list,
                     'method': method,
                 },
                 type: "POST",
index 9103908cdaa3459d3cea2f8b5aef3aae5b0f2c4d..ff751814f02daaf329d595b5f42f211346f65f52 100644 (file)
@@ -241,7 +241,8 @@ class PercorsoView(View):
             return JsonResponse({'response': 'Percorso eliminato con successo'}, status=status.HTTP_200_OK)
         elif 'pk' in kwargs:
             return render(request, 'add_mod_percorso.html', {'poi_list': PointOfInterest.objects.filter(is_active=True).values('id', 'nome'),
-                                                             'form': PercorsoForm(instance=Percorso.objects.get(pk=int(self.kwargs['pk'])))})
+                                                             'form': PercorsoForm(instance=Percorso.objects.get(pk=int(self.kwargs['pk']))),
+                                                             'associated_tappe': list(Tappa.objects.filter(percorso_id=int(self.kwargs['pk'])).values_list('poi_id', flat=True)),})
         else:
             return render(request, 'add_mod_percorso.html', {'poi_list': PointOfInterest.objects.filter(is_active=True).values('id', 'nome'),
                                                              'form': PercorsoForm()})
@@ -250,4 +251,6 @@ class PercorsoView(View):
         if 'mod' in request.POST:
             print('modifica')
         else:
-            print('inserimento')
\ No newline at end of file
+            self.add_percorso(request)
+
+        return redirect(reverse('sistema:percorsi_list'))
index 67ece391404f3a0adc2d246964f95f8e3eb4cd76..87fdf7d71e69ec436aec2c8879555e3b141222a8 100644 (file)
@@ -22,4 +22,5 @@ urlpatterns = [
     path('admin/', admin.site.urls),
     path('', include(('sistema.urls', 'sistema'), namespace='sistema')),
     path('utenti/', include(('utenti.urls', 'utenti'), namespace='utenti')),
+    path('api/', include(('api.urls', 'api'), namespace='api')),
 ]
index 5da9fce035769144ea387db1d51793a70818ce12..79934ad733f16f7c1b6252a639e4e3a775cb6485 100644 (file)
@@ -38,17 +38,8 @@ class AuthorizationRequiredMixin(object):
     authorization_required = None
 
     def dispatch(self, request, *args, **kwargs):
+        print(request)
         if request.user.is_authenticated:
-            if request.session.get('structure'):
-                user_authorization = request.user.get_all_authorizations_by_structure_flat(
-                    request.session['structure'])
-                if len(set(user_authorization).intersection(self.authorization_required)) <= 0:
-                    raise PermissionDenied
-                return super(AuthorizationRequiredMixin, self).dispatch(request, *args, **kwargs)
-            else:
-                user_authorization = request.user.get_all_authorizations_flat()
-                if len(set(user_authorization).intersection(self.authorization_required)) <= 0:
-                    raise PermissionDenied
-                return super(AuthorizationRequiredMixin, self).dispatch(request, *args, **kwargs)
+            return super(AuthorizationRequiredMixin, self).dispatch(request, *args, **kwargs)
         else:
             raise PermissionDenied
\ No newline at end of file