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'),
]
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
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')
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
#
# 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
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)
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)
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)
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):
<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",
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()})
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'))
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')),
]
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