From a30e157d493223192b85ba278f9cb21339502719 Mon Sep 17 00:00:00 2001 From: Guido Longoni Date: Fri, 12 May 2023 23:43:43 +0200 Subject: [PATCH] molto da fare ancora --- django/contatti_app/admin.py | 100 ++++--- django/contatti_app/modello_database.xml | 16 +- django/contatti_app/models.py | 283 +++++++++++------- django/contatti_app/resources.py | 15 - django/contatti_app/serializers.py | 6 - django/contatti_app/urls.py | 1 - django/contatti_app/views.py | 8 - django/dati_geo_app/admin.py | 38 +-- django/dati_geo_app/models.py | 5 +- django/fattura_elettronica_app/admin.py | 81 ----- django/fattura_elettronica_app/models.py | 135 +-------- django/fattura_elettronica_app/resources.py | 45 --- django/fattura_elettronica_app/serializers.py | 6 - django/fattura_elettronica_app/urls.py | 1 - django/sangue_app/models.py | 4 +- django/sangue_django/settings.py | 1 + 16 files changed, 242 insertions(+), 503 deletions(-) diff --git a/django/contatti_app/admin.py b/django/contatti_app/admin.py index 0f344fa..66f1e39 100644 --- a/django/contatti_app/admin.py +++ b/django/contatti_app/admin.py @@ -1,28 +1,28 @@ from import_export.admin import ImportExportModelAdmin from django.contrib import admin -# from django.core.cache import cache -# from django.core.paginator import Paginator +from django.core.cache import cache +from django.core.paginator import Paginator from . import models from . import resources +from dati_geo_app.admin import RicercaOrdinataMixin, AjaxAutocompleteListFilterModelAdmin - -# # Modified version of a GIST I found in a SO thread -# # cfr. http://masnun.rocks/2017/03/20/django-admin-expensive-count-all-queries/ -# class CachingPaginator(Paginator): -# def _get_count(self): -# if not hasattr(self, "_count"): -# self._count = None -# if self._count is None: -# try: -# key = "adm:{0}:count".format(hash(self.object_list.query.__str__())) -# self._count = cache.get(key, -1) -# if self._count == -1: -# self._count = super().count -# cache.set(key, self._count, 60) -# except: -# self._count = len(self.object_list) -# return self._count -# count = property(_get_count) +# Modified version of a GIST I found in a SO thread +# cfr. http://masnun.rocks/2017/03/20/django-admin-expensive-count-all-queries/ +class CachingPaginator(Paginator): + def _get_count(self): + if not hasattr(self, "_count"): + self._count = None + if self._count is None: + try: + key = "adm:{0}:count".format(hash(self.object_list.query.__str__())) + self._count = cache.get(key, -1) + if self._count == -1: + self._count = super().count + cache.set(key, self._count, 60) + except: + self._count = len(self.object_list) + return self._count + count = property(_get_count) # # Main reusable Admin class for only viewing # class ViewAdminMixin(admin.ModelAdmin): @@ -47,33 +47,6 @@ class PersonaContattoAziendaAdmin(ImportExportModelAdmin): pass -@admin.register(models.SoggettoFiscale) -class SoggettoFiscaleAdmin(ImportExportModelAdmin): - # resource = resources.SoggettoFiscaleResource - # list_per_page = 15 - # paginator = CachingPaginator - # show_full_result_count = False - pass - - -@admin.register(models.Nazione) -class NazioneAdmin(ImportExportModelAdmin): - # resource = resources.NazioneResource - # list_per_page = 15 - # paginator = CachingPaginator - # show_full_result_count = False - pass - - -@admin.register(models.DatoDiContatto) -class DatoDiContattoAdmin(ImportExportModelAdmin): - # resource = resources.DatoDiContattoResource - # list_per_page = 15 - # paginator = CachingPaginator - # show_full_result_count = False - pass - - @admin.register(models.Telefono) class TelefonoAdmin(ImportExportModelAdmin): # resource = resources.TelefonoResource @@ -135,3 +108,36 @@ class PecAdmin(ImportExportModelAdmin): # paginator = CachingPaginator # show_full_result_count = False pass + + +@admin.register(models.Indirizzo) +class IndirizzoAdmin(RicercaOrdinataMixin, AjaxAutocompleteListFilterModelAdmin): + list_per_page = 15 + paginator = CachingPaginator + show_full_result_count = False + fields=('dug','duf','civico','cap','comune','altro',) + search_fields = ('indirizzo','cap_id__exact',) + autocomplete_fields = ('dug','cap','comune',) + list_display = ('indirizzo', 'cap','comune','provincia','regione',) + ordering = ('comune_id','duf','civico',) + autocomplete_list_filter = ('comune',) + list_filter = ('comune__provincia__regione_id',) + + def get_queryset(self, request): + queryset = super().get_queryset(request).select_related('comune__provincia__regione').annotate(indirizzo=Concat('dug_id',Value(' '),'duf',Value(' '),'civico')) + return queryset + + def provincia(self, obj): + return obj.comune.provincia + provincia.short_description = 'Provincia' + provincia.admin_order_field = 'comune__provincia_id' + + def regione(self, obj): + return obj.comune.provincia.regione_id + regione.short_description = 'Regione' + regione.admin_order_field = 'comune__provincia__regione_id' + + def indirizzo(self, obj): + return obj.indirizzo + indirizzo.short_description = 'Indirizzo' + indirizzo.admin_order_field = ('comune_id','duf','civico',) diff --git a/django/contatti_app/modello_database.xml b/django/contatti_app/modello_database.xml index 9e24426..ad482ba 100644 --- a/django/contatti_app/modello_database.xml +++ b/django/contatti_app/modello_database.xml @@ -62,7 +62,7 @@ NULL INTEGER -NULL +NULL INTEGER @@ -78,20 +78,6 @@ id - - -INTEGER -NULL - -CHAR(2) -'NULL' - -VARCHAR(250) -NULL - -id - -
INTEGER diff --git a/django/contatti_app/models.py b/django/contatti_app/models.py index 7c554c0..e40f5fd 100644 --- a/django/contatti_app/models.py +++ b/django/contatti_app/models.py @@ -1,9 +1,172 @@ from django.db import models +from polymorphic.models import PolymorphicModel +from dati_geo_app.models import AbstractIndirizzo # --------------- FINE PREFISSO TEMPLATE --------------- +class SoggettoContattabile(PolymorphicModel): + class Meta: + verbose_name = 'soggetto contattabile' + verbose_name_plural = 'soggetti contattabili' -class PersonaContattoAzienda(models.Model): + rimosso = models.BooleanField(null=True, blank=True) + +class ContattoRubrica(PolymorphicModel): + class Meta: + verbose_name = 'contatto di rubrica' + verbose_name_plural = 'contatti di rubrica' + + soggetto = models.ForeignKey(SoggettoContattabile, on_delete=models.CASCADE, null=False, + blank=False, related_name="societa") + +class PersonaFisica(SoggettoContattabile): + class Meta: + verbose_name = 'persona fisica' + verbose_name_plural = 'persone fisiche' + + def __str__(self): + if self.nome: + out = str(self.nome).strip() + else: + out = '' + if self.cognome: + out = f'{out} {self.cognome}'.strip() + else: + out = '' + if not out: + out = f'Persona fisica senza nome #{self.id}' + if self.titolo: + out=f'{self.titolo} {out}' + return out + + titolo = models.CharField(null=True, max_length=10) + nome = models.CharField(null=True, max_length=60) + cognome = models.CharField(null=True, max_length=60) + + +class PersonaGiuridica(SoggettoContattabile): + class Meta: + verbose_name = 'persona giuridica' + verbose_name_plural = 'persone giuridiche' + + def __str__(self): + if self.denominazione: + out = self.denominazione + else: + out = '' + if not out.strip: + out = 'Persona giuridica senza nome #{self.id}' + return out + + denominazione = models.CharField(null=True, max_length=80) + + +class Telefono(ContattoRubrica): + class Meta: + verbose_name = 'telefono' + verbose_name_plural = 'telefono' + + def __str__(self): + if self.interno: + tel = f'{self.numero} (int.{self.interno})' + else: + tel = str(self.numero) + if self.note: + tel += ' (!)' + return tel + + numero = models.CharField(max_length=20) + interno = models.CharField(null=True, max_length=20) + note = models.CharField(null=True, max_length=64) + + +class Email(ContattoRubrica): + class Meta: + verbose_name = 'email' + verbose_name_plural = 'email' + + def __str__(self): + eml = self.indirizzo + if self.note: + eml += ' (!)' + return eml + + indirizzo = models.CharField(max_length=30) + note = models.CharField(null=True, max_length=64) + + +class Pec(Email): + class Meta: + verbose_name = 'pec' + verbose_name_plural = 'pec' + + def __str__(self): + return f"Pec (id: {self.id})" + + +class Fax(ContattoRubrica): + class Meta: + verbose_name = 'fax' + verbose_name_plural = 'fax' + + def __str__(self): + out = self.numero + if self.note: + out += ' (!)' + return out.strip() + + numero = models.CharField(null=True, max_length=20) + note = models.CharField(null=True, max_length=64) + +class Indirizzo(PolymorphicModel, AbstractIndirizzo): + class Meta(AbstractIndirizzo.Meta): + pass + + +class Residenza(Indirizzo): + class Meta: + verbose_name = 'residenza' + verbose_name_plural = 'residenze' + + def __str__(self): + return f"Residenza (id: {self.id})" + + inquilino = models.ForeignKey(SoggettoContattabile, on_delete=models.CASCADE, + null=True, blank=True, related_name="residenze") + +class Sede(Residenza): + class Meta: + verbose_name = 'sede' + verbose_name_plural = 'sedi' + + def __str__(self): + return f"Sede (id: {self.id})" + + societa = models.ForeignKey('Societa', on_delete=models.CASCADE, + null=True, blank=True, related_name="sedi") + is_legale = models.BooleanField(null=True, blank=True) + + +class Societa(models.Model): + class Meta: + verbose_name = 'societa' + verbose_name_plural = 'societa' + + def __str__(self): + if self.ragione_sociale: + out = self.ragione_sociale + else: + out = str(self.soggetto) + return out + + soggetto = models.OneToOneField(SoggettoContattabile, on_delete=models.CASCADE, null=False, + blank=False, related_name="societa") + ragione_sociale = models.CharField(max_length=1024) + nazione = models.ForeignKey('dati_geo_app.Nazione', on_delete=models.CASCADE, null=True, + blank=True, related_name="societa") + sede_legale = models.IntegerField() + +class PersonaContattoAzienda(PersonaFisica): class Meta: verbose_name = 'personacontattoazienda' verbose_name_plural = 'personacontattoazienda' @@ -11,118 +174,6 @@ class PersonaContattoAzienda(models.Model): def __str__(self): return f"PersonaContattoAzienda (id: {self.id})" - azienda = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True, - blank=True, related_name="PersonaContattoAzienda_da_SoggettoFiscale_azienda") - - -class SoggettoFiscale(models.Model): - class Meta: - verbose_name = 'soggettofiscale' - verbose_name_plural = 'soggettofiscale' - - def __str__(self): - return f"SoggettoFiscale (id: {self.id})" - - indirizzo_pec = models.ForeignKey('Pec', on_delete=models.CASCADE, null=True, - blank=True, related_name="SoggettoFiscale_da_Pec_indirizzo_pec") - sede_legale = models.IntegerField() - stabile_organizzazione = models.IntegerField(null=True, blank=True) - nazione = models.ForeignKey('Nazione', on_delete=models.CASCADE, null=True, - blank=True, related_name="SoggettoFiscale_da_Nazione_nazione") - revisione_principale = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True, - blank=True, related_name="SoggettoFiscale_da_SoggettoFiscale_revisione_principale") - rimosso = models.BooleanField(null=True, blank=True) - - -class DatoDiContatto(models.Model): - class Meta: - verbose_name = 'datodicontatto' - verbose_name_plural = 'datodicontatto' - - def __str__(self): - return f"DatoDiContatto (id: {self.id})" - - soggetto_fiscale = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True, - blank=True, related_name="DatoDiContatto_da_SoggettoFiscale_soggetto_fiscale") - - -class Telefono(models.Model): - class Meta: - verbose_name = 'telefono' - verbose_name_plural = 'telefono' - - def __str__(self): - return f"Telefono (id: {self.id})" - - numero = models.CharField(max_length=20) - note = models.CharField(null=True, max_length=64) - - -class Email(models.Model): - class Meta: - verbose_name = 'email' - verbose_name_plural = 'email' - - def __str__(self): - return f"Email (id: {self.id})" - - indirizzo = models.CharField(max_length=30) - note = models.CharField(null=True, max_length=64) - - -class PersonaFisica(models.Model): - class Meta: - verbose_name = 'personafisica' - verbose_name_plural = 'personafisica' - - def __str__(self): - return f"PersonaFisica (id: {self.id})" - - titolo = models.CharField(null=True, max_length=10) - nome = models.CharField(null=True, max_length=60) - cognome = models.CharField(null=True, max_length=60) - - -class PersonaGiuridica(models.Model): - class Meta: - verbose_name = 'personagiuridica' - verbose_name_plural = 'personagiuridica' - - def __str__(self): - return f"PersonaGiuridica (id: {self.id})" - - denominazione = models.CharField(null=True, max_length=80) - - -class Sede(models.Model): - class Meta: - verbose_name = 'sede' - verbose_name_plural = 'sede' - - def __str__(self): - return f"Sede (id: {self.id})" - - inquilino = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, - null=True, blank=True, related_name="Sede_da_SoggettoFiscale_inquilino") - is_legale = models.BooleanField(null=True, blank=True) - - -class Fax(models.Model): - class Meta: - verbose_name = 'fax' - verbose_name_plural = 'fax' - - def __str__(self): - return f"Fax (id: {self.id})" - - numero = models.CharField(null=True, max_length=20) - note = models.CharField(null=True, max_length=64) - - -class Pec(models.Model): - class Meta: - verbose_name = 'pec' - verbose_name_plural = 'pec' - - def __str__(self): - return f"Pec (id: {self.id})" + azienda = models.ForeignKey(Societa, on_delete=models.CASCADE, null=True, + blank=True, related_name='persone') + is_personale = models.BooleanField(null=True, blank=True) diff --git a/django/contatti_app/resources.py b/django/contatti_app/resources.py index e632d6d..b44a723 100644 --- a/django/contatti_app/resources.py +++ b/django/contatti_app/resources.py @@ -9,21 +9,6 @@ class PersonaContattoAziendaResource(resources.ModelResource): model = models.PersonaContattoAzienda -class SoggettoFiscaleResource(resources.ModelResource): - class Meta: - model = models.SoggettoFiscale - - -class NazioneResource(resources.ModelResource): - class Meta: - model = models.Nazione - - -class DatoDiContattoResource(resources.ModelResource): - class Meta: - model = models.DatoDiContatto - - class TelefonoResource(resources.ModelResource): class Meta: model = models.Telefono diff --git a/django/contatti_app/serializers.py b/django/contatti_app/serializers.py index e7250be..bb74b05 100644 --- a/django/contatti_app/serializers.py +++ b/django/contatti_app/serializers.py @@ -17,12 +17,6 @@ class SoggettoFiscaleSerializer(serializers.ModelSerializer): 'nazione', 'revisione_principale', 'rimosso') -class NazioneSerializer(serializers.ModelSerializer): - class Meta: - model = models.Nazione - fields = ('codifica', 'descrizione') - - class DatoDiContattoSerializer(serializers.ModelSerializer): class Meta: model = models.DatoDiContatto diff --git a/django/contatti_app/urls.py b/django/contatti_app/urls.py index d92e5cf..00de52c 100644 --- a/django/contatti_app/urls.py +++ b/django/contatti_app/urls.py @@ -13,7 +13,6 @@ router = routers.DefaultRouter() router.register(r'personacontattoazienda', views.PersonaContattoAzienda_View) router.register(r'soggettofiscale', views.SoggettoFiscale_View) -router.register(r'nazione', views.Nazione_View) router.register(r'datodicontatto', views.DatoDiContatto_View) router.register(r'telefono', views.Telefono_View) router.register(r'email', views.Email_View) diff --git a/django/contatti_app/views.py b/django/contatti_app/views.py index 0d45504..5deb91a 100644 --- a/django/contatti_app/views.py +++ b/django/contatti_app/views.py @@ -35,14 +35,6 @@ class SoggettoFiscale_View(viewsets.ModelViewSet): serializer_class = serializers.SoggettoFiscaleSerializer -class Nazione_View(viewsets.ModelViewSet): - # authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication] - # permission_classes = [DjangoModelPermissions] - - queryset = models.Nazione.objects.all() - serializer_class = serializers.NazioneSerializer - - class DatoDiContatto_View(viewsets.ModelViewSet): # authentication_classes = [BasicAuthentication, SessionAuthentication, TokenAuthentication] # permission_classes = [DjangoModelPermissions] diff --git a/django/dati_geo_app/admin.py b/django/dati_geo_app/admin.py index d535e72..9019974 100644 --- a/django/dati_geo_app/admin.py +++ b/django/dati_geo_app/admin.py @@ -291,34 +291,10 @@ class DUGAdmin(RicercaOrdinataMixin, admin.ModelAdmin): ordering = ('nome',) list_display = ('nome',) -@admin.register(models.Indirizzo) -class IndirizzoAdmin(RicercaOrdinataMixin, AjaxAutocompleteListFilterModelAdmin): - list_per_page = 15 - paginator = CachingPaginator - show_full_result_count = False - fields=('dug','duf','civico','cap','comune','altro',) - search_fields = ('indirizzo','cap_id__exact',) - autocomplete_fields = ('dug','cap','comune',) - list_display = ('indirizzo', 'cap','comune','provincia','regione',) - ordering = ('comune_id','duf','civico',) - autocomplete_list_filter = ('comune',) - list_filter = ('comune__provincia__regione_id',) - - def get_queryset(self, request): - queryset = super().get_queryset(request).select_related('comune__provincia__regione').annotate(indirizzo=Concat('dug_id',Value(' '),'duf',Value(' '),'civico')) - return queryset - - def provincia(self, obj): - return obj.comune.provincia - provincia.short_description = 'Provincia' - provincia.admin_order_field = 'comune__provincia_id' - - def regione(self, obj): - return obj.comune.provincia.regione_id - regione.short_description = 'Regione' - regione.admin_order_field = 'comune__provincia__regione_id' - - def indirizzo(self, obj): - return obj.indirizzo - indirizzo.short_description = 'Indirizzo' - indirizzo.admin_order_field = ('comune_id','duf','civico',) +@admin.register(models.Nazione) +class NazioneAdmin(admin.ModelAdmin): + # resource = resources.NazioneResource + # list_per_page = 15 + # paginator = CachingPaginator + # show_full_result_count = False + pass diff --git a/django/dati_geo_app/models.py b/django/dati_geo_app/models.py index f20c276..0f22122 100644 --- a/django/dati_geo_app/models.py +++ b/django/dati_geo_app/models.py @@ -92,12 +92,15 @@ class DUG(models.Model): nome = models.CharField(primary_key=True, max_length=40) -class Indirizzo(models.Model): +class AbstractIndirizzo(models.Model): class Meta: verbose_name = 'indirizzo' verbose_name_plural = 'indirizzi' + abstract = True + def __str__(self): return f"{self.dug} {self.duf} {self.civico}, {self.comune}" + dug = models.ForeignKey(DUG, blank=False, null=False, verbose_name='denominazione urbanistica generica', on_delete=models.PROTECT) duf = models.CharField(max_length=256, blank=False, null=False, verbose_name="denominazione urbanistica ufficiale", help_text="Il nome della via/piazza/ecc...") civico = models.CharField(max_length=256, blank=False, null=False) diff --git a/django/fattura_elettronica_app/admin.py b/django/fattura_elettronica_app/admin.py index 2d4df59..70b4275 100644 --- a/django/fattura_elettronica_app/admin.py +++ b/django/fattura_elettronica_app/admin.py @@ -155,15 +155,6 @@ class PartitaIvaCFAdmin(ImportExportModelAdmin): pass -@admin.register(models.Nazione) -class NazioneAdmin(ImportExportModelAdmin): - # resource = resources.NazioneResource - # list_per_page = 15 - # paginator = CachingPaginator - # show_full_result_count = False - pass - - @admin.register(models.FormatoTrasmissione) class FormatoTrasmissioneAdmin(ImportExportModelAdmin): # resource = resources.FormatoTrasmissioneResource @@ -182,33 +173,6 @@ class CodiceDestinatarioAdmin(ImportExportModelAdmin): pass -@admin.register(models.DatoDiContatto) -class DatoDiContattoAdmin(ImportExportModelAdmin): - # resource = resources.DatoDiContattoResource - # list_per_page = 15 - # paginator = CachingPaginator - # show_full_result_count = False - pass - - -@admin.register(models.Telefono) -class TelefonoAdmin(ImportExportModelAdmin): - # resource = resources.TelefonoResource - # list_per_page = 15 - # paginator = CachingPaginator - # show_full_result_count = False - pass - - -@admin.register(models.Email) -class EmailAdmin(ImportExportModelAdmin): - # resource = resources.EmailResource - # list_per_page = 15 - # paginator = CachingPaginator - # show_full_result_count = False - pass - - @admin.register(models.IscrizioneAlboProfessionale) class IscrizioneAlboProfessionaleAdmin(ImportExportModelAdmin): # resource = resources.IscrizioneAlboProfessionaleResource @@ -263,24 +227,6 @@ class SoggettoEmittenteAdmin(ImportExportModelAdmin): pass -@admin.register(models.PersonaFisica) -class PersonaFisicaAdmin(ImportExportModelAdmin): - # resource = resources.PersonaFisicaResource - # list_per_page = 15 - # paginator = CachingPaginator - # show_full_result_count = False - pass - - -@admin.register(models.PersonaGiuridica) -class PersonaGiuridicaAdmin(ImportExportModelAdmin): - # resource = resources.PersonaGiuridicaResource - # list_per_page = 15 - # paginator = CachingPaginator - # show_full_result_count = False - pass - - @admin.register(models.AlboProfessionale) class AlboProfessionaleAdmin(ImportExportModelAdmin): # resource = resources.AlboProfessionaleResource @@ -585,30 +531,3 @@ class DatiEstesiDettaglioFatturabileAdmin(ImportExportModelAdmin): # paginator = CachingPaginator # show_full_result_count = False pass - - -@admin.register(models.Sede) -class SedeAdmin(ImportExportModelAdmin): - # resource = resources.SedeResource - # list_per_page = 15 - # paginator = CachingPaginator - # show_full_result_count = False - pass - - -@admin.register(models.Fax) -class FaxAdmin(ImportExportModelAdmin): - # resource = resources.FaxResource - # list_per_page = 15 - # paginator = CachingPaginator - # show_full_result_count = False - pass - - -@admin.register(models.Pec) -class PecAdmin(ImportExportModelAdmin): - # resource = resources.PecResource - # list_per_page = 15 - # paginator = CachingPaginator - # show_full_result_count = False - pass diff --git a/django/fattura_elettronica_app/models.py b/django/fattura_elettronica_app/models.py index 2090138..42e8b8c 100644 --- a/django/fattura_elettronica_app/models.py +++ b/django/fattura_elettronica_app/models.py @@ -168,7 +168,7 @@ class SoggettiFatturaElettronica(models.Model): formato_trasmissione = models.ForeignKey('FormatoTrasmissione', on_delete=models.CASCADE, null=True, blank=True, related_name="SoggettiFatturaElettronica_da_FormatoTrasmissione_formato_trasmissione") - contatto_cedente_prestatore = models.ForeignKey('DatoDiContatto', on_delete=models.CASCADE, null=True, + contatto_cedente_prestatore = models.ForeignKey('contatti_app.ContattoRubrica', on_delete=models.CASCADE, null=True, blank=True, related_name="SoggettiFatturaElettronica_da_DatoDiContatto_contatto_cedente_prestatore") riferimento_amministrazione = models.CharField(null=True, max_length=20) trasmittente = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, @@ -193,7 +193,8 @@ class SoggettoFiscale(PolymorphicModel): def __str__(self): return f"SoggettoFiscale (id: {self.id})" - indirizzo_pec = models.ForeignKey('Pec', on_delete=models.CASCADE, null=True, + dati_di_contatto = models.OneToOneField('contatti_app.SoggettoContattabile',on_delete=models.CASCADE,null=False,blank=False,related_name='dati_fiscali') + indirizzo_pec = models.ForeignKey('contatti_app.Pec', on_delete=models.CASCADE, null=True, blank=True, related_name="SoggettoFiscale_da_Pec_indirizzo_pec") regime_fiscale = models.ForeignKey('RegimeFiscale', on_delete=models.CASCADE, null=True, blank=True, related_name="SoggettoFiscale_da_RegimeFiscale_regime_fiscale") @@ -204,54 +205,16 @@ class SoggettoFiscale(PolymorphicModel): codice_sdi = models.ForeignKey('CodiceDestinatario', on_delete=models.CASCADE, null=True, blank=True, related_name="SoggettoFiscale_da_CodiceDestinatario_codice_sdi") sede_legale = models.IntegerField() - stabile_organizzazione = models.IntegerField(null=True, blank=True) + stabile_organizzazione = models.ForeignKey('contatti_app.Indirizzo',null=True, blank=True,on_delete=models.SET_NULL,related_name='stabile_organizzazione') cod_eori = models.CharField(null=True, max_length=17) - nazione = models.ForeignKey('Nazione', on_delete=models.CASCADE, null=True, + nazione = models.ForeignKey('dati_geo_app.Nazione', on_delete=models.CASCADE, null=True, blank=True, related_name="SoggettoFiscale_da_Nazione_nazione") numero_licenza_guida = models.CharField(null=True, max_length=20) iscrizione_rea = models.ForeignKey('IscrizioneREA', on_delete=models.CASCADE, null=True, blank=True, related_name="SoggettoFiscale_da_IscrizioneREA_iscrizione_rea") - revisione_principale = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True, - blank=True, related_name="SoggettoFiscale_da_SoggettoFiscale_revisione_principale") rimosso = models.BooleanField(null=True, blank=True) -class PersonaFisica(models.Model): - class Meta: - verbose_name = 'personafisica' - verbose_name_plural = 'personafisica' - - def __str__(self): - return f"PersonaFisica (id: {self.id})" - - titolo = models.CharField(null=True, max_length=10) - nome = models.CharField(null=True, max_length=60) - cognome = models.CharField(null=True, max_length=60) - - -class PersonaGiuridica(models.Model): - class Meta: - verbose_name = 'personagiuridica' - verbose_name_plural = 'personagiuridica' - - def __str__(self): - return f"PersonaGiuridica (id: {self.id})" - - denominazione = models.CharField(null=True, max_length=80) - - -class PersonaContattoAzienda(models.Model): - class Meta: - verbose_name = 'personacontattoazienda' - verbose_name_plural = 'personacontattoazienda' - - def __str__(self): - return f"PersonaContattoAzienda (id: {self.id})" - - azienda = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True, - blank=True, related_name="PersonaContattoAzienda_da_SoggettoFiscale") - - class PartitaIvaCF(models.Model): class Meta: verbose_name = 'partitaivacf' @@ -263,18 +226,6 @@ class PartitaIvaCF(models.Model): codice = models.CharField(max_length=28) -class Nazione(models.Model): - class Meta: - verbose_name = 'nazione' - verbose_name_plural = 'nazione' - - def __str__(self): - return f"{self.descrizione}" - - codifica = models.CharField(max_length=2) - descrizione = models.CharField(null=True, max_length=250) - - class FormatoTrasmissione(models.Model): class Meta: verbose_name = 'formatotrasmissione' @@ -299,42 +250,6 @@ class CodiceDestinatario(models.Model): descrizione = models.CharField(null=True, max_length=250) -class DatoDiContatto(models.Model): - class Meta: - verbose_name = 'datodicontatto' - verbose_name_plural = 'datodicontatto' - - def __str__(self): - return f"DatoDiContatto (id: {self.id})" - - soggetto_fiscale = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, null=True, - blank=True, related_name="DatoDiContatto_da_SoggettoFiscale_soggetto_fiscale") - - -class Telefono(models.Model): - class Meta: - verbose_name = 'telefono' - verbose_name_plural = 'telefono' - - def __str__(self): - return f"Telefono (id: {self.id})" - - numero = models.CharField(max_length=20) - note = models.CharField(null=True, max_length=64) - - -class Email(models.Model): - class Meta: - verbose_name = 'email' - verbose_name_plural = 'email' - - def __str__(self): - return f"Email (id: {self.id})" - - indirizzo = models.CharField(max_length=30) - note = models.CharField(null=True, max_length=64) - - class IscrizioneAlboProfessionale(models.Model): class Meta: verbose_name = 'iscrizionealboprofessionale' @@ -347,7 +262,7 @@ class IscrizioneAlboProfessionale(models.Model): blank=True, related_name="IscrizioneAlboProfessionale_da_AlboProfessionale_albo_professionale") numero_iscrizione_albo = models.CharField(null=True, max_length=60) data_iscrizione_albo = models.DateField(null=True, blank=True) - persona_fisica = models.ForeignKey('PersonaFisica', on_delete=models.CASCADE, null=True, + persona_fisica = models.ForeignKey('contatti_app.PersonaFisica', on_delete=models.CASCADE, null=True, blank=True, related_name="IscrizioneAlboProfessionale_da_PersonaFisica_persona_fisica") @@ -562,7 +477,7 @@ class DatiTrasporto(models.Model): dati_generali = models.ForeignKey('FatturaElettronica', on_delete=models.CASCADE, null=True, blank=True, related_name="DatiTrasporto_da_FatturaElettronica_dati_generali") - indirizzo_resa = models.ForeignKey('dati_geo_app.Indirizzo', on_delete=models.CASCADE, null=True, + indirizzo_resa = models.ForeignKey('contatti_app.Indirizzo', on_delete=models.CASCADE, null=True, blank=True, related_name="DatiTrasporto_da_Indirizzo_indirizzo_resa") mezzo_trasporto = models.CharField(null=True, max_length=80) numero_colli = models.IntegerField(null=True, blank=True) @@ -937,39 +852,3 @@ class DatiEstesiDettaglioFatturabile(models.Model): null=True, blank=True, max_digits=21, decimal_places=2) data_inizio = models.DateField(null=True, blank=True) data_fine = models.DateField(null=True, blank=True) - - -class Sede(models.Model): - class Meta: - verbose_name = 'sede' - verbose_name_plural = 'sede' - - def __str__(self): - return f"Sede (id: {self.id})" - - indirizzo = models.ForeignKey( - 'dati_geo_app.Indirizzo', on_delete=models.CASCADE, null=True, blank=True) - inquilino = models.ForeignKey('SoggettoFiscale', on_delete=models.CASCADE, - null=True, blank=True, related_name="Sede_da_SoggettoFiscale_inquilino") - is_legale = models.BooleanField(null=True, blank=True) - - -class Fax(models.Model): - class Meta: - verbose_name = 'fax' - verbose_name_plural = 'fax' - - def __str__(self): - return f"Fax (id: {self.id})" - - numero = models.CharField(null=True, max_length=20) - note = models.CharField(null=True, max_length=64) - - -class Pec(models.Model): - class Meta: - verbose_name = 'pec' - verbose_name_plural = 'pec' - - def __str__(self): - return f"Pec (id: {self.id})" diff --git a/django/fattura_elettronica_app/resources.py b/django/fattura_elettronica_app/resources.py index cc52389..867bc52 100644 --- a/django/fattura_elettronica_app/resources.py +++ b/django/fattura_elettronica_app/resources.py @@ -69,11 +69,6 @@ class PartitaIvaCFResource(resources.ModelResource): model = models.PartitaIvaCF -class NazioneResource(resources.ModelResource): - class Meta: - model = models.Nazione - - class FormatoTrasmissioneResource(resources.ModelResource): class Meta: model = models.FormatoTrasmissione @@ -84,21 +79,6 @@ class CodiceDestinatarioResource(resources.ModelResource): model = models.CodiceDestinatario -class DatoDiContattoResource(resources.ModelResource): - class Meta: - model = models.DatoDiContatto - - -class TelefonoResource(resources.ModelResource): - class Meta: - model = models.Telefono - - -class EmailResource(resources.ModelResource): - class Meta: - model = models.Email - - class IscrizioneAlboProfessionaleResource(resources.ModelResource): class Meta: model = models.IscrizioneAlboProfessionale @@ -129,16 +109,6 @@ class SoggettoEmittenteResource(resources.ModelResource): model = models.SoggettoEmittente -class PersonaFisicaResource(resources.ModelResource): - class Meta: - model = models.PersonaFisica - - -class PersonaGiuridicaResource(resources.ModelResource): - class Meta: - model = models.PersonaGiuridica - - class AlboProfessionaleResource(resources.ModelResource): class Meta: model = models.AlboProfessionale @@ -307,18 +277,3 @@ class TipologiaDocumentaleResource(resources.ModelResource): class DatiEstesiDettaglioFatturabileResource(resources.ModelResource): class Meta: model = models.DatiEstesiDettaglioFatturabile - - -class SedeResource(resources.ModelResource): - class Meta: - model = models.Sede - - -class FaxResource(resources.ModelResource): - class Meta: - model = models.Fax - - -class PecResource(resources.ModelResource): - class Meta: - model = models.Pec diff --git a/django/fattura_elettronica_app/serializers.py b/django/fattura_elettronica_app/serializers.py index a16a5af..153ae4f 100644 --- a/django/fattura_elettronica_app/serializers.py +++ b/django/fattura_elettronica_app/serializers.py @@ -86,12 +86,6 @@ class PartitaIvaCFSerializer(serializers.ModelSerializer): fields = ('codice') -class NazioneSerializer(serializers.ModelSerializer): - class Meta: - model = models.Nazione - fields = ('codifica', 'descrizione') - - class FormatoTrasmissioneSerializer(serializers.ModelSerializer): class Meta: model = models.FormatoTrasmissione diff --git a/django/fattura_elettronica_app/urls.py b/django/fattura_elettronica_app/urls.py index 32e85c2..eb76735 100644 --- a/django/fattura_elettronica_app/urls.py +++ b/django/fattura_elettronica_app/urls.py @@ -25,7 +25,6 @@ router.register(r'soggettifatturaelettronica', views.SoggettiFatturaElettronica_View) router.register(r'soggettofiscale', views.SoggettoFiscale_View) router.register(r'partitaivacf', views.PartitaIvaCF_View) -router.register(r'nazione', views.Nazione_View) router.register(r'formatotrasmissione', views.FormatoTrasmissione_View) router.register(r'codicedestinatario', views.CodiceDestinatario_View) router.register(r'datodicontatto', views.DatoDiContatto_View) diff --git a/django/sangue_app/models.py b/django/sangue_app/models.py index f93dfb2..056a5ca 100644 --- a/django/sangue_app/models.py +++ b/django/sangue_app/models.py @@ -14,8 +14,8 @@ class DestinatarioOfferta(models.Model): destinazione = models.ForeignKey('Sede', on_delete=models.CASCADE, null=True, blank=True, related_name="DestinatarioOfferta_da_Sede_destinazione") - intestatario = models.ForeignKey('fattura_elettronica_app.PersonaContattoAzienda', on_delete=models.CASCADE, null=True, - blank=True, related_name="DestinatarioOfferta_da_PersonaContattoAzienda_intestatario") + intestatario = models.ForeignKey('contatti_app.PersonaContattoAzienda', on_delete=models.CASCADE, null=True, + blank=True, related_name="DestinatarioOfferta_da_contatti_appPersonaContattoAzienda_intestatario") class GruppoOfferte(models.Model): diff --git a/django/sangue_django/settings.py b/django/sangue_django/settings.py index 51063aa..0e588e1 100644 --- a/django/sangue_django/settings.py +++ b/django/sangue_django/settings.py @@ -136,6 +136,7 @@ INSTALLED_APPS = [ 'sangue_app.apps.SangueAppConfig', 'dati_geo_app.apps.DatiGeograficiAppConfig', 'fattura_elettronica_app.apps.FatturaElettronicaAppConfig', + 'contatti_app.apps.ContattiAppConfig', 'djaa_list_filter', 'rest_framework', # 'rest_framework.authtoken',