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