]> git.atlas4tour.it Git - pia_atlas.git/commitdiff
anteprima poi
authorValeria Vitti <valeria.vitti@dyrecta.com>
Wed, 23 Oct 2024 14:49:53 +0000 (16:49 +0200)
committerValeria Vitti <valeria.vitti@dyrecta.com>
Wed, 23 Oct 2024 14:49:53 +0000 (16:49 +0200)
modifica label file multimediali
inserimento coordinate in lista percorsi

api/urls.py
api/views.py
sistema/datatables.py
sistema/forms.py
sistema/models.py
sistema/templates/add_mod_poi.html
sistema/templates/poi_list.html
sistema/views.py

index 09f4b954db733dd9ec09c22df0d4f73a2601447b..5b531aac224283bd8601dfc909af5028a548d781 100644 (file)
@@ -2,8 +2,7 @@ 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, ListaPercorsiAPI, DetailPercorsoAPI, DetailPoiAPI, SendFeedbackAPI, \
-    ShowQRCode
+from api.views import Login_v2, RegistrationAPI, ListaPercorsiAPI, DetailPercorsoAPI, DetailPoiAPI, SendFeedbackAPI, ShowQRCode
 
 urlpatterns = [
     path('api-login/', Login_v2.as_view(), name='api_login'),
index 03bc0e2f762300686b4403dcd93e7a79656fe9b8..d33e8ba584ab09e7123da3e0ab5c7bd54ef40923 100644 (file)
@@ -135,11 +135,32 @@ class ListaPercorsiAPI(APIView):
 
         filter = Percorso.objects.filter(is_active=True)
         percorsi_serialize = PercorsoSerializer(filter, many=True)
+        percorsi = []
+
+        for p in percorsi_serialize.data:
+            tappa_is_partenza = Tappa.objects.filter(percorso=p['id'], is_partenza=True)
+            if tappa_is_partenza:
+                lat = tappa_is_partenza.first().poi.lat
+                long = tappa_is_partenza.first().poi.long
+            else:
+                lat = None
+                long = None
+
+            percorsi.append({
+                'id': p['id'],
+                'nome': p['nome'],
+                'descrizione': p['descrizione'],
+                'testo': p['testo'],
+                'icona': p['icona'],
+                'url': p['url'],
+                'lat': lat,
+                'long': long
+            })
 
         if error:
             return Response({'errors': errors, 'error': error, 'data': '', 'messages': ['KO']})
         else:
-            return Response({'errors': errors, 'error': error, 'data': percorsi_serialize.data, 'messages': ['OK']})
+            return Response({'errors': errors, 'error': error, 'data': percorsi, 'messages': ['OK']})
 
 
 class DetailPercorsoAPI(APIView):
@@ -160,6 +181,7 @@ class DetailPercorsoAPI(APIView):
                 tappe = Tappa.objects.filter(percorso=filter.first(), is_active=True)
                 tappe_list = TappaSerializer(tappe, many=True)
 
+
                 feedback = Feedback.objects.filter(percorso=filter.first(), is_active=True)
                 feedback_list = FeedbackSerializer(feedback, many=True)
 
index 3716636c79401169a01295a822101473794a10fd..9087b032e68bd53640e1e28ed8158b91667b4efc 100644 (file)
@@ -144,8 +144,8 @@ class PercorsoDatatables(BaseDatatableView):
 
 class PoiDatatables(BaseDatatableView):
     model = PointOfInterest
-    columns = ['id', 'icona', 'nome', 'lat', 'long', 'is_danger', 'mod', 'del']
-    order_columns = ['id', 'icona', 'nome', 'lat', 'long', 'is_danger', 'mod', 'del']
+    columns = ['id', 'icona', 'anteprima_poi', 'nome', 'lat', 'long', 'is_danger', 'mod', 'del']
+    order_columns = ['id', 'icona', 'anteprima_poi', 'nome', 'lat', 'long', 'is_danger', 'mod', 'del']
 
     def get_initial_queryset(self):
         return self.model.objects.filter(is_active=True)
@@ -161,6 +161,8 @@ class PoiDatatables(BaseDatatableView):
             return escape('{0}'.format(row.long))
         if column == 'icona':
             return f'<img src="{MEDIA_URL}{row.icona}" class="text-center user-img mr-2" alt="" height="50px">'
+        if column == 'anteprima_poi':
+            return f'<img src="{MEDIA_URL}{row.anteprima_poi}" class="text-center user-img mr-2" alt="" height="50px">'
         if column == 'is_danger':
             if row.is_danger:
                 return 'SI'
index 4fd8433e2a59e5b05671f6dbaaaa9a7829002788..c46dc523009f3be6fa2faba3c859526836dc9c81 100644 (file)
@@ -51,25 +51,26 @@ class TipoMultimediaForm(forms.ModelForm):
 
 
 class PoiForm(forms.ModelForm):
-
+    anteprima_poi = forms.FileField(label='Anteprima POI', widget=forms.FileInput(
+        attrs={'class': 'form-control', 'form': 'poi_form'}), )
     icona = forms.FileField(label='Icona', widget=forms.FileInput(
         attrs={'class': 'form-control', 'form': 'poi_form'}), )
     is_danger = forms.BooleanField(required=False,widget=forms.CheckboxInput(attrs={'class': 'form-check-input'}), label='Punto di pericolo')
 
     class Meta:
         model = PointOfInterest
-        exclude = ('is_active','url')
+        exclude = ('is_active','url', 'url_anteprima_poi')
 
     def __init__(self, *args, **kwargs):
         super(PoiForm, self).__init__(*args, **kwargs)
         self.fields['icona'].required = False
         self.fields['descrizione'].required = False
+        self.fields['anteprima_poi'].required = False
 
         for f in self.fields:
-            if self.fields[f].label == 'Descrizione':
-                self.fields[f].max_length = 3000
-            elif self.fields[f].widget.input_type != 'checkbox':
-                self.fields[f].widget.attrs.update({'class': ' form-control'})
+            if self.fields[f].label != 'Descrizione':
+                if self.fields[f].widget.input_type != 'checkbox':
+                    self.fields[f].widget.attrs.update({'class': ' form-control'})
 
 
     # def save(self, commit=True):
@@ -92,8 +93,6 @@ class PercorsoForm(forms.ModelForm):
     def __init__(self, *args, **kwargs):
         super(PercorsoForm, self).__init__(*args, **kwargs)
         for f in self.fields:
-            if self.fields[f].label == 'Testo':
-                self.fields[f].max_length = 3000
             self.fields[f].widget.attrs.update({'class': 'form-control'})
 
 class IconaPercorsoForm(forms.ModelForm):
index dfcfa91f5a2e7e203bb1be8a29ba970daab810ba..0990557b8067ee2c47a5a543713dd64566804ea9 100644 (file)
@@ -31,9 +31,11 @@ class PointOfInterest(models.Model):
     nome = models.CharField(max_length=255, null=False)
     lat = models.FloatField()
     long = models.FloatField()
+    anteprima_poi = models.FileField(upload_to='anteprima_poi/', null=True)
+    url_anteprima_poi = models.URLField(null=True)
     icona = models.FileField(upload_to='icon/', null=True)
     url = models.URLField(null=True)
-    descrizione = models.TextField()
+    descrizione = models.TextField(max_length=3000)
     is_danger = models.BooleanField(default=False)
     is_active = models.BooleanField(default=True)
 
@@ -41,7 +43,7 @@ class PointOfInterest(models.Model):
 class Percorso(models.Model):
     nome = models.CharField(max_length=255, null=False)
     descrizione = models.CharField(max_length=255, null=False)
-    testo = models.TextField()
+    testo = models.TextField(max_length=3000)
     icona = models.FileField(upload_to='icon_percorso/', null=True)
     url = models.URLField(null=True)
     prezzo = models.FloatField()
@@ -99,8 +101,8 @@ class Multimedia(models.Model):
     poi = models.ForeignKey(PointOfInterest, on_delete=models.DO_NOTHING, null=True)
     media = models.FileField(upload_to='poi_media/', null=True)
     nome = models.CharField(max_length=255, null=False)
-    descrizione = models.CharField(max_length=255, null=False)
-    testo = models.TextField(max_length=255, null=False)
+    descrizione = models.TextField(max_length=512, null=False)
+    testo = models.TextField(max_length=3000, null=False)
     qr_code = models.FileField(upload_to='poi_media_qr_code/', null=True)
     chiave_qr_code = models.CharField(max_length=255, null=True)
     is_active = models.BooleanField(default=True)
@@ -129,7 +131,7 @@ class FeedbackSerializer(serializers.ModelSerializer):
 class PoiSerializer(serializers.ModelSerializer):
     class Meta:
         model = PointOfInterest
-        fields = ('id', 'nome', 'lat', 'long', 'icona','is_danger', 'url', 'descrizione')
+        fields = ('id', 'nome', 'lat', 'long', 'anteprima_poi', 'url_anteprima_poi','icona', 'url', 'is_danger', 'descrizione')
 
 
 class MultimediaSerializer(serializers.ModelSerializer):
index 2920493544bbb426e47a003d6023d44a6903abb2..3d3fd74e82290fcc6a88795eb587971d20c23ce7 100644 (file)
@@ -38,6 +38,7 @@
                                     <input type="hidden" name="mod" form="poi_form">
                                     <input type="hidden" name="pk" value="{{ form.instance.pk }}" form="poi_form">
                                     <input type="hidden" id="id_link_icona" name="link_icona" value="{{ icona }}" form="poi_form">
+                                    <input type="hidden" id="id_link_anteprima_poi" name="link_anteprima_poi" value="{{ anteprima_poi }}" form="poi_form">
                                 {% endif %}
                                 {{ form | crispy }}
                             </div>
         $(document).ready(function () {
             var pk = '{{ form.instance.pk }}';
             var icona = '{{ icona }}';
+            var anteprima_poi = '{{ anteprima_poi }}';
 
             if (pk != '' && icona != '')
                 $("#div_id_icona").after('<p id="id_icona_presente">Icona presente: <a href="/media/{{ icona }}" class="a_link" target="_blank">{{ icona }}</a></p>');
 
+            if (pk != '' && anteprima_poi != '')
+                $("#div_id_anteprima_poi").after('<p id="id_anteprima_poi_presente">Anteprima POI presente: <a href="/media/{{ anteprima_poi }}" class="a_link" target="_blank">{{ anteprima_poi }}</a></p>');
+
+
             $("#id_icona").change(function () {
                 $("#id_icona_presente").empty();
             });
+
+            $("#id_anteprima_poi").change(function () {
+                $("#id_anteprima_poi_presente").empty();
+            });
+
             $('#punti_dropdown').addClass('active');
             $('#punti_toggle').addClass('toggled');
             $('#add_lista').addClass('active');
                 headers: {'X-CSRFToken': '{{ csrf_token }}'},
                 url: '{% url 'sistema:crea_qr_code' %}',
                 success: function(data) {
-                    location.reload();
+                    // location.reload();
                     var url = window.location.origin;
                     window.open(url+'/'+data.qr_code, '_blank');
                 },
index 6348a6a7277de4f113b7ecc42101bc626ec24040..8840cf1ff69fa4a91ef9ee5fa1a28208ce1c4f5e 100644 (file)
@@ -25,6 +25,7 @@
                                 <tr>
                                     <th>#</th>
                                     <th>Icona</th>
+                                    <th>Anteprima POI</th>
                                     <th>Nome</th>
                                     <th>Latitudine</th>
                                     <th>Longitudine</th>
                 columnDefs: [
                     {"targets": 0, "orderable": false, "width": "3%"},
                     {"targets": 1, "orderable": false, "width": "5%"},
-                    {"targets": 5, "orderable": false, "width": "5%"},
+                    {"targets": 2, "orderable": false, "width": "8%"},
                     {"targets": 6, "orderable": false, "width": "5%"},
                     {"targets": 7, "orderable": false, "width": "5%"},
+                    {"targets": 8, "orderable": false, "width": "5%"},
                 ],
                 "order": []
             });
index a99afd4d360e08c3db3b880cf990f1d95c4e4ba0..5732b1bd92d323e0238e02ce6887fcd0763bcf7b 100644 (file)
@@ -234,21 +234,31 @@ class PoiView(View):#PermissionRequiredMixin
             bisogna controllare il salvataggio dei media nel form multimedia
         '''
         form = PoiForm(request.POST, request.FILES)
-        files = request.FILES.getlist('icona')
+        files_icona = request.FILES.getlist('icona')
+        files_anteprima_poi = request.FILES.getlist('anteprima_poi')
         is_danger = request.POST.get('is_danger') == 'on'
         if form.is_valid():
             form_save = form.save(commit=False)
             form_save.is_danger = is_danger
 
-            if files:
-                for f in files:
+            if files_icona:
+                for f in files_icona:
                     form_save.icona = f
                     form_save.save()
-                    form_save.url = 'http://atlas.dyrecta.com/' + str(form_save.icona)
+                    form_save.url = 'https://atlas.dyrecta.com/' + str(form_save.icona)
             else:
                 form_save.icona = os.path.join(MEDIA_ROOT, 'icon/default.png')
                 form_save.save()
-                form_save.url = 'http://atlas.dyrecta.com/' + str(form_save.icona)
+                form_save.url = 'https://atlas.dyrecta.com/' + str(form_save.icona)
+
+            if files_anteprima_poi:
+                for f in files_anteprima_poi:
+                    form_save.anteprima_poi = f
+                    form_save.save()
+                    form_save.url_anteprima_poi = 'https://atlas.dyrecta.com/' + str(form_save.anteprima_poi)
+            else:
+                form_save.anteprima_poi = None
+                form_save.url_anteprima_poi = None
             form_save.save()
 
             messages.add_message(request, messages.INFO, 'Nuova punto di interesse inserito con successo.')
@@ -274,8 +284,10 @@ class PoiView(View):#PermissionRequiredMixin
     def mod_poi(self, request):
         form = PoiForm(request.POST, instance=PointOfInterest.objects.get(pk=int(self.request.POST.get('pk'))))
         files = request.FILES.getlist('icona')
+        files_anteprima_poi = request.FILES.getlist('anteprima_poi')
         is_danger = request.POST.get('is_danger') == 'on'
         icona = request.POST.get('link_icona')
+        anteprima_poi = request.POST.get('link_anteprima_poi')
         if form.is_valid():
             form_save = form.save(commit=False)
             form_save.is_danger = is_danger
@@ -283,11 +295,21 @@ class PoiView(View):#PermissionRequiredMixin
                 for f in files:
                     form_save.icona = f
                     form_save.save()
-                    form_save.url = 'http://atlas.dyrecta.com/' + str(form_save.icona)
+                    form_save.url = 'https://atlas.dyrecta.com/' + str(form_save.icona)
             else:
                 if not icona:
                     form_save.icona = os.path.join(MEDIA_ROOT, 'icon/default.png')
-                    form_save.url = 'http://atlas.dyrecta.com/' + str(form_save.icona)
+                    form_save.url = 'https://atlas.dyrecta.com/' + str(form_save.icona)
+
+            if files_anteprima_poi:
+                for f in files_anteprima_poi:
+                    form_save.anteprima_poi = f
+                    form_save.save()
+                    form_save.url_anteprima_poi = 'https://atlas.dyrecta.com/' + str(form_save.anteprima_poi)
+            else:
+                if not anteprima_poi:
+                    form_save.anteprima_poi = None
+                    form_save.url_anteprima_poi = None
             form_save.save()
 
             messages.add_message(request, messages.INFO, 'Punto di interesse aggiornata con successo.')
@@ -318,12 +340,21 @@ class PoiView(View):#PermissionRequiredMixin
             poi = PointOfInterest.objects.get(pk=int(self.kwargs['pk']))
             form = PoiForm(instance=poi)
             icona = poi.icona
+            anteprima_poi = poi.anteprima_poi
             if icona:
                 if 'media' in str(icona):
                     icona = str(icona).split('media')[1]
                 else:
                     icona = str(icona)
-            return render(request, 'add_mod_poi.html', {'form': form, 'icona': icona,
+
+            if anteprima_poi:
+                if 'media' in str(anteprima_poi):
+                    anteprima_poi = str(anteprima_poi).split('media')[1]
+                else:
+                    anteprima_poi = str(anteprima_poi)
+            return render(request, 'add_mod_poi.html', {'form': form,
+                                                        'icona': icona,
+                                                        'anteprima_poi':anteprima_poi,
                                                         'form_multimedia': MultimediaForm()})
         else:
             return render(request, 'add_mod_poi.html', {'form': PoiForm(), 'form_multimedia': MultimediaForm()})
@@ -348,7 +379,7 @@ class PercorsoView(View):#PermissionRequiredMixin
             form_save = form.save(commit=False)
             if os.path.isfile(os.path.join(os.path.join(MEDIA_ROOT, "icon_percorso/"), str(form_save.icona))):
                 os.remove(os.path.join(os.path.join(MEDIA_ROOT, "icon_percorso/"), str(form_save.icona)))
-            form_save.url = 'http://atlas.dyrecta.com/media/icon_percorso/' + str(form_save.icona)
+            form_save.url = 'https://atlas.dyrecta.com/media/icon_percorso/' + str(form_save.icona)
             form_save.save()
 
         return redirect('sistema:percorsi_list')
@@ -457,7 +488,7 @@ class QRCodeView(View):
         try:
             id = str(self.POST.get('pk'))
             id_criptato = hashlib.sha256(id.encode()).hexdigest()
-            base_url = 'http://atlas.dyrecta.com/api/show_qr_code/?id_criptato='
+            base_url = 'https://atlas.dyrecta.com/api/show_qr_code/?id_criptato='
             url_completo = f"{base_url}{id_criptato}"
             qr = qrcode.QRCode(
                 version=1,