diff --git a/django/business_model_canvas_app/migrations/0001_initial.py b/django/business_model_canvas_app/migrations/0001_initial.py
index 5c800c3..e21d01a 100644
--- a/django/business_model_canvas_app/migrations/0001_initial.py
+++ b/django/business_model_canvas_app/migrations/0001_initial.py
@@ -1,4 +1,4 @@
-# Generated by Django 4.1.7 on 2023-05-14 15:44
+# Generated by Django 4.2.2 on 2023-06-20 21:51
from django.db import migrations, models
import django.db.models.deletion
diff --git a/django/contatti_app/admin.py b/django/contatti_app/admin.py
index 06c4981..32d0d8f 100644
--- a/django/contatti_app/admin.py
+++ b/django/contatti_app/admin.py
@@ -6,6 +6,7 @@ from django.core.paginator import Paginator
from django.db.models import Case, Count, Value, When
from django.db.models.functions import Concat
from django.db.models import F
+from django.contrib.contenttypes.models import ContentType
from import_export.admin import ImportExportModelAdmin
from polymorphic.admin import (PolymorphicChildModelAdmin,
PolymorphicChildModelFilter,
@@ -84,24 +85,29 @@ class ContattoAziendaleAdmin(ImportExportModelAdmin):
list_display = ('persona','azienda','is_personale')
pass
-
-@admin.register(models.VoceContattoRubrica)
-class VoceContattoRubricaAdmin(ImportExportModelAdmin, PolymorphicParentModelAdmin):
- # resource = resources.VoceContattoRubricaResource
+@admin.register(models.Recapito)
+class RecapitoAdmin(ImportExportModelAdmin, PolymorphicParentModelAdmin):
+ # resource = resources.RecapitoResource
# list_per_page = 15
# paginator = CachingPaginator
# show_full_result_count = False
- base_model = models.VoceContattoRubrica
- child_models = (models.Indirizzo, models.Email, models.Pec, models.Telefono, models.Fax,)
+ base_model = models.Recapito
+ child_models = (models.Indirizzo, models.Sede, models.Email, models.Pec, models.Telefono, models.Fax,)
list_filter = (PolymorphicChildModelFilter,)
readonly_fields = ('descrizione','tipo',)
- list_display = ('soggetto','descrizione','tipo',)
+ list_display = ('tipo','soggetto','descrizione',)
+ list_display_links = ('tipo','descrizione',)
def descrizione(self,obj):
- return str(getattr(obj,obj.polymorphic_ctype.model))
+ attrib = obj.polymorphic_ctype.model
+ if attrib == 'pec':
+ attrib = 'email'
+ if attrib == 'sede':
+ attrib = 'indirizzo'
+ return str(getattr(obj,attrib))
def tipo(self, obj):
- return getattr(obj,obj.polymorphic_ctype.model)._meta.verbose_name.title()
+ return obj.polymorphic_ctype.model_class()._meta.verbose_name.title()
tipo.admin_order_field = '_tipo'
def get_queryset(self, request):
@@ -123,20 +129,26 @@ class TelefonoAdmin(HiddenModel, PolymorphicChildModelAdmin):
@admin.register(models.Email)
-class EmailAdmin(HiddenModel, PolymorphicChildModelAdmin):
+class EmailAdmin(HiddenModel, PolymorphicParentModelAdmin, PolymorphicChildModelAdmin):
# resource = resources.EmailResource
# list_per_page = 15
# paginator = CachingPaginator
# show_full_result_count = False
+ base_model = models.Recapito
+ child_models = (models.Email, models.Pec,)
fields = ('soggetto','indirizzo_email','note',)
autocomplete_fields = ('soggetto',)
pass
-class VoceContattoRubricaInline(StackedPolymorphicInline):
+class RecapitoInline(StackedPolymorphicInline):
class IndirizzoInline(StackedPolymorphicInline.Child):
model = models.Indirizzo
- autocomplete_fields = ('comune','cap',)
+ autocomplete_fields = ('dug','comune','cap','nazione',)
+
+ class SedeInline(StackedPolymorphicInline.Child):
+ model = models.Sede
+ autocomplete_fields = ('dug','comune','cap','nazione',)
class EmailInline(StackedPolymorphicInline.Child):
model = models.Email
@@ -150,9 +162,10 @@ class VoceContattoRubricaInline(StackedPolymorphicInline):
class FaxInline(StackedPolymorphicInline.Child):
model = models.Fax
- model = models.VoceContattoRubrica
+ model = models.Recapito
child_inlines = (
IndirizzoInline,
+ SedeInline,
EmailInline,
PecInline,
TelefonoInline,
@@ -169,7 +182,7 @@ class PersonaFisicaAdmin(PolymorphicInlineSupportMixin, PolymorphicChildModelAdm
show_in_index = False
get_model_perms = lambda self, req: {}
search_fields = ('nome','cognome',)
- inlines = (VoceContattoRubricaInline,)
+ inlines = (RecapitoInline,)
pass
@@ -181,7 +194,7 @@ class PersonaGiuridicaAdmin(PolymorphicInlineSupportMixin, PolymorphicChildModel
# show_full_result_count = False
show_in_index = False
get_model_perms = lambda self, req: {}
- inlines = (VoceContattoRubricaInline,)
+ inlines = (RecapitoInline,)
pass
@@ -191,6 +204,8 @@ class SedeAdmin(ImportExportModelAdmin):
# list_per_page = 15
# paginator = CachingPaginator
# show_full_result_count = False
+ list_display=('societa','comune','dug','duf',)
+ autocomplete_fields=('dug','comune','cap','nazione','soggetto','societa',)
pass
@@ -206,11 +221,12 @@ class FaxAdmin(HiddenModel, PolymorphicChildModelAdmin):
@admin.register(models.Pec)
-class PecAdmin(ImportExportModelAdmin):
+class PecAdmin(HiddenModel, PolymorphicChildModelAdmin):
# resource = resources.PecResource
# list_per_page = 15
# paginator = CachingPaginator
# show_full_result_count = False
+ base_model = models.Email
fields = ('soggetto','indirizzo_email','note',)
autocomplete_fields = ('soggetto',)
pass
@@ -279,11 +295,17 @@ class IndirizzoAdmin(HiddenModel, RicercaOrdinataMixin, AjaxAutocompleteListFilt
pass
+class SedeInline(admin.TabularInline):
+ model = models.Sede
+ autocomplete_fields = ('comune','cap',)
+
@admin.register(models.Societa)
class SocietaAdmin(ImportExportModelAdmin):
# resource = resources.SocietaResource
# list_per_page = 15
# paginator = CachingPaginator
# show_full_result_count = False
+ inlines = (SedeInline,)
search_fields = ('ragione_sociale',)
+ autocomplete_fields = ('soggetto','nazione',)
pass
diff --git a/django/contatti_app/migrations/0001_initial.py b/django/contatti_app/migrations/0001_initial.py
index 38b99ec..508515d 100644
--- a/django/contatti_app/migrations/0001_initial.py
+++ b/django/contatti_app/migrations/0001_initial.py
@@ -1,4 +1,4 @@
-# Generated by Django 4.1.7 on 2023-05-14 22:57
+# Generated by Django 4.2.2 on 2023-06-20 21:51
from django.db import migrations, models
import django.db.models.deletion
@@ -8,11 +8,39 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
- ("contenttypes", "0002_remove_content_type_name"),
("dati_geo_app", "0007_delete_indirizzo"),
+ ("contenttypes", "0002_remove_content_type_name"),
]
operations = [
+ migrations.CreateModel(
+ name="Recapito",
+ fields=[
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ (
+ "polymorphic_ctype",
+ models.ForeignKey(
+ editable=False,
+ null=True,
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="polymorphic_%(app_label)s.%(class)s_set+",
+ to="contenttypes.contenttype",
+ ),
+ ),
+ ],
+ options={
+ "verbose_name": "contatto di rubrica",
+ "verbose_name_plural": "contatti di rubrica",
+ },
+ ),
migrations.CreateModel(
name="SoggettoContattabile",
fields=[
@@ -41,77 +69,41 @@ class Migration(migrations.Migration):
"verbose_name_plural": "soggetti contattabili",
},
),
- migrations.CreateModel(
- name="VoceContattoRubrica",
- fields=[
- (
- "id",
- models.AutoField(
- auto_created=True,
- primary_key=True,
- serialize=False,
- verbose_name="ID",
- ),
- ),
- (
- "polymorphic_ctype",
- models.ForeignKey(
- editable=False,
- null=True,
- on_delete=django.db.models.deletion.CASCADE,
- related_name="polymorphic_%(app_label)s.%(class)s_set+",
- to="contenttypes.contenttype",
- ),
- ),
- (
- "soggetto",
- models.ForeignKey(
- on_delete=django.db.models.deletion.CASCADE,
- related_name="contatti",
- to="contatti_app.soggettocontattabile",
- ),
- ),
- ],
- options={
- "verbose_name": "contatto di rubrica",
- "verbose_name_plural": "contatti di rubrica",
- },
- ),
migrations.CreateModel(
name="Email",
fields=[
(
- "vocecontattorubrica_ptr",
+ "recapito_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
- to="contatti_app.vocecontattorubrica",
+ to="contatti_app.recapito",
),
),
- ("indirizzo_email", models.CharField(max_length=30)),
+ ("indirizzo_email", models.EmailField(max_length=254)),
("note", models.CharField(blank=True, default="", max_length=64)),
],
options={
"verbose_name": "email",
"verbose_name_plural": "email",
},
- bases=("contatti_app.vocecontattorubrica",),
+ bases=("contatti_app.recapito",),
),
migrations.CreateModel(
name="Fax",
fields=[
(
- "vocecontattorubrica_ptr",
+ "recapito_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
- to="contatti_app.vocecontattorubrica",
+ to="contatti_app.recapito",
),
),
("numero", models.CharField(max_length=20)),
@@ -121,20 +113,20 @@ class Migration(migrations.Migration):
"verbose_name": "fax",
"verbose_name_plural": "fax",
},
- bases=("contatti_app.vocecontattorubrica",),
+ bases=("contatti_app.recapito",),
),
migrations.CreateModel(
name="Indirizzo",
fields=[
(
- "vocecontattorubrica_ptr",
+ "recapito_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
- to="contatti_app.vocecontattorubrica",
+ to="contatti_app.recapito",
),
),
(
@@ -192,7 +184,7 @@ class Migration(migrations.Migration):
"verbose_name_plural": "indirizzi",
"abstract": False,
},
- bases=("contatti_app.vocecontattorubrica", models.Model),
+ bases=("contatti_app.recapito", models.Model),
),
migrations.CreateModel(
name="PersonaFisica",
@@ -245,14 +237,14 @@ class Migration(migrations.Migration):
name="Telefono",
fields=[
(
- "vocecontattorubrica_ptr",
+ "recapito_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
- to="contatti_app.vocecontattorubrica",
+ to="contatti_app.recapito",
),
),
("numero", models.CharField(max_length=20)),
@@ -263,7 +255,7 @@ class Migration(migrations.Migration):
"verbose_name": "telefono",
"verbose_name_plural": "telefono",
},
- bases=("contatti_app.vocecontattorubrica",),
+ bases=("contatti_app.recapito",),
),
migrations.CreateModel(
name="Societa",
@@ -302,6 +294,15 @@ class Migration(migrations.Migration):
"verbose_name_plural": "societa",
},
),
+ migrations.AddField(
+ model_name="recapito",
+ name="soggetto",
+ field=models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="contatti",
+ to="contatti_app.soggettocontattabile",
+ ),
+ ),
migrations.CreateModel(
name="Pec",
fields=[
@@ -323,6 +324,41 @@ class Migration(migrations.Migration):
},
bases=("contatti_app.email",),
),
+ migrations.CreateModel(
+ name="ContattoAziendale",
+ fields=[
+ (
+ "id",
+ models.AutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("is_personale", models.BooleanField(default=True)),
+ (
+ "azienda",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="contatti_azienda",
+ to="contatti_app.societa",
+ ),
+ ),
+ (
+ "persona",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="aziende_correlate",
+ to="contatti_app.personafisica",
+ ),
+ ),
+ ],
+ options={
+ "verbose_name": "Contatto aziendale",
+ "verbose_name_plural": "Contatti aziendali",
+ },
+ ),
migrations.CreateModel(
name="Sede",
fields=[
@@ -353,34 +389,4 @@ class Migration(migrations.Migration):
},
bases=("contatti_app.indirizzo",),
),
- migrations.CreateModel(
- name="PersonaContattoAzienda",
- fields=[
- (
- "personafisica_ptr",
- models.OneToOneField(
- auto_created=True,
- on_delete=django.db.models.deletion.CASCADE,
- parent_link=True,
- primary_key=True,
- serialize=False,
- to="contatti_app.personafisica",
- ),
- ),
- ("is_personale", models.BooleanField(default=True)),
- (
- "azienda",
- models.ForeignKey(
- on_delete=django.db.models.deletion.CASCADE,
- related_name="persone",
- to="contatti_app.societa",
- ),
- ),
- ],
- options={
- "verbose_name": "personacontattoazienda",
- "verbose_name_plural": "personacontattoazienda",
- },
- bases=("contatti_app.personafisica",),
- ),
]
diff --git a/django/contatti_app/migrations/0002_alter_email_indirizzo_email.py b/django/contatti_app/migrations/0002_alter_email_indirizzo_email.py
deleted file mode 100644
index 1535187..0000000
--- a/django/contatti_app/migrations/0002_alter_email_indirizzo_email.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Generated by Django 4.2.2 on 2023-06-20 09:50
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
- dependencies = [
- ("contatti_app", "0001_initial"),
- ]
-
- operations = [
- migrations.AlterField(
- model_name="email",
- name="indirizzo_email",
- field=models.EmailField(max_length=254),
- ),
- ]
diff --git a/django/contatti_app/migrations/0002_alter_recapito_options.py b/django/contatti_app/migrations/0002_alter_recapito_options.py
new file mode 100644
index 0000000..65502ce
--- /dev/null
+++ b/django/contatti_app/migrations/0002_alter_recapito_options.py
@@ -0,0 +1,16 @@
+# Generated by Django 4.2.2 on 2023-06-20 22:00
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ("contatti_app", "0001_initial"),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name="recapito",
+ options={"verbose_name": "recapito", "verbose_name_plural": "recapiti"},
+ ),
+ ]
diff --git a/django/contatti_app/migrations/0003_contattoaziendale_and_more.py b/django/contatti_app/migrations/0003_contattoaziendale_and_more.py
deleted file mode 100644
index 62f28ee..0000000
--- a/django/contatti_app/migrations/0003_contattoaziendale_and_more.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# Generated by Django 4.2.2 on 2023-06-20 13:30
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
- dependencies = [
- ("contatti_app", "0002_alter_email_indirizzo_email"),
- ]
-
- operations = [
- migrations.CreateModel(
- name="ContattoAziendale",
- fields=[
- (
- "id",
- models.AutoField(
- auto_created=True,
- primary_key=True,
- serialize=False,
- verbose_name="ID",
- ),
- ),
- ("is_personale", models.BooleanField(default=True)),
- ],
- options={
- "verbose_name": "Contatto aziendale",
- "verbose_name_plural": "Contatti aziendali",
- },
- ),
- migrations.RemoveField(
- model_name="personacontattoazienda",
- name="azienda",
- ),
- migrations.RemoveField(
- model_name="personacontattoazienda",
- name="personafisica_ptr",
- ),
- ]
diff --git a/django/contatti_app/migrations/0004_delete_personacontattoazienda_and_more.py b/django/contatti_app/migrations/0004_delete_personacontattoazienda_and_more.py
deleted file mode 100644
index 4eb1909..0000000
--- a/django/contatti_app/migrations/0004_delete_personacontattoazienda_and_more.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# Generated by Django 4.2.2 on 2023-06-20 13:30
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
- dependencies = [
- ("contatti_app", "0003_contattoaziendale_and_more"),
- ("offerte_app", "0002_alter_destinatarioofferta_intestatario"),
- ]
-
- operations = [
- migrations.DeleteModel(
- name="PersonaContattoAzienda",
- ),
- migrations.AddField(
- model_name="contattoaziendale",
- name="azienda",
- field=models.ForeignKey(
- on_delete=django.db.models.deletion.CASCADE,
- related_name="contatti_azienda",
- to="contatti_app.societa",
- ),
- ),
- migrations.AddField(
- model_name="contattoaziendale",
- name="persona",
- field=models.ForeignKey(
- on_delete=django.db.models.deletion.CASCADE,
- related_name="aziende_correlate",
- to="contatti_app.personafisica",
- ),
- ),
- ]
diff --git a/django/contatti_app/modello_database.xml b/django/contatti_app/modello_database.xml
index 0f52d5d..7c27bb4 100644
--- a/django/contatti_app/modello_database.xml
+++ b/django/contatti_app/modello_database.xml
@@ -52,7 +52,7 @@