from django.contrib.auth.forms import *
-from sistema.models import Localita, TipologiaMultimedia, Gestisce, PointOfInterest
+from sistema.models import Localita, TipologiaMultimedia, Gestisce, PointOfInterest, Percorso
class LocalitaForm(forms.ModelForm):
self.fields[f].widget.attrs.update({'class': 'form-control'})
+class PercorsoForm(forms.ModelForm):
+ class Meta:
+ model = Percorso
+ exclude = ('is_active',)
+
+ def __init__(self, *args, **kwargs):
+ super(PercorsoForm, self).__init__(*args, **kwargs)
+ for f in self.fields:
+ self.fields[f].widget.attrs.update({'class': 'form-control'})
+
+
class GestisceForm(forms.ModelForm):
data_inizio = forms.DateField(
label='Data inizio',
ordine = models.IntegerField()
is_active = models.BooleanField(default=True)
+ @staticmethod
+ def insert_tappe_percorso(list_tappe, form_percorso):
+ i = 1
+ for tappa in list_tappe:
+ Tappa.objects.create(
+ percorso=form_percorso.instance,
+ poi=PointOfInterest.objects.get(pk=int(tappa)),
+ ordine=i
+ )
+ i += 1
+
class TipologiaMultimedia(models.Model):
nome = models.CharField(max_length=255, null=False)
{% extends 'base.html' %}
{% load static %}
+{% load crispy_forms_tags %}
{% block content %}
<div class="row">
<div class="card-body">
<div class="row">
- <div id="sel-localita" class="col-lg-3 col-md-3 col-sm-3 col-xs-3 pr-0 pt-3">
- <h4>Seleziona i punti di interesse</h4>
+ <div class="col-lg-3 col-md-3 col-sm-3 col-xs-3 pr-0 pt-3">
+ <h5>Info percorso</h5>
+ <form method="POST" id="percorso_form" action="#">{% csrf_token %}
+ {% if form.instance.pk %}
+ <input type="hidden" name="mod" form="percorso_form">
+ <input type="hidden" name="pk" value="{{ form.instance.pk }}" form="percorso_form">
+ {% endif %}
+ {{form | crispy }}
+ </form>
+
+ <br>
+ <h5>Seleziona i punti di interesse</h5>
<br>
<div id="sidebar">
<b>Partenza</b>
<br>
<br>
- <button class="btn-sm btn-success" onclick="">Salva</button>
+ <button class="btn-sm btn-success" onclick="saveItinerary()">Salva</button>
</div>
</div>
updateSelect();
});
+ function objectifyForm(formArray) {
+ var returnArray = {};
+ for (var i = 0; i < formArray.length; i++) {
+ returnArray[formArray[i]['name']] = formArray[i]['value'];
+ }
+ return returnArray;
+ }
+
+
function updateSelect(){
$('#select-start').append($("<option></option>").attr("value", 0).text(''));
$('#select-end').append($("<option></option>").attr("value", 0).text(''));
});
}
+
function drawRoutes(start, end, poi){
var directionsService = new google.maps.DirectionsService;
var directionsDisplay = new google.maps.DirectionsRenderer;
}
+
+ function saveItinerary(){
+ percorso_form = objectifyForm($('#percorso_form').serializeArray());
+
+ method = ''
+ pk_percorso_form = ''
+ {% if form.instance.pk %}
+ method = 'mod'
+ pk_percorso_form = {{ form.instance.pk }}
+ {% endif %}
+
+ $.ajax({
+ data: {
+ 'percorso_form': JSON.stringify(percorso_form),
+ 'pk_percorso_form': pk_percorso_form,
+ 'tappe': list_tappe.filter(value => selected_items.includes(value)),
+ 'method': method,
+ },
+ type: "POST",
+ url: '{% url 'sistema:percorso' %}',
+ "headers": {'X-CSRFToken': '{{ csrf_token }}'},
+ })
+ .done(function (response) {
+ Swal.fire('', "Operazione effettuata con successo", "success").then((value) => {
+ location.href('{% url 'sistema:percorsi_list' %}');
+ });
+ })
+ .fail(function (jqXHR, textStatus, errorThrown) {
+ errore = ''
+ if (typeof jqXHR.responseText.reason === 'string' || jqXHR.responseText.reason instanceof String) {
+ errore = jqXHR.responseText
+ } else {
+ for (var i = 0; i < jqXHR.responseJSON.reason.length; i++) {
+ errore += jqXHR.responseJSON.reason[i]
+ errore += '<br>'
+ }
+ }
+ Swal.fire("Attenzione!", errore, "error")
+
+ });
+
+
+ }
</script>
+import json
+
from django.contrib import messages
from django.http import JsonResponse
from django.shortcuts import render, redirect
from django.views.generic import TemplateView
from rest_framework import status
-from sistema.forms import LocalitaForm, TipoMultimediaForm, PoiForm
-from sistema.models import Localita, TipologiaMultimedia, PointOfInterest, Percorso
+from sistema.forms import LocalitaForm, TipoMultimediaForm, PoiForm, PercorsoForm
+from sistema.models import Localita, TipologiaMultimedia, PointOfInterest, Percorso, Tappa
+from socoin_atlas import settings
from utenti.mixins import CustomLoginRequiredMixin
class PoiView(View):
+
def get_coordinates(self):
start = int(self.GET.get('start'))
end = int(self.GET.get('end'))
percorso.is_active = False
percorso.save()
+ def add_percorso(self, request):
+ form = PercorsoForm(data=json.loads(request.POST.get('percorso_form')))
+ if form.is_valid():
+ form.save()
+
+ Tappa.insert_tappe_percorso(request.POST.getlist('tappe[]'), form)
+
+ return JsonResponse({'response': 'Percorso inserito con successo'}, status=status.HTTP_200_OK)
+ else:
+ errors = ''
+ for err in form.errors.as_data():
+ errors += '<li>' + err + '</li>'
+
+ msg = 'Errore nell\'inserimento del tour operator. Controlla il form.' + errors
+ return JsonResponse({'response': msg}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+
def get(self, request, *args, **kwargs):
if request.GET.get('method') == 'del':
self.del_poi(request)
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')})
+ 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'])))})
else:
- return render(request, 'add_mod_percorso.html', {'poi_list': PointOfInterest.objects.filter(is_active=True).values('id', 'nome')})
+ return render(request, 'add_mod_percorso.html', {'poi_list': PointOfInterest.objects.filter(is_active=True).values('id', 'nome'),
+ 'form': PercorsoForm()})
def post(self, request, *args, **kwargs):
if 'mod' in request.POST: