--- /dev/null
+from django.contrib import admin
+
+# Register your models here.
--- /dev/null
+from django.apps import AppConfig
+
+
+class ApiConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'api'
--- /dev/null
+from django.db import models
+
+# Create your models here.
--- /dev/null
+from django.test import TestCase
+
+# Create your tests here.
--- /dev/null
+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'),
+]
--- /dev/null
+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
}
body {
- background: #f6f6f6 url("/static/admin/img/login-1.png") no-repeat right bottom;
- background-attachment: fixed;
- background-size: 20%;
+
}
.bg-light {
<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"/>
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 -->
<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>
</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
--- /dev/null
+{% extends 'base.html' %}
+{% load static %}
+{% block content %}
+ CIAO
+{% endblock %}
\ No newline at end of file
--- /dev/null
+<!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
--- /dev/null
+<!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
--- /dev/null
+<!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
--- /dev/null
+<!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
--- /dev/null
+<!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>
+
--- /dev/null
+from django.urls import path
+
+from frontend.views import Home
+
+urlpatterns = [
+ path('', Home.as_view(), name='index'),
+]
--- /dev/null
+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', {})
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')),
]
--- /dev/null
+from django.contrib import admin
+
+# Register your models here.
--- /dev/null
+from django.apps import AppConfig
+
+
+class UtentiConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'utenti'
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+from django.db import models
+
+# Create your models here.
--- /dev/null
+from django.test import TestCase
+
+# Create your tests here.
--- /dev/null
+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
--- /dev/null
+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