예제 #1
0
class Orgao(models.Model):
    nome = models.CharField(max_length=60, verbose_name=_('Nome'))
    sigla = models.CharField(max_length=10, verbose_name=_('Sigla'))
    unidade_deliberativa = models.BooleanField(
        choices=YES_NO_CHOICES, verbose_name=(_('Unidade Deliberativa')))
    endereco = models.CharField(max_length=100,
                                blank=True,
                                verbose_name=_('Endereço'))
    telefone = models.CharField(max_length=50,
                                blank=True,
                                verbose_name=_('Telefone'))

    autor = SaplGenericRelation(Autor,
                                related_query_name='orgao_set',
                                fields_search=(('nome', '__icontains'),
                                               ('sigla', '__icontains')))

    class Meta:
        verbose_name = _('Órgão')
        verbose_name_plural = _('Órgãos')

    def __str__(self):
        return _('%(nome)s - %(sigla)s') % {
            'nome': self.nome,
            'sigla': self.sigla
        }
예제 #2
0
class Bloco(models.Model):
    '''
        * blocos podem existir por mais de uma legislatura
    '''
    nome = models.CharField(max_length=80, verbose_name=_('Nome do Bloco'))
    partidos = models.ManyToManyField(Partido,
                                      blank=True,
                                      verbose_name=_('Bancadas'))
    data_criacao = models.DateField(blank=True,
                                    null=True,
                                    verbose_name=_('Data Criação'))
    data_extincao = models.DateField(blank=True,
                                     null=True,
                                     verbose_name=_('Data Dissolução'))
    descricao = models.TextField(blank=True, verbose_name=_('Descrição'))

    # campo conceitual de reversão genérica para o model Autor que dá a
    # o meio possível de localização de tipos de autores.
    autor = SaplGenericRelation(Autor,
                                related_query_name='bloco_set',
                                fields_search=(
                                    ('nome', '__icontains'),
                                    ('descricao', '__icontains'),
                                    ('partidos__sigla', '__icontains'),
                                    ('partidos__nome', '__icontains'),
                                ))

    class Meta:
        verbose_name = _('Bloco')
        verbose_name_plural = _('Blocos')

    def __str__(self):
        return self.nome
예제 #3
0
class Bancada(models.Model):
    legislatura = models.ForeignKey(Legislatura, verbose_name=_('Legislatura'))
    nome = models.CharField(
        max_length=80, verbose_name=_('Nome da Bancada, Bloco, ou Frente'))
    partido = models.ForeignKey(Partido,
                                blank=True,
                                null=True,
                                verbose_name=_('Partido'))
    data_criacao = models.DateField(blank=True,
                                    null=True,
                                    verbose_name=_('Data Criação'))
    data_extincao = models.DateField(blank=True,
                                     null=True,
                                     verbose_name=_('Data Extinção'))
    descricao = models.TextField(blank=True, verbose_name=_('Descrição'))

    # campo conceitual de reversão genérica para o model Autor que dá a
    # o meio possível de localização de tipos de autores.
    autor = SaplGenericRelation(Autor,
                                related_query_name='bancada_set',
                                fields_search=(
                                    ('nome', '__icontains'),
                                    ('descricao', '__icontains'),
                                    ('partido__sigla', '__icontains'),
                                    ('partido__nome', '__icontains'),
                                ))

    class Meta:
        verbose_name = _('Bancada')
        verbose_name_plural = _('Bancadas')
        ordering = ('-legislatura__numero', )

    def __str__(self):
        return self.nome
예제 #4
0
class TipoMateriaLegislativa(models.Model):
    objects = TipoMateriaManager()
    sigla = models.CharField(max_length=5, verbose_name=_('Sigla'))
    descricao = models.CharField(max_length=50, verbose_name=_('Descrição '))
    # XXX o que é isso ?
    num_automatica = models.BooleanField(default=False)
    # XXX o que é isso ?
    quorum_minimo_votacao = models.PositiveIntegerField(blank=True, null=True)

    tipo_proposicao = SaplGenericRelation(
        TipoProposicao,
        related_query_name='tipomaterialegislativa_set',
        fields_search=(('descricao', '__icontains'), ('sigla', '__icontains')))

    sequencia_numeracao = models.CharField(
        max_length=1,
        blank=True,
        verbose_name=_('Sequência de numeração'),
        choices=SEQUENCIA_NUMERACAO_PROTOCOLO)

    sequencia_regimental = models.PositiveIntegerField(
        default=0,
        verbose_name=_('Sequência Regimental'),
        help_text=_('A sequência regimental diz respeito ao que define '
                    'o regimento da Casa Legislativa sobre qual a ordem '
                    'de entrada das proposições nas Sessões Plenárias.'))

    class Meta:
        verbose_name = _('Tipo de Matéria Legislativa')
        verbose_name_plural = _('Tipos de Matérias Legislativas')
        ordering = ['sequencia_regimental', 'descricao']

    def __str__(self):
        return self.descricao
예제 #5
0
class TipoMateriaLegislativa(models.Model):
    sigla = models.CharField(max_length=5, verbose_name=_('Sigla'))
    descricao = models.CharField(max_length=50, verbose_name=_('Descrição '))
    # XXX o que é isso ?
    num_automatica = models.BooleanField(default=False)
    # XXX o que é isso ?
    quorum_minimo_votacao = models.PositiveIntegerField(blank=True, null=True)

    tipo_proposicao = SaplGenericRelation(
        TipoProposicao,
        related_query_name='tipomaterialegislativa_set',
        fields_search=(('descricao', '__icontains'), ('sigla', '__icontains')))

    sequencia_numeracao = models.CharField(
        max_length=1,
        blank=True,
        verbose_name=_('Sequência de numeração'),
        choices=SEQUENCIA_NUMERACAO)

    class Meta:
        verbose_name = _('Tipo de Matéria Legislativa')
        verbose_name_plural = _('Tipos de Matérias Legislativas')
        ordering = ['descricao']

    def __str__(self):
        return self.descricao
예제 #6
0
class TipoDocumento(models.Model):
    descricao = models.CharField(max_length=50,
                                 verbose_name=_('Tipo Documento'))

    tipo_proposicao = SaplGenericRelation(
        TipoProposicao,
        related_query_name='tipodocumento_set',
        fields_search=(('descricao', '__icontains'), ))

    class Meta:
        verbose_name = _('Tipo de Documento')
        verbose_name_plural = _('Tipos de Documento')

    def __str__(self):
        return self.descricao
예제 #7
0
class Frente(models.Model):
    '''
        * Uma frente agrupa vários parlamentares
        * Cada parlamentar pode fazer parte de uma ou mais frentes
        * Uma frente pode existir por mais de uma legislatura?
    '''
    nome = models.CharField(
        max_length=80,
        verbose_name=_('Nome da Frente'))
    parlamentares = models.ManyToManyField(Parlamentar,
                                           blank=True,
                                           verbose_name=_('Parlamentares'))
    data_criacao = models.DateField(verbose_name=_('Data Criação'))
    data_extincao = models.DateField(
        blank=True, null=True, verbose_name=_('Data Dissolução'))
    descricao = models.TextField(blank=True, verbose_name=_('Descrição'))

    # campo conceitual de reversão genérica para o model Autor que dá a
    # o meio possível de localização de tipos de autores.
    autor = SaplGenericRelation(
        Autor,
        related_query_name='frente_set',
        fields_search=(
            ('nome', '__icontains'),
            ('descricao', '__icontains'),
            ('parlamentares__filiacao__partido__sigla', '__icontains'),
            ('parlamentares__filiacao__partido__nome', '__icontains'),
        ))

    class Meta:
        verbose_name = _('Frente')
        verbose_name_plural = _('Frentes')

    def get_parlamentares(self):
        return Parlamentar.objects.filter(ativo=True)

    def __str__(self):
        return self.nome
예제 #8
0
class Parlamentar(models.Model):
    FEMININO = 'F'
    MASCULINO = 'M'
    SEXO_CHOICE = ((FEMININO, _('Feminino')),
                   (MASCULINO, _('Masculino')))

    nivel_instrucao = models.ForeignKey(
        NivelInstrucao,
        blank=True,
        null=True,
        on_delete=models.PROTECT,
        verbose_name=_('Nível Instrução'))
    situacao_militar = models.ForeignKey(
        SituacaoMilitar,
        blank=True,
        null=True,
        on_delete=models.PROTECT,
        verbose_name=_('Situação Militar'))
    nome_completo = models.CharField(
        max_length=50, verbose_name=_('Nome Completo'))
    nome_parlamentar = models.CharField(
        max_length=50,
        verbose_name=_('Nome Parlamentar'))
    sexo = models.CharField(
        max_length=1, verbose_name=_('Sexo'), choices=SEXO_CHOICE)
    data_nascimento = models.DateField(
        blank=True, null=True, verbose_name=_('Data Nascimento'))
    cpf = models.CharField(
        max_length=14, blank=True, verbose_name=_('C.P.F'))
    rg = models.CharField(
        max_length=15, blank=True, verbose_name=_('R.G.'))
    titulo_eleitor = models.CharField(
        max_length=15,
        blank=True,
        verbose_name=_('Título de Eleitor'))
    numero_gab_parlamentar = models.CharField(
        max_length=10, blank=True, verbose_name=_('Nº Gabinete'))
    telefone = models.CharField(
        max_length=50, blank=True, verbose_name=_('Telefone'))
    fax = models.CharField(
        max_length=50, blank=True, verbose_name=_('Fax'))
    endereco_residencia = models.CharField(
        max_length=100,
        blank=True,
        verbose_name=_('Endereço Residencial'))
    municipio_residencia = models.ForeignKey(
        Municipio, blank=True, null=True,
        on_delete=models.PROTECT, verbose_name=_('Município'))
    cep_residencia = models.CharField(
        max_length=9, blank=True, verbose_name=_('CEP'))
    telefone_residencia = models.CharField(
        max_length=50,
        blank=True,
        verbose_name=_('Telefone Residencial'))
    fax_residencia = models.CharField(
        max_length=50,
        blank=True,
        verbose_name=_('Fax Residencial'))
    endereco_web = models.URLField(
        max_length=100, blank=True, verbose_name=_('HomePage'))
    profissao = models.CharField(
        max_length=50, blank=True, verbose_name=_('Profissão'))
    email = models.EmailField(
        max_length=100,
        blank=True,
        verbose_name=_('E-mail'))
    locais_atuacao = models.CharField(
        max_length=100,
        blank=True,
        verbose_name=_('Locais de Atuação'))
    ativo = models.BooleanField(
        db_index=True,
        default=False,
        choices=YES_NO_CHOICES,
        verbose_name=_('Ativo na Casa?'))
    biografia = models.TextField(
        blank=True, verbose_name=_('Biografia'))
    # XXX Esse atribuito foi colocado aqui para não atrapalhar a migração

    fotografia = models.ImageField(
        blank=True,
        null=True,
        upload_to=foto_upload_path,
        verbose_name=_('Fotografia'),
        validators=[restringe_tipos_de_arquivo_img])

    # campo conceitual de reversão genérica para o model Autor que dá a
    # o meio possível de localização de tipos de autores.
    autor = SaplGenericRelation(
        Autor,
        related_query_name='parlamentar_set',
        fields_search=(
            # na primeira posição dever ser campo simples sem __
            ('nome_completo', '__icontains'),
            ('nome_parlamentar', '__icontains'),
            ('filiacao__partido__sigla', '__icontains'),
            ('ativo', '', true_false_none),
        ))

    class Meta:
        verbose_name = _('Parlamentar')
        verbose_name_plural = _('Parlamentares')
        ordering = ['nome_parlamentar']

    def __str__(self):
        return self.nome_completo

    @property
    def filiacao_atual(self):
        ultima_filiacao = self.filiacao_set.order_by('-data').first()
        if ultima_filiacao and not ultima_filiacao.data_desfiliacao:
            return ultima_filiacao.partido.sigla
        else:
            return _('Sem Partido')

    @property
    def avatar_html(self):
        return '<img class="avatar-parlamentar" src='\
            + self.fotografia.url + '>'if self.fotografia else ''

    def delete(self, using=None, keep_parents=False):
        if self.fotografia:
            self.fotografia.delete()

        return models.Model.delete(
            self, using=using, keep_parents=keep_parents)

    def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):

        if not self.pk and self.fotografia:
            fotografia = self.fotografia
            self.fotografia = None
            models.Model.save(self, force_insert=force_insert,
                              force_update=force_update,
                              using=using,
                              update_fields=update_fields)
            self.fotografia = fotografia

        return models.Model.save(self, force_insert=force_insert,
                                 force_update=force_update,
                                 using=using,
                                 update_fields=update_fields)
예제 #9
0
파일: models.py 프로젝트: dec9/sapl
class Comissao(models.Model):
    tipo = models.ForeignKey(TipoComissao,
                             on_delete=models.PROTECT,
                             verbose_name=_('Tipo'))
    nome = models.CharField(max_length=100, verbose_name=_('Nome'))
    sigla = models.CharField(max_length=10, verbose_name=_('Sigla'))
    data_criacao = models.DateField(verbose_name=_('Data de Criação'))
    data_extincao = models.DateField(blank=True,
                                     null=True,
                                     verbose_name=_('Data de Extinção'))
    apelido_temp = models.CharField(max_length=100,
                                    blank=True,
                                    verbose_name=_('Apelido'))
    data_instalacao_temp = models.DateField(blank=True,
                                            null=True,
                                            verbose_name=_('Data Instalação'))
    data_final_prevista_temp = models.DateField(
        blank=True, null=True, verbose_name=_('Data Prevista Término'))
    data_prorrogada_temp = models.DateField(blank=True,
                                            null=True,
                                            verbose_name=_('Novo Prazo'))
    data_fim_comissao = models.DateField(blank=True,
                                         null=True,
                                         verbose_name=_('Data Término'))
    secretario = models.CharField(max_length=30,
                                  blank=True,
                                  verbose_name=_('Secretário'))
    telefone_reuniao = models.CharField(max_length=15,
                                        blank=True,
                                        verbose_name=_('Tel. Sala Reunião'))
    endereco_secretaria = models.CharField(
        max_length=100, blank=True, verbose_name=_('Endereço Secretaria'))
    telefone_secretaria = models.CharField(max_length=15,
                                           blank=True,
                                           verbose_name=_('Tel. Secretaria'))
    fax_secretaria = models.CharField(max_length=15,
                                      blank=True,
                                      verbose_name=_('Fax Secretaria'))
    agenda_reuniao = models.CharField(max_length=100,
                                      blank=True,
                                      verbose_name=_('Data/Hora Reunião'))
    local_reuniao = models.CharField(max_length=100,
                                     blank=True,
                                     verbose_name=_('Local Reunião'))
    finalidade = models.TextField(blank=True, verbose_name=_('Finalidade'))
    email = models.EmailField(max_length=100,
                              blank=True,
                              verbose_name=_('E-mail'))
    unidade_deliberativa = models.BooleanField(
        choices=YES_NO_CHOICES, verbose_name=_('Unidade Deliberativa'))
    ativa = models.BooleanField(default=False,
                                choices=YES_NO_CHOICES,
                                verbose_name=_('Comissão Ativa?'))

    autor = SaplGenericRelation(Autor,
                                related_query_name='comissao_set',
                                fields_search=(('nome', '__icontains'),
                                               ('sigla', '__icontains')))

    class Meta:
        verbose_name = _('Comissão')
        verbose_name_plural = _('Comissões')

    def __str__(self):
        return self.sigla + ' - ' + self.nome
예제 #10
0
class Parlamentar(models.Model):

    FIELDFILE_NAME = ('capa', 'fotografia', )

    metadata = JSONField(
        verbose_name=_('Metadados'),
        blank=True, null=True, default=None, encoder=DjangoJSONEncoder)

    FEMININO = 'F'
    MASCULINO = 'M'
    SEXO_CHOICE = ((FEMININO, _('Feminino')),
                   (MASCULINO, _('Masculino')))

    nivel_instrucao = models.ForeignKey(
        NivelInstrucao,
        blank=True,
        null=True,
        on_delete=models.PROTECT,
        verbose_name=_('Nível Instrução'))
    situacao_militar = models.ForeignKey(
        SituacaoMilitar,
        blank=True,
        null=True,
        on_delete=models.PROTECT,
        verbose_name=_('Situação Militar'))
    nome_completo = models.CharField(
        max_length=50, verbose_name=_('Nome Completo'))
    nome_parlamentar = models.CharField(
        max_length=50,
        verbose_name=_('Nome Parlamentar'))
    sexo = models.CharField(
        max_length=1, verbose_name=_('Sexo'), choices=SEXO_CHOICE)
    data_nascimento = models.DateField(
        blank=True, null=True, verbose_name=_('Data Nascimento'))
    cpf = models.CharField(
        max_length=14, blank=True, verbose_name=_('C.P.F'))
    rg = models.CharField(
        max_length=15, blank=True, verbose_name=_('R.G.'))
    titulo_eleitor = models.CharField(
        max_length=15,
        blank=True,
        verbose_name=_('Título de Eleitor'))
    numero_gab_parlamentar = models.CharField(
        max_length=10, blank=True, verbose_name=_('Nº Gabinete'))
    telefone = models.CharField(
        max_length=50, blank=True, verbose_name=_('Telefone'))
    fax = models.CharField(
        max_length=50, blank=True, verbose_name=_('Fax'))
    endereco_residencia = models.CharField(
        max_length=100,
        blank=True,
        verbose_name=_('Endereço Residencial'))
    municipio_residencia = models.CharField(
        max_length=50, blank=True, verbose_name=_('Município'))
    uf_residencia = models.CharField(
        max_length=2, blank=True, choices=LISTA_DE_UFS, verbose_name=_('UF'))
    cep_residencia = models.CharField(
        max_length=9, blank=True, verbose_name=_('CEP'))
    telefone_residencia = models.CharField(
        max_length=50,
        blank=True,
        verbose_name=_('Telefone Residencial'))
    fax_residencia = models.CharField(
        max_length=50,
        blank=True,
        verbose_name=_('Fax Residencial'))
    endereco_web = models.URLField(
        max_length=100, blank=True, verbose_name=_('HomePage'))
    profissao = models.CharField(
        max_length=50, blank=True, verbose_name=_('Profissão'))
    email = models.EmailField(
        max_length=100,
        blank=True,
        verbose_name=_('E-mail'))
    locais_atuacao = models.CharField(
        max_length=100,
        blank=True,
        verbose_name=_('Locais de Atuação'))
    ativo = models.BooleanField(
        db_index=True,
        default=False,
        choices=YES_NO_CHOICES,
        verbose_name=_('Ativo na Casa?'))
    biografia = models.TextField(
        blank=True, verbose_name=_('Biografia'))
    fotografia = ImageCropField(
        verbose_name=_('Fotografia'), upload_to=foto_upload_path, null=True, blank=True)  # validators=[restringe_tipos_de_arquivo_img],
    fotografia_cropping = ImageRatioField(
        'fotografia', '128x128', verbose_name=_('Avatar'), size_warning=True,
        help_text=_('A configuração do Avatar '
                    'é possível após a atualização da fotografia.'))

    capa = ImageCropField(
        verbose_name=_('Imagem de Capa'), upload_to=capa_upload_path, null=True, blank=True)  # validators=[restringe_tipos_de_arquivo_img]

    capa_cropping = ImageRatioField(
        'capa', '280x105', verbose_name=_('Capa'), size_warning=True,
        help_text=_('A configuração da capa '
                    'é possível após a atualização.'))

    # campo conceitual de reversão genérica para o model Autor que dá a
    # o meio possível de localização de tipos de autores.
    autor = SaplGenericRelation(
        Autor,
        related_query_name='parlamentar_set',
        fields_search=(
            # na primeira posição dever ser campo simples sem __
            ('nome_completo', '__icontains'),
            ('nome_parlamentar', '__icontains'),
            ('filiacao__partido__sigla', '__icontains'),
        ))

    class Meta:
        verbose_name = _('Parlamentar')
        verbose_name_plural = _('Parlamentares')
        ordering = ['nome_parlamentar']

    def __str__(self):
        return self.nome_parlamentar

    @property
    def filiacao_atual(self):
        ultima_filiacao = self.filiacao_set.order_by('-data').first()
        if ultima_filiacao and not ultima_filiacao.data_desfiliacao:
            return ultima_filiacao.partido.sigla
        else:
            return _('Sem Partido')

    @property
    def avatar_html(self):
        return '<img class="avatar-parlamentar" src='\
            + self.fotografia.url + '>'if self.fotografia else ''

    def delete(self, using=None, keep_parents=False):

        r = models.Model.delete(
            self, using=using, keep_parents=keep_parents)

        if self.fotografia:
            self.fotografia.delete()

        if self.capa:
            self.capa.delete()

        return r

    def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):

        if not self.pk:
            fotografia = None
            capa = None
            if self.fotografia:
                fotografia = self.fotografia
                self.fotografia = None

            if self.capa:
                capa = self.capa
                self.capa = None

            models.Model.save(self, force_insert=force_insert,
                              force_update=force_update,
                              using=using,
                              update_fields=update_fields)

            self.fotografia = fotografia
            self.capa = capa

        return models.Model.save(self, force_insert=force_insert,
                                 force_update=force_update,
                                 using=using,
                                 update_fields=update_fields)