|
|
@ -1,17 +1,16 @@ |
|
|
|
from django.contrib import messages |
|
|
|
from django.core.urlresolvers import reverse, reverse_lazy |
|
|
|
from django.http import HttpResponseRedirect |
|
|
|
from django.core.urlresolvers import reverse_lazy |
|
|
|
from django.shortcuts import redirect |
|
|
|
from django.utils.datastructures import MultiValueDictKeyError |
|
|
|
from django.utils.translation import ugettext_lazy as _ |
|
|
|
from django.views.generic import CreateView, FormView, UpdateView |
|
|
|
from django.views.generic import FormView |
|
|
|
|
|
|
|
import crud.base |
|
|
|
import crud.masterdetail |
|
|
|
from crud.base import Crud |
|
|
|
from crud.masterdetail import MasterDetailCrud |
|
|
|
|
|
|
|
from .forms import (FiliacaoEditForm, FiliacaoForm, ParlamentarCreateForm, |
|
|
|
ParlamentarForm) |
|
|
|
from .forms import FiliacaoForm, ParlamentarCreateForm, ParlamentarForm |
|
|
|
from .models import (CargoMesa, Coligacao, ComposicaoMesa, Dependente, |
|
|
|
Filiacao, Legislatura, Mandato, NivelInstrucao, |
|
|
|
Parlamentar, Partido, SessaoLegislativa, SituacaoMilitar, |
|
|
@ -22,8 +21,6 @@ LegislaturaCrud = Crud.build(Legislatura, 'tabelas_auxiliares#legislatura') |
|
|
|
ColigacaoCrud = Crud.build(Coligacao, 'coligacao') |
|
|
|
PartidoCrud = Crud.build(Partido, 'partidos') |
|
|
|
SessaoLegislativaCrud = Crud.build(SessaoLegislativa, 'sessao_legislativa') |
|
|
|
FiliacaoCrud = Crud.build(Filiacao, '') |
|
|
|
MandatoCrud = Crud.build(Mandato, '') |
|
|
|
TipoDependenteCrud = Crud.build(TipoDependente, 'tipo_dependente') |
|
|
|
NivelInstrucaoCrud = Crud.build(NivelInstrucao, 'nivel_instrucao') |
|
|
|
TipoAfastamentoCrud = Crud.build(TipoAfastamento, 'tipo_afastamento') |
|
|
@ -33,6 +30,18 @@ DependenteCrud = MasterDetailCrud.build(Dependente, 'parlamentar', '') |
|
|
|
MandatoCrud = MasterDetailCrud.build(Mandato, 'parlamentar', '') |
|
|
|
|
|
|
|
|
|
|
|
class FiliacaoCrud(MasterDetailCrud): |
|
|
|
model = Filiacao |
|
|
|
parent_field = 'parlamentar' |
|
|
|
help_path = '' |
|
|
|
|
|
|
|
class CreateView(MasterDetailCrud.CreateView): |
|
|
|
form_class = FiliacaoForm |
|
|
|
|
|
|
|
class UpdateView(MasterDetailCrud.UpdateView): |
|
|
|
form_class = FiliacaoForm |
|
|
|
|
|
|
|
|
|
|
|
class ParlamentarCrud(Crud): |
|
|
|
model = Parlamentar |
|
|
|
help_path = '' |
|
|
@ -100,68 +109,6 @@ class ParlamentarCrud(Crud): |
|
|
|
return context |
|
|
|
|
|
|
|
|
|
|
|
def validate(form, parlamentar, filiacao, request): |
|
|
|
data_filiacao = form.cleaned_data['data'] |
|
|
|
data_desfiliacao = form.cleaned_data['data_desfiliacao'] |
|
|
|
|
|
|
|
# Dá erro caso a data de desfiliação seja anterior a de filiação |
|
|
|
if data_desfiliacao and data_desfiliacao < data_filiacao: |
|
|
|
error_msg = _("A data de filiação não pode anterior \ |
|
|
|
à data de desfiliação") |
|
|
|
messages.add_message(request, messages.ERROR, error_msg) |
|
|
|
return False |
|
|
|
|
|
|
|
# Esse bloco garante que não haverá intersecção entre os |
|
|
|
# períodos de filiação |
|
|
|
id_filiacao_atual = filiacao.pk |
|
|
|
todas_filiacoes = parlamentar.filiacao_set.all() |
|
|
|
|
|
|
|
for filiacoes in todas_filiacoes: |
|
|
|
if (not filiacoes.data_desfiliacao and |
|
|
|
filiacoes.id != id_filiacao_atual): |
|
|
|
error_msg = _("O parlamentar não pode se filiar a algum partido \ |
|
|
|
sem antes se desfiliar do partido anterior") |
|
|
|
messages.add_message(request, messages.ERROR, error_msg) |
|
|
|
return False |
|
|
|
|
|
|
|
error_msg = None |
|
|
|
for filiacoes in todas_filiacoes: |
|
|
|
if filiacoes.id != id_filiacao_atual: |
|
|
|
|
|
|
|
data_init = filiacoes.data |
|
|
|
data_fim = filiacoes.data_desfiliacao |
|
|
|
|
|
|
|
if data_init <= data_filiacao < data_fim: |
|
|
|
|
|
|
|
error_msg = _("A data de filiação e \ |
|
|
|
desfiliação não podem estar no intervalo \ |
|
|
|
de outro período de filiação") |
|
|
|
break |
|
|
|
|
|
|
|
if (data_desfiliacao and |
|
|
|
data_init < data_desfiliacao < data_fim): |
|
|
|
|
|
|
|
error_msg = _("A data de filiação e \ |
|
|
|
desfiliação não podem estar no intervalo \ |
|
|
|
de outro período de filiação") |
|
|
|
break |
|
|
|
|
|
|
|
if (data_desfiliacao and |
|
|
|
data_filiacao <= data_init and |
|
|
|
data_desfiliacao >= data_fim): |
|
|
|
|
|
|
|
error_msg = _("A data de filiação e \ |
|
|
|
desfiliação não podem estar no intervalo \ |
|
|
|
de outro período de filiação") |
|
|
|
break |
|
|
|
|
|
|
|
if error_msg: |
|
|
|
messages.add_message(request, messages.ERROR, error_msg) |
|
|
|
return False |
|
|
|
else: |
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
class MesaDiretoraView(FormView): |
|
|
|
template_name = "mesa_diretora/mesa_diretora.html" |
|
|
|
success_url = reverse_lazy('parlamentares:mesa_diretora') |
|
|
@ -274,78 +221,3 @@ class MesaDiretoraView(FormView): |
|
|
|
'parlamentares': parlamentares_vagos, |
|
|
|
'cargos_vagos': cargos_vagos |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
class FiliacaoView(CreateView): |
|
|
|
template_name = "parlamentares/parlamentar_filiacao.html" |
|
|
|
form_class = FiliacaoForm |
|
|
|
model = Filiacao |
|
|
|
|
|
|
|
def get_success_url(self): |
|
|
|
pk = self.kwargs['pk'] |
|
|
|
return reverse('parlamentares:parlamentar_filiacao', |
|
|
|
kwargs={'pk': pk}) |
|
|
|
|
|
|
|
def get_context_data(self, **kwargs): |
|
|
|
context = super(FiliacaoView, self).get_context_data(**kwargs) |
|
|
|
pid = self.kwargs['pk'] |
|
|
|
parlamentar = Parlamentar.objects.get(id=pid) |
|
|
|
filiacoes = Filiacao.objects.filter(parlamentar=parlamentar) |
|
|
|
|
|
|
|
if len(parlamentar.mandato_set.all()) == 0: |
|
|
|
legislatura_id = 0 |
|
|
|
else: |
|
|
|
legislatura_id = parlamentar.mandato_set.last().legislatura.id |
|
|
|
|
|
|
|
context.update( |
|
|
|
{'object': parlamentar, |
|
|
|
'filiacoes': filiacoes, |
|
|
|
'legislatura_id': legislatura_id}) |
|
|
|
return context |
|
|
|
|
|
|
|
def form_valid(self, form): |
|
|
|
if 'salvar' in self.request.POST: |
|
|
|
filiacao = form.save(commit=False) |
|
|
|
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) |
|
|
|
filiacao.parlamentar = parlamentar |
|
|
|
|
|
|
|
if not validate(form, parlamentar, filiacao, self.request): |
|
|
|
return self.form_invalid(form) |
|
|
|
|
|
|
|
filiacao.save() |
|
|
|
return HttpResponseRedirect(self.get_success_url()) |
|
|
|
|
|
|
|
|
|
|
|
class FiliacaoEditView(UpdateView): |
|
|
|
template_name = "parlamentares/parlamentar_filiacao_edit.html" |
|
|
|
form_class = FiliacaoEditForm |
|
|
|
model = Filiacao |
|
|
|
pk_url_kwarg = 'dk' |
|
|
|
|
|
|
|
def get_success_url(self): |
|
|
|
pk = self.kwargs['pk'] |
|
|
|
return reverse('parlamentares:parlamentar_filiacao', |
|
|
|
kwargs={'pk': pk}) |
|
|
|
|
|
|
|
def get_context_data(self, **kwargs): |
|
|
|
context = super(FiliacaoEditView, self).get_context_data(**kwargs) |
|
|
|
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) |
|
|
|
context.update( |
|
|
|
{'object': parlamentar, |
|
|
|
'legislatura_id': parlamentar.mandato_set.last( |
|
|
|
).legislatura_id}) |
|
|
|
return context |
|
|
|
|
|
|
|
def form_valid(self, form): |
|
|
|
filiacao = form.save(commit=False) |
|
|
|
if 'excluir' in self.request.POST: |
|
|
|
filiacao.delete() |
|
|
|
elif 'salvar' in self.request.POST: |
|
|
|
parlamentar = Parlamentar.objects.get(id=self.kwargs['pk']) |
|
|
|
filiacao.parlamentar = parlamentar |
|
|
|
|
|
|
|
if not validate(form, parlamentar, filiacao, self.request): |
|
|
|
return self.form_invalid(form) |
|
|
|
|
|
|
|
filiacao.save() |
|
|
|
return HttpResponseRedirect(self.get_success_url()) |
|
|
|