molto da fare ancora

my-submodulepoetico
Guido Longoni 2023-05-12 23:43:43 +02:00
parent b83873714a
commit a30e157d49
16 changed files with 242 additions and 503 deletions

View File

@ -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',)

View File

@ -62,7 +62,7 @@
<default>NULL</default></row>
<row name="nazione" null="1" autoincrement="0">
<datatype>INTEGER</datatype>
<default>NULL</default><relation table="Nazione" row="id" />
<default>NULL</default>
</row>
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
@ -78,20 +78,6 @@
<part>id</part>
</key>
</table>
<table x="539" y="521" name="Nazione">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>
<default>NULL</default></row>
<row name="codifica" null="0" autoincrement="0">
<datatype>CHAR(2)</datatype>
<default>'NULL'</default></row>
<row name="descrizione" null="1" autoincrement="0">
<datatype>VARCHAR(250)</datatype>
<default>NULL</default></row>
<key type="PRIMARY" name="">
<part>id</part>
</key>
</table>
<table x="2178" y="822" name="DatoDiContatto">
<row name="id" null="1" autoincrement="1">
<datatype>INTEGER</datatype>

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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]

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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})"

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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):

View File

@ -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',