sangue/django/contatti_app/models.py

180 lines
5.1 KiB
Python

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'
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'
def __str__(self):
return f"PersonaContattoAzienda (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)