<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
- <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7 (pia_atlas)" project-jdk-type="Python SDK" />
+ <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7 (socoin_atlas)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/env" />
</content>
- <orderEntry type="jdk" jdkName="Python 3.7 (pia_atlas)" jdkType="Python SDK" />
+ <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TemplatesService">
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):
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 '<button class="btn btn-sm btn-danger" onclick="DeactivateGestioneLocalita(%s)" ><i class="fas fa-circle-minus"></i></button>' % 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
+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):
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'})
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)
class="dropdown-item has-icon">
<i class="fas fa-cog"></i> Profilo</a></li>
<div class="dropdown-divider"></div>
- <li><a class="dropdown-item has-icon text-danger" href="/logout/">
+ <li><a class="dropdown-item has-icon text-danger" href="{% url 'utenti:logout' %}">
<i class="fa fa-sign-out-alt"></i> Logout</a></li>
</ul>
</li>
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
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'),
path('mod_poi/<int:pk>/', PoiView.as_view(), name='mod_poi'),
+
]
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':
if column == 'last_login':
return escape('{0}'.format(row.last_login or ''))
if column == 'mod':
- return '<a class="btn btn-sm btn-primary" href="#" ><i class="fas fa-edit"></i></a>' #% row.pk
+ if self.get_role() == settings.ADMIN_GROUPS:
+ return '<a class="btn btn-sm btn-primary" href="/utenti/mod_admin/%s/" ><i class="fas fa-edit"></i></a>' % row.pk
+ elif self.get_role() == settings.TOUR_OPERATOR_GROUPS:
+ return '<a class="btn btn-sm btn-primary" href="/utenti/mod_tour_operator/%s/" ><i class="fas fa-edit"></i></a>' % row.pk
+ else:
+ return '<a class="btn btn-sm btn-primary" href="/utenti/mod_cliente/%s/" ><i class="fas fa-edit"></i></a>' % row.pk
if column == 'del':
- return '<a class="btn btn-sm btn-danger" href="#" ><i class="fas fa-trash"></i></a>' #% row.pk
+ return '<a class="btn btn-sm btn-danger" href="DeleteUser(%s)" ><i class="fas fa-trash"></i></a>' % row.pk
else:
return super(UserDatatables, self).render_column(row, column)
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()
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()
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()
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
--- /dev/null
+{% extends 'base.html' %}
+{% load static %}
+{% load crispy_forms_tags %}
+{% block content %}
+
+ <div class="row">
+ <div class="col-12 col-md-12 col-lg-12">
+ <h1 class="line-bolle"><i class="fa-solid fa-crown clr-bolle mr-2" aria-hidden="true"></i> Gestione amministratori</h1>
+ <div class="card">
+ <div class="card-header">
+ {% if form.instance.pk %}
+ <h4 class="clr-config">Modifica l'amministratore #{{ form.instance.pk }}</h4>
+ {% else %}
+ <h4 class="clr-config">Registra una nuovo amministratire del sistema</h4>
+ {% endif %}
+ </div>
+
+ <div class="card-body">
+ <form method="POST" id="admin_form" action="{% url 'utenti:admin' %}">{% csrf_token %}
+ {% if form.instance.pk %}
+ <input type="hidden" name="mod" form="admin_form">
+ <input type="hidden" name="pk" value="{{ form.instance.pk }}" form="admin_form">
+ {% endif %}
+ {{form | crispy }}
+ <br>
+ <div class="card-footer text-right">
+ <button class="btn btn-primary" type="button" onclick="javascript:this.form.submit();"><i class="fas fa-save" aria-hidden="true"></i> Salva
+ </button>
+ </div>
+
+ </form>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+ <script>
+
+ </script>
+
+
+{% endblock %}
\ No newline at end of file
--- /dev/null
+{% extends 'base.html' %}
+{% load static %}
+{% load crispy_forms_tags %}
+{% block content %}
+
+ <div class="row">
+ <div class="col-12 col-md-12 col-lg-12">
+ <h1 class="line-bolle"><i class="fa-solid fa-handshake-angle clr-bolle mr-2" aria-hidden="true"></i> Gestione tour operator</h1>
+ <div class="card">
+ <div class="card-header">
+ {% if form.instance.pk %}
+ <h4 class="clr-config">Modifica il tour operator #{{ form.instance.pk }}</h4>
+ {% else %}
+ <h4 class="clr-config">Registra una nuovo tour operator nel sistema</h4>
+ {% endif %}
+ </div>
+
+ <div class="card-body">
+ <form method="POST" id="tour-operator_form" action="#">{% csrf_token %}
+ {% if form.instance.pk %}
+ <input type="hidden" name="mod" form="tour-operator_form">
+ <input type="hidden" name="pk" value="{{ form.instance.pk }}" form="tour-operator_form">
+ {% endif %}
+ {{form | crispy }}
+ </form>
+
+ <br>
+ <hr>
+ <div class="section-title mt-0">Associa località</div>
+ <form method="POST" id="gestione_form" action="#">{% csrf_token %}
+ {{form_gestione | crispy }}
+ </form>
+
+ {% if form.instance.pk %}
+ <br>
+ <hr>
+ <div class="section-title mt-0">Località già associate</div>
+ <div class="row">
+ <div class="table-responsive">
+ <table id="gestisce-table"
+ class="table table-sm table-bordered table-striped dataTables_wrapper dt-bootstrap4 no-footer" style="width: 100% !important;">
+ <thead>
+ <tr>
+ <th>#</th>
+ <th>Località</th>
+ <th>Data inizio</th>
+ <th>Data fine</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ {% endif %}
+
+ <br>
+
+ <div class="card-footer text-right">
+ <button class="btn btn-primary" type="button" onclick="SubmitForms();"><i class="fas fa-save" aria-hidden="true"></i> Salva
+ </button>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+ <script>
+
+ {% if form.instance.pk %}
+ $(document).ready(function () {
+ $('#gestisce-table').dataTable({
+ processing: true,
+ serverSide: true,
+ ajax: {
+ "url": "{% url 'sistema:gestisce_localita_datatables' %}",
+ "type": 'GET',
+ "data": {'pk': {{ form.instance.pk }}},
+ },
+ language: {
+ url: "//cdn.datatables.net/plug-ins/1.10.20/i18n/Italian.json"
+ },
+ columnDefs: [
+ {"targets": 4, "orderable": false},
+ ],
+ "order": []
+ });
+ });
+
+ function DeactivateGestioneLocalita(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': 'deactivate-localita',
+ },
+ 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'
+ )
+ }
+ });
+ }
+
+ {% endif %}
+
+ function objectifyForm(formArray) {
+ //serialize data function
+ var returnArray = {};
+ for (var i = 0; i < formArray.length; i++) {
+ returnArray[formArray[i]['name']] = formArray[i]['value'];
+ }
+ return returnArray;
+ }
+
+ function SubmitForms(){
+ tour_operator_form = objectifyForm($('#tour-operator_form').serializeArray());
+ gestione_form = objectifyForm($('#gestione_form').serializeArray());
+
+ method = ''
+ pk_tour_operator_form = ''
+ {% if form.instance.pk %}
+ method = 'mod'
+ pk_tour_operator_form = {{ form.instance.pk }}
+ {% endif %}
+
+ $.ajax({
+ data: {
+ 'tour_operator_form': JSON.stringify(tour_operator_form),
+ 'gestione_form': JSON.stringify(gestione_form),
+ 'pk_tour_operator_form': pk_tour_operator_form,
+ 'method': method,
+ },
+ type: "POST",
+ url: '{% url 'utenti:tour_operator' %}',
+ "headers": {'X-CSRFToken': '{{ csrf_token }}'},
+ })
+ .done(function (response) {
+ Swal.fire('', "Operazione effettuata con successo", "success").then((value) => {
+ location.reload();
+ });
+ })
+ .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>
+
+
+{% endblock %}
\ No newline at end of file
<div class="card">
<div class="card-header justify-content-between">
<h4 class="clr-bolle">Lista amministratori</h4>
- <a href="#">
+ <a href="{% url 'utenti:admin' %}">
<button class="btn-sm btn-primary"><i class="fa-solid fa-plus"></i> Aggiungi un admin</button>
</a>
</div>
"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'
+ )
+ }
+ });
+ }
+
</script>
{% endblock %}
\ No newline at end of file
"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'
+ )
+ }
+ });
+ }
+
+
</script>
{% endblock %}
\ No newline at end of file
<div class="card">
<div class="card-header justify-content-between">
<h4 class="clr-bolle">Lista tour operator</h4>
- <a href="#">
+ <a href="{% url 'utenti:tour_operator' %}">
<button class="btn-sm btn-primary"><i class="fa-solid fa-plus"></i> Aggiungi un nuovo tour operator</button>
</a>
</div>
"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'
+ )
+ }
+ });
+ }
+
</script>
{% endblock %}
\ No newline at end of file
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')),
path('user_datatables/', UserDatatables.as_view(), name='user_datatables'),
+ ## TOUR OPERATOR ##
+ path('tour_operator/', TourOperatorView.as_view(), name='tour_operator'),
+ path('mod_tour_operator/<int:pk>/', TourOperatorView.as_view(), name='mod_tour_operator'),
+
+ ## CLIENTE ##
+ path('cliente/', ClienteView.as_view(), name='cliente'),
+ path('mod_cliente/<int:pk>/', ClienteView.as_view(), name='mod_cliente'),
+
+ ## ADMIN ##
+ path('admin/', AdminView.as_view(), name='admin'),
+ path('mod_admin/<int:pk>/', AdminView.as_view(), name='mod_admin'),
]
\ No newline at end of file
+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):
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 += '<li>' + err + '</li>'
+ 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 += '<li>' + err + '</li>'
+ 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 += '<li>' + err + '</li>'
+ 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 += '<li>' + err + '</li>'
+ 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):
#