class SaapAuditoriaModelMixin(SaapModelMixin): owner = models.ForeignKey(get_settings_auth_user_model(), verbose_name=_('owner'), related_name='+', on_delete=PROTECT) modifier = models.ForeignKey(get_settings_auth_user_model(), verbose_name=_('modifier'), related_name='+', on_delete=PROTECT) class Meta: abstract = True
class OperadorAreaTrabalho(SaapAuditoriaModelMixin): user = models.ForeignKey(get_settings_auth_user_model(), verbose_name=_('Operador da Área de Trabalho'), related_name='operadorareatrabalho_set', on_delete=CASCADE) areatrabalho = models.ForeignKey(AreaTrabalho, related_name='operadorareatrabalho_set', verbose_name=_('Área de Trabalho'), on_delete=CASCADE) grupos_associados = models.ManyToManyField( Group, verbose_name=_('Grupos Associados'), related_name='operadorareatrabalho_set') @property def user_name(self): return '%s - %s' % (self.user.get_display_name(), self.user.email) class Meta: verbose_name = _('Operador') verbose_name_plural = _('Operadores') def __str__(self): return self.user.get_display_name()
class AreaTrabalho(SaapAuditoriaModelMixin): nome = models.CharField(max_length=100, blank=True, default='', verbose_name=_('Nome')) descricao = models.CharField(default='', max_length=254, verbose_name=_('Descrição')) parlamentar = models.ForeignKey(Parlamentar, verbose_name=_('Parlamentar'), related_name='areatrabalho_set', blank=True, null=True, on_delete=CASCADE) operadores = models.ManyToManyField(get_settings_auth_user_model(), through='OperadorAreaTrabalho', through_fields=('areatrabalho', 'user'), symmetrical=False, related_name='areatrabalho_set') class Meta: verbose_name = _('Área de Trabalho') verbose_name_plural = _('Áreas de Trabalho') def __str__(self): return self.nome
class Contato(SaapSearchMixin, SaapAuditoriaModelMixin): nome = models.CharField(max_length=100, verbose_name=_('Nome')) nome_social = models.CharField(blank=True, default='', max_length=100, verbose_name=_('Nome social')) apelido = models.CharField(blank=True, default='', max_length=100, verbose_name=_('Apelido')) data_nascimento = models.DateField( blank=True, null=True, verbose_name=_('Data de nascimento'), ) sexo = models.CharField(max_length=1, blank=False, verbose_name=_('Sexo biológico'), choices=SEXO_CHOICE) identidade_genero = models.CharField(blank=True, default='', max_length=100, verbose_name=_('Gênero')) tem_filhos = models.NullBooleanField(choices=NONE_YES_NO_CHOICES, default=None, verbose_name=_('Tem filhos?')) quantos_filhos = models.PositiveSmallIntegerField( default=0, blank=True, verbose_name=_('Quantos filhos?')) estado_civil = models.ForeignKey(EstadoCivil, related_name='contato_set', blank=True, null=True, on_delete=SET_NULL, verbose_name=_('Estado civil')) nivel_instrucao = models.ForeignKey(NivelInstrucao, related_name='contato_set', blank=True, null=True, on_delete=SET_NULL, verbose_name=_('Nível de instrução')) estado = models.ForeignKey(Estado, blank=True, null=True, default=21, related_name='contato_set', verbose_name=_('Estado de nascimento')) naturalidade = ChainedForeignKey(Municipio, chained_field="estado", chained_model_field="estado", null=True, blank=True, show_all=False, auto_choose=True, sort=True, verbose_name=_('Cidade de nascimento')) nome_pai = models.CharField(max_length=100, blank=True, verbose_name=_('Nome do pai')) nome_mae = models.CharField(max_length=100, blank=True, verbose_name=_('Nome da mãe')) numero_sus = models.CharField(max_length=20, blank=True, default='', verbose_name=_('Número do SUS')) cpf = models.CharField(max_length=14, blank=True, verbose_name=_('CPF'), validators=[validate_CPF]) cnpj = models.CharField(max_length=18, blank=True, verbose_name=_('CNPJ'), validators=[validate_CNPJ]) ie = models.CharField(max_length=15, blank=True, verbose_name=_('Inscrição estadual')) titulo_eleitor = models.CharField(max_length=14, blank=True, verbose_name=_('Título de eleitor')) rg = models.CharField(max_length=10, blank=True, verbose_name=_('RG')) rg_orgao_expedidor = models.CharField(max_length=20, blank=True, verbose_name=_('Órgão expedidor')) rg_data_expedicao = models.DateField(blank=True, null=True, verbose_name=_('Data de expedição')) ativo = models.BooleanField(choices=YES_NO_CHOICES, default=True, verbose_name=_('Ativo?')) workspace = models.ForeignKey(AreaTrabalho, verbose_name=_('Área de trabalho'), related_name='contato_set', blank=True, null=True, on_delete=PROTECT) perfil_user = models.ForeignKey(get_settings_auth_user_model(), verbose_name=_('Perfil do usuário'), related_name='contato_set', blank=True, null=True, on_delete=CASCADE) profissao = models.CharField(max_length=254, blank=True, verbose_name=_('Profissão')) tipo_autoridade = models.ForeignKey( TipoAutoridade, verbose_name=TipoAutoridade._meta.verbose_name, related_name='contato_set', blank=True, null=True, on_delete=SET_NULL) cargo = models.CharField(max_length=254, blank=True, default='', verbose_name=_('Cargo/Função')) pronome_tratamento = models.ForeignKey( PronomeTratamento, verbose_name=PronomeTratamento._meta.verbose_name, related_name='contato_set', blank=True, null=True, on_delete=SET_NULL, help_text=_('O pronome de tratamento é opcional, mas será \ obrigatório caso seja selecionado um tipo de autoridade.')) observacoes = models.TextField( blank=True, default='', verbose_name=_('Outras observações sobre o contato')) @cached_property def fields_search(self): return ['nome', 'nome_social', 'apelido'] class Meta: verbose_name = _('Contato') verbose_name_plural = _('Contatos') ordering = ['nome'] permissions = ( ('print_impressoenderecamento', _('Pode imprimir impressos de endereçamento')), ('print_rel_contato_agrupado_por_processo', _('Pode imprimir relatório de contatos agrupados por processo')), ('print_rel_contato_agrupado_por_grupo', _('Pode imprimir relatório de contatos agrupados por grupo')), ) unique_together = (('nome', 'data_nascimento', 'workspace', 'perfil_user'), ) def __str__(self): return self.nome