]> git.atlas4tour.it Git - pia_atlas.git/commitdiff
- Salvataggio tappa e percorso
authorCostantino Vitale <costantino.vitale@dyrecta.com>
Tue, 4 Oct 2022 15:57:11 +0000 (17:57 +0200)
committerCostantino Vitale <costantino.vitale@dyrecta.com>
Tue, 4 Oct 2022 15:57:11 +0000 (17:57 +0200)
sistema/forms.py
sistema/models.py
sistema/templates/add_mod_percorso.html
sistema/views.py

index 845def0af9020d0038a496e8611eff8c427c59cb..1efb005682fb27386bd7c68b10c0c44b212aa55e 100644 (file)
@@ -2,7 +2,7 @@ from datetime import datetime
 
 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):
@@ -61,6 +61,17 @@ class PoiForm(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',
index 4d456de6ef524e7651a6c1842d62e592ce567e83..3c0bb0a7679fd0823effed53128058598ec4703f 100644 (file)
@@ -41,6 +41,17 @@ class Tappa(models.Model):
     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)
index afef76bfe671831da41ae76c949615025d65e5d3..e2436c441c729b431b9e4ea3bd67983f3434a0da 100644 (file)
@@ -1,5 +1,6 @@
 {% 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>
@@ -41,7 +52,7 @@
 
                                 <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>
 
 
index fa3dec16096ddd2220c8e07e6b1b08f4b4481a71..9103908cdaa3459d3cea2f8b5aef3aae5b0f2c4d 100644 (file)
@@ -1,3 +1,5 @@
+import json
+
 from django.contrib import messages
 from django.http import JsonResponse
 from django.shortcuts import render, redirect
@@ -6,8 +8,9 @@ from django.views import View
 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
 
 
@@ -135,6 +138,7 @@ class TipoMultimediaView(View):
 
 
 class PoiView(View):
+
     def get_coordinates(self):
         start = int(self.GET.get('start'))
         end = int(self.GET.get('end'))
@@ -215,14 +219,32 @@ class PercorsoView(View):
         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: