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.

706 lines
27 KiB

import os
from re import sub
from django.contrib import messages
from django.core.urlresolvers import reverse
from django.utils.html import strip_tags
from django.utils.translation import ugettext_lazy as _
from django.views.generic.edit import FormMixin
from vanilla import GenericView
from crud import Crud
from .forms import (DependenteEditForm, DependenteForm, FiliacaoEditForm,
FiliacaoForm, MandatoEditForm, MandatoForm,
ParlamentaresEditForm, ParlamentaresForm,
ParlamentaresListForm)
from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente,
Filiacao, Legislatura, Mandato, NivelInstrucao,
Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar,
TipoAfastamento, TipoDependente)
cargo_mesa_crud = Crud(CargoMesa, 'cargo_mesa')
legislatura_crud = Crud(Legislatura, 'tabelas_auxiliares#legislatura')
coligacao_crud = Crud(Coligacao, 'coligacao')
partido_crud = Crud(Partido, 'partidos')
dependente_crud = Crud(Dependente, '')
sessao_legislativa_crud = Crud(SessaoLegislativa, 'sessao_legislativa')
parlamentar_crud = Crud(Parlamentar, '')
filiacao_crud = Crud(Filiacao, '')
mandato_crud = Crud(Mandato, '')
tipo_dependente_crud = Crud(TipoDependente, 'tipo_dependente')
nivel_instrucao_crud = Crud(NivelInstrucao, 'nivel_instrucao')
tipo_afastamento_crud = Crud(TipoAfastamento, 'tipo_afastamento')
tipo_militar_crud = Crud(SituacaoMilitar, 'tipo_situa_militar')
9 years ago
class ParlamentaresView(GenericView):
template_name = "parlamentares/parlamentares_list.html"
def get(self, request, *args, **kwargs):
form = ParlamentaresListForm()
if not Legislatura.objects.all():
mensagem = _('Cadastre alguma Legislatura antes'
' de cadastrar algum Parlamentar')
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response(
{'legislaturas': [],
'legislatura_id': 0,
'form': form,
})
9 years ago
legislaturas = Legislatura.objects.all().order_by(
'-data_inicio', '-data_fim')
mandatos = Mandato.objects.filter(
legislatura_id=legislaturas.first().id)
parlamentares = []
dict_parlamentar = {}
for m in mandatos:
if m.parlamentar.filiacao_set.last():
partido = m.parlamentar.filiacao_set.last().partido.sigla
else:
partido = _('Sem Registro')
dict_parlamentar = {
'id': m.parlamentar.id,
'nome': m.parlamentar.nome_parlamentar,
'partido': partido,
'ativo': m.parlamentar.ativo}
parlamentares.append(dict_parlamentar)
return self.render_to_response(
{'legislaturas': legislaturas,
'legislatura_id': legislaturas.first().id,
'form': form,
'parlamentares': parlamentares})
def post(self, request, *args, **kwargs):
form = ParlamentaresListForm(request.POST)
mandatos = Mandato.objects.filter(
legislatura_id=int(form.data['periodo']))
parlamentares = []
dict_parlamentar = {}
for m in mandatos:
if m.parlamentar.filiacao_set.last():
partido = m.parlamentar.filiacao_set.last().partido.sigla
else:
partido = _('Sem Registro')
dict_parlamentar = {
'id': m.parlamentar.id,
'nome': m.parlamentar.nome_parlamentar,
'partido': partido,
'ativo': m.parlamentar.ativo}
parlamentares.append(dict_parlamentar)
return self.render_to_response(
9 years ago
{'legislaturas': Legislatura.objects.all().order_by(
'-data_inicio', '-data_fim'),
'legislatura_id': int(form.data['periodo']),
'form': form,
'parlamentares': parlamentares})
class ParlamentaresCadastroView(FormMixin, GenericView):
template_name = "parlamentares/parlamentares_cadastro.html"
def get_success_url(self):
return reverse('parlamentares')
def get(self, request, *args, **kwargs):
form = ParlamentaresForm()
pk = kwargs['pk']
return self.render_to_response({'form': form, 'legislatura_id': pk})
def post(self, request, *args, **kwargs):
form = ParlamentaresForm(request.POST)
pk = kwargs['pk']
if form.is_valid():
parlamentar = form.save(commit=False)
if 'fotografia' in request.FILES:
parlamentar.fotografia = request.FILES['fotografia']
parlamentar.biografia = sub(' ',
' ',
strip_tags(form.data['biografia']))
parlamentar.save()
mandato = Mandato()
mandato.parlamentar = parlamentar
mandato.legislatura = Legislatura.objects.get(id=pk)
mandato.save()
return self.form_valid(form)
else:
return self.render_to_response(
{'form': form, 'legislatura_id': pk})
class ParlamentaresEditarView(FormMixin, GenericView):
template_name = "parlamentares/parlamentares_cadastro.html"
def get_success_url(self):
return reverse('parlamentares')
def get(self, request, *args, **kwargs):
pk = kwargs['pk']
parlamentar = Parlamentar.objects.get(pk=pk)
form = ParlamentaresEditForm(instance=parlamentar)
return self.render_to_response(
{'form': form, 'object': parlamentar})
def post(self, request, *args, **kwargs):
pk = kwargs['pk']
parlamentar = Parlamentar.objects.get(pk=pk)
form = ParlamentaresEditForm(request.POST, instance=parlamentar)
if form.is_valid():
if 'salvar' in request.POST:
parlamentar = form.save(commit=False)
if 'fotografia' in request.FILES:
parlamentar.fotografia = request.FILES['fotografia']
parlamentar.biografia = sub(' ',
' ',
strip_tags(form.data['biografia']))
parlamentar.save()
elif 'excluir' in request.POST:
Mandato.objects.get(parlamentar=parlamentar).delete()
parlamentar.delete()
elif "remover" in request.POST:
try:
os.unlink(parlamentar.fotografia.path)
except OSError:
pass # Should log this error!!!!!
parlamentar = form.save(commit=False)
parlamentar.fotografia = None
parlamentar.save()
return self.form_valid(form)
else:
return self.render_to_response({'form': form})
class ParlamentaresDependentesView(FormMixin, GenericView):
template_name = "parlamentares/parlamentares_dependentes.html"
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares_dependentes', kwargs={'pk': pk})
def get(self, request, *args, **kwargs):
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
dependentes = Dependente.objects.filter(
parlamentar=parlamentar).order_by('nome', 'tipo')
form = DependenteForm()
return self.render_to_response(
{'object': parlamentar,
'dependentes': dependentes,
'form': form,
'legislatura_id': parlamentar.mandato_set.last().legislatura.id})
def post(self, request, *args, **kwargs):
form = DependenteForm(request.POST)
if form.is_valid():
dependente = form.save(commit=False)
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
dependente.parlamentar = parlamentar
dependente.save()
return self.form_valid(form)
else:
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
dependentes = Dependente.objects.filter(
parlamentar=parlamentar).order_by('nome', 'tipo')
return self.render_to_response(
{'object': parlamentar,
'dependentes': dependentes,
'form': form,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura.id})
class ParlamentaresDependentesEditView(FormMixin, GenericView):
template_name = "parlamentares/parlamentares_dependentes_edit.html"
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares_dependentes', kwargs={'pk': pk})
def get(self, request, *args, **kwargs):
dependente = Dependente.objects.get(id=kwargs['dk'])
parlamentar = Parlamentar.objects.get(id=kwargs['pk'])
form = DependenteEditForm(instance=dependente)
return self.render_to_response(
{'form': form,
'object': parlamentar,
'legislatura_id': dependente.parlamentar.mandato_set.last(
).legislatura_id})
def post(self, request, *args, **kwargs):
dependente = Dependente.objects.get(id=kwargs['dk'])
form = DependenteEditForm(request.POST, instance=dependente)
parlamentar = Parlamentar.objects.get(id=kwargs['pk'])
if form.is_valid():
if 'salvar' in request.POST:
dependente.save()
elif 'Excluir' in request.POST:
dependente.delete()
return self.form_valid(form)
else:
return self.render_to_response(
{'form': form,
'object': parlamentar,
'legislatura_id': dependente.parlamentar.mandato_set.last(
).legislatura_id})
class MesaDiretoraView(FormMixin, GenericView):
template_name = "mesa_diretora/mesa_diretora.html"
def get_success_url(self):
return reverse('mesa_diretora')
# Essa função avisa quando se pode compor uma Mesa Legislativa)
def validation(self, request):
mensagem = _("Não há nenhuma Sessão Legislativa cadastrada. \
é possível compor uma Mesa Diretora quando uma Sessão \
Legislativa cadastrada.")
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response(
{'legislaturas': Legislatura.objects.all(
).order_by('-data_inicio'),
'legislatura_selecionada': Legislatura.objects.last(),
'cargos_vagos': CargoMesa.objects.all()})
def get(self, request, *args, **kwargs):
if (not Legislatura.objects.all() or
not SessaoLegislativa.objects.all()):
return self.validation(request)
mesa = SessaoLegislativa.objects.filter(
legislatura=Legislatura.objects.last()).first(
).composicaomesa_set.all()
cargos_ocupados = [m.cargo for m in mesa]
cargos = CargoMesa.objects.all()
cargos_vagos = list(set(cargos) - set(cargos_ocupados))
parlamentares = Legislatura.objects.last().mandato_set.all()
parlamentares_ocupados = [m.parlamentar for m in mesa]
parlamentares_vagos = list(
set(
[p.parlamentar for p in parlamentares]) - set(
parlamentares_ocupados))
return self.render_to_response(
{'legislaturas': Legislatura.objects.all(
).order_by('-data_inicio'),
'legislatura_selecionada': Legislatura.objects.last(),
'sessoes': SessaoLegislativa.objects.filter(
legislatura=Legislatura.objects.last()),
'sessao_selecionada': SessaoLegislativa.objects.filter(
legislatura=Legislatura.objects.last()).first(),
'composicao_mesa': mesa,
'parlamentares': parlamentares_vagos,
'cargos_vagos': cargos_vagos
})
def post(self, request, *args, **kwargs):
if 'Incluir' in request.POST:
if (not Legislatura.objects.all() or
not SessaoLegislativa.objects.all()):
return self.validation(request)
composicao = ComposicaoMesa()
composicao.sessao_legislativa = SessaoLegislativa.objects.get(
id=int(request.POST['sessao']))
composicao.parlamentar = Parlamentar.objects.get(
id=int(request.POST['parlamentar']))
composicao.cargo = CargoMesa.objects.get(
id=int(request.POST['cargo']))
composicao.save()
return self.form_valid(form=None)
elif 'Excluir' in request.POST:
if (not Legislatura.objects.all() or
not SessaoLegislativa.objects.all()):
return self.validation(request)
if 'composicao_mesa' in request.POST:
ids = request.POST['composicao_mesa'].split(':')
composicao = ComposicaoMesa.objects.get(
sessao_legislativa_id=int(request.POST['sessao']),
parlamentar_id=int(ids[0]),
cargo_id=int(ids[1])
)
composicao.delete()
return self.form_valid(form=None)
else:
mesa = ComposicaoMesa.objects.filter(
sessao_legislativa=request.POST['sessao'])
cargos_ocupados = [m.cargo for m in mesa]
cargos = CargoMesa.objects.all()
cargos_vagos = list(set(cargos) - set(cargos_ocupados))
parlamentares = Legislatura.objects.get(
id=int(request.POST['legislatura'])).mandato_set.all()
parlamentares_ocupados = [m.parlamentar for m in mesa]
parlamentares_vagos = list(
set(
[p.parlamentar for p in parlamentares]) - set(
parlamentares_ocupados))
return self.render_to_response(
{'legislaturas': Legislatura.objects.all(
).order_by('-data_inicio'),
'legislatura_selecionada': Legislatura.objects.get(
id=int(request.POST['legislatura'])),
'sessoes': SessaoLegislativa.objects.filter(
legislatura_id=int(request.POST['legislatura'])),
'sessao_selecionada': SessaoLegislativa.objects.get(
id=int(request.POST['sessao'])),
'composicao_mesa': mesa,
'parlamentares': parlamentares_vagos,
'cargos_vagos': cargos_vagos
})
class FiliacaoView(FormMixin, GenericView):
template_name = "parlamentares/parlamentares_filiacao.html"
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares_filiacao', kwargs={'pk': pk})
def get(self, request, *args, **kwargs):
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
filiacoes = Filiacao.objects.filter(
parlamentar=parlamentar)
form = FiliacaoForm()
return self.render_to_response(
{'object': parlamentar,
'filiacoes': filiacoes,
'form': form,
'legislatura_id': parlamentar.mandato_set.last().legislatura.id})
9 years ago
# Função usada para todos os caso de erro na filiação
def error_message(self, parlamentar, form, mensagem, request):
filiacoes = Filiacao.objects.filter(parlamentar=parlamentar)
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response(
{'object': parlamentar,
'filiacoes': filiacoes,
'form': form,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura.id})
def post(self, request, *args, **kwargs):
form = FiliacaoForm(request.POST)
if form.is_valid():
data_filiacao = form.cleaned_data['data']
data_desfiliacao = form.cleaned_data['data_desfiliacao']
filiacao = form.save(commit=False)
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
candidato_filiado = Filiacao.objects.filter(
9 years ago
parlamentar=parlamentar)
candidato_nao_desfiliou = Filiacao.objects.filter(
9 years ago
parlamentar=parlamentar,
data_desfiliacao=None)
# Vê se o candidato já se filiou alguma vez a algum partido
if not candidato_filiado:
filiacao = form.save(commit=False)
filiacao.parlamentar = parlamentar
filiacao.save()
return self.form_valid(form)
else:
# Dá erro caso não tenha se desfiliado do anterior
if candidato_nao_desfiliou:
mensagem = _("Você não pode se filiar a algum partido \
sem antes se desfiliar do partido anterior")
return self.error_message(
parlamentar, form, mensagem, request)
# Dá erro caso a data de desfiliação seja anterior a de
# filiação
if data_desfiliacao and data_desfiliacao < data_filiacao:
mensagem = _("A data de filiação não pode ser \
anterior à data de desfiliação")
return self.error_message(
parlamentar, form, mensagem, request)
# Esse bloco garante que não haverá intersecção entre os
# períodos de filiação
todas_filiacoes = candidato_filiado
for i in range(len(todas_filiacoes)):
data_init = todas_filiacoes[i].data
data_fim = todas_filiacoes[i].data_desfiliacao
if data_filiacao >= data_init and data_filiacao < data_fim:
mensagem = _("A data de filiação e \
desfiliação não podem estar no intervalo \
de outro período de filiação")
return self.error_message(
parlamentar, form, mensagem, request)
if (data_desfiliacao and
9 years ago
data_desfiliacao < data_fim and
data_desfiliacao > data_init):
mensagem = _("A data de filiação e \
desfiliação não podem estar no intervalo \
de outro período de filiação")
return self.error_message(
parlamentar, form, mensagem, request)
if (data_desfiliacao and
data_filiacao <= data_init and
data_desfiliacao >= data_fim):
mensagem = _("A data de filiação e \
desfiliação não podem estar no intervalo \
de outro período de filiação")
return self.error_message(
parlamentar, form, mensagem, request)
# Salva a nova filiação caso tudo esteja correto
else:
filiacao = form.save(commit=False)
filiacao.parlamentar = parlamentar
filiacao.save()
return self.form_valid(form)
else:
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
mensagem = ""
return self.error_message(
parlamentar, form, mensagem, request)
class FiliacaoEditView(FormMixin, GenericView):
template_name = "parlamentares/parlamentares_filiacao_edit.html"
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares_filiacao', kwargs={'pk': pk})
def get(self, request, *args, **kwargs):
filiacao = Filiacao.objects.get(id=kwargs['dk'])
parlamentar = Parlamentar.objects.get(id=kwargs['pk'])
form = FiliacaoEditForm(instance=filiacao)
return self.render_to_response(
{'form': form,
'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})
def error_message(self, parlamentar, form, mensagem, request):
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response(
9 years ago
{'form': form,
'object': parlamentar,
9 years ago
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})
def post(self, request, *args, **kwargs):
filiacao = Filiacao.objects.get(id=kwargs['dk'])
form = FiliacaoEditForm(request.POST, instance=filiacao)
parlamentar = Parlamentar.objects.get(id=kwargs['pk'])
if form.is_valid():
data_filiacao = form.cleaned_data['data']
data_desfiliacao = form.cleaned_data['data_desfiliacao']
filiacao = form.save(commit=False)
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
candidato_filiado = Filiacao.objects.filter(
9 years ago
parlamentar=parlamentar)
if 'Excluir' in request.POST:
filiacao.delete()
return self.form_valid(form)
# Vê se o candidato já se filiou alguma vez a algum partido
if not candidato_filiado:
filiacao = form.save(commit=False)
filiacao.parlamentar = parlamentar
filiacao.save()
return self.form_valid(form)
else:
# Dá erro caso a data de desfiliação seja anterior a de
# filiação
if data_desfiliacao and data_desfiliacao < data_filiacao:
mensagem = _("A data de filiação não pode \
anterior à data de desfiliação")
return self.error_message(
parlamentar, form, mensagem, request)
# Esse bloco garante que não haverá intersecção entre os
# períodos de filiação
todas_filiacoes = candidato_filiado
id_filiacao_atual = int(kwargs['dk'])
for i in range(len(todas_filiacoes)):
if todas_filiacoes[i].id != id_filiacao_atual:
data_init = todas_filiacoes[i].data
data_fim = todas_filiacoes[i].data_desfiliacao
if (data_filiacao >= data_init and
9 years ago
data_filiacao < data_fim):
mensagem = _("A data de filiação e \
desfiliação não podem estar no intervalo \
de outro período de filiação")
return self.error_message(parlamentar,
form,
mensagem,
request)
if (data_desfiliacao and
9 years ago
data_desfiliacao < data_fim and
data_desfiliacao > data_init):
mensagem = _("A data de filiação e \
desfiliação não podem estar no intervalo \
de outro período de filiação")
return self.error_message(parlamentar,
form,
mensagem,
request)
if (data_desfiliacao and
data_filiacao <= data_init and
data_desfiliacao >= data_fim):
mensagem = _("A data de filiação e \
desfiliação não podem estar no intervalo \
de outro período de filiação")
return self.error_message(parlamentar,
form,
mensagem,
request)
if 'salvar' in request.POST:
filiacao.save()
elif 'Excluir' in request.POST:
filiacao.delete()
return self.form_valid(form)
else:
return self.render_to_response(
{'form': form,
'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})
class MandatoView(FormMixin, GenericView):
template_name = "parlamentares/parlamentares_mandato.html"
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares_mandato', kwargs={'pk': pk})
def get(self, request, *args, **kwargs):
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
mandatos = Mandato.objects.filter(
parlamentar=parlamentar)
form = MandatoForm()
return self.render_to_response(
{'object': parlamentar,
'mandatos': mandatos,
'form': form,
'legislatura_id': parlamentar.mandato_set.last().legislatura.id})
def post(self, request, *args, **kwargs):
form = MandatoForm(request.POST)
if form.is_valid():
mandato = form.save(commit=False)
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
mandato.parlamentar = parlamentar
mandato.save()
return self.form_valid(form)
else:
pid = kwargs['pk']
parlamentar = Parlamentar.objects.get(id=pid)
mandatos = Mandato.objects.filter(
parlamentar=parlamentar)
return self.render_to_response(
{'object': parlamentar,
'mandatos': mandatos,
'form': form,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura.id})
class MandatoEditView(FormMixin, GenericView):
template_name = "parlamentares/parlamentares_mandato_edit.html"
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('parlamentares_mandato', kwargs={'pk': pk})
def get(self, request, *args, **kwargs):
mandato = Mandato.objects.get(id=kwargs['dk'])
parlamentar = Parlamentar.objects.get(id=kwargs['pk'])
form = MandatoEditForm(instance=mandato)
return self.render_to_response(
{'form': form,
'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})
def post(self, request, *args, **kwargs):
mandato = Mandato.objects.get(id=kwargs['dk'])
form = MandatoEditForm(request.POST, instance=mandato)
parlamentar = Parlamentar.objects.get(id=kwargs['pk'])
if form.is_valid():
if 'salvar' in request.POST:
mandato.save()
elif 'Excluir' in request.POST:
mandato.delete()
return self.form_valid(form)
else:
return self.render_to_response(
{'form': form,
'object': parlamentar,
'legislatura_id': parlamentar.mandato_set.last(
).legislatura_id})