From: Costantino Vitale Date: Fri, 7 Oct 2022 07:52:22 +0000 (+0200) Subject: - Implementazione API X-Git-Url: https://git.atlas4tour.it/?a=commitdiff_plain;h=6bbbd9e256aaff13531d98db180009ba5c8442d9;p=pia_atlas.git - Implementazione API --- diff --git a/sistema/models.py b/sistema/models.py index 2d8ff1c..5baf7aa 100644 --- a/sistema/models.py +++ b/sistema/models.py @@ -46,19 +46,33 @@ class Tappa(models.Model): percorso = models.ForeignKey(Percorso, on_delete=models.DO_NOTHING) poi = models.ForeignKey(PointOfInterest, on_delete=models.DO_NOTHING) ordine = models.IntegerField() + is_partenza = models.BooleanField(default=False) + is_arrivo = models.BooleanField(default=False) + is_tappa = models.BooleanField(default=False) is_active = models.BooleanField(default=True) @staticmethod - def insert_tappe_percorso(list_tappe, form_percorso): - i = 1 + def insert_tappe_percorso(parteza, arrivo, list_tappe, form_percorso): + Tappa.objects.create(percorso=form_percorso.instance, poi=PointOfInterest.objects.get(pk=int(parteza)), ordine=1, is_partenza=True) + + i = 2 for tappa in list_tappe: Tappa.objects.create( percorso=form_percorso.instance, poi=PointOfInterest.objects.get(pk=int(tappa)), - ordine=i + ordine=i, + is_tappa=True ) i += 1 + Tappa.objects.create(percorso=form_percorso.instance, poi=PointOfInterest.objects.get(pk=int(arrivo)), ordine=i, is_arrivo=True) + + +class TappaSerializer(serializers.ModelSerializer): + class Meta: + model = Tappa + fields = ('id', 'poi', 'ordine', 'is_partenza', 'is_arrivo', 'is_tappa') + class TipologiaMultimedia(models.Model): nome = models.CharField(max_length=255, null=False) diff --git a/sistema/templates/add_mod_percorso.html b/sistema/templates/add_mod_percorso.html index ac79df8..42a9f38 100644 --- a/sistema/templates/add_mod_percorso.html +++ b/sistema/templates/add_mod_percorso.html @@ -63,7 +63,9 @@ - + {% for c in cazzo %} + {{ c.poi }}
+ {% endfor %} @@ -226,13 +228,11 @@ 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' @@ -244,6 +244,8 @@ 'percorso_form': JSON.stringify(percorso_form), 'pk_percorso_form': pk_percorso_form, 'tappe': selected_list, + 'partenza': $("#select-start").val(), + 'arrivo': $("#select-end").val(), 'method': method, }, type: "POST", diff --git a/sistema/templates/registration/login.html b/sistema/templates/registration/login.html index 01bf4d8..cd2b9f4 100644 --- a/sistema/templates/registration/login.html +++ b/sistema/templates/registration/login.html @@ -4,7 +4,7 @@ - Login Farella + Login atlas @@ -44,7 +44,7 @@
- +
diff --git a/sistema/views.py b/sistema/views.py index ff75181..1205629 100644 --- a/sistema/views.py +++ b/sistema/views.py @@ -9,7 +9,7 @@ from django.views.generic import TemplateView from rest_framework import status from sistema.forms import LocalitaForm, TipoMultimediaForm, PoiForm, PercorsoForm -from sistema.models import Localita, TipologiaMultimedia, PointOfInterest, Percorso, Tappa +from sistema.models import Localita, TipologiaMultimedia, PointOfInterest, Percorso, Tappa, TappaSerializer from socoin_atlas import settings from utenti.mixins import CustomLoginRequiredMixin @@ -224,9 +224,16 @@ class PercorsoView(View): if form.is_valid(): form.save() - Tappa.insert_tappe_percorso(request.POST.getlist('tappe[]'), form) + partenza = request.POST.get('partenza') + arrivo = request.POST.get('arrivo') + tappe = request.POST.getlist('tappe[]') + + if partenza and arrivo and tappe: + Tappa.insert_tappe_percorso(partenza, arrivo, tappe, form) + return JsonResponse({'response': 'Percorso inserito con successo'}, status=status.HTTP_200_OK) + else: + return JsonResponse({'response': 'Attenzione! Dati informazioni mancanti in merito al percorso'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) - return JsonResponse({'response': 'Percorso inserito con successo'}, status=status.HTTP_200_OK) else: errors = '' for err in form.errors.as_data(): @@ -240,9 +247,13 @@ class PercorsoView(View): self.del_poi(request) return JsonResponse({'response': 'Percorso eliminato con successo'}, status=status.HTTP_200_OK) elif 'pk' in kwargs: + t = Tappa.objects.filter(percorso_id=int(self.kwargs['pk'])) + tappa_list = TappaSerializer(t, many=True) + 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']))), - 'associated_tappe': list(Tappa.objects.filter(percorso_id=int(self.kwargs['pk'])).values_list('poi_id', flat=True)),}) + 'associated_tappe': list(Tappa.objects.filter(percorso_id=int(self.kwargs['pk'])).values_list('poi_id', flat=True)), + 'cazzo': tappa_list.data}) else: return render(request, 'add_mod_percorso.html', {'poi_list': PointOfInterest.objects.filter(is_active=True).values('id', 'nome'), 'form': PercorsoForm()}) diff --git a/utenti/mixins.py b/utenti/mixins.py index 79934ad..f3f4e34 100644 --- a/utenti/mixins.py +++ b/utenti/mixins.py @@ -38,8 +38,17 @@ class AuthorizationRequiredMixin(object): authorization_required = None def dispatch(self, request, *args, **kwargs): - print(request) if request.user.is_authenticated: - return super(AuthorizationRequiredMixin, self).dispatch(request, *args, **kwargs) + 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) else: - raise PermissionDenied \ No newline at end of file + raise PermissionDenied +