Forráskód Böngészése

merge da Sede e passaggio a SedeBis

mauro 1 éve
szülő
commit
9e8417b549

+ 20 - 0
att/migrations/0019_alter_attivita_amministratore.py

@@ -0,0 +1,20 @@
+# Generated by Django 5.1.4 on 2024-12-10 07:53
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('att', '0018_alter_attivita_data'),
+        ('utente', '0014_alter_amministratore_nome'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='attivita',
+            name='amministratore',
+            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='utente.amministratore'),
+        ),
+    ]

+ 1 - 2
att/models.py

@@ -2,7 +2,6 @@ from django.db import models
 from utente.models import *
 from documento.models import *
 from azienda.models import *
-from django.contrib.auth.models import User
 
 import datetime
 
@@ -21,5 +20,5 @@ class Attivita(models.Model):
   utente = models.ForeignKey(Utente,null=True,on_delete=models.CASCADE,default=None)
   documento = models.ForeignKey(Documento,null=True,on_delete=models.CASCADE,default=None)
   azienda = models.ForeignKey(Azienda,null=True,on_delete=models.CASCADE,default=None)
-  amministratore = models.ForeignKey(User,null=True,on_delete=models.CASCADE,default=None)
+  amministratore = models.ForeignKey(Amministratore,null=True,on_delete=models.CASCADE,default=None)
 

+ 0 - 1
att/views.py

@@ -2,7 +2,6 @@ from django.shortcuts import render
 from django.utils import timezone
 from .models import *
 import datetime
-from django.contrib.auth.models import User as Amministratore
 
 ''' non esistono attività specifiche su web
 ma solo funzioni che registrano o ritornano le attivita' richieste

+ 7 - 0
azienda/forms.py

@@ -9,6 +9,13 @@ class formAzienda(forms.Form):
     self.fields['forzanuovapassword'] = forms.BooleanField(required=False)
     self.fields['cancellaazienda'] = forms.BooleanField(required=False)
 
+class formSede(forms.Form):
+  def __init__(self,*args,**kwargs):
+    forms.Form.__init__(self,*args,**kwargs)
+    self.fields['nome'] = forms.CharField(required=True)
+    self.fields['info'] = forms.CharField(required=True)
+    self.fields['cancellasede'] = forms.BooleanField(required=False)
+
 class formPinMail(forms.Form):
   def __init__(self,*args,**kwargs):
     forms.Form.__init__(self,*args,**kwargs)

+ 23 - 0
azienda/migrations/0005_sede.py

@@ -0,0 +1,23 @@
+# Generated by Django 5.1.4 on 2024-12-11 10:00
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('azienda', '0004_azienda_comm'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Sede',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('nome', models.CharField(default='', max_length=132)),
+                ('nota', models.CharField(default='', max_length=256)),
+                ('azienda', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='azienda.azienda')),
+            ],
+        ),
+    ]

+ 24 - 0
azienda/migrations/0006_assegnazionesede.py

@@ -0,0 +1,24 @@
+# Generated by Django 5.1.4 on 2024-12-11 10:02
+
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('azienda', '0005_sede'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='AssegnazioneSede',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('sede', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='azienda.sede')),
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+    ]

+ 12 - 0
azienda/models.py

@@ -15,6 +15,14 @@ class Azienda(models.Model):
      constraints = [ models.UniqueConstraint(fields=['nome','partitaiva'], name="unique-azienda") ]
      indexes = [ models.Index(fields=['partitaiva','nome']) ]
 
+class Sede(models.Model):
+    '''
+    'ogni azienda ha almeno una sede'.
+    '''
+    nome = models.CharField(max_length=132,null=False,default="")
+    nota = models.CharField(max_length=256,null=False,default="")
+    azienda = azienda = models.ForeignKey(Azienda,on_delete=models.PROTECT)
+
 class Assegnazione(models.Model):
   '''
   questa tabella permette le associazioni tra società e Utente
@@ -23,3 +31,7 @@ class Assegnazione(models.Model):
   azienda = models.ForeignKey(Azienda,on_delete=models.PROTECT)
   user = models.ForeignKey(User,on_delete=models.PROTECT)
 
+class AssegnazioneSede(models.Model):
+  sede = models.ForeignKey(Sede,on_delete=models.PROTECT)
+  user = models.ForeignKey(User,on_delete=models.PROTECT)
+

+ 0 - 0
azienda/templates/azienda.edit.html → azienda/templates/azienda.editAzienda.html


+ 63 - 0
azienda/templates/azienda.editSede.html

@@ -0,0 +1,63 @@
+{% extends 'base.html' %}
+
+{% block top %}
+    <div class='form-outline mb-3 text-center btn-primary h3'>
+           {{ HeaderTitle }}
+    </div>
+    <div class='form-outline mb-3 text-center btn-primary h3'>
+           Amministratore: {{ admin.username }} 
+    </div>
+{% endblock %}
+
+{% block body %}
+
+  <!-- errori utente -->
+  {% if sede.errors %}
+    {{ sede.errors }}
+    {% for field in sede %}
+      {% for error in field.errors %}
+        <div class="alert alert-danger">
+          <strong>{{ error|escape }}</strong>
+        </div>
+      {% endfor %}
+    {% endfor %}
+
+    {% for error in sede.non_field_errors %}
+      <div class="alert alert-danger">
+          <strong>{{ error|escape }}</strong>
+      </div>
+    {% endfor %}
+  {% else %}
+    Nessun Errore rilevato
+  {% endif %}
+  <!-- fine zona errori -->
+
+  <!-- profilo utente -->
+  <form name='AziendaEdit' method='post'>
+    {% csrf_token %}
+    <div class='form-group'>
+      <label for="nome">Nome Azienda</label>
+      <input type='text' class='form-control form-control-lg' name='nome' id='nome' value='{{ sede.nome.value }}'>
+    </div>
+    <div class='form-group'>
+      <label for="partitaiva">Partita IVA</label>
+      <input type='text' class='form-control' name='partitaiva' id='partitaiva' value='{{ sede.partitaiva.value }}'>
+    </div>
+    <div class='form-group'>
+      <label for="mail" class="form-control-label">Email</label>
+      <input type='mail' class='form-control' name='mail' id='mail' value='{{ sede.mail.value }}'>
+    </div>
+    <div class='form-check'>
+      <input class="form-check-input" type="checkbox" value="{{ sede.forzanuovapassword.value }}" id="forzanuovapassword" name="forzanuovapassword">
+      <label for='forzanuovapassword' class='form-control-label'>L'utente deve cambiare la password al primo login</label>
+    </div>
+    <div class="form-check">
+      <input class="form-check-input" type="checkbox" value="{{ sede.cancellasede.value }}" id="cancellasede" name="cancellasede">
+      <label class="form-check-label" for="cancellasede">Cancella Azienda!</label>
+    </div>
+
+    <input type='submit' class="btn btn-secondary" value='Aggiorna'>
+    <input type='submit' class="btn btn-primary" name="ritorna" value="Ritorna">
+  </form>
+
+</div>{% endblock %}

+ 1 - 1
azienda/urls.py

@@ -4,5 +4,5 @@ from . import views
 app_name='azienda'
 urlpatterns = [
   path('welcome',views.welcome,name='welcome'),
-  path('edit',views.edit,name='edit'),
+  path('editAzienda',views.editAzienda,name='editAzienda'),
   ]

+ 107 - 10
azienda/views.py

@@ -2,7 +2,6 @@ from django.shortcuts import render
 from django.http import HttpResponseRedirect
 from django.urls import reverse
 from .models import *
-from django.contrib.auth.models import User
 from config.views import *
 from att.views import *
 from .forms import *
@@ -23,12 +22,18 @@ def welcome(request):
     azienda = Azienda.objects.get(pk=AziendaId)
     data['azienda'] = azienda
 
+  if 'SedeId' in request.session:
+    SedeId = request.session['SedeId']
+    print('SedeId',SedeId)
+    sede = Sede.objects.get(pk=SedeId)
+    data['sede'] = sede
+
   data['Navbar']=True
   data['HeaderTitle'] = getConfig('HeaderTitle')
 
-  admin = User.objects.get(pk=AdminId)
+  admin = Amministratore.objects.get(pk=AdminId)
   data['admin'] = admin
-  print('admin',admin.id,admin.get_username())
+  print('admin',admin.id,admin.nome)
 
   assegnazione = Assegnazione.objects.filter(user=admin.id)
   print('assegnazione',len(assegnazione))
@@ -52,14 +57,40 @@ def welcome(request):
         return HttpResponseRedirect(reverse('azienda:welcome'))
 
       print("sceltaazienda = ",request.POST.get('sceltaazienda'))
+<<<<<<< HEAD
       if sceltaazienda < 1 : #richiesta una nuova azienda
         if 'AziendaId' in data:
           data['AziendaId'] = none
         return HttpResponseRedirect(reverse('azienda:edit'))
+=======
+      if sceltaazienda < 1: #richiesta una nuova azienda
+        data['AziendaId']=None
+        return HttpResponseRedirect(reverse('azienda:editAzienda'))
+>>>>>>> origin/Sede
       else:
-        azienda = Azienda.objects.get(pk=sceltaazienda)
-        data['azienda'] = azienda
-        request.session['AziendaId'] = azienda.id
+        try:
+          azienda = Azienda.objects.get(pk=sceltaazienda)
+          data['azienda'] = azienda
+          request.session['AziendaId'] = azienda.id
+        except Azienda.DoesNotExist as dne:
+          print("errore, oggetto inesistente",dne)
+    if "sceltasede" in request.POST:
+      sceltasede = request.POST.get('sceltasede')
+      try:
+        sceltasede = int(sceltasede)
+      except ValueError as ve:
+        print("Non e' stata fatta la scelta corretta")
+        print(ve)
+        return HttpResponseRedirect(reverse('azienda:welcome'))
+
+      print("sceltasede = ",request.POST.get('sceltasede'))
+      if sceltasede == 0: #richiesta una nuova azienda
+        data['SedeId']=None
+        #return HttpResponseRedirect(reverse('azienda:editSede'))
+      elif sceltasede != -1:
+        sede = Sede.objects.get(pk=sceltasede)
+        data['sede'] = sede
+        request.session['SedeId'] = sede.id
 
     if  "utenti" in request.POST:
       print('premuto tasto utenti')
@@ -84,20 +115,25 @@ def welcome(request):
       print('azienda passata',request.POST.get('parazienda'))
       azienda = Azienda.objects.get(pk=azid)
       request.session['AziendaId'] = azienda.id
-      return HttpResponseRedirect(reverse('azienda:edit'))
+      return HttpResponseRedirect(reverse('azienda:editAzienda'))
 
   tmplist = list()
   for tmp in assegnazione:
     tmplist.append(tmp.azienda)
 
   data['aziendaLista'] = tmplist
+
+  if 'azienda' in data:
+    print('azienda selezionata:',data['azienda'].nome)
+    data['sedelista'] = data['azienda'].sede_set.all()
+
   print('data',data)
   print('numero aziende',len(data['aziendaLista']))
 
   return render(request,'azienda.welcome.html',data)
 
 # creazione azienda
-def edit(request):
+def editAzienda(request):
   AdminId = request.session['AdminId']
 
   data={}
@@ -161,9 +197,70 @@ def edit(request):
 
     data['azienda'] = formAziendaField
 
-  return render(request,'azienda.edit.html',data)
-     
+  return render(request,'azienda.editAzienda.html',data)
+
+def editSede(request):
+  AdminId = request.session['AdminId']
+
+  data={}
+  data['HeaderTitle'] = getConfig('HeaderTitle')
+  user = data['admin'] = User.objects.get(pk=AdminId)
+
+  if 'AziendaId' in request.session:
+    print('trovato riferimento AziendaId',request.session.get('AziendaId'))
+    azid = request.session.get('AziendaId')
+    try:
+      azienda = Azienda.objects.get(pk=azid)
+      print('azienda trovata',azienda.nome)
+    except Azienda.DoesNotFound as dnf:
+        print(dnf)
+
+  if request.method == "POST":
+    print("Richiesta creazione nuova azienda")
+    nuovaazienda = formAzienda(request.POST)
+    if nuovaazienda.is_valid():
+      print("il form e' valido",request.POST)
+      if not azienda:
+        azienda = Azienda()
+      azienda.nome = nuovaazienda.cleaned_data.get('nome')
+      azienda.mail = nuovaazienda.cleaned_data.get('mail')
+      azienda.partitaiva = nuovaazienda.cleaned_data.get('partitaiva')
+      azienda.save()
+      request.session['AziendaId'] = azienda.id
+      print('azienda:',azienda.id)
 
+      assegnazione = Assegnazione()
+      if azienda:
+        assegnazione = Assegnazione.objects.get(azienda=azienda,user=user)
+      assegnazione.azienda=azienda
+      assegnazione.user=User.objects.get(pk=AdminId)
 
+      assegnazione.save()
+      return HttpResponseRedirect(reverse('azienda:welcome'))
+    else:
+      print("form non valido")
+      data['azienda'] = formAzienda(request.POST)
+  else: #non è un post
+    print("Non è un post")
+    formAziendaField = None
+    if azienda:
+        print('Abbiamo azienda',azienda.nome)
+        tmp = dict()
+        tmp['id'] = azienda.id
+        tmp['nome'] = azienda.nome
+        tmp['partitaiva'] = azienda.partitaiva
+        tmp['mail'] = azienda.mail
+        tmp['forzanuovapassword'] = True
+        formAziendaField = formAzienda(tmp)
+    else:
+        tmp = dict()
+        tmp['nome'] = ''
+        tmp['partitaiva'] = ''
+        tmp['mail'] = user.email
+        tmp['forzanuovapassword'] = True
+        formAziendaField = formAzienda(tmp)
 
+    data['azienda'] = formAziendaField
 
+  return render(request,'azienda.editAzienda.html',data)
+ 

+ 21 - 5
config/views.py

@@ -1,12 +1,28 @@
 from django.shortcuts import render
 from .models import *
 
+import uuid
+
 def getConfig(indice=None):
+  # parm:
+  #  indice: l'indice (una parola)
+  # ritorna il valore/testo corrispondente.
+  # solleva eccezione se non trova il valore
+
   if not indice:
-    return ""
-  c = Config.objects.get(indice=indice)
-  if c: #qualcosa ha trovato
+    return None
+
+  c = None
+  try:
+    c = Config.objects.get(indice=indice)
     print('getConfig',c.indice,': ',c.valore)
-    return c.valore
-  return ""
+  except Config.DoesNotExists as dne:
+    print('Indice errato, non trovato',indice)
+    return None
+  return c.valore
 
+def getUuid():
+  # ritorna un uuid a 32 bit in esadecimale.
+  # principalmente per il cambio email.
+  u = uuid.uuid1()
+  return u.hex

BIN
db/db.sqlite3


+ 17 - 0
documento/migrations/0013_remove_documento_documento_d_documen_a68d7b_idx.py

@@ -0,0 +1,17 @@
+# Generated by Django 5.1.4 on 2024-12-10 07:53
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('documento', '0012_remove_documento_pertutti'),
+    ]
+
+    operations = [
+        migrations.RemoveIndex(
+            model_name='documento',
+            name='documento_d_documen_a68d7b_idx',
+        ),
+    ]

+ 1 - 1
documento/models.py

@@ -14,5 +14,5 @@ class Documento(models.Model):
   
   class Meta:
     constraints = [ models.UniqueConstraint(fields=['documento'], name="unique-documento") ]
-    indexes = [ models.Index(fields=['documento','utente']) ]
+    #indexes = [ models.Index(fields=['documento','utente']) ]
 

+ 2 - 0
login/models.py

@@ -2,3 +2,5 @@ from django.db import models
 
 # Create your models here.
 from comunicazione.models import *
+from utente.models import *
+

+ 21 - 17
login/views.py

@@ -1,14 +1,13 @@
 from django.shortcuts import render
 from django.http import HttpResponse,HttpResponseRedirect,FileResponse
 from django.urls import reverse
+import django
+
 from .forms import *
 from config.views import getConfig
 from comunicazione.views import ServizioMail
-
-from utente.models import *
-from django.contrib.auth import authenticate
-import django
 from att.views import *  
+
 def start(request):
   '''
   da qui si comincia
@@ -25,14 +24,14 @@ def start(request):
     result = LoginUser(request.POST)
 
     if result.is_valid():
-      username = result.cleaned_data['cfisc']
+      accesso = result.cleaned_data['cfisc']
       pin = result.cleaned_data['passs']
 
       #verifica corrispondenza utente
       u = None
       try:
         # verifica che esista un utente ordinario
-        u = Utente.objects.get(codicefiscale=username.upper())
+        u = Utente.objects.get(codicefiscale=accesso.upper())
       except  Utente.DoesNotExist as dne:
         print("non ci provare")
         u = None
@@ -73,13 +72,18 @@ def start(request):
       else: # l'utente ordinario non esiste
         print('verifica amministratore')
         
-        user = authenticate(username=username.strip().lower(),password=pin.strip())
-        if user:
-          if isinstance(user,django.contrib.auth.models.User): 
-            print('tipo amministratore',type(user))
-
-          request.session['AdminId'] = user.id
-          setLog(1,amministratore=user)
+        a = None
+        try:
+          print(dir(Amministratore))
+          a = Amministratore.objects.get(login=accesso.strip())
+          if a:
+            print('login trovato',a)
+        except Amministratore.DoesNotExist as dne:
+          print('amministratore non trovato',dne)
+          a = None
+        if a:
+          request.session['AdminId'] = a.id
+          setLog(1,amministratore=a)
 
           ### comunicazioni ###
           sm = ServizioMail(debug=True)
@@ -90,16 +94,16 @@ def start(request):
             print("Record comunicazione inesistente",dne)
           if comunicazione: 
             sm.set_mailfrom=comunicazione.mittente
-            sm.add_to(user.email)
+            sm.add_to(a.mail)
 
             sm.set_soggetto(comunicazione.soggetto)
             sm.set_corpo(comunicazione.corpo)
 
             sm_data = dict()
             utente=dict() #adattamento campo utente
-            utente['nome'] = user.get_username()
-            utente['mail'] = user.email
-            sm_data['utente'] = utente
+            utente['nome'] = a.nome
+            utente['mail'] = a.mail
+            sm_data['utente'] = a
             sm.set_data(sm_data)
             sm.send()
           ### comunicazioni ###

+ 9 - 2
static/templates/base.html

@@ -28,15 +28,22 @@
       <ul class="navbar-nav me-auto mb-2 mb-lg-0">
         <li class="nav-item">
           <ul>
-            <form name="scegliazienda" method=POST>
+            <form name="scegliazienda" method=POST class='d-flex'>
             {% csrf_token %}
             <select class="form-select form-select-lg mb-1" aria-label=".form-select-lg" name="sceltaazienda" onchange="this.form.submit()">
-	      <option>Scelta Azienda</option>
+	      <option value=-1>Scelta Azienda</option>
               {% for a in aziendaLista %}
 	      <option value={{ a.id }} {% if a.id == azienda.id %}selected{% endif %}>{{ a.nome }}</button></option>
               {% endfor %}
               <option value=0>Nuova Azienda</option>
             </select>
+
+            <select class="form-select form-select-lg mb-1" aria-label=".form-select-lg" name="sceltasede" onchange="this.form.submit()">
+              {% for s in sedelista %}
+	      <option value={{ s.id }} {% if s.id == sede.id %}selected{% endif %}>{{ s.nome }}</button></option>
+              {% endfor %}
+              <option value=0>Nuova Sede</option>
+            </select>
             </form>
           </ul>
         </li>

+ 4 - 0
utente/admin.py

@@ -1,3 +1,7 @@
 from django.contrib import admin
 from .models import *
 
+@admin.register(Amministratore)
+class AmministratoreAdmin(admin.ModelAdmin):
+  list_display = ['login','nome','pin','sola_lettura','crea_azienda','crea_sede','crea_utente','crea_documento',]
+

+ 1 - 0
utente/fixtures/amministratore.json

@@ -0,0 +1 @@
+[{"model": "utente.amministratore", "pk": 1, "fields": {"login": "mauro", "nome": "Mauro Morichi", "mail": "mauro@966.it", "pin": "Abcd.1234", "sola_lettura": false, "crea_azienda": true, "crea_sede": true, "crea_utente": true, "crea_documento": true}}, {"model": "utente.amministratore", "pk": 2, "fields": {"login": "gabriella", "nome": "Gabriella Angelillo", "mail": "g.angelillo@box3srl.it", "pin": "Noretta.2024!", "sola_lettura": false, "crea_azienda": true, "crea_sede": true, "crea_utente": true, "crea_documento": true}}]

+ 28 - 0
utente/migrations/0013_amministratore.py

@@ -0,0 +1,28 @@
+# Generated by Django 5.1.4 on 2024-12-09 12:14
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('utente', '0012_remove_utente_unique_utente_remove_utente_admin_and_more'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Amministratore',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('login', models.CharField(max_length=64)),
+                ('nome', models.CharField(max_length=128)),
+                ('mail', models.CharField(default='', max_length=128)),
+                ('pin', models.CharField(max_length=64)),
+                ('sola_lettura', models.BooleanField(default=False)),
+                ('crea_azienda', models.BooleanField(default=True)),
+                ('crea_sede', models.BooleanField(default=True)),
+                ('crea_utente', models.BooleanField(default=True)),
+                ('crea_documento', models.BooleanField(default=True)),
+            ],
+        ),
+    ]

+ 18 - 0
utente/migrations/0014_alter_amministratore_nome.py

@@ -0,0 +1,18 @@
+# Generated by Django 5.1.4 on 2024-12-10 07:53
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('utente', '0013_amministratore'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='amministratore',
+            name='nome',
+            field=models.CharField(max_length=128, unique=True),
+        ),
+    ]

+ 18 - 0
utente/migrations/0015_utente_uuid.py

@@ -0,0 +1,18 @@
+# Generated by Django 5.1.2 on 2024-12-10 20:24
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('utente', '0014_alter_amministratore_nome'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='utente',
+            name='uuid',
+            field=models.CharField(default='', max_length=32),
+        ),
+    ]

+ 25 - 0
utente/migrations/0016_utente_sede_alter_utente_azienda.py

@@ -0,0 +1,25 @@
+# Generated by Django 5.1.4 on 2024-12-11 10:05
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('azienda', '0006_assegnazionesede'),
+        ('utente', '0015_utente_uuid'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='utente',
+            name='sede',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='azienda.sede'),
+        ),
+        migrations.AlterField(
+            model_name='utente',
+            name='azienda',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='azienda.azienda'),
+        ),
+    ]

+ 18 - 3
utente/models.py

@@ -1,8 +1,9 @@
 from django.db import models
+from django.utils import timezone
+
 import datetime
 from azienda.models import *
-from documento.models import *
-from django.utils import timezone
+#from documento.models import *
 
 class Utente(models.Model):
     codicefiscale = models.CharField(max_length=16,null=False)
@@ -11,11 +12,13 @@ class Utente(models.Model):
     luogonascita = models.CharField(max_length=256,null=False,default="")
     inserimento = models.DateField(null=False,default=timezone.now)
     mail = models.CharField(max_length=128,null=False,default="")
-    azienda = models.ForeignKey(Azienda,on_delete=models.PROTECT)
+    azienda = models.ForeignKey(Azienda,on_delete=models.PROTECT,null=True)
+    sede = models.ForeignKey(Sede,on_delete=models.PROTECT,null=True)
     primologin = models.BooleanField(null=False,default=1)
     daticompleti=models.BooleanField(null=False,default=0)
     pin = models.CharField(max_length=64,null=False,default="")
     encrypt=models.CharField(max_length=64,null=False,default="")
+    uuid = models.CharField(max_length=32,null=False,default="")
     @property
     def documenti(self):
       return len(self.documento_set.all())
@@ -24,3 +27,15 @@ class Utente(models.Model):
       constraints = [ models.UniqueConstraint(fields=['nome','codicefiscale'], name="unique-utente") ]
       indexes = [ models.Index(fields=['codicefiscale','nome']) ]
 
+class Amministratore(models.Model):
+    login = models.CharField(max_length=64,null=False)
+    nome = models.CharField(max_length=128,null=False,unique=True)
+    mail = models.CharField(max_length=128,null=False,default="")
+    pin = models.CharField(max_length=64,null=False)
+    sola_lettura = models.BooleanField(default=False)
+    crea_azienda = models.BooleanField(default=True)
+    crea_sede = models.BooleanField(default=True)
+    crea_utente = models.BooleanField(default=True)
+    crea_documento = models.BooleanField(default=True)
+
+

+ 8 - 8
utente/templates/utente.welcome.html

@@ -1,22 +1,22 @@
 {% extends 'base.html' %}
 
 {% block top %}
-    <div class='form-outline mb-3 text-center btn-primary h3'>
+    <div class='form-outline mb-2 text-center btn-primary h3'>
            {{ HeaderTitle }}
     </div>
-    <div clasS='form-outline mb-3 text-center btn-primary h3'>
-           Azienda in elaborazione: {{ azienda.nome }}
+    <div class='form-outline mb-2 text-center btn-primary h3'>
+	    Azienda in elaborazione: {{ azienda.nome }} - Sede di: {{ sede.nome }}
     </div>
-    <div clasS='form-outline mb-3 text-center btn-primary h3'>
-           Amministratore: {{ admin.username }}
+    <div class='form-outline mb-2 text-center btn-primary h3'>
+           Amministratore: {{ admin.nome }}
     </div>
 {% endblock %}
 
 {% block body %}
   <form name="inputUtente" method="POST">
   <div class='form-control'>
-    <input type='submit' class="btn btn-secondary" name='scelta' value='Nuovo Utente'>
-    <input type='submit' class="btn btn-secondary" name='CaricamentiMultipli' value='Caricamenti Multipli'>
+    <input type='submit' class="btn btn-secondary" name='scelta' value='Nuovo Utente' {% if admin.crea_utente %} disable {% endif %}>
+    <input type='submit' class="btn btn-secondary" name='CaricamentiMultipli' value='Caricamenti Multipli' {% if admin.crea_documento %} disable {% endif %}>
      <input type='submit' class="btn btn-primary" name="ritorna" value="Ritorna">
   </div>
 
@@ -39,7 +39,7 @@
       {% csrf_token %}
       {% for uu in utenti %}
         <tr>
-	  <td> <button type='submit' class='btn btn-primary btn-block btn-lg mb-2 active' name='scelta' value='{{ uu.id }}'>Edit</button></td>
+		<td> <button type='submit' class='btn btn-primary btn-block btn-lg mb-2 active' name='scelta' value='{{ uu.id }}' {% if admin.crea_utente %}disable{% endif %}>Edit</button></td>
           <td> {{ uu.nome }} </td>
 	  <td> {{ uu.codicefiscale }} </td>
 	  <td> {{ uu.datanascita|date:'d/m/Y' }} </td>

+ 14 - 11
utente/views.py

@@ -1,6 +1,5 @@
 from django.shortcuts import render
 from django.http import HttpResponse,HttpResponseRedirect,FileResponse
-from django.contrib.auth.models import User
 from django.urls import reverse
 
 from .models import *
@@ -34,12 +33,15 @@ def welcome(request):
     data['UserId'] = request.session['UserId']
 
   #filtro:
-  # selezionare tutti gli utenti per AziendaId
-  #data['admin'] = User.objects.get(pk=data['AdminId']) che non so a che cazzo serve
-
+  data['admin'] = Amministratore.objects.get(pk=data['AdminId']) #che non so a che cazzo serve
   data['azienda'] = Azienda.objects.get(pk=data['AziendaId'])
   data['utenti'] = data['azienda'].utente_set.all().order_by('nome')
 
+  if 'SedeId' in request.session:
+    print('presente SedeId',request.session['SedeId'])
+    data['sede'] = Sede.objects.get(pk=request.session['SedeId'])
+    data['utenti'] = data['sede'].utente_set.all().order_by('nome')
+
   if request.method == 'POST':
     print('qualcuno ha premuto un tasto')
     if "CaricamentiMultipli" in request.POST:
@@ -48,12 +50,13 @@ def welcome(request):
 
     if 'ritorna' in request.POST:
       return HttpResponseRedirect(reverse("azienda:welcome"))
- 
-    if 'scelta' in request.POST:
-      scelta = request.POST['scelta']
-      request.session['UserEditId'] = scelta
-      print('scelta effettuata',scelta)
-      return HttpResponseRedirect(reverse("utente:edit"))
+
+    if data['admin'].nuovo_utente:
+      if 'scelta' in request.POST:
+        scelta = request.POST['scelta']
+        request.session['UserEditId'] = scelta
+        print('scelta effettuata',scelta)
+        return HttpResponseRedirect(reverse("utente:edit"))
 
     filecaricati = AdminUpload(request.POST,request.FILES)
 
@@ -102,7 +105,7 @@ def edit(request):
 
   #filtro:
   # selezionare tutti gli utenti per AziendaId
-  data['admin'] = User.objects.get(pk=data['AdminId'])
+  data['admin'] = Amministratore.objects.get(pk=data['AdminId'])
 
   data['azienda'] = Azienda.objects.get(pk=data['AziendaId'])