From 671068000a92465797e5af6d749acdca5ba6ecef Mon Sep 17 00:00:00 2001 From: Costantino Vitale Date: Mon, 3 Oct 2022 17:30:43 +0200 Subject: [PATCH] =?utf8?q?-=20Gestione=20tour=20operator=20con=20localit?= =?utf8?q?=C3=A0=20annessa=20-=20Gestione=20amministratore?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 2 +- .idea/socoin_atlas.iml | 2 +- sistema/datatables.py | 31 +++- sistema/forms.py | 32 +++- sistema/models.py | 2 + sistema/templates/base.html | 2 +- sistema/urls.py | 4 +- utenti/datatables.py | 33 ++-- utenti/forms.py | 53 ++++-- utenti/templates/add_mod_cliente.html | 43 +++++ utenti/templates/add_mod_tour_operator.html | 190 ++++++++++++++++++++ utenti/templates/admin_list.html | 44 ++++- utenti/templates/clienti_list.html | 43 +++++ utenti/templates/tour_operator_list.html | 44 ++++- utenti/urls.py | 13 +- utenti/views.py | 141 ++++++++++++++- 16 files changed, 643 insertions(+), 36 deletions(-) create mode 100644 utenti/templates/add_mod_cliente.html create mode 100644 utenti/templates/add_mod_tour_operator.html diff --git a/.idea/misc.xml b/.idea/misc.xml index d28790d..ec83ff9 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/.idea/socoin_atlas.iml b/.idea/socoin_atlas.iml index a312c3a..f89b1a8 100644 --- a/.idea/socoin_atlas.iml +++ b/.idea/socoin_atlas.iml @@ -16,7 +16,7 @@ - + diff --git a/sistema/datatables.py b/sistema/datatables.py index 90f0e27..72eeb07 100644 --- a/sistema/datatables.py +++ b/sistema/datatables.py @@ -2,7 +2,7 @@ from django_datatables_view.base_datatable_view import BaseDatatableView from django.utils.html import escape from django.db.models import Q -from sistema.models import Localita, Multimedia, TipologiaMultimedia, Percorso, PointOfInterest, Feedback +from sistema.models import Localita, Multimedia, TipologiaMultimedia, Percorso, PointOfInterest, Feedback, Gestisce class LocalitaDatatables(BaseDatatableView): @@ -190,4 +190,33 @@ class FeedbackDatatables(BaseDatatableView): search = self.request.GET.get('search[value]', None) if search: qs = qs.filter(Q(utente__icontains=search) | Q(valutazione__icontains=search)) + return qs + + +class GestisceLocalitaDatatables(BaseDatatableView): + model = Gestisce + columns = ['id', 'localita', 'data_inizio', 'data_fine', 'del'] + order_columns = ['id', 'localita', 'data_inizio', 'data_fine', ''] + + def get_initial_queryset(self): + return self.model.objects.filter(utente_id=self.request.GET.get('pk'), is_active=True) + + def render_column(self, row, column): + if column == 'id': + return escape('{0}'.format(row.pk)) + if column == 'localita': + return escape('{0}'.format(row.localita)) + if column == 'data_inizio': + return escape('{0}'.format(row.data_inizio or '')) + if column == 'data_fine': + return escape('{0}'.format(row.data_fine or '')) + if column == 'del': + return '' % row.pk + else: + return super(GestisceLocalitaDatatables, self).render_column(row, column) + + def filter_queryset(self, qs): + search = self.request.GET.get('search[value]', None) + if search: + qs = qs.filter(Q(localita__descrizione__icontains=search)) return qs \ No newline at end of file diff --git a/sistema/forms.py b/sistema/forms.py index df266ea..5f5f601 100644 --- a/sistema/forms.py +++ b/sistema/forms.py @@ -1,6 +1,8 @@ +from datetime import datetime + from django.contrib.auth.forms import * -from sistema.models import Localita, TipologiaMultimedia +from sistema.models import Localita, TipologiaMultimedia, Gestisce class LocalitaForm(forms.ModelForm): @@ -45,4 +47,30 @@ class TipoMultimediaForm(forms.ModelForm): label="Nome tipologia", max_length=255, widget=forms.TextInput(attrs={'class': 'form-control', 'form': 'tipo_multimedia_form'}) - ) \ No newline at end of file + ) + + +class GestisceForm(forms.ModelForm): + data_inizio = forms.DateField( + label='Data inizio', + initial=None, + widget=forms.DateInput(attrs={'type': 'date'}), + ) + + data_fine = forms.DateField( + label='Data fine', + initial=None, + required=False, + widget=forms.DateInput(attrs={'type': 'date'}), + ) + + class Meta: + model = Gestisce + exclude = ('utente', 'is_active',) + + def __init__(self, *args, **kwargs): + super(GestisceForm, self).__init__(*args, **kwargs) + localita = Localita.objects.filter(is_active=True) + self.fields['localita'] = forms.ModelChoiceField(queryset=localita, widget=forms.Select(attrs={'class': 'form-control'}), initial='') + self.fields['data_inizio'].widget.attrs.update({'class': 'form-control'}) + self.fields['data_fine'].widget.attrs.update({'class': 'form-control'}) diff --git a/sistema/models.py b/sistema/models.py index a6f9a98..4d456de 100644 --- a/sistema/models.py +++ b/sistema/models.py @@ -10,6 +10,8 @@ class Localita(models.Model): regione = models.CharField(max_length=50, null=True, blank=True) is_active = models.BooleanField(default=True) + def __str__(self): + return self.descrizione + ', ' + self.provincia + ' (' + self.regione + ')' class Gestisce(models.Model): utente = models.ForeignKey(User, on_delete=models.DO_NOTHING) diff --git a/sistema/templates/base.html b/sistema/templates/base.html index 5b94b50..8cf7400 100644 --- a/sistema/templates/base.html +++ b/sistema/templates/base.html @@ -118,7 +118,7 @@ class="dropdown-item has-icon"> Profilo -
  • +
  • Logout
  • diff --git a/sistema/urls.py b/sistema/urls.py index 625b6aa..dc97372 100644 --- a/sistema/urls.py +++ b/sistema/urls.py @@ -1,7 +1,7 @@ from django.urls import path from sistema.datatables import LocalitaDatatables, MultimediaDatatables, TipoMultimediaDatatables, PercorsoDatatables, \ - PoiDatatables, FeedbackDatatables + PoiDatatables, FeedbackDatatables, GestisceLocalitaDatatables from sistema.views import Home, LocalitaListView, MultimediaListView, PuntiInteresseListView, \ TipologiaMultimediaListView, PercorsiListView, LocalitaView, TipoMultimediaView, PoiView @@ -22,6 +22,7 @@ urlpatterns = [ path('percorso_datatables/', PercorsoDatatables.as_view(), name='percorso_datatables'), path('poi_datatables/', PoiDatatables.as_view(), name='poi_datatables'), path('feedback_datatables/', FeedbackDatatables.as_view(), name='feedback_datatables'), + path('gestisce_localita_datatables/', GestisceLocalitaDatatables.as_view(), name='gestisce_localita_datatables'), ## LOCALITA ## path('localita/', LocalitaView.as_view(), name='localita'), @@ -36,4 +37,5 @@ urlpatterns = [ path('mod_poi//', PoiView.as_view(), name='mod_poi'), + ] diff --git a/utenti/datatables.py b/utenti/datatables.py index 8f6d0a8..dac241e 100644 --- a/utenti/datatables.py +++ b/utenti/datatables.py @@ -11,18 +11,22 @@ class UserDatatables(BaseDatatableView): columns = ['id', 'first_name', 'last_name', 'username', 'email', 'last_login', 'mod', 'del'] order_columns = ['id', 'first_name', 'last_name', 'username', 'email', 'last_login', '', ''] - def get_initial_queryset(self): + def get_role(self): role = self.request.GET.get('role') + if role == settings.ADMIN_GROUPS: + return settings.ADMIN_GROUPS + elif role == settings.TOUR_OPERATOR_GROUPS: + return settings.TOUR_OPERATOR_GROUPS + elif role == settings.CLIENTI_GROUPS: + return settings.CLIENTI_GROUPS + else: + return None - if role: - if role == settings.ADMIN_GROUPS: - return self.model.objects.filter(groups__name=settings.ADMIN_GROUPS, is_active=True) - elif role == settings.TOUR_OPERATOR_GROUPS: - return self.model.objects.filter(groups__name=settings.TOUR_OPERATOR_GROUPS, is_active=True) - elif role == settings.CLIENTI_GROUPS: - return self.model.objects.filter(groups__name=settings.CLIENTI_GROUPS, is_active=True) - else: - return self.model.objects.none() + def get_initial_queryset(self): + if self.get_role(): + return self.model.objects.filter(groups__name=self.get_role(), is_active=True) + else: + return self.model.objects.none() def render_column(self, row, column): if column == 'id': @@ -38,9 +42,14 @@ class UserDatatables(BaseDatatableView): if column == 'last_login': return escape('{0}'.format(row.last_login or '')) if column == 'mod': - return '' #% row.pk + if self.get_role() == settings.ADMIN_GROUPS: + return '' % row.pk + elif self.get_role() == settings.TOUR_OPERATOR_GROUPS: + return '' % row.pk + else: + return '' % row.pk if column == 'del': - return '' #% row.pk + return '' % row.pk else: return super(UserDatatables, self).render_column(row, column) diff --git a/utenti/forms.py b/utenti/forms.py index 22c4b1d..1318f3c 100644 --- a/utenti/forms.py +++ b/utenti/forms.py @@ -8,17 +8,39 @@ class FormLogin(forms.Form): password = forms.CharField(max_length=255, widget=forms.PasswordInput(attrs={'class':'form-control'})) +class UserEditForm(UserChangeForm): + class Meta: + model = User + exclude = ['username', 'is_staff', 'is_superuser', 'last_login', 'groups', 'user_permissions', 'is_active', 'date_joined', 'password'] + + +class CustomUserCreationForm(forms.ModelForm): + class Meta: + model = User + fields = ['username', 'first_name', 'last_name'] + + def __init__(self, *args, **kwargs): + super(CustomUserCreationForm, self).__init__(*args, **kwargs) + for f in self.fields: + self.fields[f].widget.attrs.update({'class': 'form-control'}) + + class RegistrationForm(UserCreationForm): class Meta: model = User fields = ['username', 'first_name', 'last_name', 'email', 'password1', 'password2'] + def __init__(self, *args, **kwargs): + super(RegistrationForm, self).__init__(*args, **kwargs) + for f in self.fields: + self.fields[f].widget.attrs.update({'class': 'form-control'}) + def save(self, commit=True): user = super().save(commit=False) if commit: user.save() - if user.groups.filter(name=settings.CLIENTI_GROUPS).exists(): - group = Group(name=settings.CLIENTI_GROUPS) + if Group.objects.filter(name=settings.CLIENTI_GROUPS).exists(): + group = Group.objects.get(name=settings.CLIENTI_GROUPS) else: group = Group(name=settings.CLIENTI_GROUPS) group.save() @@ -28,17 +50,22 @@ class RegistrationForm(UserCreationForm): return user -class TourOperatorForm(UserCreationForm): +class TourOperatorNewForm(UserCreationForm): class Meta: model = User - fields = ['username', 'first_name', 'last_name', 'password1', 'password2'] + fields = ['username', 'email', 'first_name', 'last_name', 'password1'] + + def __init__(self, *args, **kwargs): + super(TourOperatorNewForm, self).__init__(*args, **kwargs) + for f in self.fields: + self.fields[f].widget.attrs.update({'class': 'form-control'}) def save(self, commit=True): user = super().save(commit=False) if commit: user.save() - if user.groups.filter(name=settings.TOUR_OPERATOR_GROUPS).exists(): - group = Group(name=settings.TOUR_OPERATOR_GROUPS) + if Group.objects.filter(name=settings.TOUR_OPERATOR_GROUPS).exists(): + group = Group.objects.get(name=settings.TOUR_OPERATOR_GROUPS) else: group = Group(name=settings.TOUR_OPERATOR_GROUPS) group.save() @@ -53,12 +80,17 @@ class AdminForm(UserCreationForm): model = User fields = ['username', 'first_name', 'last_name', 'password1', 'password2'] + def __init__(self, *args, **kwargs): + super(AdminForm, self).__init__(*args, **kwargs) + for f in self.fields: + self.fields[f].widget.attrs.update({'class': 'form-control'}) + def save(self, commit=True): user = super().save(commit=False) if commit: user.save() - if user.groups.filter(name=settings.ADMIN_GROUPS).exists(): - group = Group(name=settings.ADMIN_GROUPS) + if Group.objects.filter(name=settings.ADMIN_GROUPS).exists(): + group = Group.objects.get(name=settings.ADMIN_GROUPS) else: group = Group(name=settings.ADMIN_GROUPS) group.save() @@ -67,8 +99,3 @@ class AdminForm(UserCreationForm): else: return user - -class UserEditForm(UserChangeForm): - class Meta: - model = User - exclude = ['username', 'is_staff', 'is_superuser', 'last_login', 'groups', 'user_permissions', 'is_active', 'date_joined', 'password'] \ No newline at end of file diff --git a/utenti/templates/add_mod_cliente.html b/utenti/templates/add_mod_cliente.html new file mode 100644 index 0000000..c912b40 --- /dev/null +++ b/utenti/templates/add_mod_cliente.html @@ -0,0 +1,43 @@ +{% extends 'base.html' %} +{% load static %} +{% load crispy_forms_tags %} +{% block content %} + +
    +
    +

    Gestione amministratori

    +
    +
    + {% if form.instance.pk %} +

    Modifica l'amministratore #{{ form.instance.pk }}

    + {% else %} +

    Registra una nuovo amministratire del sistema

    + {% endif %} +
    + +
    +
    {% csrf_token %} + {% if form.instance.pk %} + + + {% endif %} + {{form | crispy }} +
    + + +
    +
    +
    +
    +
    + + + + + +{% endblock %} \ No newline at end of file diff --git a/utenti/templates/add_mod_tour_operator.html b/utenti/templates/add_mod_tour_operator.html new file mode 100644 index 0000000..76bd1f7 --- /dev/null +++ b/utenti/templates/add_mod_tour_operator.html @@ -0,0 +1,190 @@ +{% extends 'base.html' %} +{% load static %} +{% load crispy_forms_tags %} +{% block content %} + +
    +
    +

    Gestione tour operator

    +
    +
    + {% if form.instance.pk %} +

    Modifica il tour operator #{{ form.instance.pk }}

    + {% else %} +

    Registra una nuovo tour operator nel sistema

    + {% endif %} +
    + +
    +
    {% csrf_token %} + {% if form.instance.pk %} + + + {% endif %} + {{form | crispy }} +
    + +
    +
    +
    Associa località
    +
    {% csrf_token %} + {{form_gestione | crispy }} +
    + + {% if form.instance.pk %} +
    +
    +
    Località già associate
    +
    +
    + + + + + + + + + + + + + +
    +
    + {% endif %} + +
    + + + +
    +
    +
    +
    + + + + + +{% endblock %} \ No newline at end of file diff --git a/utenti/templates/admin_list.html b/utenti/templates/admin_list.html index d275f31..026e857 100644 --- a/utenti/templates/admin_list.html +++ b/utenti/templates/admin_list.html @@ -8,7 +8,7 @@

    Lista amministratori

    - +
    @@ -61,5 +61,47 @@ "order": [] }); }); + + function DeleteUser(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', + }, + url: '{% url 'utenti:admin' %}', + 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' + ) + } + }); + } + {% endblock %} \ No newline at end of file diff --git a/utenti/templates/clienti_list.html b/utenti/templates/clienti_list.html index 05d2695..4c5e302 100644 --- a/utenti/templates/clienti_list.html +++ b/utenti/templates/clienti_list.html @@ -61,5 +61,48 @@ "order": [] }); }); + + function DeleteUser(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', + }, + url: '{% url 'utenti:cliente' %}', + 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' + ) + } + }); + } + + {% endblock %} \ No newline at end of file diff --git a/utenti/templates/tour_operator_list.html b/utenti/templates/tour_operator_list.html index 79a3890..585f902 100644 --- a/utenti/templates/tour_operator_list.html +++ b/utenti/templates/tour_operator_list.html @@ -8,7 +8,7 @@
    @@ -61,5 +61,47 @@ "order": [] }); }); + + function DeleteUser(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', + }, + url: '{% url 'utenti:tour_operator' %}', + 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' + ) + } + }); + } + {% endblock %} \ No newline at end of file diff --git a/utenti/urls.py b/utenti/urls.py index 7a3fd5a..7c71045 100644 --- a/utenti/urls.py +++ b/utenti/urls.py @@ -4,7 +4,7 @@ from django.contrib import admin from django.contrib.auth import views as auth_views from utenti.datatables import UserDatatables -from utenti.views import Autentication, Logout, Register, AdminListView, TourOperatorListView, ClientiListView +from utenti.views import Autentication, Logout, Register, AdminListView, TourOperatorListView, ClientiListView, TourOperatorView, ClienteView, AdminView urlpatterns = [ path('accounts/', include('django.contrib.auth.urls')), @@ -25,4 +25,15 @@ urlpatterns = [ path('user_datatables/', UserDatatables.as_view(), name='user_datatables'), + ## TOUR OPERATOR ## + path('tour_operator/', TourOperatorView.as_view(), name='tour_operator'), + path('mod_tour_operator//', TourOperatorView.as_view(), name='mod_tour_operator'), + + ## CLIENTE ## + path('cliente/', ClienteView.as_view(), name='cliente'), + path('mod_cliente//', ClienteView.as_view(), name='mod_cliente'), + + ## ADMIN ## + path('admin/', AdminView.as_view(), name='admin'), + path('mod_admin//', AdminView.as_view(), name='mod_admin'), ] \ No newline at end of file diff --git a/utenti/views.py b/utenti/views.py index 7eea356..3df8067 100644 --- a/utenti/views.py +++ b/utenti/views.py @@ -1,11 +1,19 @@ +import json + from django.contrib.auth import authenticate, login +from django.contrib.auth.models import User +from django.http import JsonResponse from django.shortcuts import render, redirect +from django.urls import reverse from django.views import View from django.contrib import messages from django.contrib.auth import login, authenticate, logout from django.views.generic import TemplateView +from rest_framework import status -from utenti.forms import FormLogin, RegistrationForm +from sistema.forms import GestisceForm +from sistema.models import Gestisce +from utenti.forms import FormLogin, RegistrationForm, TourOperatorNewForm, CustomUserCreationForm, AdminForm class Autentication(View): @@ -84,6 +92,137 @@ class TourOperatorListView(TemplateView): class ClientiListView(TemplateView): template_name = 'clienti_list.html' + +class TourOperatorView(View): + def add_tour_operator(self, request): + form = TourOperatorNewForm(data=json.loads(request.POST.get('tour_operator_form'))) + if form.is_valid(): + form.save() + + gestisce_form = GestisceForm(data=json.loads(request.POST.get('gestione_form'))) + if gestisce_form.is_valid(): + gestisce = gestisce_form.save(commit=False) + gestisce.utente = form.instance + gestisce.save() + + messages.add_message(request, messages.INFO, 'Nuova tour operator inserito con successo.') + else: + errors = '' + for err in form.errors.as_data(): + errors += '
  • ' + err + '
  • ' + messages.add_message(request, messages.ERROR, 'Errore nell\'inserimento del tour operator. Controlla il form.') + + def mod_tour_operator(self, request): + form = CustomUserCreationForm(data=json.loads(request.POST.get('tour_operator_form')), instance=User.objects.get(pk=int(self.request.POST.get('pk_tour_operator_form')))) + if form.is_valid(): + form.save() + + gestisce_form = GestisceForm(data=json.loads(request.POST.get('gestione_form'))) + if gestisce_form.is_valid(): + gestisce = gestisce_form.save(commit=False) + gestisce.utente = form.instance + gestisce.save() + + messages.add_message(request, messages.INFO, 'Tour operator aggiornato con successo.') + else: + errors = '' + for err in form.errors.as_data(): + errors += '
  • ' + err + '
  • ' + messages.add_message(request, messages.ERROR, 'Errore nell\'aggiornamento del tour operator. Controlla il form.') + + def del_tour_operator(self, request): + tour_operator = User.objects.get(pk=int(request.GET.get('pk'))) + tour_operator.is_active = False + tour_operator.save() + + def deactivate_localita(self, request): + gestisce = Gestisce.objects.get(pk=int(request.GET.get('pk'))) + gestisce.is_active = False + gestisce.save() + + def get(self, request, *args, **kwargs): + if request.GET.get('method') == 'del': + self.del_tour_operator(request) + return JsonResponse({'response': 'Tour operator eliminato con successo'}, status=status.HTTP_200_OK) + elif request.GET.get('method') == 'deactivate-localita': + self.deactivate_localita(request) + return JsonResponse({'response': 'Località eliminata con successo'}, status=status.HTTP_200_OK) + elif 'pk' in kwargs: + return render(request, 'add_mod_tour_operator.html', {'form': CustomUserCreationForm(instance=User.objects.get(pk=int(self.kwargs['pk']))), + 'form_gestione': GestisceForm()}) + else: + return render(request, 'add_mod_tour_operator.html', {'form': TourOperatorNewForm(), 'form_gestione': GestisceForm()}) + + def post(self, request, *args, **kwargs): + if self.request.POST.get('method') == 'mod': + self.mod_tour_operator(request) + else: + self.add_tour_operator(request) + + return redirect(reverse('utenti:touroperator_list')) + + +class ClienteView(View): + def del_cliente(self, request): + cliente = User.objects.get(pk=int(request.GET.get('pk'))) + cliente.is_active = False + cliente.save() + + def get(self, request, *args, **kwargs): + if request.GET.get('method') == 'del': + self.del_cliente(request) + return JsonResponse({'response': 'Cliente eliminato con successo'}, status=status.HTTP_200_OK) + + +class AdminView(View): + + def add_admin(self, request): + form = AdminForm(request.POST) + if form.is_valid(): + form.save() + + messages.add_message(request, messages.INFO, 'Nuova amministratore inserito con successo.') + else: + errors = '' + for err in form.errors.as_data(): + errors += '
  • ' + err + '
  • ' + messages.add_message(request, messages.ERROR, 'Errore nell\'inserimento dell\'amministratore. Controlla il form.') + + def mod_admin(self, request): + form = CustomUserCreationForm(data=request.POST, instance=User.objects.get(pk=int(self.request.POST.get('pk')))) + if form.is_valid(): + form.save() + + messages.add_message(request, messages.INFO, 'Admin aggiornato con successo.') + else: + errors = '' + for err in form.errors.as_data(): + errors += '
  • ' + err + '
  • ' + messages.add_message(request, messages.ERROR, 'Errore nell\'aggiornamento dell\'admin. Controlla il form.') + + def del_admin(self, request): + admin = User.objects.get(pk=int(request.GET.get('pk'))) + admin.is_active = False + admin.save() + + def get(self, request, *args, **kwargs): + if request.GET.get('method') == 'del': + self.del_admin(request) + return JsonResponse({'response': 'Admin eliminato con successo'}, status=status.HTTP_200_OK) + elif 'pk' in kwargs: + return render(request, 'add_mod_cliente.html', {'form': CustomUserCreationForm(instance=User.objects.get(pk=int(self.kwargs['pk'])))}) + else: + return render(request, 'add_mod_cliente.html', {'form': AdminForm()}) + + + def post(self, request, *args, **kwargs): + if 'mod' in request.POST: + self.mod_admin(request) + else: + self.add_admin(request) + + return redirect(reverse('utenti:admin_list')) + # from braces.views import GroupRequiredMixin # class SomeProtectedView(GroupRequiredMixin, TemplateView): # -- 2.43.0