]> git.atlas4tour.it Git - pia_atlas.git/commitdiff
Commit delle app
authorCostantino Vitale <costantino.vitale@dyrecta.com>
Thu, 29 Sep 2022 11:25:50 +0000 (13:25 +0200)
committerCostantino Vitale <costantino.vitale@dyrecta.com>
Thu, 29 Sep 2022 11:25:50 +0000 (13:25 +0200)
40 files changed:
api/admin.py [new file with mode: 0644]
api/apps.py [new file with mode: 0644]
api/models.py [new file with mode: 0644]
api/tests.py [new file with mode: 0644]
api/urls.py [new file with mode: 0644]
api/views.py [new file with mode: 0644]
frontend/static/admin/img/login-1.png [deleted file]
frontend/static/admin/img/login.png [deleted file]
frontend/static/admin/img/logo-farella-white.png [deleted file]
frontend/static/admin/img/logo-farella.png [deleted file]
frontend/static/assets/css/custom.css
frontend/static/assets/img/logo-farella-horizontal-1.png [deleted file]
frontend/static/assets/img/logo-farella-horizontal.png [deleted file]
frontend/static/assets/img/logo-farella-mini.png [deleted file]
frontend/static/assets/img/logo-farella-mobile.png [deleted file]
frontend/static/assets/img/logo.png [changed mode: 0755->0644]
frontend/static/assets/img/logo_prima_nota.png [deleted file]
frontend/static/assets/img/logo_stampa.png [deleted file]
frontend/static/assets/img/tratta_breve.jpg [deleted file]
frontend/static/assets/img/tratta_breve.png [deleted file]
frontend/static/assets/img/tratta_lunga.jpg [deleted file]
frontend/static/assets/img/tratta_lunga.png [deleted file]
frontend/templates/base.html
frontend/templates/home.html [new file with mode: 0644]
frontend/templates/registration/custom_password_reset_complete.html [new file with mode: 0644]
frontend/templates/registration/custom_password_reset_confirm.html [new file with mode: 0644]
frontend/templates/registration/custom_password_reset_done.html [new file with mode: 0644]
frontend/templates/registration/custom_password_reset_email.html [new file with mode: 0644]
frontend/templates/registration/login.html [new file with mode: 0644]
frontend/urls.py [new file with mode: 0644]
frontend/views.py [new file with mode: 0644]
socoin_atlas/urls.py
utenti/admin.py [new file with mode: 0644]
utenti/apps.py [new file with mode: 0644]
utenti/forms.py [new file with mode: 0644]
utenti/mixins.py [new file with mode: 0644]
utenti/models.py [new file with mode: 0644]
utenti/tests.py [new file with mode: 0644]
utenti/urls.py [new file with mode: 0644]
utenti/views.py [new file with mode: 0644]

diff --git a/api/admin.py b/api/admin.py
new file mode 100644 (file)
index 0000000..8c38f3f
--- /dev/null
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/api/apps.py b/api/apps.py
new file mode 100644 (file)
index 0000000..66656fd
--- /dev/null
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class ApiConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'api'
diff --git a/api/models.py b/api/models.py
new file mode 100644 (file)
index 0000000..71a8362
--- /dev/null
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/api/tests.py b/api/tests.py
new file mode 100644 (file)
index 0000000..7ce503c
--- /dev/null
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/api/urls.py b/api/urls.py
new file mode 100644 (file)
index 0000000..fca688d
--- /dev/null
@@ -0,0 +1,10 @@
+from django.contrib import admin
+from django.urls import path, include
+from django.contrib.auth import views as auth_views
+
+from api.views import Login_v2, RegistrationAPI
+
+urlpatterns = [
+    path('api-login/', Login_v2.as_view(), name='api_login'),
+    path('api-registration/', RegistrationAPI.as_view(), name='api_registration'),
+]
diff --git a/api/views.py b/api/views.py
new file mode 100644 (file)
index 0000000..a07eb90
--- /dev/null
@@ -0,0 +1,124 @@
+from django.http import JsonResponse
+from django.shortcuts import render
+from django.utils.translation import ugettext as _
+from rest_framework import status
+from django.contrib.auth import authenticate
+from rest_framework import serializers
+from rest_framework.response import Response
+from rest_framework.views import APIView
+from rest_framework_simplejwt.serializers import PasswordField
+from rest_framework_simplejwt.tokens import RefreshToken
+from rest_framework_simplejwt.views import TokenViewBase
+from rest_framework_simplejwt.exceptions import AuthenticationFailed
+
+
+class TokenObtainLoginSerializer(serializers.Serializer):
+    login = 'login'
+
+    default_error_messages = {
+        'no_active_account': _('Credenziali errate')
+    }
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+        self.fields[self.login] = serializers.CharField()
+        self.fields['password'] = PasswordField()
+
+    def validate(self, attrs):
+        authenticate_kwargs = {
+            self.login: attrs[self.login],
+            'password': attrs['password'],
+        }
+        try:
+            authenticate_kwargs['request'] = self.context['request']
+        except KeyError:
+            pass
+
+        self.user = authenticate(**authenticate_kwargs)
+
+        # Prior to Django 1.10, inactive users could be authenticated with the
+        # default `ModelBackend`.  As of Django 1.10, the `ModelBackend`
+        # prevents inactive users from authenticating.  App designers can still
+        # allow inactive users to authenticate by opting for the new
+        # `AllowAllUsersModelBackend`.  However, we explicitly prevent inactive
+        # users from authenticating to enforce a reasonable policy and provide
+        # sensible backwards compatibility with older Django versions.
+        if self.user is None or not self.user.is_active:
+            raise AuthenticationFailed(
+                self.error_messages['no_active_account'],
+                'no_active_account',
+            )
+
+
+        return {}
+
+    @classmethod
+    def get_token(cls, user):
+        raise NotImplementedError('Must implement `get_token` method for `TokenObtainSerializer` subclasses')
+
+
+class TokenObtainPairLoginSerializer(TokenObtainLoginSerializer):
+    @classmethod
+    def get_token(cls, user):
+        return RefreshToken.for_user(user)
+
+    def validate(self, attrs):
+        data = super().validate(attrs)
+
+        refresh = self.get_token(self.user)
+
+        data['refresh'] = str(refresh)
+        #data['access'] = str(refresh.access_token)
+        data['token'] = str(refresh.access_token)
+        data['change_password'] = self.user.change_password
+        if self.user.last_login:
+            data['last_login'] = self.user.last_login.strftime('%Y-%M-%d %H:%M:%S')
+        else:
+            data['last_login'] = None
+        data['gender'] = self.user.gender
+        data['birth_date'] = self.user.birth_date
+        data['pk'] = self.user.pk
+
+        return data
+
+
+class Login_v2(TokenViewBase):
+    """
+    Takes a set of user credentials and returns an access and refresh JSON web
+    token pair to prove the authentication of those credentials.
+    """
+    serializer_class = TokenObtainPairLoginSerializer
+
+
+class RegistrationAPI(APIView):
+    from rest_framework import permissions
+    permission_classes = [
+        permissions.AllowAny  # Or anon users can't register
+    ]
+
+    def post(self, request):
+        dataNascita = request.data['dataNascita']
+        # users = User.objects.filter(fiscal_code=request.data['cf'])
+        users = 0
+
+        if users.count() > 0:
+            return Response({'errors': 'Utente giĆ  registrato', 'error': True, 'data': '','messages': ['KO']}, status=status.HTTP_400_BAD_REQUEST)
+        else:
+            # user = User()
+            # user.username = request.data['username']
+            # user.first_name = request.data['nome']
+            # user.last_name = request.data['cognome']
+            # user.fiscal_code = request.data['cf']
+            # user.email = request.data['email']
+            # user.set_password(request.data['password'])
+            # user.gender = request.data['sesso'][0]
+            # dataNascita = dataNascita.replace('/','-')
+            # user.birth_date = timezone.datetime.strptime(dataNascita, '%Y-%m-%d')
+            # user.residential_address = request.data['domicilio']
+            # user.permanent_address = request.data['residenza']
+            # user.save()
+            #
+            # role = Role.objects.filter(name='Paziente').first()
+
+            return Response({'errors': '', 'error': False, 'data': '', 'messages': ['OK']}, status=status.HTTP_200_OK)
\ No newline at end of file
diff --git a/frontend/static/admin/img/login-1.png b/frontend/static/admin/img/login-1.png
deleted file mode 100644 (file)
index 063d84b..0000000
Binary files a/frontend/static/admin/img/login-1.png and /dev/null differ
diff --git a/frontend/static/admin/img/login.png b/frontend/static/admin/img/login.png
deleted file mode 100644 (file)
index d5aa849..0000000
Binary files a/frontend/static/admin/img/login.png and /dev/null differ
diff --git a/frontend/static/admin/img/logo-farella-white.png b/frontend/static/admin/img/logo-farella-white.png
deleted file mode 100644 (file)
index 159919a..0000000
Binary files a/frontend/static/admin/img/logo-farella-white.png and /dev/null differ
diff --git a/frontend/static/admin/img/logo-farella.png b/frontend/static/admin/img/logo-farella.png
deleted file mode 100644 (file)
index a441adb..0000000
Binary files a/frontend/static/admin/img/logo-farella.png and /dev/null differ
index ac49ebbaddc969bd00edc6b61a44acbff2f984ed..07ae23498ac0bacf28aa58375e278d01361366c9 100755 (executable)
@@ -171,9 +171,7 @@ body {
 }
 
 body {
-    background: #f6f6f6 url("/static/admin/img/login-1.png") no-repeat right bottom;
-    background-attachment: fixed;
-    background-size: 20%;
+
 }
 
 .bg-light {
diff --git a/frontend/static/assets/img/logo-farella-horizontal-1.png b/frontend/static/assets/img/logo-farella-horizontal-1.png
deleted file mode 100644 (file)
index 51cb7e9..0000000
Binary files a/frontend/static/assets/img/logo-farella-horizontal-1.png and /dev/null differ
diff --git a/frontend/static/assets/img/logo-farella-horizontal.png b/frontend/static/assets/img/logo-farella-horizontal.png
deleted file mode 100644 (file)
index bbadede..0000000
Binary files a/frontend/static/assets/img/logo-farella-horizontal.png and /dev/null differ
diff --git a/frontend/static/assets/img/logo-farella-mini.png b/frontend/static/assets/img/logo-farella-mini.png
deleted file mode 100644 (file)
index d4e1660..0000000
Binary files a/frontend/static/assets/img/logo-farella-mini.png and /dev/null differ
diff --git a/frontend/static/assets/img/logo-farella-mobile.png b/frontend/static/assets/img/logo-farella-mobile.png
deleted file mode 100644 (file)
index 1342727..0000000
Binary files a/frontend/static/assets/img/logo-farella-mobile.png and /dev/null differ
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/frontend/static/assets/img/logo_prima_nota.png b/frontend/static/assets/img/logo_prima_nota.png
deleted file mode 100644 (file)
index e9a1450..0000000
Binary files a/frontend/static/assets/img/logo_prima_nota.png and /dev/null differ
diff --git a/frontend/static/assets/img/logo_stampa.png b/frontend/static/assets/img/logo_stampa.png
deleted file mode 100644 (file)
index 158e6da..0000000
Binary files a/frontend/static/assets/img/logo_stampa.png and /dev/null differ
diff --git a/frontend/static/assets/img/tratta_breve.jpg b/frontend/static/assets/img/tratta_breve.jpg
deleted file mode 100644 (file)
index 1cf4d53..0000000
Binary files a/frontend/static/assets/img/tratta_breve.jpg and /dev/null differ
diff --git a/frontend/static/assets/img/tratta_breve.png b/frontend/static/assets/img/tratta_breve.png
deleted file mode 100644 (file)
index ddf711b..0000000
Binary files a/frontend/static/assets/img/tratta_breve.png and /dev/null differ
diff --git a/frontend/static/assets/img/tratta_lunga.jpg b/frontend/static/assets/img/tratta_lunga.jpg
deleted file mode 100644 (file)
index be1eb05..0000000
Binary files a/frontend/static/assets/img/tratta_lunga.jpg and /dev/null differ
diff --git a/frontend/static/assets/img/tratta_lunga.png b/frontend/static/assets/img/tratta_lunga.png
deleted file mode 100644 (file)
index 1a56eeb..0000000
Binary files a/frontend/static/assets/img/tratta_lunga.png and /dev/null differ
index 0dce5252328c785f17518edd67b1a49ef2955427..caf29b5326faa5fec064f2b370a8c281251b9e14 100644 (file)
@@ -7,16 +7,14 @@
 <head>
     <meta charset="UTF-8">
     <meta content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no" name="viewport">
-    <title>Farella Trasporti</title>
+    <title>Socoin Atlas</title>
 
-    <link rel="icon" type="image/x-icon" href="{% static 'assets/img/logo-farella-mini.png' %}">
+    <link rel="icon" type="image/x-icon" href="{% static 'assets/img/logo.png' %}">
     <link rel="stylesheet" href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css"/>
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
     <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
-    <!-- <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>-->
-    <!--<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
--->
+
     <!-- CSS only -->
 
     <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet"/>
@@ -38,7 +36,6 @@
             integrity="sha384-pprn3073KE6tl6bjs2QrFaJGz5/SUsLqktiwsUTF55Jfv3qYSDhgCecCxMW52nD2"
             crossorigin="anonymous"></script>
 
-    <!-- -->
     <link rel="stylesheet" type="text/css" src="https://cdn.datatables.net/1.12.0/css/dataTables.bootstrap5.min.css"/>
     <!-- General CSS Files -->
 
@@ -83,6 +80,8 @@
                              <path d="M13.73 21a2 2 0 0 1-3.46 0"></path>
                         </svg>
                     </a>
+
+                    <!--
                     <div class="dropdown-menu dropdown-list dropdown-menu-right pullDown">
                         <div class="dropdown-header border-bottom">Anomalie</div>
 
@@ -90,7 +89,7 @@
                         </div>
 
                         <div class="dropdown-footer text-center card-footer">
-                            <a href="{% url 'gestionale:list_anomalie' %}">Vedi tutte <i class="fas fa-chevron-right"></i></a>
+                            <a href="#">Vedi tutte <i class="fas fa-chevron-right"></i></a>
                         </div>
 
                         <div id="ascrail2002" class="nicescroll-rails nicescroll-rails-vr" style="width: 9px; z-index: 1000; cursor: default; position: absolute; top: 10.2314px; left: 291px; height: 250px; opacity: 0.3; display: none;">
                         <div id="ascrail2002-hr" class="nicescroll-rails nicescroll-rails-hr" style="height: 9px; z-index: 1000; top: 251.231px; left: 0px; position: absolute; cursor: default; display: none; width: 291px; opacity: 0.3;">
                             <div class="nicescroll-cursors" style="position: absolute; top: 0px; height: 7px; width: 300px; background-color: rgb(66, 66, 66); border: 1px solid rgb(255, 255, 255); background-clip: padding-box; border-radius: 5px; left: 0px;"></div>
                         </div>
-
                     </div>
+                    -->
                 </li>
 
-                <!-------------------------------->
 
                 <li class="dropdown dropdown-list-toggle">
                     <a class="dropdown-toggle nav-link" href="#" role="button" id="dropdownMenuLink"
                        data-bs-toggle="dropdown" aria-expanded="false">
-                        <h5 class="mr-3 d-inline">Benvenuto, {{ request.session.utente }}</h5>
+                        <h5 class="mr-3 d-inline">Benvenuto, </h5>
                         <img alt="image" src="{% static 'admin/img/user.png' %}" class="user-img-radious-style"
                              style="height: 40px">
                     </a>
 
                     <ul class="dropdown-menu dropdown-menu-right pullDown" aria-labelledby="dropdownMenuLink">
-                        <div class="dropdown-title">Ciao {{ request.session.utente }}</div>
-                        {% if 'M' or 'A' in request.session.roles %}
+                        <div class="dropdown-title">Ciao</div>
                             <li><a class="dropdown-item"
-                                   href="{% url 'anagrafica:modifica_dipendente' id_dipendente=request.session.user_id %}"
+                                   href="#"
                                    class="dropdown-item has-icon">
                                 <i class="fas fa-cog"></i> Profilo</a></li>
-                        {% endif %}
                         <div class="dropdown-divider"></div>
                         <li><a class="dropdown-item has-icon text-danger" href="/logout/">
                             <i class="fa fa-sign-out-alt"></i> Logout</a></li>
                 </li>
             </ul>
 
-            <!--<ul class="navbar-nav navbar-right">
-                {#  Sezione Opzioni laterale #}
-                <li class="dropdown dropdown-list-toggle">
-                    <a href="#" data-toggle="dropdown" class="nav-link dropdown-toggle nav-link-lg nav-link-user">
-                        <h5 class="mr-3 d-inline">Benvenuto, {{ request.session.utente }}</h5>
-                        <img alt="image" src="{% static 'admin/img/user.png' %}" class="user-img-radious-style"> <span
-                            class="d-sm-none d-lg-inline-block"></span>
-                    </a>
-                    <div class="dropdown-menu dropdown-menu-right pullDown">
-                        <div class="dropdown-title">Ciao {{ request.session.utente }}</div>
-                        {% if 'M' or 'A' in request.session.roles %}
-                            <a href="{% url 'anagrafica:modifica_dipendente' id_dipendente=request.session.user_id %}" class="dropdown-item has-icon"> <i class="fas fa-cog"></i>
-                                Profilo
-                            </a>
-                        {% endif %}
-                        <div class="dropdown-divider"></div>
-                        <a href="/logout/" class="dropdown-item has-icon text-danger"> <i
-                                class="fa fa-sign-out-alt"></i>
-                            Logout
-                        </a>
-                    </div>
-                </li>
-            </ul>-->
-
         </nav>
 
         <!-- MENU LATERALE -->
         <div class="main-sidebar sidebar-style-2">
             <aside id="sidebar-wrapper">
                 <div class="sidebar-brand">
-                    <a href="{% url 'gestionale:home' %}">
-                        <img alt="image" src="{% static 'assets/img/logo-farella-horizontal-1.png' %}"
+                    <a href="#">
+                        <img alt="image" src="{% static 'assets/img/logo.png' %}"
                              class="header-logo"/>
-                        <img alt="image" src="{% static 'assets/img/logo-farella-mobile.png' %}" class="mobile-logo"/>
+                        <img alt="image" src="{% static 'assets/img/logo.png' %}" class="mobile-logo"/>
                     </a>
                 </div>
                 <ul class="sidebar-menu mt-3">
-
                     <li class="dropdown voce_menu active" id="home">
-                        <a href="{% url 'gestionale:home' %}" class="nav-link color-home">
+                        <a href="#" class="nav-link color-home">
                             <i class="fa-solid fa-house"></i><span>Home</span></a>
                     </li>
 
-                    {% if 'M' in request.session.roles %}
-                        <li class="menu-header">Funzioni di base</li>
-                        <li class="dropdown">
-                            <a href="#" class="menu-toggle nav-link has-dropdown color-config">
-                                <i class="fas fa-cogs"></i><span>Configurazione</span></a>
-
-                            <ul class="dropdown-menu" id="menu-drop">
-                                <li class="voce_menu" id="area-magazzini-menu"><a class="nav-link"
-                                                                                  href="{% url 'configurazione:lista_area_magazzini' %}">Area
-                                    Magazzini</a></li>
-                                <li class="voce_menu" id="arrotondamenti-menu"><a class="nav-link"
-                                                                                  href="{% url 'configurazione:lista_arrotondamenti' %}">Arrotondamenti</a>
-                                </li>
-                                <li><a class="nav-link"
-                                       href="{% url 'configurazione:lista_autostrade' %}">Autostrade</a>
-                                </li>
-                                <li><a class="nav-link" href="{% url 'configurazione:lista_comuni' %}">Comuni</a></li>
-                                <li><a class="nav-link" href="{% url 'configurazione:lista_cod_pag_iva' %}">Codici
-                                    pagamento IVA</a></li>
-                                <li><a class="nav-link" href="{% url 'configurazione:lista_cod_es_iva' %}">Codici
-                                    esenzione IVA</a></li>
-                                <li><a class="nav-link" href="#">Dati base</a></li>
-                                <li><a class="nav-link" href="{% url 'configurazione:lista_fasce_orarie' %}">Fasce
-                                    orarie</a></li>
-                                <li><a class="nav-link" href="{% url 'configurazione:lista_hub' %}">Hub</a></li>
-                                <li><a class="nav-link" href="{% url 'configurazione:lista_mezzi' %}">Mezzi</a></li>
-                                <li><a class="nav-link" href="{% url 'configurazione:lista_percorso_breve' %}">Percorso
-                                    breve</a></li>
-                                <li><a class="nav-link" href="{% url 'configurazione:lista_spese_accessorie' %}">Spese
-                                    accessorie</a></li>
-                                <li><a class="nav-link" href="{% url 'configurazione:lista_tipologia_mezzi' %}">Tipologia
-                                    Mezzi</a></li>
-                                <li><a class="nav-link" href="{% url 'configurazione:lista_tipologia_merce' %}">Tipo
-                                    Merce</a></li>
-                                <li><a class="nav-link" href="#">Utenti</a></li>
-                                <li><a class="nav-link" href="{% url 'configurazione:lista_um' %}">UnitĆ  di misura</a>
-                                </li>
-                            </ul>
-
-                        </li>
-
-                        <li class="menu-header">Gestionale</li>
-                        <!-- ANAGRAFICA -->
-                        <li class="dropdown voce_menu" id="clienti-fornitori-menu">
-                            <a href="{% url 'anagrafica:list_filiali' %}" class="nav-link color-clients">
-                                <i class="fa-solid fa-people-carry-box"></i><span>Clienti / Fornitori</span></a>
-                        </li>
-                        <li class="dropdown voce_menu" id="dipendenti-menu">
-                            <a href="{% url 'anagrafica:list_dipendenti' %}" class="nav-link color-dipendenti">
-                                <i class="fa-solid fa-users"></i><span>Dipendenti</span></a>
-                        </li>
-                        <li class="dropdown voce_menu" id="autisti-menu">
-                            <a href="{% url 'anagrafica:list_autisti' %}" class="nav-link color-autisti">
-                                <i class="fa-solid fa-car"></i><span>Autisti</span></a>
-                        </li>
-                        <!-- LISTINI -->
-                        <li class="dropdown voce_menu" id="listini-menu">
-                            <a href="{% url 'listini:lista_listini' %}" class="nav-link color-listini">
-                                <i class="fa-solid fa-file-invoice-dollar"></i><span>Gestione Listini</span></a>
-                        </li>
-
-                        <!-- PRESE -->
-                        <li class="dropdown voce_menu" id="prese-menu">
-                            <a href="{% url 'spedizioni:list_ritiri' %}" class="nav-link color-prese">
-                                <i class="fa-solid fa-truck-ramp-box"></i><span>Gestione Prese</span></a>
-                        </li>
-
-                        <!-- MERCE -->
-                        <li class="dropdown voce_menu" id="merce-menu">
-                            <a href="{% url 'spedizioni:list_censimento' %}" class="nav-link color-merce">
-                                <i class="fas fa-box-open"></i><span>Censimento Merce</span></a>
-                        </li>
-
-                        <!-- BORDEREAUX -->
-                        <li class="dropdown voce_menu" id="bordereau-menu">
-                            <a href="{% url 'bordereau:list_bordereau' %}" class="nav-link color-bordereau">
-                                <i class="fas fa-shipping-fast"></i><span>Gestione Bordereau</span></a>
-                        </li>
-
-                        <!-- BOLLE -->
-                        <li class="dropdown voce_menu" id="bolle-menu">
-                            <a href="{% url 'spedizioni:list_bolle' %}" class="nav-link color-bolle">
-                                <i class="fas fa-file-invoice"></i><span>Gestione Bolle</span></a>
-                        </li>
-
-                        <!-- TRACCIABILITA' -->
-                        <li class="dropdown voce_menu" id="tracciabilita-menu">
-                            <a href="{% url 'spedizioni:list_tracciabilita_merce' %}" class="nav-link color-traccia">
-                                <i class="fas fa-map-marked-alt"></i><span>TracciabilitĆ  Merce</span></a>
-                        </li>
-
-                        <!-- Fatturazione' -->
-                        <li class="dropdown voce_menu" id="fatturazione-menu">
-                            <a href="{% url 'spedizioni:list_fatturazione' %}" class="nav-link color-fatturazione">
-                                <i class="far fa-file-alt"></i><span>Fatturazione </span></a>
-                        </li>
-
-                        <!-- CENTRO DI COSTO HUB -->
-                        <li class="dropdown">
-                            <a href="#" class="menu-toggle nav-link has-dropdown color-costo">
-                                <i class="fas fa-chart-pie"></i><span>Centro di costo </span></a>
-
-                            <ul class="dropdown-menu">
-                                <li><a class="nav-link" href="{% url 'centro_costo:list_costo_hub' %}">Costo hub</a>
-                                </li>
-                            </ul>
-                            <ul class="dropdown-menu">
-                                <li><a class="nav-link" href="{% url 'centro_costo:list_costo_manutenzione' %}">Manutenzione
-                                    mezzi</a></li>
-                            </ul>
-                            <ul class="dropdown-menu">
-                                <li><a class="nav-link" href="{% url 'centro_costo:add_spese_tratta' %}">Costo
-                                    tratte</a></li>
-                            </ul>
-                        </li>
-
-                        <!-- CONTROLLO GESTIONE -->
-
-                        <li class="dropdown fix-gestione">
-                            <a href="#" class="menu-toggle nav-link has-dropdown color-gestione">
-                                <i class="fas fa-chart-line fa-xs"></i><span>Controllo gestione </span></a>
-
-                            <ul class="dropdown-menu">
-                                <li><a class="nav-link" href="{% url 'controllo_gestione:analytics' %} ">Costi
-                                    unitari</a></li>
-                            </ul>
-                            <ul class="dropdown-menu">
-                                <li><a class="nav-link" href="{% url 'controllo_gestione:lista_costi_spedizione' %}">Costo
-                                    spedizioni</a>
-                                </li>
-                            </ul>
-                            <ul class="dropdown-menu">
-                                <li><a class="nav-link" href="{% url 'controllo_gestione:lista_costi_bordereau' %}">Costo
-                                    bordereau</a></li>
-                            </ul>
-
-                        </li>
-
-
-                    {% elif 'C' in request.session.roles or 'L' in request.session.roles %}
-
-                        <li class="menu-header">Gestionale</li>
-                        <!-- ANAGRAFICA -->
-                        <li class="dropdown voce_menu" id="clienti-fornitori-menu">
-                            <a href="{% url 'anagrafica:list_filiali' %}" class="nav-link color-clients">
-                                <i class="fas fa-id-card"></i><span>Clienti / Fornitori</span></a>
-                        </li>
-                        <li class="dropdown voce_menu" id="dipendenti-menu">
-                            <a href="{% url 'anagrafica:list_dipendenti' %}" class="nav-link color-dipendenti">
-                                <i class="fas fa-id-card"></i><span>Dipendenti</span></a>
-                        </li>
-                        <li class="dropdown voce_menu" id="autisti-menu">
-                            <a href="{% url 'anagrafica:list_autisti' %}" class="nav-link color-autisti">
-                                <i class="fas fa-id-card"></i><span>Autisti</span></a>
-                        </li>
-                        <!-- LISTINI -->
-                        <li class="dropdown voce_menu" id="listini-menu">
-                            <a href="{% url 'listini:lista_listini' %}" class="nav-link color-listini">
-                                <i class="fas fa-file-invoice-dollar"></i><span>Gestione Listini</span></a>
-                        </li>
-
-                        <!-- PRESE -->
-                        <li class="dropdown voce_menu" id="prese-menu">
-                            <a href="{% url 'spedizioni:list_ritiri' %}" class="nav-link color-prese">
-                                <i class="fas fa-people-carry"></i><span>Gestione Prese</span></a>
-                        </li>
-
-                        <!-- MERCE -->
-                        <li class="dropdown voce_menu" id="merce-menu">
-                            <a href="{% url 'spedizioni:list_censimento' %}" class="nav-link color-merce">
-                                <i class="fas fa-box-open"></i><span>Censimento Merce</span></a>
-                        </li>
-
-                        <!-- BORDEREAUX -->
-                        <li class="dropdown voce_menu" id="bordereau-menu">
-                            <a href="{% url 'bordereau:list_bordereau' %}" class="nav-link color-bordereau">
-                                <i class="fas fa-shipping-fast"></i><span>Gestione Bordereau</span></a>
-                        </li>
-
-                        <!-- BOLLE -->
-                        <li class="dropdown voce_menu" id="bolle-menu">
-                            <a href="{% url 'spedizioni:list_bolle' %}" class="nav-link color-bolle">
-                                <i class="fas fa-file-invoice"></i><span>Gestione Bolle</span></a>
-                        </li>
-
-                        <!-- TRACCIABILITA' -->
-                        <li class="dropdown voce_menu" id="tracciabilita-menu">
-                            <a href="{% url 'spedizioni:list_tracciabilita_merce' %}" class="nav-link color-traccia">
-                                <i class="fas fa-map-marked-alt"></i><span>TracciabilitĆ  Merce</span></a>
-                        </li>
-
-                        {#                    <!-- Fatturazione' -->#}
-                        {#                    <li class="dropdown">#}
-                        {#                        <a href="{% url 'spedizioni:list_fatturazione' %}" class="nav-link">#}
-                        {#                            <i class="far fa-file-alt"></i><span>Fatturazione </span></a>#}
-                        {#                    </li>#}
-                    {% elif  'F'  in request.session.roles or 'C1' in request.session.roles %}
-                        <li class="menu-header">Gestionale</li>
-                        <li class="dropdown voce_menu" id="listini-menu">
-                            <a href="{% url 'listini:lista_listini' %}" class="nav-link color-listini">
-                                <i class="fas fa-file-invoice-dollar"></i><span>Gestione Listini</span></a>
-                        </li>
-                        <li class="dropdown voce_menu" id="prese-menu">
-                            <a href="{% url 'spedizioni:list_ritiri' %}" class="nav-link color-prese">
-                                <i class="fas fa-people-carry"></i><span>Gestione Prese</span></a>
-                        </li>
-                        <li class="dropdown voce_menu" id="merce-menu">
-                            <a href="{% url 'spedizioni:list_tracciabilita_merce' %}" class="nav-link color-traccia">
-                                <i class="fas fa-map-marked-alt"></i><span>TracciabilitĆ  Merce</span></a>
-                        </li>
-                        <li class="dropdown voce_menu" id="fatturazione-menu">
-                            <a href="{% url 'spedizioni:list_fatturazione' %}" class="nav-link color-fatturazione">
-                                <i class="far fa-file-alt"></i><span>Fatturazione </span></a>
-                        </li>
-                    {% endif %}
+                    <li class="menu-header">Piattaforma</li>
+                    <li class="dropdown voce_menu" id="clienti-fornitori-menu">
+                        <a href="#" class="nav-link color-clients">
+                            <i class="fa-solid fa-people-carry-box"></i><span>Clienti / Fornitori</span></a>
+                    </li>
+                    <li class="dropdown voce_menu" id="dipendenti-menu">
+                        <a href="#" class="nav-link color-dipendenti">
+                            <i class="fa-solid fa-users"></i><span>Dipendenti</span></a>
+                    </li>
                 </ul>
             </aside>
         </div>
 
             </section>
         </div>
-        <!--<footer class="main-footer">
-            <div class="footer-left">
-                <a href="http://www.farellatrasporti.it/">FARELLA TRASPORTI</a></a>
-            </div>
-            <div class="footer-right">
-            </div>
-        </footer>-->
+
 
     </div>
 
     <!-- VARI MODAL CHE VENGONO RICHIAMATI ALL'INTERNO DEL GESTIONALE -->
-    {% include 'modal_intestazione.html' %}
-    {% include 'modal-ins-merce-censimento.html' %}
-    {% include 'modal-ins-merce-bolla.html' %}
-    {% include 'modal_filiale.html' %}
-    {% include 'modal_add_tariffa.html' %}
-    {% include 'modal_localita.html' %}
-    {% include 'modal-ins-merce.html' %}
-    {% include 'modal_suggerimenti.html' %}
-    {% include 'modal_um.html' %}
-    {% include 'modal_prov_sigla.html' %}
-    {% include 'modal_add_magazzino.html' %}
-    {% include 'modal_add_regione.html' %}
-    {% include 'modal_add_notifica.html' %}
-    {% include 'modal_add_scaglione.html' %}
-    {% include 'modal_percorso.html' %}
-    {% include 'modal_add_autista.html' %}
-    {% include 'modal_fornitore.html' %}
-    {% include 'modal_autista.html' %}
-    {% include 'modal_mezzo.html' %}
-    {% include 'modal_ritiro.html' %}
-    {% include 'modal_consegna_traferimento.html' %}
-    {% include 'modal_fatture_raggruppate.html' %}
-    {% include 'modal_add_hub.html' %}
-    {% include 'modal_info_scaglione_spesa_acc.html' %}
-    {% include 'modal_rincaro.html' %}
-    {% include 'modal_costi_spedizione.html' %}
+
 
     <!-- General JS Scripts -->
     <script src="{% static 'assets/js/app.min.js' %}"></script>
 <footer class="footer" id="footer">
     <div class="container my-auto">
         <div class="copyright text-center my-auto">
-            <span>Copyright Ā© <b>Farella 2.0</b> - 2022</span>
+            <span>Copyright Ā© <b>Dyrecta</b> - 2022</span>
         </div>
     </div>
 </footer>
         {% endif %}
     {%  endfor %}
 
-    $(document).ready(function () {
-        checkAnomalie();
-    });
-
-    setInterval(function () {
-        checkAnomalie();
-    }, 60000);
-
-
-    function disableLocalitaClienteForInstance() {
-        var select = $("#id_tipologia_spedizione option:selected").text();
-        switch (select) {
-            case 'PORTO FRANCO':
-                $("#intestazione-mittente").val({{ utente.0.filiale_cliente|safe }}).prop('disabled', false).prop('readonly', false);
-                $("#id_intestazione_mittente").prop('readonly', true);
-                $("#id_indirizzo_mittente").prop('readonly', true);
-                $("#id_cap_mittente").prop('readonly', true)//.prop('disabled', true);
-
-                $("#intestazione-destinatario").val('0').prop('disabled', true).prop('readonly', true);
-                $("#id_intestazione_destinatario").prop('readonly', false);
-                $("#id_indirizzo_destinatario").prop('readonly', false);
-                $("#id_cap_destinatario").prop('readonly', false)
-                break;
-            case 'PORTO ASSEGNATO':
-                $("#intestazione-mittente").val('0').prop('disabled', true).prop('readonly', true);
-                $("#id_intestazione_mittente").prop('readonly', false);
-                $("#id_indirizzo_mittente").prop('readonly', false);
-
-
-                $("#intestazione-destinatario").val({{ utente.0.filiale_cliente|safe }}).prop('disabled', false).prop('readonly', false);
-                $("#id_intestazione_destinatario").prop('readonly', true);
-                $("#id_indirizzo_destinatario").prop('readonly', true);
-                $("#id_cap_destinatario").prop('readonly', true)//.prop('disabled', true);
-                break;
-            case 'PER CONTO DI':
-                $("#intestazione-percontodi").val({{ utente.0.filiale_cliente|safe }}).prop('disabled', false).prop('readonly', false);
-                $("#id_indirizzo_percontodi").prop('readonly', true);
-                $("#id_cap_percontodi").prop('readonly', true)//.prop('disabled', true);
-
-                $("#intestazione-mittente").val('0').prop('disabled', true).prop('readonly', true);
-                $("#id_cap_mittente").prop('readonly', false)
-
-                $("#intestazione-destinatario").val('0').prop('disabled', true).prop('readonly', true);
-                $("#id_intestazione_destinatario").prop('readonly', false);
-                $("#id_indirizzo_destinatario").prop('readonly', false);
-                $("#id_cap_destinatario").prop('readonly', false)
-
-                break;
-            case 'CONTO SERVIZIO':
-                clearForm();
-                $("#intestazione-mittente").val('0').prop('disabled', true).prop('readonly', true);
-                $("#id_localita_mittente").prop('readonly', true);
-                $("#id_provincia_mittente").prop('readonly', true);
-
-
-                $("#intestazione-destinatario").val('0').prop('disabled', true).prop('readonly', true);
-                $("#id_localita_destinatario").prop('readonly', true);
-                $("#id_provincia_destinatario").prop('readonly', true);
-
-                $("#intestazione-percontodi").val('0').prop('disabled', true).prop('readonly', true);
-                $("#id_localita_percontodi").prop('readonly', true);
-                $("#id_provincia_percontodi").prop('readonly', true);
-                break;
-            default:
-                console.log(`Sorry, we are out of ${select}.`);
-                break;
-        }
-    }
-
-    function generateDatabaseDateTime(date) {
-      return date.toISOString().replace("T"," ").substring(0, 19);
-    }
-
-    function checkAnomalie(){
-        $.ajax({
-           type: 'GET',
-           url: '{% url 'gestionale:check_anomalie' %}',
-        })
-        .done(function (response) {
-
-            $("#alert-list").html('');
-            for(var k in response['list_anomalie']){
-                notifica = response.list_anomalie[k]
-                tipologia = ''
-                button = ''
-                url = ''
-
-                if (notifica.tipologia == 'MERCE_DANNEGGIATA'){
-                    tipologia = 'Merce Danneggiata'
-                    url = '<a href="/spedizioni/tracciabilita_merce/' + notifica.attivita__spedizione__id + '/">'
-                    url += 'Vai alla spedizione'
-                    url += '</a>'
-                } else if (notifica.tipologia == 'MERCE_NON_CONSEGNATA'){
-                    tipologia = 'Merce non consegnata'
-                    url = '<a href="/spedizioni/tracciabilita_merce/' + notifica.attivita__spedizione__id + '/">'
-                    url += 'Vai alla spedizione'
-                    url += '</a>'
-                }  else if (notifica.tipologia == 'MERCE_NON_RITIRATA'){
-                    tipologia = 'Merce non ritirata'
-                    url = '<a href="/spedizioni/tracciabilita_merce/' + notifica.attivita__spedizione__id + '/">'
-                    url += 'Vai alla spedizione'
-                    url += '</a>'
-                }  else if (notifica.tipologia == 'MERCE_NON_TRASFERITA'){
-                    tipologia = 'Merce non traferita'
-                    url = '<a href="/spedizioni/tracciabilita_merce/' + notifica.attivita__spedizione__id + '/">'
-                    url += 'Vai alla spedizione'
-                    url += '</a>'
-                } else if (notifica.tipologia == 'CONSEGNA_CON_RISERVA'){
-                    tipologia = 'Consegna con riserva'
-                    url = '<a href="/bordereau/mod_bordereau/' + notifica.attivita__bordereau__id + '/">'
-                    url += 'Vai al borderau'
-                    url += '</a>'
-                } else if (notifica.tipologia == 'CONSEGNA_NON_EFFETTUATA'){
-                    tipologia = 'Consegna non effettuata'
-                    url = '<a href="/bordereau/mod_bordereau/' + notifica.attivita__bordereau__id + '/">'
-                    url += 'Vai al borderau'
-                    url += '</a>'
-                } else if (notifica.tipologia == 'RITIRO_NON_ESEGUITO'){
-                    tipologia = 'Ritiro non effettuato'
-                    url = '<a href="/bordereau/mod_bordereau/' + notifica.attivita__bordereau__id + '/">'
-                    url += 'Vai al borderau'
-                    url += '</a>'
-                } else if (notifica.tipologia == 'RITIRO_ESEGUITO_CON_RISERVA'){
-                    tipologia = 'Ritiro eseguito con riserva'
-                    url = '<a href="/bordereau/mod_bordereau/' + notifica.attivita__bordereau__id + '/">'
-                    url += 'Vai al borderau'
-                    url += '</a>'
-                }  else if (notifica.tipologia == 'NON_TRASFERITA'){
-                    tipologia = 'Spedizione non trasferita'
-                    url = '<a href="/bordereau/mod_bordereau/' + notifica.attivita__bordereau__id + '/">'
-                    url += 'Vai al borderau'
-                    url += '</a>'
-                }
-
-                html = '<div class="dropdown-item dropdown-item-unread">'
-                html += '<span class="dropdown-item-desc">'
-                html += '<span class="message-user">'
-                html += tipologia
-                html += '</span>'
-                html += '<span class="time messege-text">'
-                html += url
-                html += '</span>'
-                html += '<span class="time">' + notifica.data_creazione + '</span>'
-                html += '</span>'
-                html += '</div>'
-
-                $("#alert-list").append(html)
-            }
-        })
-        .fail(function (jqXHR, textStatus, errorThrown) {
-            console.log('errore')
-        });
-    }
-
 </script>
\ No newline at end of file
diff --git a/frontend/templates/home.html b/frontend/templates/home.html
new file mode 100644 (file)
index 0000000..97bab53
--- /dev/null
@@ -0,0 +1,5 @@
+{% extends 'base.html' %}
+{% load static %}
+{% block content %}
+    CIAO
+{% endblock %}
\ No newline at end of file
diff --git a/frontend/templates/registration/custom_password_reset_complete.html b/frontend/templates/registration/custom_password_reset_complete.html
new file mode 100644 (file)
index 0000000..9161fa1
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html lang="en">
+{% load static %}
+
+
+<!-- auth-reset-password.html  21 Nov 2019 04:05:02 GMT -->
+<head>
+  <meta charset="UTF-8">
+  <meta content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no" name="viewport">
+  <title>Otika - Admin Dashboard Template</title>
+  <!-- General CSS Files -->
+  <link rel="stylesheet" href="{% static 'admin/css/app.min.css' %}">
+{#  <link rel="stylesheet" href="{% static 'bundles/bootstrap-social/bootstrap-social.css' %}">#}
+  <!-- Template CSS -->
+  <link rel="stylesheet" href="{% static 'admin/css/style.css' %}">
+  <link rel="stylesheet" href="{% static 'admin/css/components.css' %}">
+  <!-- Custom style CSS -->
+  <link rel="stylesheet" href="{% static 'admin/css/custom.css' %}">
+  <link rel='shortcut icon' type='image/x-icon' href='{% static 'img/favicon.ico' %}' />
+  <script src="https://code.jquery.com/jquery-3.3.1.min.js" ></script>
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" ></script>
+  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" ></script>
+  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css">
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>
+</head>
+
+<body>
+  <div class="loader"></div>
+  <div id="app">
+    <section class="section">
+      <div class="container mt-5">
+        <div class="row">
+          <div class="col-12 col-sm-8 offset-sm-2 col-md-6 offset-md-3 col-lg-6 offset-lg-3 col-xl-4 offset-xl-4">
+            <div class="card card-primary">
+              <div class="card-header">
+                <h4>Reset Password</h4>
+              </div>
+              <div class="card-body">
+              <div class="text-center">
+                                          <h1>Password cambiata con successo!</h1>
+                                          <p><a href="{% url 'login' %}">Ripetere log in?</a></p>
+                                    </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </section>
+  </div>
+  <!-- General JS Scripts -->
+  <script src="{% static 'assets/js/app.min.js' %}"></script>
+  <!-- JS Libraies -->
+  <!-- Page Specific JS File -->
+  <!-- Template JS File -->
+  <script src="{% static 'assets/js/scripts.js' %}"></script>
+  <!-- Custom JS File -->
+  <script src="{% static 'assets/js/custom.js' %}"></script>
+</body>
+
+
+<!-- auth-reset-password.html  21 Nov 2019 04:05:02 GMT -->
+</html>
+
+<script>
+    {% for message in messages %}
+        {% if 'info' in message.tags %}
+            toastr.success('{{ message|safe }}..:: INFO ::..');
+        {% elif 'error' in message.tags %}
+            toastr.error('{{ message|safe }}', '..:: ATTENZIONE ::..');
+        {% endif %}
+    {%  endfor %}
+</script>
\ No newline at end of file
diff --git a/frontend/templates/registration/custom_password_reset_confirm.html b/frontend/templates/registration/custom_password_reset_confirm.html
new file mode 100644 (file)
index 0000000..562df3f
--- /dev/null
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<html lang="en">
+{% load static %}
+
+
+<!-- auth-reset-password.html  21 Nov 2019 04:05:02 GMT -->
+<head>
+  <meta charset="UTF-8">
+  <meta content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no" name="viewport">
+  <title>Otika - Admin Dashboard Template</title>
+  <!-- General CSS Files -->
+  <link rel="stylesheet" href="{% static 'admin/css/app.min.css' %}">
+{#  <link rel="stylesheet" href="{% static 'bundles/bootstrap-social/bootstrap-social.css' %}">#}
+  <!-- Template CSS -->
+  <link rel="stylesheet" href="{% static 'admin/css/style.css' %}">
+  <link rel="stylesheet" href="{% static 'admin/css/components.css' %}">
+  <!-- Custom style CSS -->
+  <link rel="stylesheet" href="{% static 'admin/css/custom.css' %}">
+  <link rel='shortcut icon' type='image/x-icon' href='{% static 'img/favicon.ico' %}' />
+  <script src="https://code.jquery.com/jquery-3.3.1.min.js" ></script>
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" ></script>
+  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" ></script>
+  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css">
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>
+</head>
+
+<body>
+  <div class="loader"></div>
+  <div id="app">
+    <section class="section">
+      <div class="container mt-5">
+        <div class="row">
+          <div class="col-12 col-sm-8 offset-sm-2 col-md-6 offset-md-3 col-lg-6 offset-lg-3 col-xl-4 offset-xl-4">
+            <div class="card card-primary">
+              <div class="card-header">
+                <h4>Reset Password</h4>
+              </div>
+              <div class="card-body">
+              {% if validlink %}
+                <form action="" method="post">
+                    {% csrf_token %}
+                    <table>
+                        <tr>
+                            <td>{{ form.new_password1.errors }}
+                                <label for="id_new_password1">New password:</label></td>
+                            <td>{{ form.new_password1 }}</td>
+                        </tr>
+                        <tr>
+                            <td>{{ form.new_password2.errors }}
+                                <label for="id_new_password2">Confirm password:</label></td>
+                            <td>{{ form.new_password2 }}</td>
+                        </tr>
+                        <tr>
+                            <td></td>
+                            <td><input type="submit" class="btn btn-primary" value="Cambia password" /></td>
+                        </tr>
+                    </table>
+                </form>
+            {% else %}
+                <h1>Reset password fallito </h1>
+                <p>Link per il reset della password non valido, probabilmente giĆ  stato utilizzato. Si prega di richiedere un nuovo reset della password.</p>
+            {% endif %}
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </section>
+  </div>
+  <!-- General JS Scripts -->
+  <script src="{% static 'assets/js/app.min.js' %}"></script>
+  <!-- JS Libraies -->
+  <!-- Page Specific JS File -->
+  <!-- Template JS File -->
+  <script src="{% static 'assets/js/scripts.js' %}"></script>
+  <!-- Custom JS File -->
+  <script src="{% static 'assets/js/custom.js' %}"></script>
+</body>
+
+
+<!-- auth-reset-password.html  21 Nov 2019 04:05:02 GMT -->
+</html>
+
+<script>
+    {% for message in messages %}
+        {% if 'info' in message.tags %}
+            toastr.success('{{ message|safe }}..:: INFO ::..');
+        {% elif 'error' in message.tags %}
+            toastr.error('{{ message|safe }}', '..:: ATTENZIONE ::..');
+        {% endif %}
+    {%  endfor %}
+</script>
\ No newline at end of file
diff --git a/frontend/templates/registration/custom_password_reset_done.html b/frontend/templates/registration/custom_password_reset_done.html
new file mode 100644 (file)
index 0000000..649a98c
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html lang="en">
+{% load static %}
+
+
+<!-- auth-reset-password.html  21 Nov 2019 04:05:02 GMT -->
+<head>
+  <meta charset="UTF-8">
+  <meta content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no" name="viewport">
+  <title>Otika - Admin Dashboard Template</title>
+  <!-- General CSS Files -->
+  <link rel="stylesheet" href="{% static 'admin/css/app.min.css' %}">
+{#  <link rel="stylesheet" href="{% static 'bundles/bootstrap-social/bootstrap-social.css' %}">#}
+  <!-- Template CSS -->
+  <link rel="stylesheet" href="{% static 'admin/css/style.css' %}">
+  <link rel="stylesheet" href="{% static 'admin/css/components.css' %}">
+  <!-- Custom style CSS -->
+  <link rel="stylesheet" href="{% static 'admin/css/custom.css' %}">
+  <link rel='shortcut icon' type='image/x-icon' href='{% static 'img/favicon.ico' %}' />
+  <script src="https://code.jquery.com/jquery-3.3.1.min.js" ></script>
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" ></script>
+  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" ></script>
+</head>
+
+<body>
+  <div class="loader"></div>
+  <div id="app">
+    <section class="section">
+      <div class="container mt-5">
+        <div class="row">
+          <div class="col-12 col-sm-8 offset-sm-2 col-md-6 offset-md-3 col-lg-6 offset-lg-3 col-xl-4 offset-xl-4">
+            <div class="card card-primary">
+              <div class="card-header">
+                <h4>Reset Password</h4>
+              </div>
+              <div class="card-body">
+                                            <div >
+                                <div class="p-5">
+                                    <div class="text-center">
+                                        <p>We've emailed you instructions for setting your password. If they haven't arrived in a few minutes, check your spam folder.</p>
+                                    </div>
+                                    </div>
+                                    <hr>
+                                </div>
+                            </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </section>
+  </div>
+  <!-- General JS Scripts -->
+  <script src="{% static 'assets/js/app.min.js' %}"></script>
+  <!-- JS Libraies -->
+  <!-- Page Specific JS File -->
+  <!-- Template JS File -->
+  <script src="{% static 'assets/js/scripts.js' %}"></script>
+  <!-- Custom JS File -->
+  <script src="{% static 'assets/js/custom.js' %}"></script>
+</body>
+
+
+<!-- auth-reset-password.html  21 Nov 2019 04:05:02 GMT -->
+</html>
\ No newline at end of file
diff --git a/frontend/templates/registration/custom_password_reset_email.html b/frontend/templates/registration/custom_password_reset_email.html
new file mode 100644 (file)
index 0000000..68a57ea
--- /dev/null
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<html lang="en">
+{% load static %}
+
+
+<!-- auth-forgot-password.html  21 Nov 2019 04:05:02 GMT -->
+<head>
+  <meta charset="UTF-8">
+  <meta content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no" name="viewport">
+  <title>Otika - Admin Dashboard Template</title>
+  <!-- General CSS Files -->
+  <link rel="stylesheet" href="{% static 'admin/css/app.min.css' %}">
+{#  <link rel="stylesheet" href="{% static 'bundles/bootstrap-social/bootstrap-social.css' %}">#}
+  <!-- Template CSS -->
+  <link rel="stylesheet" href="{% static 'admin/css/style.css' %}">
+  <link rel="stylesheet" href="{% static 'admin/css/components.css' %}">
+  <!-- Custom style CSS -->
+  <link rel="stylesheet" href="{% static 'admin/css/custom.css' %}">
+  <link rel='shortcut icon' type='image/x-icon' href='{% static 'img/favicon.ico' %}' />
+  <script src="https://code.jquery.com/jquery-3.3.1.min.js" ></script>
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" ></script>
+  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" ></script>
+
+</head>
+
+<body>
+  <div class="loader"></div>
+  <div id="app">
+    <section class="section">
+      <div class="container mt-5">
+        <div class="row">
+          <div class="col-12 col-sm-8 offset-sm-2 col-md-6 offset-md-3 col-lg-6 offset-lg-3 col-xl-4 offset-xl-4">
+            <div class="card card-primary">
+              <div class="card-header">
+                <h4>Forgot Password</h4>
+              </div>
+              <div class="card-body">
+                <p class="text-muted">We will send a link to reset your password</p>
+                <form method="POST">{% csrf_token %}
+
+                  <div class="form-group">
+                    <label for="email">Email</label>
+                    <input id="email" type="email" class="form-control" name="email" tabindex="1" required autofocus>
+                  </div>
+                  <div class="form-group">
+                    <button type="submit" class="btn btn-primary btn-lg btn-block" tabindex="4">
+                      Forgot Password
+                    </button>
+                  </div>
+                </form>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </section>
+  </div>
+  <script src="{% static 'assets/js/app.min.js' %}"></script>
+  <!-- JS Libraies -->
+  <!-- Page Specific JS File -->
+  <!-- Template JS File -->
+  <script src="{% static 'assets/js/scripts.js' %}"></script>
+  <!-- Custom JS File -->
+  <script src="{% static 'assets/js/custom.js' %}"></script>
+</body>
+
+
+<!-- auth-forgot-password.html  21 Nov 2019 04:05:02 GMT -->
+</html>
\ No newline at end of file
diff --git a/frontend/templates/registration/login.html b/frontend/templates/registration/login.html
new file mode 100644 (file)
index 0000000..6a824aa
--- /dev/null
@@ -0,0 +1,155 @@
+<!doctype html>
+<html class="no-js" lang="en">
+{% load static %}
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="x-ua-compatible" content="ie=edge">
+    <title>Login Farella</title>
+    <meta name="description" content="">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+<!-- General CSS Files -->
+  <link rel="stylesheet" href="{% static 'admin/css/app.min.css' %}">
+{#  <link rel="stylesheet" href="{% static 'bundles/bootstrap-social/bootstrap-social.css' %}">#}
+  <!-- Template CSS -->
+  <link rel="stylesheet" href="{% static 'admin/css/style.css' %}">
+  <link rel="stylesheet" href="{% static 'admin/css/components.css' %}">
+  <!-- Custom style CSS -->
+  <link rel="stylesheet" href="{% static 'admin/css/custom.css' %}">
+  <link rel='shortcut icon' type='image/x-icon' href='{% static 'img/favicon.ico' %}' />
+  <script src="https://code.jquery.com/jquery-3.3.1.min.js" ></script>
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" ></script>
+  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" ></script>
+  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css">
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>
+
+</head>
+
+<body class="bg-login">
+<script>
+    {% for message in messages %}
+        {% if 'info' in message.tags %}
+            toastr.success('{{ message|safe }}..:: INFO ::..');
+        {% elif 'error' in message.tags %}
+            toastr.error('{{ message|safe }}', '..:: ATTENZIONE ::..');
+        {% endif %}
+    {%  endfor %}
+</script>
+<div class="loader"></div>
+{#    <div style="background-color: dodgerblue; opacity: 0.6; position:absolute; z-index: 9999; width: 100%; height: 100%;"></div>#}
+
+
+<section class="section">
+    <div class="error-pagewrap">
+        <div class="error-page-int">
+            <div class="container mt-5">
+                <div class="row mb-5">
+                    <div class="col-12 col-sm-8 offset-sm-2 col-md-6 offset-md-3 col-lg-6 offset-lg-3 col-xl-4 offset-xl-4 text-center">
+                        <img src="{% static 'admin/img/logo-farella-white.png' %}" width="160">
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="col-12 col-sm-8 offset-sm-2 col-md-6 offset-md-3 col-lg-6 offset-lg-3 col-xl-4 offset-xl-4" >
+                        <div class="card card-primary">
+                            <div class="card-header">
+                                <h4>LOGIN FARELLA</h4>
+                            </div>
+                            <div class="card-body" >
+                                <form method="post" action="/login/">{% csrf_token %}
+                                    {% if error %}
+                                        <div class="alert alert-danger">
+                                            <div class="error-message">
+                                                    {{ error }}
+                                            </div>
+                                        </div>
+                                    {% endif %}
+                                    <div class="form-group">
+                                        <label class="control-label" for="username">Username</label>
+                                        {{ form.username }}
+                                        <span class="help-block small"></span>
+                                    </div>
+                                    <div class="form-group">
+                                        <label class="control-label" for="password">Password</label>
+                                        {{ form.password }}
+                                        <span class="help-block small"></span>
+                                    </div>
+                                    <div class="checkbox login-checkbox mb-3">
+                                        <label>
+                                            <input type="checkbox" class="i-checks"> Ricordami </label>
+                                    </div>
+                                    <button type="submit" class="btn btn-success btn-block">Login</button>
+                                    <div class="text-center">
+                                        <a class="d-block small" href="{% url 'password_reset' %}">Forgot Password?</a>
+                                    </div>
+                                </form>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    <div class="p-t-90" style="padding-bottom: 84px;">
+
+    </div>
+</div>
+
+</section>
+
+{#<div class="error-pagewrap" style="background: url({% static 'img/sfondo1.png' %}) no-repeat; background-position: center; background-size: cover" ;>#}
+{#             <div class="error-page-int" style="z-index: 9999; opacity: 0.8">#}
+{#                     <div class="text-center m-b-md custom-login">#}
+{#                             <h2 style="color: white">LOGIN FARELLA</h2>#}
+{#                             <p>This is the best app ever!</p>#}
+{#                     </div>#}
+{#                     <div class="content-error">#}
+{#                             <div class="hpanel">#}
+{#                    <div class="panel-body">#}
+{#                        <form method="post" action="/piattaforma/login/">#}
+{#                            {% if request.session.error %}#}
+{#                                <div class="alert alert-danger">#}
+{#                                    <div class="error-message">#}
+{#                                        {{ request.session.error }}#}
+{#                                    </div>#}
+{#                                </div>#}
+{#                            {% endif %}#}
+{#                            <div class="form-group">#}
+{#                                <label class="control-label" for="username">Username</label>#}
+{#                                {{ form.username }}#}
+{#                                <span class="help-block small">Your unique username to app</span>#}
+{#                            </div>#}
+{#                            <div class="form-group">#}
+{#                                <label class="control-label" for="password">Password</label>#}
+{#                                {{ form.password }}#}
+{#                                <span class="help-block small">Yur strong password</span>#}
+{#                            </div>#}
+{#                            <div class="checkbox login-checkbox">#}
+{#                                <label>#}
+{#                                    <input type="checkbox" class="i-checks"> Remember me </label>#}
+{#                                <br>#}
+{#                                <p class="help-block small">(if this is a private computer)</p>#}
+{#                            </div>#}
+{#                            <button type="submit" class="btn btn-primary">Login</button>#}
+{#                        </form>#}
+{#                    </div>#}
+{#                </div>#}
+{#                     </div>#}
+{#             </div>#}
+{#    </div>#}
+
+    <!-- jquery
+               ============================================ -->
+
+<!-- General JS Scripts -->
+  <script src="{% static 'admin/js/app.min.js' %}"></script>
+  <!-- JS Libraies -->
+  <!-- Page Specific JS File -->
+  <!-- Template JS File -->
+  <script src="{% static 'admin/js/scripts.js' %}"></script>
+  <!-- Custom JS File -->
+  <script src="{% static 'admin/js/custom.js' %}"></script>
+
+
+
+</body>
+
+</html>
+
diff --git a/frontend/urls.py b/frontend/urls.py
new file mode 100644 (file)
index 0000000..c8eaaf2
--- /dev/null
@@ -0,0 +1,7 @@
+from django.urls import path
+
+from frontend.views import Home
+
+urlpatterns = [
+    path('', Home.as_view(), name='index'),
+]
diff --git a/frontend/views.py b/frontend/views.py
new file mode 100644 (file)
index 0000000..02645f1
--- /dev/null
@@ -0,0 +1,9 @@
+from django.shortcuts import render
+from django.views import View
+
+from utenti.mixins import CustomLoginRequiredMixin
+
+
+class Home(View):#CustomLoginRequiredMixin
+    def get(self, request):
+        return render(request, 'home.html', {})
index 792548dd76ab2719b2cc373574d76e8324fa1ccf..6ba63b54177e69ca56de960fa36848e1e258c193 100644 (file)
@@ -14,8 +14,11 @@ Including another URLconf
     2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
 """
 from django.contrib import admin
-from django.urls import path
+from django.urls import path, include
+from django.contrib.auth import views as auth_views
+
 
 urlpatterns = [
     path('admin/', admin.site.urls),
+    path('', include('frontend.urls')),
 ]
diff --git a/utenti/admin.py b/utenti/admin.py
new file mode 100644 (file)
index 0000000..8c38f3f
--- /dev/null
@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.
diff --git a/utenti/apps.py b/utenti/apps.py
new file mode 100644 (file)
index 0000000..89d6602
--- /dev/null
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class UtentiConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'utenti'
diff --git a/utenti/forms.py b/utenti/forms.py
new file mode 100644 (file)
index 0000000..73951b9
--- /dev/null
@@ -0,0 +1,6 @@
+from django.contrib.auth.forms import *
+
+
+class FormLogin(forms.Form):
+    username = forms.CharField(max_length=255, widget=forms.TextInput(attrs={'class': 'form-control'}))
+    password = forms.CharField(max_length=255, widget=forms.PasswordInput(attrs={'class':'form-control'}))
\ No newline at end of file
diff --git a/utenti/mixins.py b/utenti/mixins.py
new file mode 100644 (file)
index 0000000..5da9fce
--- /dev/null
@@ -0,0 +1,54 @@
+from django.contrib.auth.mixins import LoginRequiredMixin
+from django.core.exceptions import PermissionDenied
+from django.urls import reverse_lazy
+from django.views import View
+from rest_framework.permissions import IsAuthenticated
+from rest_framework.views import APIView
+
+
+class CustomLoginRequiredMixin(LoginRequiredMixin, View):
+    login_url = reverse_lazy('login')
+    redirect_field_name = 'redirect_to'
+
+
+class APIViewAuthenticated(APIView):
+    permission_classes = [IsAuthenticated]
+
+
+class PermissionRequiredMixin(object):
+    permission_required = None
+
+    def dispatch(self, request, *args, **kwargs):
+        if request.user.is_authenticated:
+            if request.session.get('structure'):
+                user_perms = request.user.get_all_permissions_by_structure_flat(request.session['structure'])
+                if len(set(user_perms).intersection(self.permission_required)) <= 0:
+                    raise PermissionDenied
+                return super(PermissionRequiredMixin, self).dispatch(request, *args, **kwargs)
+            else:
+                user_perms = request.user.get_all_permissions_flat()
+                if len(set(user_perms).intersection(self.permission_required)) <= 0:
+                    raise PermissionDenied
+                return super(PermissionRequiredMixin, self).dispatch(request, *args, **kwargs)
+        else:
+            raise PermissionDenied
+
+
+class AuthorizationRequiredMixin(object):
+    authorization_required = None
+
+    def dispatch(self, request, *args, **kwargs):
+        if request.user.is_authenticated:
+            if request.session.get('structure'):
+                user_authorization = request.user.get_all_authorizations_by_structure_flat(
+                    request.session['structure'])
+                if len(set(user_authorization).intersection(self.authorization_required)) <= 0:
+                    raise PermissionDenied
+                return super(AuthorizationRequiredMixin, self).dispatch(request, *args, **kwargs)
+            else:
+                user_authorization = request.user.get_all_authorizations_flat()
+                if len(set(user_authorization).intersection(self.authorization_required)) <= 0:
+                    raise PermissionDenied
+                return super(AuthorizationRequiredMixin, self).dispatch(request, *args, **kwargs)
+        else:
+            raise PermissionDenied
\ No newline at end of file
diff --git a/utenti/models.py b/utenti/models.py
new file mode 100644 (file)
index 0000000..71a8362
--- /dev/null
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/utenti/tests.py b/utenti/tests.py
new file mode 100644 (file)
index 0000000..7ce503c
--- /dev/null
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/utenti/urls.py b/utenti/urls.py
new file mode 100644 (file)
index 0000000..27ed0eb
--- /dev/null
@@ -0,0 +1,16 @@
+from django.urls import path, include
+from django.contrib import admin
+
+from django.contrib.auth import views as auth_views
+
+from utenti.views import Autentication, Logout
+
+urlpatterns = [
+    path('accounts/', include('django.contrib.auth.urls')),
+    path('login/', Autentication.as_view(), name='login'),
+    path('logout/', Logout.as_view(), name='logout'),
+    path('password_reset/', auth_views.PasswordResetView.as_view(template_name='registration/custom_password_reset_email.html'),name='password_reset'),
+    path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(template_name='registration/custom_password_reset_done.html'),name='password_reset_done'),
+    path('password_reset_confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(template_name="registration/custom_password_reset_confirm.html"),name='password_reset_confirm'),
+    path('reset/done/', auth_views.PasswordResetCompleteView.as_view(template_name='registration/custom_password_reset_complete.html'),name='password_reset_complete'),
+]
\ No newline at end of file
diff --git a/utenti/views.py b/utenti/views.py
new file mode 100644 (file)
index 0000000..3a756a2
--- /dev/null
@@ -0,0 +1,51 @@
+from django.contrib.auth import authenticate, login
+from django.shortcuts import render, redirect
+from django.views import View
+from django.contrib import messages
+from django.contrib.auth import login, authenticate, logout
+
+from utenti.forms import FormLogin
+
+
+class Autentication(View):
+    def post(self, request):
+        redirect_to = request.GET.get('redirect_to', '/')
+        if request.user.is_authenticated:
+            return redirect(redirect_to)
+
+        username = request.POST.get('login')
+        password = request.POST.get('password')
+
+        user = authenticate(username=username, password=password)
+        if user is not None:
+            login(request, user, backend='accounts.backends.AuthenticationLoginBackend')
+            messages.add_message(request, messages.INFO, 'Ciao ' + username + ' :)')
+
+            request.session['roles'] = user.ruolo.codice
+            request.session['user_id'] = user.pk
+            request.session['username'] = user.username
+            return redirect('/')
+
+        else:
+            messages.add_message(request, messages.ERROR, 'Dati di autenticazione non validi.')
+            form = FormLogin()
+            context = {'form': form}
+            return render(request, 'registration/login.html', context)
+
+    def get(self, request):
+        redirect_to = request.GET.get('redirect_to', '/')
+        if request.user.is_authenticated:
+            return redirect(redirect_to)
+        form = FormLogin()
+        context = {'form':form}
+        return render(request, 'registration/login.html', context)
+
+
+class Logout(View):
+
+    def get(self, request):
+        messages.add_message(request, messages.ERROR, 'Logout.')
+        logout(request)
+        form = FormLogin()
+        context = {'form': form}
+        return render(request, 'registration/login.html', context)
\ No newline at end of file