Browse Source

first commit

mauro 1 year ago
commit
7f86f8bd7a
100 changed files with 1097 additions and 0 deletions
  1. 0 0
      att/__init__.py
  2. BIN
      att/__pycache__/__init__.cpython-311.pyc
  3. BIN
      att/__pycache__/admin.cpython-311.pyc
  4. BIN
      att/__pycache__/apps.cpython-311.pyc
  5. BIN
      att/__pycache__/models.cpython-311.pyc
  6. BIN
      att/__pycache__/views.cpython-311.pyc
  7. 10 0
      att/admin.py
  8. 6 0
      att/apps.py
  9. 36 0
      att/migrations/0001_initial.py
  10. 20 0
      att/migrations/0002_attivita_utente.py
  11. 19 0
      att/migrations/0003_alter_attivita_data.py
  12. 25 0
      att/migrations/0004_attivita_causale_alter_attivita_data.py
  13. 24 0
      att/migrations/0005_rename_causale_causale_nome_alter_attivita_data.py
  14. 29 0
      att/migrations/0006_attivita_valore_causale_schema_alter_attivita_data.py
  15. 45 0
      att/migrations/0007_alter_attivita_amministratore_alter_attivita_azienda_and_more.py
  16. 19 0
      att/migrations/0008_alter_attivita_data.py
  17. 19 0
      att/migrations/0009_alter_attivita_data.py
  18. 0 0
      att/migrations/__init__.py
  19. BIN
      att/migrations/__pycache__/0001_initial.cpython-311.pyc
  20. BIN
      att/migrations/__pycache__/0002_attivita_utente.cpython-311.pyc
  21. BIN
      att/migrations/__pycache__/0003_alter_attivita_data.cpython-311.pyc
  22. BIN
      att/migrations/__pycache__/0004_attivita_causale_alter_attivita_data.cpython-311.pyc
  23. BIN
      att/migrations/__pycache__/0005_rename_causale_causale_nome_alter_attivita_data.cpython-311.pyc
  24. BIN
      att/migrations/__pycache__/0006_attivita_valore_causale_schema_alter_attivita_data.cpython-311.pyc
  25. BIN
      att/migrations/__pycache__/0007_alter_attivita_amministratore_alter_attivita_azienda_and_more.cpython-311.pyc
  26. BIN
      att/migrations/__pycache__/0008_alter_attivita_data.cpython-311.pyc
  27. BIN
      att/migrations/__pycache__/0009_alter_attivita_data.cpython-311.pyc
  28. BIN
      att/migrations/__pycache__/__init__.cpython-311.pyc
  29. 21 0
      att/models.py
  30. 3 0
      att/tests.py
  31. 60 0
      att/views.py
  32. 0 0
      azienda/__init__.py
  33. BIN
      azienda/__pycache__/__init__.cpython-311.pyc
  34. BIN
      azienda/__pycache__/admin.cpython-311.pyc
  35. BIN
      azienda/__pycache__/apps.cpython-311.pyc
  36. BIN
      azienda/__pycache__/models.cpython-311.pyc
  37. BIN
      azienda/__pycache__/urls.cpython-311.pyc
  38. BIN
      azienda/__pycache__/views.cpython-311.pyc
  39. 5 0
      azienda/admin.py
  40. 6 0
      azienda/apps.py
  41. 42 0
      azienda/migrations/0001_initial.py
  42. 18 0
      azienda/migrations/0002_rename_a_assegnazione_azienda.py
  43. 17 0
      azienda/migrations/0003_azienda_azienda_azi_partita_d03251_idx.py
  44. 0 0
      azienda/migrations/__init__.py
  45. BIN
      azienda/migrations/__pycache__/0001_initial.cpython-311.pyc
  46. BIN
      azienda/migrations/__pycache__/0002_rename_a_assegnazione_azienda.cpython-311.pyc
  47. BIN
      azienda/migrations/__pycache__/0003_azienda_azienda_azi_partita_d03251_idx.cpython-311.pyc
  48. BIN
      azienda/migrations/__pycache__/__init__.cpython-311.pyc
  49. 23 0
      azienda/models.py
  50. 64 0
      azienda/templates/azienda.welcome.html
  51. 3 0
      azienda/tests.py
  52. 7 0
      azienda/urls.py
  53. 52 0
      azienda/views.py
  54. 0 0
      config/__init__.py
  55. BIN
      config/__pycache__/__init__.cpython-311.pyc
  56. BIN
      config/__pycache__/admin.cpython-311.pyc
  57. BIN
      config/__pycache__/apps.cpython-311.pyc
  58. BIN
      config/__pycache__/models.cpython-311.pyc
  59. BIN
      config/__pycache__/tests.cpython-311.pyc
  60. BIN
      config/__pycache__/views.cpython-311.pyc
  61. 4 0
      config/admin.py
  62. 6 0
      config/apps.py
  63. 22 0
      config/migrations/0001_initial.py
  64. 21 0
      config/migrations/0002_config_config_conf_indice_39d8cc_idx_and_more.py
  65. 0 0
      config/migrations/__init__.py
  66. BIN
      config/migrations/__pycache__/0001_initial.cpython-311.pyc
  67. BIN
      config/migrations/__pycache__/0002_config_config_conf_indice_39d8cc_idx_and_more.cpython-311.pyc
  68. BIN
      config/migrations/__pycache__/__init__.cpython-311.pyc
  69. 8 0
      config/models.py
  70. 3 0
      config/tests.py
  71. 12 0
      config/views.py
  72. BIN
      db/db.sqlite3
  73. 0 0
      documento/__init__.py
  74. BIN
      documento/__pycache__/__init__.cpython-311.pyc
  75. BIN
      documento/__pycache__/admin.cpython-311.pyc
  76. BIN
      documento/__pycache__/apps.cpython-311.pyc
  77. BIN
      documento/__pycache__/forms.cpython-311.pyc
  78. BIN
      documento/__pycache__/managefile.cpython-311.pyc
  79. BIN
      documento/__pycache__/models.cpython-311.pyc
  80. BIN
      documento/__pycache__/tests.cpython-311.pyc
  81. BIN
      documento/__pycache__/urls.cpython-311.pyc
  82. BIN
      documento/__pycache__/views.cpython-311.pyc
  83. 3 0
      documento/admin.py
  84. 6 0
      documento/apps.py
  85. 25 0
      documento/forms.py
  86. 203 0
      documento/managefile.py
  87. 28 0
      documento/migrations/0001_initial.py
  88. 17 0
      documento/migrations/0002_remove_documento_utente.py
  89. 17 0
      documento/migrations/0003_remove_documento_dataupload.py
  90. 20 0
      documento/migrations/0004_documento_utente.py
  91. 20 0
      documento/migrations/0005_documento_azienda.py
  92. 23 0
      documento/migrations/0006_documento_documento_d_documen_a68d7b_idx_and_more.py
  93. 23 0
      documento/migrations/0007_remove_documento_azienda_documento_dataupload.py
  94. 20 0
      documento/migrations/0008_alter_documento_utente.py
  95. 23 0
      documento/migrations/0009_documento_descrizione_alter_documento_crc.py
  96. 20 0
      documento/migrations/0010_documento_azienda.py
  97. 0 0
      documento/migrations/__init__.py
  98. BIN
      documento/migrations/__pycache__/0001_initial.cpython-311.pyc
  99. BIN
      documento/migrations/__pycache__/0002_remove_documento_utente.cpython-311.pyc
  100. BIN
      documento/migrations/__pycache__/0003_documento_utente.cpython-311.pyc

+ 0 - 0
att/__init__.py


BIN
att/__pycache__/__init__.cpython-311.pyc


BIN
att/__pycache__/admin.cpython-311.pyc


BIN
att/__pycache__/apps.cpython-311.pyc


BIN
att/__pycache__/models.cpython-311.pyc


BIN
att/__pycache__/views.cpython-311.pyc


+ 10 - 0
att/admin.py

@@ -0,0 +1,10 @@
+from django.contrib import admin
+from .models import *
+
+@admin.register(Attivita)
+class Attivita(admin.ModelAdmin):
+  list_display = ['id','data','causale','utente','documento','azienda','amministratore']
+
+@admin.register(Causale)
+class Causale(admin.ModelAdmin):
+  list_display = ['id','nome','schema']

+ 6 - 0
att/apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class AttConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'att'

+ 36 - 0
att/migrations/0001_initial.py

@@ -0,0 +1,36 @@
+# Generated by Django 5.0.7 on 2024-08-05 14:24
+
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('azienda', '0003_azienda_azienda_azi_partita_d03251_idx'),
+        ('documento', '0010_documento_azienda'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Causale',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('causale', models.CharField(default='', max_length=32)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Attivita',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('data', models.DateTimeField(auto_now=True)),
+                ('amministratore', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
+                ('azienda', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='azienda.azienda')),
+                ('documento', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='documento.documento')),
+            ],
+        ),
+    ]

+ 20 - 0
att/migrations/0002_attivita_utente.py

@@ -0,0 +1,20 @@
+# Generated by Django 5.0.7 on 2024-08-05 14:31
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('att', '0001_initial'),
+        ('utente', '0006_rename_password_utente_pin'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='attivita',
+            name='utente',
+            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='utente.utente'),
+        ),
+    ]

+ 19 - 0
att/migrations/0003_alter_attivita_data.py

@@ -0,0 +1,19 @@
+# Generated by Django 5.0.7 on 2024-08-05 14:36
+
+import datetime
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('att', '0002_attivita_utente'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='attivita',
+            name='data',
+            field=models.DateTimeField(default=datetime.datetime(2024, 8, 5, 16, 36, 44, 31950)),
+        ),
+    ]

+ 25 - 0
att/migrations/0004_attivita_causale_alter_attivita_data.py

@@ -0,0 +1,25 @@
+# Generated by Django 5.0.7 on 2024-08-05 14:58
+
+import datetime
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('att', '0003_alter_attivita_data'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='attivita',
+            name='causale',
+            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='att.causale'),
+        ),
+        migrations.AlterField(
+            model_name='attivita',
+            name='data',
+            field=models.DateTimeField(default=datetime.datetime(2024, 8, 5, 16, 58, 53, 153109)),
+        ),
+    ]

+ 24 - 0
att/migrations/0005_rename_causale_causale_nome_alter_attivita_data.py

@@ -0,0 +1,24 @@
+# Generated by Django 5.0.7 on 2024-08-05 15:00
+
+import datetime
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('att', '0004_attivita_causale_alter_attivita_data'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='causale',
+            old_name='causale',
+            new_name='nome',
+        ),
+        migrations.AlterField(
+            model_name='attivita',
+            name='data',
+            field=models.DateTimeField(default=datetime.datetime(2024, 8, 5, 17, 0, 37, 660349)),
+        ),
+    ]

+ 29 - 0
att/migrations/0006_attivita_valore_causale_schema_alter_attivita_data.py

@@ -0,0 +1,29 @@
+# Generated by Django 5.0.7 on 2024-08-06 08:04
+
+import datetime
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('att', '0005_rename_causale_causale_nome_alter_attivita_data'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='attivita',
+            name='valore',
+            field=models.CharField(default='', max_length=128),
+        ),
+        migrations.AddField(
+            model_name='causale',
+            name='schema',
+            field=models.CharField(default='', max_length=128),
+        ),
+        migrations.AlterField(
+            model_name='attivita',
+            name='data',
+            field=models.DateTimeField(default=datetime.datetime(2024, 8, 6, 10, 4, 2, 868777)),
+        ),
+    ]

+ 45 - 0
att/migrations/0007_alter_attivita_amministratore_alter_attivita_azienda_and_more.py

@@ -0,0 +1,45 @@
+# Generated by Django 5.0.7 on 2024-08-06 08:24
+
+import datetime
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('att', '0006_attivita_valore_causale_schema_alter_attivita_data'),
+        ('azienda', '0003_azienda_azienda_azi_partita_d03251_idx'),
+        ('documento', '0010_documento_azienda'),
+        ('utente', '0006_rename_password_utente_pin'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='attivita',
+            name='amministratore',
+            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AlterField(
+            model_name='attivita',
+            name='azienda',
+            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='azienda.azienda'),
+        ),
+        migrations.AlterField(
+            model_name='attivita',
+            name='data',
+            field=models.DateTimeField(default=datetime.datetime(2024, 8, 6, 10, 24, 8, 8084)),
+        ),
+        migrations.AlterField(
+            model_name='attivita',
+            name='documento',
+            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='documento.documento'),
+        ),
+        migrations.AlterField(
+            model_name='attivita',
+            name='utente',
+            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='utente.utente'),
+        ),
+    ]

+ 19 - 0
att/migrations/0008_alter_attivita_data.py

@@ -0,0 +1,19 @@
+# Generated by Django 5.0.7 on 2024-08-06 13:11
+
+import datetime
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('att', '0007_alter_attivita_amministratore_alter_attivita_azienda_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='attivita',
+            name='data',
+            field=models.DateTimeField(default=datetime.datetime(2024, 8, 6, 15, 11, 42, 237164)),
+        ),
+    ]

+ 19 - 0
att/migrations/0009_alter_attivita_data.py

@@ -0,0 +1,19 @@
+# Generated by Django 5.0.7 on 2024-08-06 13:12
+
+import datetime
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('att', '0008_alter_attivita_data'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='attivita',
+            name='data',
+            field=models.DateTimeField(default=datetime.datetime(2024, 8, 6, 15, 12, 10, 242037)),
+        ),
+    ]

+ 0 - 0
att/migrations/__init__.py


BIN
att/migrations/__pycache__/0001_initial.cpython-311.pyc


BIN
att/migrations/__pycache__/0002_attivita_utente.cpython-311.pyc


BIN
att/migrations/__pycache__/0003_alter_attivita_data.cpython-311.pyc


BIN
att/migrations/__pycache__/0004_attivita_causale_alter_attivita_data.cpython-311.pyc


BIN
att/migrations/__pycache__/0005_rename_causale_causale_nome_alter_attivita_data.cpython-311.pyc


BIN
att/migrations/__pycache__/0006_attivita_valore_causale_schema_alter_attivita_data.cpython-311.pyc


BIN
att/migrations/__pycache__/0007_alter_attivita_amministratore_alter_attivita_azienda_and_more.cpython-311.pyc


BIN
att/migrations/__pycache__/0008_alter_attivita_data.cpython-311.pyc


BIN
att/migrations/__pycache__/0009_alter_attivita_data.cpython-311.pyc


BIN
att/migrations/__pycache__/__init__.cpython-311.pyc


+ 21 - 0
att/models.py

@@ -0,0 +1,21 @@
+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
+
+class Causale(models.Model):
+  nome = models.CharField(max_length=32,default='',null=False)
+  schema = models.CharField(max_length=128,default='',null=False)
+
+class Attivita(models.Model):
+  data = models.DateTimeField(default=datetime.datetime.now())
+  causale = models.ForeignKey(Causale,null=True,on_delete=models.PROTECT,default=None)
+  valore = models.CharField(max_length=128,default='',null=False)
+  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)
+

+ 3 - 0
att/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 60 - 0
att/views.py

@@ -0,0 +1,60 @@
+from django.shortcuts import render
+from django.utils import timezone
+from .models import *
+import datetime
+
+''' non esistono attività specifiche su web
+ma solo funzioni che registrano o ritornano le attivita' richieste
+'''
+
+def setNewLog(causale,stringa):
+  print(causale,stringa)
+  attivita = Attivita()
+  attivita.data = datetime.datetime.now()
+  causale = Causale.objects.get(pk=causale)
+  attivita.causale =  causale
+  print('causale',causale.id,causale.nome)
+  attivita.valore = causale.schema.format(**stringa)
+  attivita.save()
+
+def setLog(causale,azienda=None,amministratore=None,utente=None,documento=None):
+  print(causale,azienda,amministratore,utente,documento)
+
+  #valore = string()
+
+  attivita = Attivita()
+  causale = Causale.objects.get(pk=causale)
+
+  attivita.causale =  causale
+  print('causale',causale.id,causale.nome)
+
+  attivita.data = datetime.datetime.now()
+  if azienda:
+    attivita.azienda_id = azienda.id
+
+  if amministratore:
+    attivita.amministratore_id = amministratore.id
+
+  if utente:
+    print('utente',utente.id,utente.nome)
+    attivita.utente_id = utente.id
+
+  if documento:
+    attivita.documento_id = documento.id
+
+  attivita.data = timezone.now()
+
+  #attivita.valore = valore
+
+  attivita.save()
+ 
+
+def getLogxUtente(utente):
+  return utente.attivita_set.all().order_by('-data')[:10]
+
+def getLogxAmministrazione(amministratore):
+  return amministratore.attivita_set.all().order_by('-data')[:10]
+
+def getLogxDocumento(documento):
+  return Documento.attivita_set.all().order_by('-data')[:10]
+

+ 0 - 0
azienda/__init__.py


BIN
azienda/__pycache__/__init__.cpython-311.pyc


BIN
azienda/__pycache__/admin.cpython-311.pyc


BIN
azienda/__pycache__/apps.cpython-311.pyc


BIN
azienda/__pycache__/models.cpython-311.pyc


BIN
azienda/__pycache__/urls.cpython-311.pyc


BIN
azienda/__pycache__/views.cpython-311.pyc


+ 5 - 0
azienda/admin.py

@@ -0,0 +1,5 @@
+from django.contrib import admin
+from .models import *
+
+admin.site.register(Azienda)
+admin.site.register(Assegnazione)

+ 6 - 0
azienda/apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class AziendaConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'azienda'

+ 42 - 0
azienda/migrations/0001_initial.py

@@ -0,0 +1,42 @@
+# Generated by Django 5.0.7 on 2024-08-01 19:34
+
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Azienda',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('nome', models.CharField(default='', max_length=132)),
+                ('partitaiva', models.CharField(default='', max_length=11)),
+                ('mail', models.CharField(default='', max_length=256)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Assegnazione',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+        migrations.AddConstraint(
+            model_name='azienda',
+            constraint=models.UniqueConstraint(fields=('nome', 'partitaiva'), name='unique-azienda'),
+        ),
+        migrations.AddField(
+            model_name='assegnazione',
+            name='a',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='azienda.azienda'),
+        ),
+    ]

+ 18 - 0
azienda/migrations/0002_rename_a_assegnazione_azienda.py

@@ -0,0 +1,18 @@
+# Generated by Django 5.0.7 on 2024-08-01 20:02
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('azienda', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='assegnazione',
+            old_name='a',
+            new_name='azienda',
+        ),
+    ]

+ 17 - 0
azienda/migrations/0003_azienda_azienda_azi_partita_d03251_idx.py

@@ -0,0 +1,17 @@
+# Generated by Django 5.0.7 on 2024-08-02 14:43
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('azienda', '0002_rename_a_assegnazione_azienda'),
+    ]
+
+    operations = [
+        migrations.AddIndex(
+            model_name='azienda',
+            index=models.Index(fields=['partitaiva', 'nome'], name='azienda_azi_partita_d03251_idx'),
+        ),
+    ]

+ 0 - 0
azienda/migrations/__init__.py


BIN
azienda/migrations/__pycache__/0001_initial.cpython-311.pyc


BIN
azienda/migrations/__pycache__/0002_rename_a_assegnazione_azienda.cpython-311.pyc


BIN
azienda/migrations/__pycache__/0003_azienda_azienda_azi_partita_d03251_idx.cpython-311.pyc


BIN
azienda/migrations/__pycache__/__init__.cpython-311.pyc


+ 23 - 0
azienda/models.py

@@ -0,0 +1,23 @@
+from django.db import models
+from django.contrib.auth.models import User
+
+class Azienda(models.Model):
+   '''
+   questa classe definisce le società che gengono gestite dal programma.
+   ogni utente può gestire una o più società.
+   '''
+   nome = models.CharField(max_length=132,null=False,default="")
+   partitaiva = models.CharField(max_length=11,null=False,default="")
+   mail = models.CharField(max_length=256,null=False,default="")
+   class Meta:
+     constraints = [ models.UniqueConstraint(fields=['nome','partitaiva'], name="unique-azienda") ]
+     indexes = [ models.Index(fields=['partitaiva','nome']) ]
+
+class Assegnazione(models.Model):
+  '''
+  questa tabella permette le associazioni tra società e Utente
+  semmai, il problema è capire come associare la società all'utente registrato nella security 
+  '''
+  azienda = models.ForeignKey(Azienda,on_delete=models.PROTECT)
+  user = models.ForeignKey(User,on_delete=models.PROTECT)
+

+ 64 - 0
azienda/templates/azienda.welcome.html

@@ -0,0 +1,64 @@
+{% extends 'base.html' %}
+
+{% block body %}
+  <form name="azienda" method="POST">
+  <table class='table table-striped table-hover'>
+    <thead class='thead-dark'>
+      <tr>
+        <th scope='col'>Azienda</th>
+        <th scope='col'>Partita Iva</th>
+      </tr>
+    </thead>
+    <tbody>
+      {% csrf_token %}
+      {% for az in azienda %}
+        <tr>
+	  <td> {{ az.nome }} </td>
+	  <td> {{ az.partitaita }}</td>
+          <td><button type="submit" class='btn btn-primary' name="utenti" value="{{ az.id }}">Utenti</button>
+              <button type='submit' class="btn btn-primary" name="documenti" value='{{ az.id }}'>Documenti</button>
+         </td>
+
+	</tr>
+      {% endfor %} 
+    </tbody>
+  </table>
+    <div>
+      <input type='submit' class="btn btn-primary" name="ritorna" value="Logout">
+    </td>
+  </form>
+{% endblock %}
+
+{% block bodybottom %}
+    <div><br><br></div>
+    <div class='form-outline mb-4 text-center btn-primary h3'>
+           Elenco Azioni Registrate
+    </div>
+
+    <div>
+    <table class='table table-striped table-hover'>
+      <thead class='thead-dark'>
+      <tr>
+        <th scope='col'>Data</th>
+        <th scope='col'>Causale</th>
+        <th scope='col'>Utente</th>
+        <th scope='col'>Amministratore</th>
+        <th scope='col'>documento</th>
+
+      </tr>
+      </thead>
+      <tbody>
+        {% for attivita in listaAttivita %}
+        <tr>
+          <td> {{ attivita.data | date:'d/m/Y H:i' }} </td>
+          <td> {{ attivita.causale.nome }} </td>
+          <td> {{ attivita.utente.nome }} </td>
+          <td> {{ attivita.amministratore.username }}</td>
+          <td> {{ attivita.documento.documento }}</td>
+        </tr>
+        {% endfor %}
+      </tbody>
+    </table>
+
+{% endblock %}
+

+ 3 - 0
azienda/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 7 - 0
azienda/urls.py

@@ -0,0 +1,7 @@
+from django.urls import path
+from . import views
+
+app_name='azienda'
+urlpatterns = [
+  path('welcome',views.welcome,name='welcome'),
+  ]

+ 52 - 0
azienda/views.py

@@ -0,0 +1,52 @@
+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 *
+
+def welcome(request):
+  if not 'AdminId' in request.session:
+    return HttpResponseRedirect(reverse("login:start"))
+  AdminId = request.session['AdminId']
+
+  data = dict()
+  data['HeaderTitle'] = getConfig('HeaderTitle')
+
+  u = User.objects.get(pk=AdminId)
+  a = Assegnazione.objects.filter(user=u.id)
+  print(len(a))
+  tmplist = list()
+  for ax in a:
+    tmplist.append(ax.azienda)
+
+  data['listaAttivita']=getLogxAmministrazione(u)
+
+  if request.method=="POST":
+    if 'ritorna' in request.POST:
+      print('premuto tast ritorno,logout')
+      return HttpResponseRedirect(reverse("login:start"))
+    if 'documenti' in request.POST:
+      return HttpResponseRedirect(reverse("documento:welcome"))
+
+    if  "utenti" in request.POST:
+      print('premuto tasto utenti')
+      # stato premuto il tasto, tocca recuperare l'id
+      azienda = request.POST['utenti']
+      print('azienda',azienda)
+      request.session['AziendaId'] = azienda
+      return HttpResponseRedirect(reverse('utente:welcome'))
+
+    if 'documenti' in request.POST:
+      # stato premuto il tasto documenti
+      azienda = request.POST['documenti']
+      print('premuto tasto documenti',azienda)
+      print('azienda',azienda)
+      request.session['AziendaId'] = azienda
+      return HttpResponseRedirect(reverse('documento:welcome'))
+
+
+  data['azienda'] = tmplist
+  return render(request,'azienda.welcome.html',data)
+

+ 0 - 0
config/__init__.py


BIN
config/__pycache__/__init__.cpython-311.pyc


BIN
config/__pycache__/admin.cpython-311.pyc


BIN
config/__pycache__/apps.cpython-311.pyc


BIN
config/__pycache__/models.cpython-311.pyc


BIN
config/__pycache__/tests.cpython-311.pyc


BIN
config/__pycache__/views.cpython-311.pyc


+ 4 - 0
config/admin.py

@@ -0,0 +1,4 @@
+from django.contrib import admin
+from .models import *
+
+admin.site.register(Config)

+ 6 - 0
config/apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class ConfigConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'config'

+ 22 - 0
config/migrations/0001_initial.py

@@ -0,0 +1,22 @@
+# Generated by Django 5.0.7 on 2024-07-30 17:36
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Config',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('indice', models.CharField(max_length=32)),
+                ('valore', models.CharField(max_length=256, null=True)),
+            ],
+        ),
+    ]

+ 21 - 0
config/migrations/0002_config_config_conf_indice_39d8cc_idx_and_more.py

@@ -0,0 +1,21 @@
+# Generated by Django 5.0.7 on 2024-08-01 19:08
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('config', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddIndex(
+            model_name='config',
+            index=models.Index(fields=['indice'], name='config_conf_indice_39d8cc_idx'),
+        ),
+        migrations.AddConstraint(
+            model_name='config',
+            constraint=models.UniqueConstraint(fields=('indice',), name='unique-indice'),
+        ),
+    ]

+ 0 - 0
config/migrations/__init__.py


BIN
config/migrations/__pycache__/0001_initial.cpython-311.pyc


BIN
config/migrations/__pycache__/0002_config_config_conf_indice_39d8cc_idx_and_more.cpython-311.pyc


BIN
config/migrations/__pycache__/__init__.cpython-311.pyc


+ 8 - 0
config/models.py

@@ -0,0 +1,8 @@
+from django.db import models
+
+class Config(models.Model):
+    indice = models.CharField(max_length=32,null=False)
+    valore = models.CharField(max_length=256,null=True)
+    class Meta:
+      constraints = [ models.UniqueConstraint(fields=['indice'], name="unique-indice") ]
+      indexes = [ models.Index(fields=['indice']) ]

+ 3 - 0
config/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 12 - 0
config/views.py

@@ -0,0 +1,12 @@
+from django.shortcuts import render
+from .models import *
+
+def getConfig(indice=None):
+  if not indice:
+    return ""
+  c = Config.objects.get(indice=indice)
+  if c: #qualcosa ha trovato
+    print('getConfig',c.indice,': ',c.valore)
+    return c.valore
+  return ""
+

BIN
db/db.sqlite3


+ 0 - 0
documento/__init__.py


BIN
documento/__pycache__/__init__.cpython-311.pyc


BIN
documento/__pycache__/admin.cpython-311.pyc


BIN
documento/__pycache__/apps.cpython-311.pyc


BIN
documento/__pycache__/forms.cpython-311.pyc


BIN
documento/__pycache__/managefile.cpython-311.pyc


BIN
documento/__pycache__/models.cpython-311.pyc


BIN
documento/__pycache__/tests.cpython-311.pyc


BIN
documento/__pycache__/urls.cpython-311.pyc


BIN
documento/__pycache__/views.cpython-311.pyc


+ 3 - 0
documento/admin.py

@@ -0,0 +1,3 @@
+from django.contrib import admin
+
+# Register your models here.

+ 6 - 0
documento/apps.py

@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class DocumentoConfig(AppConfig):
+    default_auto_field = 'django.db.models.BigAutoField'
+    name = 'documento'

+ 25 - 0
documento/forms.py

@@ -0,0 +1,25 @@
+from django import  forms
+
+class MultipleFileInput(forms.ClearableFileInput):
+    allow_multiple_selected = True
+
+class MultipleFileField(forms.FileField):
+    def __init__(self, *args, **kwargs):
+        kwargs.setdefault("widget", MultipleFileInput())
+        super().__init__(*args, **kwargs)
+
+    def clean(self, data, initial=None):
+        single_file_clean = super().clean
+        if isinstance(data, (list, tuple)):
+            result = [single_file_clean(d, initial) for d in data]
+        else:
+            result = [single_file_clean(data, initial)]
+        return result
+
+class AdminUpload(forms.Form):
+  def __init__(self,*args,**kwargs):
+    forms.Form.__init__(self,*args,**kwargs)
+    self.fields['indice'] = forms.FileField(required=False)
+    self.fields['allegati'] = MultipleFileField(required=False)
+    self.fields['descrizione'] = forms.CharField(required=False)
+

+ 203 - 0
documento/managefile.py

@@ -0,0 +1,203 @@
+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 django.db import IntegrityError
+
+from .models import *
+from config.views import *
+
+
+from django.conf import  settings
+from django.conf.urls.static import static
+from django.contrib.auth import authenticate
+import mimetypes
+from random import randint
+import csv
+import time
+import datetime
+
+#pip install python-codicefiscale
+from codicefiscale import codicefiscale
+
+import os
+
+def download_file(request,uid):
+    u = Utenti.objects.get(pk=uid)
+    fl_path = '/'.join((settings.MEDIA_ROOT,azienda.codicefiscale,))
+    print('path completa','/'.join((fl_path,u.codicefiscale,u.storage)))
+    if u.storage and os.path.isfile('/'.join((fl_path,codicefiscale,u.storage))):
+      try:
+        fl = open('/'.join((fl_path,codicefiscale,u.storage)), 'rb')
+      except Exception as er:
+        print('errore',er)
+        data=dict()
+        data['errore']="File non esistente o non ancora disponibile"
+        data['utente'] = u
+        return render(request,'welcome.error.html',data)
+    else:
+      print('il file non esiste')
+      data=dict()
+      data['errore']='File non esistente o non ancora disponibile'
+      data['utente'] = u
+      return render(request,'welcome.error.html',data)
+
+    mime_type, _ = mimetypes.guess_type('/'.join((fl_path,codicefiscale,u.storage)))
+    fl = '/'.join((fl_path,codicefiscale,u.storage))
+    print('fl',fl,mime_type)
+    response = FileResponse(open(fl,'rb'),content_type='application/pdf',as_attachment=False)
+    #response['Content-Disposition'] = "attachment; filename=%s" % u.documento
+    return response
+  
+def upload_file(uploaded_file,record,originale=False): #record=utente
+  stored_file = ''.join((str(time.time()),'.saved'))
+  fl_path = settings.MEDIA_ROOT
+  print('nome file',uploaded_file.name,stored_file)
+  nomefile=None
+  if originale:
+    nomefile = uploaded_file.name
+  else:
+    nomefile = stored_file
+
+  # vediamo se caricare o meno.
+  # in questo caso, se il documento esiste gia', non lo carica.
+  # come facciamo a stabilire se il documento esiste gia'?
+
+  try:
+    os.mkdir('/'.join((fl_path,record.azienda.partitaiva)))
+  except FileExistsError as fee:
+    print('/'.join((fl_path,record.azienda.partitaiva)),"esistente")
+  try:
+    os.mkdir('/'.join((fl_path,record.azienda.partitaiva,record.codicefiscale)))
+  except FileExistsError as fee:
+    print('/'.join((fl_path,record.azienda.partitaiva,record.codicefiscale)),"esistente")
+
+  with open('/'.join((fl_path,record.azienda.partitaiva,record.codicefiscale,nomefile)),'wb+') as d:
+    for chunk in uploaded_file.chunks():
+      d.write(chunk)
+
+  if originale:
+    return '/'.join((fl_path,record.azienda.partitaiva.record.codicefiscale,uploaded_file.name))
+  return stored_file
+
+def save_and_load_file_multiple(listadocumenti,request,u,azienda,descrizione):
+  listaok = list()
+  listanotok = list()
+  for singolodocumento in listadocumenti:
+    print('singolodocumento',singolodocumento)
+    for utente in u:
+      if utente.codicefiscale.strip() in singolodocumento.name:
+        print('match utente-documento')
+        risultato = upload_file(singolodocumento,utente)
+        documento = Documento()
+        documento.dataupload = datetime.datetime.now()
+        documento.utente = utente
+        documento.azienda = azienda
+        documento.documento = singolodocumento.name
+        documento.storage = risultato
+        documento.descrizione = descrizione
+        try:
+          documento.save()
+          listaok.append(documento.documento)
+        except IntegrityError as ie:
+          print("problema di integrita', il file esiste",ie)
+          listanotok.append(documento.documento)
+  print(listaok,listanotok)
+  return (listaok,listanotok)
+
+def save_and_load_file_single(listadocumenti,request,utente,azienda,descrizione):
+  listaok = list()
+  listanotok = list()
+  for singolodocumento in listadocumenti:
+    print('singolodocumento',singolodocumento,descrizione)
+    risultato = upload_file(singolodocumento,utente)
+    documento = Documento()
+    documento.dataupload = datetime.datetime.now()
+    documento.utente = utente
+    documento.azienda = azienda
+    documento.documento = singolodocumento.name
+    documento.storage = risultato
+    documento.descrizione = descrizione
+    try:
+      documento.save()
+      listaok.append(documento.documento)
+    except IntegritiError as ie:
+      print("problema di integrita', il file esiste",ie)
+      listanotok.append(documento.documento)
+  return (listaok,listanotok)
+
+def save_and_load_file_indice(fileindice,request,documento):
+  print('nome indice caricato',fileindice.name)
+  upload_file(fileindice,request.FILES['indice'],True)
+  fl_path = settings.MEDIA_ROOT
+
+  risultato = None
+  with open(''.join((fl_path,'/',fileindice.name)),'rb') as ind:
+    risultato = ind.read()
+    risultato = risultato.decode('utf-8',errors='replace')
+    if isinstance(risultato,str):
+      risultato = risultato.encode('utf8')
+
+    with open(''.join((fl_path,'/',fileindice.name,'.cvtd')),'wb') as ind:
+      ind.write(risultato)
+      print('una volta convertito, passiamo oltre')
+    
+    with open(''.join((fl_path,'/',fileindice.name,'.cvtd')),'rt') as ind:
+        spamreader = csv.reader(ind,delimiter=';')
+        errori = list()
+        count = 0
+        for sr in spamreader:
+          salvare = False
+          count +=1
+          if count==1: continue
+          print(count,'sr',sr,len(sr))
+
+          '''
+          rispetto a farma, questo tracciato e' diverso
+            0: 0308 - BOX3 S.R.L.;
+            1: Elaborazioni - Lul  Libro Unico del Lavoro lavoratore;
+            2: ALESSE ANTONIO - LSSNTN63A25H501Y;
+            3: DA0308_L.U.L._LAVORATORE_#_ALESSE_ANTONIO_#_LSSNTN63A25H501Y_#_06.2024_12.07.2024_10.18.43.pdf;
+            4: ="06.2024";
+            5: 12.07.2024 10:34:17;
+            6: Cliente;
+            7: 2024.07.15 11:40:33;
+            8: 12.07.2024;
+            9: 12.07.2024;
+          '''
+
+          if len(sr) > 1: # la lunghezza del record segnala qualcosa
+            utente = None
+            try:
+              utente = Utente.objects.get(codicefiscale=sr[2].split(' - ')[1].strip().upper())
+            except Utente.DoesNotExist as dne:
+              print('Utente non trovato')
+              utente = Utente()
+              utente.azienda = azienda
+              utente.nome = sr[2].capitalize()
+              try:
+                data_convertita =  datetime.datetime.strptime(sr[8], "%d.%m.%Y")
+                print('data convertita',data_convertita)
+                utente.datanascita = data_convertita
+              except ValueError as ve:
+                print(ve)
+              utente.codicefiscale = sr[2].split(' - ')[1].strip().upper()
+              utente.password = str(randint(100000,999999))
+              utente.save()
+
+    # caricamento documenti
+    if filecaricati.cleaned_data.get('allegati'):
+      print('presenti documenti da allegare')
+      listadocumenti = filecaricati.cleaned_data['allegati']
+      print(listadocumenti)
+      u = Utenti.objects.all()
+      for singolodocumento in listadocumenti:
+        print('singolodocumento',singolodocumento)
+        for utente in u:
+          if utente.codicefiscale.strip() in singolodocumento.name:
+            print('match utente-documento')
+            risultato = upload_file(singolodocumento,utente)
+            # risultato: nome del file memorizzato (nome interno)
+            # singolodocumento.name = nome del file originale
+
+

+ 28 - 0
documento/migrations/0001_initial.py

@@ -0,0 +1,28 @@
+# Generated by Django 5.0.7 on 2024-07-30 17:22
+
+import datetime
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('utente', '0002_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Documento',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('documento', models.CharField(default='', max_length=256, null=True)),
+                ('storage', models.CharField(default='', max_length=256, null=True)),
+                ('dataupload', models.DateField(default=datetime.date.today, null=True)),
+                ('crc', models.CharField(default='', max_length=256, null=True)),
+                ('utente', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='utente.utente')),
+            ],
+        ),
+    ]

+ 17 - 0
documento/migrations/0002_remove_documento_utente.py

@@ -0,0 +1,17 @@
+# Generated by Django 5.0.7 on 2024-08-02 14:33
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('documento', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='documento',
+            name='utente',
+        ),
+    ]

+ 17 - 0
documento/migrations/0003_remove_documento_dataupload.py

@@ -0,0 +1,17 @@
+# Generated by Django 5.0.7 on 2024-08-02 14:37
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('documento', '0002_remove_documento_utente'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='documento',
+            name='dataupload',
+        ),
+    ]

+ 20 - 0
documento/migrations/0004_documento_utente.py

@@ -0,0 +1,20 @@
+# Generated by Django 5.0.7 on 2024-08-02 14:39
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('documento', '0003_remove_documento_dataupload'),
+        ('utente', '0003_alter_utente_azienda'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='documento',
+            name='utente',
+            field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.PROTECT, to='utente.utente'),
+        ),
+    ]

+ 20 - 0
documento/migrations/0005_documento_azienda.py

@@ -0,0 +1,20 @@
+# Generated by Django 5.0.7 on 2024-08-02 14:41
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('azienda', '0002_rename_a_assegnazione_azienda'),
+        ('documento', '0004_documento_utente'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='documento',
+            name='azienda',
+            field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.PROTECT, to='azienda.azienda'),
+        ),
+    ]

+ 23 - 0
documento/migrations/0006_documento_documento_d_documen_a68d7b_idx_and_more.py

@@ -0,0 +1,23 @@
+# Generated by Django 5.0.7 on 2024-08-02 14:43
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('azienda', '0003_azienda_azienda_azi_partita_d03251_idx'),
+        ('documento', '0005_documento_azienda'),
+        ('utente', '0004_utente_utente_uten_codicef_6e44c2_idx_and_more'),
+    ]
+
+    operations = [
+        migrations.AddIndex(
+            model_name='documento',
+            index=models.Index(fields=['documento', 'utente'], name='documento_d_documen_a68d7b_idx'),
+        ),
+        migrations.AddConstraint(
+            model_name='documento',
+            constraint=models.UniqueConstraint(fields=('documento',), name='unique-documento'),
+        ),
+    ]

+ 23 - 0
documento/migrations/0007_remove_documento_azienda_documento_dataupload.py

@@ -0,0 +1,23 @@
+# Generated by Django 5.0.7 on 2024-08-03 21:46
+
+import datetime
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('documento', '0006_documento_documento_d_documen_a68d7b_idx_and_more'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='documento',
+            name='azienda',
+        ),
+        migrations.AddField(
+            model_name='documento',
+            name='dataupload',
+            field=models.DateField(default=datetime.date.today, null=True),
+        ),
+    ]

+ 20 - 0
documento/migrations/0008_alter_documento_utente.py

@@ -0,0 +1,20 @@
+# Generated by Django 5.0.7 on 2024-08-03 21:48
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('documento', '0007_remove_documento_azienda_documento_dataupload'),
+        ('utente', '0004_utente_utente_uten_codicef_6e44c2_idx_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='documento',
+            name='utente',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='utente.utente'),
+        ),
+    ]

+ 23 - 0
documento/migrations/0009_documento_descrizione_alter_documento_crc.py

@@ -0,0 +1,23 @@
+# Generated by Django 5.0.7 on 2024-08-04 05:48
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('documento', '0008_alter_documento_utente'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='documento',
+            name='descrizione',
+            field=models.CharField(default='', max_length=128),
+        ),
+        migrations.AlterField(
+            model_name='documento',
+            name='crc',
+            field=models.CharField(default='', max_length=256),
+        ),
+    ]

+ 20 - 0
documento/migrations/0010_documento_azienda.py

@@ -0,0 +1,20 @@
+# Generated by Django 5.0.7 on 2024-08-05 10:28
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('azienda', '0003_azienda_azienda_azi_partita_d03251_idx'),
+        ('documento', '0009_documento_descrizione_alter_documento_crc'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='documento',
+            name='azienda',
+            field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, to='azienda.azienda'),
+        ),
+    ]

+ 0 - 0
documento/migrations/__init__.py


BIN
documento/migrations/__pycache__/0001_initial.cpython-311.pyc


BIN
documento/migrations/__pycache__/0002_remove_documento_utente.cpython-311.pyc


BIN
documento/migrations/__pycache__/0003_documento_utente.cpython-311.pyc


Some files were not shown because too many files changed in this diff