class PoiDatatables(BaseDatatableView):
model = PointOfInterest
- columns = ['id', 'nome', 'lat', 'long', 'mod', 'del']
- order_columns = ['id', 'nome', 'lat', 'long', 'mod', 'del']
+ columns = ['id', 'icona', 'nome', 'lat', 'long', 'is_danger', 'mod', 'del']
+ order_columns = ['id', 'icona', '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.lat))
if column == 'long':
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 == 'is_danger':
+ if row.is_danger:
+ return 'SI'
+ else:
+ return 'NO'
if column == 'mod':
return '<a class="btn btn-sm btn-secondary" href="/mod_poi/%s/" ><i class="fas fa-edit"></i></a>' % row.pk
if column == 'del':
class MultimediaForm(forms.ModelForm):
media = forms.FileField(
- label='Icona (se non caricata verrà inserita una di default)',
+ label='File - MAX 200 MB (se non caricato verrà inserito uno di default)',
required=False,
widget=forms.FileInput(attrs={'class': 'form-control', 'form': 'multimedia_form'})
)
class PoiSerializer(serializers.ModelSerializer):
class Meta:
model = PointOfInterest
- fields = ('id', 'nome', 'lat', 'long', )
+ fields = ('id', 'nome', 'lat', 'long', 'icona','is_danger')
class MultimediaSerializer(serializers.ModelSerializer):
<h4 class="clr-config">Aggiungi un nuovo punto di interesse nel sistema</h4>
{% endif %}
</div>
- <form method="POST" id="poi_form" action="{% url 'sistema:poi' %}" enctype="multipart/form-data">{% csrf_token %}
+ <form method="POST" id="poi_form" action="{% url 'sistema:poi' %}"
+ enctype="multipart/form-data">{% csrf_token %}
<div class="card-body">
{% if form.instance.pk %}
<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">
{% endif %}
{{ form | crispy }}
</div>
<div class="card-header">
<h4 class="clr-config">Inserisci file multimediali per il punto di interesse</h4>
</div>
- <form method="POST" id="multimedia_form" action="{% url 'sistema:poi' %}" enctype="multipart/form-data">{% csrf_token %}
+ <form method="POST" id="multimedia_form" action="{% url 'sistema:poi' %}"
+ enctype="multipart/form-data">{% csrf_token %}
<div class="card-body">
{% if form.instance.pk %}
<input type="hidden" name="add-multimedia" form="multimedia_form">
<script>
+
$(document).ready(function () {
+ var pk = '{{ form.instance.pk }}';
+ var icona = '{{ icona }}';
+
+ 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>');
+
+ $("#id_icona").change(function () {
+ $("#id_icona_presente").empty();
+ });
$('#punti_dropdown').addClass('active');
$('#punti_toggle').addClass('toggled');
$('#add_lista').addClass('active');
ajax: {
"url": "{% url 'sistema:multimedia_datatables' %}",
"type": 'GET',
- "data": {'pk': {{ form.instance.pk }} },
+ "data": {'pk': {{ form.instance.pk }}},
},
language: {
url: "//cdn.datatables.net/plug-ins/1.10.20/i18n/Italian.json"
{% endif %}
});
- function DeleteMultimedia(pk){
- Swal.fire({
- title: "Sei sicuro?",
- text: "Una volta eliminata non sarà più possibile accedere all'informazione!",
- icon: "warning",
- showCancelButton: true,
- confirmButtonColor: '#3085d6',
- cancelButtonColor: '#d33',
- confirmButtonText: 'Conferma',
- cancelButtonText: 'Annulla',
- }).then((willDelete) => {
- if (willDelete.value) {
- $.ajax({
- type: 'GET',
- data: {
- 'pk': pk,
- 'method': 'del-multimedia',
- },
- url: '{% url 'sistema:poi' %}',
- success: function (response) {
- Swal.fire("Fatto!", response.response, "success")
- .then((value) => {
- location.reload();
- });
- },
- error: () => {
- Swal.fire("Attenzione!", response.response, "error")
- }
- })
- } else if (
- willDelete.dismiss === Swal.DismissReason.cancel
- ) {
- Swal.fire(
- 'Annullato',
- 'Rimozione annullata.',
- 'error'
- )
- }
- });
- }
+ function DeleteMultimedia(pk) {
+ Swal.fire({
+ title: "Sei sicuro?",
+ text: "Una volta eliminata non sarà più possibile accedere all'informazione!",
+ icon: "warning",
+ showCancelButton: true,
+ confirmButtonColor: '#3085d6',
+ cancelButtonColor: '#d33',
+ confirmButtonText: 'Conferma',
+ cancelButtonText: 'Annulla',
+ }).then((willDelete) => {
+ if (willDelete.value) {
+ $.ajax({
+ type: 'GET',
+ data: {
+ 'pk': pk,
+ 'method': 'del-multimedia',
+ },
+ url: '{% url 'sistema:poi' %}',
+ success: function (response) {
+ Swal.fire("Fatto!", response.response, "success")
+ .then((value) => {
+ location.reload();
+ });
+ },
+ error: () => {
+ Swal.fire("Attenzione!", response.response, "error")
+ }
+ })
+ } else if (
+ willDelete.dismiss === Swal.DismissReason.cancel
+ ) {
+ Swal.fire(
+ 'Annullato',
+ 'Rimozione annullata.',
+ 'error'
+ )
+ }
+ });
+ }
</script>
<div class="card-header justify-content-between">
<h4 class="clr-bolle">Lista punti di interesse</h4>
<a href="{% url 'sistema:poi' %}">
- <button class="btn btn-dark"><i class="fas fa-plus mr-2"></i> Aggiungi una nuovo punto di interesse</button>
+ <button class="btn btn-dark"><i class="fas fa-plus mr-2"></i> Aggiungi una nuovo punto di
+ interesse
+ </button>
</a>
</div>
<div class="row">
<div class="table-responsive">
<table id="poi-table"
- class="table table-sm table-bordered table-striped dataTables_wrapper dt-bootstrap4 no-footer" style="width: 100% !important;">
+ class="table table-sm table-bordered table-striped dataTables_wrapper dt-bootstrap4 no-footer"
+ style="width: 100% !important;">
<thead>
<tr>
<th>#</th>
+ <th>Icona</th>
<th>Nome</th>
<th>Latitudine</th>
<th>Longitudine</th>
+ <th>Pericolo</th>
<th></th>
<th></th>
</tr>
url: "//cdn.datatables.net/plug-ins/1.10.20/i18n/Italian.json"
},
columnDefs: [
- {"targets": 4, "orderable": false, "width": "5%"},
- {"targets": 5, "orderable": false, "width": "5%"},
+ {"targets": 0, "orderable": false, "width": "3%"},
+ {"targets": 1, "orderable": false, "width": "5%"},
+ {"targets": 5, "orderable": false, "width": "5%"},
+ {"targets": 6, "orderable": false, "width": "5%"},
+ {"targets": 7, "orderable": false, "width": "5%"},
],
"order": []
});
});
- function DeletePoi(pk){
+ function DeletePoi(pk) {
Swal.fire({
title: "Sei sicuro?",
text: "Una volta eliminata non sarà più possibile accedere all'informazione!",
form = PoiForm(request.POST, instance=PointOfInterest.objects.get(pk=int(self.request.POST.get('pk'))))
files = request.FILES.getlist('icona')
is_danger = request.POST.get('is_danger') == 'on'
+ icona = request.POST.get('link_icona')
if form.is_valid():
form_save = form.save(commit=False)
form_save.is_danger = is_danger
for f in files:
form_save.icona = f
else:
- form_save.icona = os.path.join(MEDIA_ROOT, 'icon/default.png')
+ if not icona:
+ form_save.icona = os.path.join(MEDIA_ROOT, 'icon/default.png')
form_save.save()
messages.add_message(request, messages.INFO, 'Punto di interesse aggiornata con successo.')
self.del_multimedia(request)
return JsonResponse({'response': 'Punto di interesse eliminato con successo'}, status=status.HTTP_200_OK)
elif 'pk' in kwargs:
- return render(request, 'add_mod_poi.html', {'form': PoiForm(instance=PointOfInterest.objects.get(pk=int(self.kwargs['pk']))),
+ poi = PointOfInterest.objects.get(pk=int(self.kwargs['pk']))
+ form = PoiForm(instance=poi)
+ icona = poi.icona
+ 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,
'form_multimedia': MultimediaForm()})
else:
return render(request, 'add_mod_poi.html', {'form': PoiForm(), 'form_multimedia': MultimediaForm()})