Sistema de Apoio ao Processo Legislativo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

417 lines
13 KiB

import datetime
from django.db import models
from django.utils.translation import ugettext_lazy as _
from model_utils import Choices
9 years ago
from sapl.utils import YES_NO_CHOICES
class Legislatura(models.Model):
data_inicio = models.DateField(verbose_name=_('Data Início'))
data_fim = models.DateField(verbose_name=_('Data Fim'))
data_eleicao = models.DateField(verbose_name=_('Data Eleição'))
class Meta:
verbose_name = _('Legislatura')
verbose_name_plural = _('Legislaturas')
10 years ago
def __str__(self):
# XXX Usar id mesmo? Ou criar campo para nº legislatura?
current_date = datetime.datetime.now().year
if(self.data_inicio.year <= current_date and
self.data_fim.year >= current_date):
current = ' (%s)' % _('Atual')
else:
current = ''
return _('%(id)sº (%(start)s - %(end)s)%(current)s') % {
'id': self.id,
'start': self.data_inicio.year,
'end': self.data_fim.year,
'current': current}
10 years ago
class SessaoLegislativa(models.Model):
TIPO_SESSAO_CHOICES = Choices(
('O', 'ordinaria', _('Ordinária')),
('E', 'extraordinaria', _('Extraordinária')),
)
legislatura = models.ForeignKey(Legislatura)
numero = models.PositiveIntegerField(verbose_name=_('Número'))
tipo = models.CharField(
max_length=1, verbose_name=_('Tipo'), choices=TIPO_SESSAO_CHOICES)
data_inicio = models.DateField(verbose_name=_('Data Início'))
data_fim = models.DateField(verbose_name=_('Data Fim'))
data_inicio_intervalo = models.DateField(
blank=True, null=True, verbose_name=_('Início Intervalo'))
data_fim_intervalo = models.DateField(
blank=True, null=True, verbose_name=_('Fim Intervalo'))
class Meta:
verbose_name = _('Sessão Legislativa')
verbose_name_plural = _('Sessões Legislativas')
10 years ago
def __str__(self):
return _('%(id)sº (%(inicio)s - %(fim)s)') % {
'id': self.id,
'inicio': self.data_inicio.year,
'fim': self.data_fim.year}
10 years ago
class Coligacao(models.Model):
legislatura = models.ForeignKey(Legislatura, verbose_name=_('Legislatura'))
nome = models.CharField(max_length=50, verbose_name=_('Nome'))
numero_votos = models.PositiveIntegerField(
blank=True, null=True, verbose_name=_('Nº Votos Recebidos'))
class Meta:
verbose_name = _('Coligação')
verbose_name_plural = _('Coligações')
10 years ago
def __str__(self):
return self.nome
class Partido(models.Model):
sigla = models.CharField(max_length=9, verbose_name=_('Sigla'))
nome = models.CharField(max_length=50, verbose_name=_('Nome'))
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'))
class Meta:
verbose_name = _('Partido')
verbose_name_plural = _('Partidos')
10 years ago
def __str__(self):
return _('%(sigla)s - %(nome)s') % {
10 years ago
'sigla': self.sigla, 'nome': self.nome
}
class ComposicaoColigacao(models.Model):
# TODO M2M
partido = models.ForeignKey(Partido)
coligacao = models.ForeignKey(Coligacao)
10 years ago
class Meta:
verbose_name = (_('Composição Coligação'))
verbose_name_plural = (_('Composição Coligações'))
10 years ago
def __str__(self):
return _('%(partido)s - %(coligacao)s') % {
10 years ago
'partido': self.partido, 'coligacao': self.coligacao
}
10 years ago
class Municipio(models.Model): # Localidade
# TODO filter on migration leaving only cities
REGIAO_CHOICES = (
('CO', 'Centro-Oeste'),
('NE', 'Nordeste'),
('NO', 'Norte'),
('SE', 'Sudeste'), # TODO convert on migrate SD => SE
('SL', 'Sul'),
('EX', 'Exterior'),
)
UF_CHOICES = (
('AC', 'Acre'),
('AL', 'Alagoas'),
('AP', 'Amapá'),
('AM', 'Amazonas'),
('BA', 'Bahia'),
('CE', 'Ceará'),
('DF', 'Distrito Federal'),
('ES', 'Espírito Santo'),
('GO', 'Goiás'),
('MA', 'Maranhão'),
('MT', 'Mato Grosso'),
('MS', 'Mato Grosso do Sul'),
('MG', 'Minas Gerais'),
('PR', 'Paraná'),
('PB', 'Paraíba'),
('PA', 'Pará'),
('PE', 'Pernambuco'),
('PI', 'Piauí'),
('RJ', 'Rio de Janeiro'),
('RN', 'Rio Grande do Norte'),
('RS', 'Rio Grande do Sul'),
('RO', 'Rondônia'),
('RR', 'Roraima'),
('SC', 'Santa Catarina'),
('SE', 'Sergipe'),
('SP', 'São Paulo'),
('TO', 'Tocantins'),
('EX', 'Exterior'),
)
nome = models.CharField(max_length=50, blank=True)
uf = models.CharField(
max_length=2, blank=True, choices=UF_CHOICES)
regiao = models.CharField(
max_length=2, blank=True, choices=REGIAO_CHOICES)
class Meta:
verbose_name = _('Município')
verbose_name_plural = _('Municípios')
10 years ago
def __str__(self):
return _('%(nome)s - %(uf)s (%(regiao)s)') % {
10 years ago
'nome': self.nome, 'uf': self.uf, 'regiao': self.regiao
}
class NivelInstrucao(models.Model):
descricao = models.CharField(
max_length=50, verbose_name=_('Nível de Instrução'))
class Meta:
verbose_name = _('Nível Instrução')
verbose_name_plural = _('Níveis Instrução')
def __str__(self):
10 years ago
return self.descricao
class SituacaoMilitar(models.Model):
descricao = models.CharField(
max_length=50, verbose_name=_('Situação Militar'))
class Meta:
verbose_name = _('Tipo Situação Militar')
verbose_name_plural = _('Tipos Situações Militares')
10 years ago
def __str__(self):
return self.descricao
def get_foto_media_path(instance, subpath, filename):
return './parlamentar/%s/%s/%s' % (instance, subpath, filename)
def foto_upload_path(instance, filename):
return get_foto_media_path(instance, 'foto', filename)
class Parlamentar(models.Model):
FEMININO = 'F'
MASCULINO = 'M'
SEXO_CHOICE = ((FEMININO, _('Feminino')),
(MASCULINO, _('Masculino')))
nivel_instrucao = models.ForeignKey(
NivelInstrucao,
blank=True,
null=True,
verbose_name=_('Nível Instrução'))
situacao_militar = models.ForeignKey(
SituacaoMilitar,
blank=True,
null=True,
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, 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.CharField(
max_length=100, blank=True, verbose_name=_('HomePage'))
profissao = models.CharField(
max_length=50, blank=True, verbose_name=_('Profissão'))
email = models.CharField(
max_length=100,
blank=True,
verbose_name=_('Correio Eletrônico'))
locais_atuacao = models.CharField(
max_length=100,
blank=True,
verbose_name=_('Locais de Atuação'))
ativo = models.BooleanField(verbose_name=_('Ativo na Casa?'))
biografia = models.TextField(
blank=True, verbose_name=_('Biografia'))
fotografia = models.ImageField(
blank=True,
null=True,
upload_to=foto_upload_path,
verbose_name=_('Fotografia'))
class Meta:
verbose_name = _('Parlamentar')
verbose_name_plural = _('Parlamentares')
ordering = ['nome_parlamentar']
def __str__(self):
return self.nome_completo
class TipoDependente(models.Model):
descricao = models.CharField(max_length=50)
class Meta:
verbose_name = _('Tipo de Dependente')
verbose_name_plural = _('Tipos de Dependente')
def __str__(self):
10 years ago
return self.descricao
class Dependente(models.Model):
FEMININO = 'F'
MASCULINO = 'M'
SEXO_CHOICE = ((FEMININO, _('Feminino')),
(MASCULINO, _('Masculino')))
tipo = models.ForeignKey(TipoDependente, verbose_name=_('Tipo'))
parlamentar = models.ForeignKey(Parlamentar)
nome = models.CharField(max_length=50, verbose_name=_('Nome'))
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=_('CPF'))
rg = models.CharField(
max_length=15, blank=True, verbose_name=_('RG'))
titulo_eleitor = models.CharField(
max_length=15,
blank=True,
verbose_name=_('Nº Título Eleitor'))
class Meta:
verbose_name = _('Dependente')
verbose_name_plural = _('Dependentes')
10 years ago
def __str__(self):
return self.nome
class Filiacao(models.Model):
data = models.DateField(verbose_name=_('Data Filiação'))
parlamentar = models.ForeignKey(Parlamentar)
partido = models.ForeignKey(Partido, verbose_name=_('Partido'))
data_desfiliacao = models.DateField(
blank=True, null=True, verbose_name=_('Data Desfiliação'))
class Meta:
verbose_name = _('Filiação')
verbose_name_plural = _('Filiações')
10 years ago
def __str__(self):
return _('%(parlamentar)s - %(partido)s') % {
10 years ago
'parlamentar': self.parlamentar, 'partido': self.partido
}
class TipoAfastamento(models.Model):
descricao = models.CharField(max_length=50, verbose_name=_('Descrição'))
afastamento = models.BooleanField(
choices=YES_NO_CHOICES, verbose_name=_('Indicador'))
fim_mandato = models.BooleanField(verbose_name=_('Indicador'))
dispositivo = models.CharField(
max_length=50, blank=True, verbose_name=_('Dispositivo'))
class Meta:
verbose_name = _('Tipo de Afastamento')
verbose_name_plural = _('Tipos de Afastamento')
10 years ago
def __str__(self):
return self.descricao
class Mandato(models.Model):
parlamentar = models.ForeignKey(Parlamentar)
tipo_afastamento = models.ForeignKey(
TipoAfastamento, blank=True, null=True)
legislatura = models.ForeignKey(Legislatura, verbose_name=_('Legislatura'))
coligacao = models.ForeignKey(
Coligacao, blank=True, null=True, verbose_name=_('Coligação'))
# TODO what is this field??????
tipo_causa_fim_mandato = models.PositiveIntegerField(blank=True, null=True)
data_fim_mandato = models.DateField(
blank=True, null=True, verbose_name=_('Fim do Mandato'))
votos_recebidos = models.PositiveIntegerField(
blank=True, null=True, verbose_name=_('Votos Recebidos'))
data_expedicao_diploma = models.DateField(
blank=True, null=True, verbose_name=_('Expedição do Diploma'))
observacao = models.TextField(
blank=True, verbose_name=_('Observação'))
class Meta:
verbose_name = _('Mandato')
verbose_name_plural = _('Mandatos')
def __str__(self):
return _('%(parlamentar)s %(legislatura)s') % {
10 years ago
'parlamentar': self.parlamentar, 'legislatura': self.legislatura
}
10 years ago
class CargoMesa(models.Model):
# TODO M2M ????
descricao = models.CharField(
max_length=50, verbose_name=_('Cargo na Mesa'))
unico = models.BooleanField(
choices=YES_NO_CHOICES, verbose_name=_('Cargo Único'))
class Meta:
verbose_name = _('Cargo na Mesa')
verbose_name_plural = _('Cargos na Mesa')
10 years ago
def __str__(self):
return self.descricao
class ComposicaoMesa(models.Model):
# TODO M2M ???? Ternary?????
parlamentar = models.ForeignKey(Parlamentar)
sessao_legislativa = models.ForeignKey(SessaoLegislativa)
cargo = models.ForeignKey(CargoMesa)
class Meta:
verbose_name = _('Ocupação de cargo na Mesa')
verbose_name_plural = _('Ocupações de cargo na Mesa')
10 years ago
def __str__(self):
return _('%(parlamentar)s - %(cargo)s') % {
10 years ago
'parlamentar': self.parlamentar, 'cargo': self.cargo
}