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)