178 lines
5.4 KiB
Python
178 lines
5.4 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'
|
|
|
|
def __str__(self):
|
|
return str(getattr(self,self.polymorphic_ctype.model))
|
|
|
|
|
|
class VoceContattoRubrica(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="contatti")
|
|
|
|
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=False,blank=True,default='', max_length=10)
|
|
nome = models.CharField(null=False,blank=False, max_length=60)
|
|
cognome = models.CharField(null=False,blank=False, max_length=60)
|
|
is_privato = models.BooleanField(null=False, blank=False, default=True)
|
|
|
|
|
|
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=False,blank=False, max_length=80)
|
|
|
|
|
|
class Telefono(VoceContattoRubrica):
|
|
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(null=False,blank=False,max_length=20)
|
|
interno = models.CharField(null=False,blank=True,default='', max_length=20)
|
|
note = models.CharField(null=False,blank=True,default='', max_length=64)
|
|
|
|
|
|
class Email(VoceContattoRubrica):
|
|
class Meta:
|
|
verbose_name = 'email'
|
|
verbose_name_plural = 'email'
|
|
|
|
def __str__(self):
|
|
eml = self.indirizzo_email
|
|
if self.note:
|
|
eml += ' (!)'
|
|
return eml
|
|
|
|
indirizzo_email = models.EmailField(null=False,blank=False,max_length=254)
|
|
note = models.CharField(null=False,blank=True,default='', max_length=64)
|
|
|
|
|
|
class Pec(Email):
|
|
class Meta:
|
|
verbose_name = 'pec'
|
|
verbose_name_plural = 'pec'
|
|
|
|
def __str__(self):
|
|
eml = self.indirizzo_email
|
|
if self.note:
|
|
eml += ' (!)'
|
|
return eml
|
|
|
|
|
|
|
|
class Fax(VoceContattoRubrica):
|
|
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=False,blank=False, max_length=20)
|
|
note = models.CharField(null=False,blank=True,default='', max_length=64)
|
|
|
|
class Indirizzo(VoceContattoRubrica, AbstractIndirizzo):
|
|
class Meta(AbstractIndirizzo.Meta):
|
|
pass
|
|
|
|
|
|
class Sede(Indirizzo):
|
|
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=False, blank=False, related_name="sedi")
|
|
is_legale = models.BooleanField(null=False, blank=False, default=False)
|
|
|
|
|
|
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")
|
|
|
|
|
|
class ContattoAziendale(models.Model):
|
|
class Meta:
|
|
verbose_name = 'Contatto aziendale'
|
|
verbose_name_plural = 'Contatti aziendali'
|
|
|
|
def __str__(self):
|
|
return f"ContattoAziendale (id: {self.id})"
|
|
|
|
azienda = models.ForeignKey(Societa, on_delete=models.CASCADE, null=False,
|
|
blank=False, related_name='contatti_azienda')
|
|
persona = models.ForeignKey(PersonaFisica, on_delete=models.CASCADE, null=False,
|
|
blank=False, related_name='aziende_correlate')
|
|
is_personale = models.BooleanField(null=False, blank=False, default=True)
|